SQL语言 - 外连接

前面介绍了多表内连接。下面将介绍多表外连接。使用内连接的时候,会发现一个问题,他会过滤掉不匹配的行。比如可能存在折中情况,有两张表。一张是学生信息表,包括学号,姓名等信息,另一张表是考试成绩表。当需要显示所有学生的考试信息时,如果其中某个学生并没有参加考试,那么内连接就不会显示出该学生的信息。但事实上可能我们需要纪录所有的学生情况,即使没参加考试,那么该学生也应该被显示并纪录下来。所以我们可以使用外连接,外连接可以显示出所有匹配和不匹配的记录,比如使用左外连接,那么就会显示出所有左表的记录,如果右表没有与之对应的行,那么右表在显示该行的记录时为空。还有右外连接,与左外连接相反。全外连接就是显示左右两张表中所有匹配与不匹配的记录。接下来是通过相关练习来进行学习:
相关练习的数据库请参看:http://www.sqlzoo.cn/4.htm
练习题地址:http://www.sqlzoo.cn/4.htm
数据库和练习题在一个页面上。
练习题答案及分析:
1a. 一个议员被开除出党,看看他是谁.
SELECT name FROM msp WHERE party IS NULL
这里用到了判断非空的条件。NULL是不能用=来判断的,因为NULL值不参与任何计算和比较,所以需要使用专门的语句IS NULL 或IS NOT NULL

1b. 列出所有政党和领导者.
SELECT name, leader FROM party

1c. 列出所有有领导者的政党.
SELECT name, leader FROM party
  WHERE leader IS NOT NULL

1d. 列出至少有一个议员的政党.
SELECT DISTINCT party.name FROM msp, party
  WHERE party=code

下面是外连接相关的练习
2a. 列出所有议员的名字和他所属政党的名称(如果有的话). 确保议员Canavan MSP, Dennis不被漏掉.
SELECT msp.name, party.name
  FROM msp LEFT JOIN party ON party=code
  ORDER BY msp.name
可以看到和内连接的语法差不多,只是在连接表上加上LEFT关键字,这个表示左外连接。左表是MSP,右表是PARTY

2b. 列出包含议员的政党,包含每个政党的议员人数.
SELECT party.name, COUNT(msp.name)
  FROM msp, party
  WHERE msp.party=party.code
  GROUP BY party.name
这道题并没有使用外连接,而是使用的内连接

2c. 列出所有政党和每个政党议员人数.包含那些没有议员的政党.
SELECT party.name, COUNT(msp.name)
  FROM party LEFT JOIN msp ON party.code=msp.party
  GROUP BY party.name 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值