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
在这里插入图片描述
表名:course
在这里插入图片描述

在Navicat中点击New QUERY

输入: SELECT * FROM student RIGHT JOIN course ON course.id=student.id;
结果:
在这里插入图片描述
输入: SELECT * FROM student LEFT JOIN course ON course.id=student.id;
结果:
在这里插入图片描述
输入:SELECT * FROM student INNER JOIN course ON course.id=student.id;
结果:
在这里插入图片描述

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

演示交叉连接
依然用到上面的两个表student ,course
输入: SELECT * FROM student CROSS JOIN course;
结果:
在这里插入图片描述
如果我们在此时给这条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;
结果:
在这里插入图片描述

提出问题

上面两表为一对一关系,那么如果表A和表B为一对多、多对一或多对多的时候,我们又该如何写连接SQL语句呢?
解决方法:
当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。

如下演示
在前面两表student,course的基础上
在创建一个student_course表
在这里插入图片描述
输入: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;
结果:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值