一,内连接,外链接,自连接

来源:互联网 发布:华南师范网络教育骗局 编辑:程序博客网 时间:2024/06/05 01:51

测试数据库所用脚本http://pan.baidu.com/s/1nuFZREp密码rrpc

1,内连接

语法格式:

SELECT column_listFROM t1INNER JOIN t2 ON join_condition1INNER JOIN t3 ON join_condition2...WHERE where_conditions;

内连接用维恩图表示为:
这里写图片描述
productlines和products表之间存在如下关系
这里写图片描述
要在productlines查找出product line的文字描述和要在产品表中中查询出产品编号和产品名称。

SELECT    productCode,    productName,    textDescriptionFROM    products T1INNER JOIN productlines T2 ON T1.productLine = T2.productLine;

查询结果:
这里写图片描述

1.1,在内连接中加入GROUP BY子语句

orders和orderdetails表之间存在如下关系:
这里写图片描述

SELECT    T1.orderNumber,    STATUS,    SUM(quantityOrdered * priceEach) totalFROM    orders AS T1INNER JOIN orderdetails AS T2 ON T1.orderNumber = T2.orderNumberGROUP BY    orderNumber;

查询结果:
这里写图片描述

2,外连接

语法格式:

SELECT     T1.c1, T1.c2, T2.c1, T2.c2FROM    T1        LEFT JOIN    T2 ON T1.c1 = T2.c1;

维恩图表示:
这里写图片描述
customers和orders表之间存在如下关系:
这里写图片描述
查询语句:

SELECT    T1.customerNumber,    T1.customerName,    orderNumber,    T2. STATUSFROM    customers T1LEFT JOIN orders T2 ON T1.customerNumber = T2.customerNumber;

查询结果:
这里写图片描述

2.1,查询出在orders表中没有订单号的用户

SELECT    T1.customerNumber,    T1.customerName,    orderNumber,    T2. STATUSFROM    customers T1LEFT JOIN orders T2 ON T1.customerNumber = T2.customerNumberWHERE    T2.orderNumber IS NULL;

运行结果:
这里写图片描述

3,自连接

employees表结构:
这里写图片描述
sql执行语句:

SELECT    CONCAT(        m.lastname,        ', ',        m.firstname    ) AS 'Manager',    CONCAT(        e.lastname,        ', ',        e.firstname    ) AS 'Direct report'FROM    employees eINNER JOIN employees m ON m.employeeNumber = e.reportstoORDER BY    manager;

查询结果:
这里写图片描述

总结


1,内连接相对于是查找出两张或两张以上表的交集。
2,左连接查询会在右表中查找左表中的所有匹配项,如果在右表中没有找到相应的匹配项,则返回null。
3,右连接查询会在左表中查找右表中的所有匹配项,如果在左表中没有找到相应的匹配项,则返回null。
4,全接连查询时候,两边的表会相互匹配,左表中查不到的返回null,右表中查询不多的返回null,所以查询结果集中会出现两边都有null的情况。

0 0
原创粉丝点击