数据库学习笔记(1)——内连接、左(右)连接、全连接

一、JOIN、LEFT JOIN 、RIGHT JOIN 和 FULL JOIN

1、涉及的三张表

     1)学员表(学号、姓名、单位、年龄)      S(sno,sname,sdepart,sage)

     2)课程(课程编号、课程名)               C(cno,cname)

     3)成绩表(学号、课程编号、成绩)    SC(sno,sname,grade)

 

2、表中的数据

    1)SELECT * FROM S

 

 

 注:S表中sno=4 的员工在SC表中没有对应记录。

 

   2)SELECT * FROM C

 

 3)SELECT * FROM SC

 

注:SC表中sno=5在S表中没有对应记录。

 

3、区别与联系

1)连接(内连接)

--JOIN(INNER JOIN) 只返回两张表连接列的匹配项
SELECT * FROM S JOIN  SC ON S.sno=SC.sno
SELECT * FROM S INNER JOIN SC ON S.sno=SC.sno

 

2)左连接

--LEFT JOIN  左连接  即使右表中没有匹配,也从左表返回所有的行
SELECT * FROM S LEFT JOIN SC ON S.sno=SC.sno

3)右连接
--RIGHT JOIN 右连接  即使左表中没有匹配,也从右表返回所有的行
SELECT * FROM S RIGHT JOIN SC ON S.sno=SC.sno

4)全连接

--FULL JOIN  返回两张表中的行 LEFT JOIN+RIGHT JOIN
SELECT * FROM S FULL JOIN SC ON S.sno=SC.sno

 

二、GROUP BY 的用法

--GROUP BY 的用法 用于结合合计函数,根据一个或多个列对结果集进行分组

--查询每个学员选修的课程数
SELECT sno,选修课程数=count(cno)FROM SC GROUP BY sno

 

三、HAVING 的用法

-- HAVING 的用法(增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用)
--查询选修课程数大于2的员工号
--1.错误
SELECT  sno,选修课程数=COUNT(cno) FROM SC GROUP BY sno WHERE COUNT(cno)>2
--2.正确
SELECT  sno,选修课程数=COUNT(cno) FROM SC GROUP BY sno HAVING COUNT(cno)>2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值