天天看点

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

连接查询

按功能分类:内连接(等值连接,非等值连接,自连接),外连接(左外连接,右外链接,全外连接),交叉连接

按年代分类:sql92标准(仅支持内连接),sql99标准(都支持,除了全外连接)

现在我们介绍sql99标准

语法:select 查询列表

​ from 表1 别名 连接类型

​ join 表2 别名

​ on 连接条件

​ 【where 筛选条件】

​ 【group by 分组】

​ 【having 筛选条件】

​ 【order by 排序列表】

注意:【】中的代表可以省略

连接类型关键字:

内连接 【inner】 ,

外连接【left(左外),right(右外),full(全外)】,

交叉连接【cross】概念:没有 WHERE 子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

连接查询的特点

特点: 1:外连接的查询结果为主表中的所有记录,如果从表中有和它匹配的,则显示匹配值,如果没有则显示null值。

2:外连接查询结果=内连接结果+主表中有而从表中没有的记录

3:左外连接,left,join左边的是主表

4:右外连接,right,join右边的是主表

5:左外连接和右外连接交换两表顺序,可以实现同样效果

6:inner join 是比较运算符,只返回符合条件的行。

演示

1;演示左外连接和右外连接及内连接

在Navicat中新建两个表

表名:student

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

表名:course

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

在Navicat中点击New QUERY

输入: SELECT * FROM student RIGHT JOIN course ON course.id=student.id;

结果:

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

输入: SELECT * FROM student LEFT JOIN course ON course.id=student.id;

结果:

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

输入:SELECT * FROM student INNER JOIN course ON course.id=student.id;

结果:

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

以上三个结果满足连接查询特点的1,2,3,4,6

演示交叉连接

依然用到上面的两个表student ,course

输入: SELECT * FROM student CROSS JOIN course;

结果:

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

如果我们在此时给这条SQL加上WHERE子句的时候

比如 SELECT * FROM student CROSS JOIN course WHER course.id=student.id;

此时将返回符合条件的结果集,结果和inner join所示执行结果一样。

输入: SELECT * FROM student CROSS JOIN course WHER course.id=student.id;

结果:

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

提出问题

上面两表为一对一关系,那么如果表A和表B为一对多、多对一或多对多的时候,我们又该如何写连接SQL语句呢?

解决方法:

当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。

如下演示

在前面两表student,course的基础上

在创建一个student_course表

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

输入:SELECT s.name,c.game FROM student_course sc RIGHT JOIN student s ON sc.sid=s.id RIGHT JOIN course c ON sc.cid=c.id;

结果:

DQL语言(Data Query Language)——(6)连接查询连接查询连接类型关键字:连接查询的特点演示提出问题

继续阅读