distinct sql用法_干货 | 98%数据分析面试,都会问到的SQL问题!

c78dff8d30569150906c97f739538791.png

假如你明天就要二面数据分析岗位

哪些是你必须要知道的呢?当面试官:SQL的where、distinct都会吗?你可千万不要惊讶

因为你可以不会python也可以不会R

但你必须要会SQLUni酱整理了SQL入门必备还不赶紧get起来!

1攻克基础:SELECT语句

1 “*”号代表所有列

“*”号能选出表中所有的列。例如代码:SELECT * FROM Table, 此代码会选出Table表中所有的列。

2 DISTINCT 去重

DISTINCT关键词,能对表中一列或多列信息进行去重。以下图为例,DISTINCT 关键字对列名“product_type”去重,列中两个“办公”会变成去重后的一个“办公”,“服装”和“厨房”也有同样去重效果 。

9ddfa803aef1600c381624c4de8cfb07.png

3 ORDER BY 排序

ORDER BY 的作用是排序,可对一列或多列排序。下图展示了对两列同时进行排序的例子。

两列排序代码:“ORDER BY department,salary”,作用是先对department的各个部门排序,其次,基于已排序部门的基础上再对salary进行排序(默认升序)。

首先,对部门finance ,marketing,technology按照26个英文字母的升序进行排序,部门依次被排为finance第一,marketing第二,technology第三。其次,当同一部门出现多个员工时,再按照salary大小进行升序排序, 比如,部门的Joe、Sam、Jason被分别排为第一,第二,第三。详情见下图。

d1bc796218b21f85186369518134d8ff.png

业务场景

高铁买票时,会用到价格排序,出发时间、耗时长短;淘宝血拼时,会用到价格排序;大众点评找美食时,会用到距离优先、好评优先等。顾客在使用这些功能时,后台数据库用到的就是简单但强大的“ORDER BY”语句。

4 LIMIT限制行数

LIMIT关键词可限制查询行数。LIMIT用法有二。用法一,返回表的前X行;用法二,返回表的特定行。

2如何选数据?

怎么把数据从表里选出来?

1.-- 从table_1中选择a这一列。

2.select a from table_1

想要的数据在多张表里,想取多个字段,该怎么办?—— 表连接

  1. -- table_1中有id,age; table_2中有id,sex。想取出id,age,sex 三列信息
  2. -- 将table_1,table_2 根据主键id连接起来
  3. select a.id,a.age,b.sex from
  4. (select id,age from table_1) a
  5. --将select之后的内容存为临时表a
  6. join
  7. (select id, sex from table_2) b
  8. --将select之后的内容存为临时表b
  9. on a.id =b.id

在这里先介绍一下几种join: (敲重点咯,这里可是很容易考到的)

0e3aa29e486b88f82bff2dc73a3ec3af.png

join : hive的join默认是inner join,找出左右都可匹配的记录;

0e3aa29e486b88f82bff2dc73a3ec3af.png

left join: 左连接,以左表为准,逐条去右表找可匹配字段,如果有多条会逐次列出,如果没有找到则是NULL;

78b6bc4bdbd9bccc8772e218ab51e490.png

right join:右连接,以右表为准,逐条去左表找可匹配字段,如果有多条会逐次列出,如果没有找到则是NULL;

03db9c10e49fc801f9d0be960addab54.png

full outer join: 全连接,包含两个表的连接结果,如果左表缺失或者右表缺失的数据会填充NULL。

03db9c10e49fc801f9d0be960addab54.png

每种join 都有on ,>join 之前要确保关联键是否去重,是不是刻意保留非去重结果。

两张表数据的字段一样,想合并起来,怎么办?

  1. -- 不去重,合并两张表的数据
  2. select * from
  3. (
  4. select id from table_1
  5. UNION ALL
  6. select id from table_2
  7. )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. -- 考察条件筛选

  1. select sname from s where sno not in
  2. ( select sno from sc where cno in
  3. (
  4. select distinct cno from c where cteacher='黎明'
  5. )
  6. );

2. -- 考察聚合函数,条件筛选

  1. select s.sname, avg_grade from s
  2. join
    (select sno from sc where scgrade < 60 group by sno having count(*) >= 2) t1
  3. on s.sno = t1.sno
  4. join
  5. (select sno, avg(scgrade)
  6. as avg_grade from sc group by sno )
  7. t2on s.sno = t2.sno;

3. -- 考察筛选、连接

  1. select sname from
  2. ( select sno from sc where cno = 1) a
  3. join
  4. (select sno from sc where cno = 2) b

掌握了这些,在做SQL题目的时候注意理解每个题目考察的知识点,有利于对形成记忆点,学习过程中一定要把知识点反复看,反复练,就像原来我们的错题本一样,把SQL的错题再做一遍也是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值