记一波笔记~ MySQL—— 多表连接、子查询

多表连接查询

内连接/等值连接/条件连接

连接条件:两个表中相同含义字段相等
例如:查询学生的学号、姓名、选修课程号、成绩
语法
…… [inner] join ... on 连接条件
…… from 表1,表2 where 连接条件
例子
select student.sno,sname,cno,grade from student join enrollment on student.sno=enrollment.sno;

外连接

左外连接

执行过程:先执行一次内连接,然后再将左边表中不符合连接条件的记录也添加到连接结果中。
例如:查询学生的学号、姓名、选修课程号、成绩
语法
left [outer] join ... on 连接条件
例子
select student.sno,sname,cno,grade from student left join enrollment on student.sno=enrollment.sno;

右外连接

执行过程:先执行一次内连接,然后再将右边表中不符合连接条件的记录也添加到连接结果中。
例如:查询学生的学号、姓名、选修课程号、成绩
语法
right [outer] join ... on 连接条件
例子
select student.sno,sname,cno,grade from student right join enrollment on student.sno=enrollment.sno;

交叉连接/无条件连接

执行过程:
1、 从第一张表依次取出每一条记录
2、 取出每一条记录之后,与另外一张表的全部记录挨个匹配
3、 没有任何匹配条件,所有的结果都会进行保留
4、 记录数 = 第一张表记录数 * 第二张表记录数;字段数 = 第一张表字段数 + 第二张表字段数(笛卡尔积)

例如: 查询所有学生和课程可能选课情况
语法:
select * from 表1 cross join 表2
select * from 表1,表2
应用: 交叉连接产生的结果是笛卡尔积,实际应用较少。
笛卡尔积: 连接结果的记录数两个表中记录条数的乘积

自连接

例如:查询与Sue在同一个系学习的学生学号、姓名。
**多表连接方式:
**select sno,sname from student s1,student s2 where s1.name='Sue' and s1.sdept=s2.sdept;
子连接方式:
select sno,sname from student where sdept = (select sdept from student where sname='sue');

子查询

概念: 一个select中,嵌套另一个select,这种形式的查询称为子查询。
分类: where子查询(作为查询条件使用)、from子查询(作为子表来用)
关键字: all(所有)、any(任何)、exists(存在)
语法:
select ... from ... where (select ...)
关键字语法:
select ... from ... where age>all(select ...)
select ... from ... where age>any(select ...)
select ... from ... where exists(select ...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值