假如你明天就要二面数据分析岗位
哪些是你必须要知道的呢?当面试官:SQL的where、distinct都会吗?你可千万不要惊讶
因为你可以不会python也可以不会R
但你必须要会SQLUni酱整理了SQL入门必备还不赶紧get起来!
1攻克基础:SELECT语句
1 “*”号代表所有列
“*”号能选出表中所有的列。例如代码:SELECT * FROM Table, 此代码会选出Table表中所有的列。
2 DISTINCT 去重
DISTINCT关键词,能对表中一列或多列信息进行去重。以下图为例,DISTINCT 关键字对列名“product_type”去重,列中两个“办公”会变成去重后的一个“办公”,“服装”和“厨房”也有同样去重效果 。
3 ORDER BY 排序
ORDER BY 的作用是排序,可对一列或多列排序。下图展示了对两列同时进行排序的例子。
两列排序代码:“ORDER BY department,salary”,作用是先对department的各个部门排序,其次,基于已排序部门的基础上再对salary进行排序(默认升序)。
首先,对部门finance ,marketing,technology按照26个英文字母的升序进行排序,部门依次被排为finance第一,marketing第二,technology第三。其次,当同一部门出现多个员工时,再按照salary大小进行升序排序, 比如,部门的Joe、Sam、Jason被分别排为第一,第二,第三。详情见下图。
业务场景
高铁买票时,会用到价格排序,出发时间、耗时长短;淘宝血拼时,会用到价格排序;大众点评找美食时,会用到距离优先、好评优先等。顾客在使用这些功能时,后台数据库用到的就是简单但强大的“ORDER BY”语句。
4 LIMIT限制行数
LIMIT关键词可限制查询行数。LIMIT用法有二。用法一,返回表的前X行;用法二,返回表的特定行。
2如何选数据?
怎么把数据从表里选出来?
1.-- 从table_1中选择a这一列。
2.select a from table_1
想要的数据在多张表里,想取多个字段,该怎么办?—— 表连接
- -- table_1中有id,age; table_2中有id,sex。想取出id,age,sex 三列信息
- -- 将table_1,table_2 根据主键id连接起来
- select a.id,a.age,b.sex from
- (select id,age from table_1) a
- --将select之后的内容存为临时表a
- join
- (select id, sex from table_2) b
- --将select之后的内容存为临时表b
- on a.id =b.id
在这里先介绍一下几种join: (敲重点咯,这里可是很容易考到的)
join : hive的join默认是inner join,找出左右都可匹配的记录;
left join: 左连接,以左表为准,逐条去右表找可匹配字段,如果有多条会逐次列出,如果没有找到则是NULL;
right join:右连接,以右表为准,逐条去左表找可匹配字段,如果有多条会逐次列出,如果没有找到则是NULL;
full outer join: 全连接,包含两个表的连接结果,如果左表缺失或者右表缺失的数据会填充NULL。
每种join 都有on ,>join 之前要确保关联键是否去重,是不是刻意保留非去重结果。
两张表数据的字段一样,想合并起来,怎么办?
- -- 不去重,合并两张表的数据
- select * from
- (
- select id from table_1
- UNION ALL
- select id from table_2
- )t;
union和union all 均基于列合并多张表的数据,所合并的列格式必须完全一致。
union的过程中会去重并降低效率,union all 直接追加数据。union 前后是两段select 语句而非结果集。
3常见的笔试&面试题有哪些?
例:有3个表S,C,SC:
S(SNO,SNAME)代表(学号,姓名)
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)
问题:
1. 找出没选过“黎明”老师的所有学生姓名。
2. 列出2门以上(含2门)不及格学生姓名及平均成绩。
3. 既学过1号课程又学过2号课所有学生的姓名。
1. -- 考察条件筛选
- select sname from s where sno not in
- ( select sno from sc where cno in
- (
- select distinct cno from c where cteacher='黎明'
- )
- );
2. -- 考察聚合函数,条件筛选
- select s.sname, avg_grade from s
- join
(select sno from sc where scgrade < 60 group by sno having count(*) >= 2) t1 - on s.sno = t1.sno
- join
- (select sno, avg(scgrade)
- as avg_grade from sc group by sno )
- t2on s.sno = t2.sno;
3. -- 考察筛选、连接
- select sname from
- ( select sno from sc where cno = 1) a
- join
- (select sno from sc where cno = 2) b
掌握了这些,在做SQL题目的时候注意理解每个题目考察的知识点,有利于对形成记忆点,学习过程中一定要把知识点反复看,反复练,就像原来我们的错题本一样,把SQL的错题再做一遍也是可以的。