MySQL上课笔记 |多表操作

一、多表查询

1.联合查询

在这里插入代码片

2.连接查询

(1)交叉连接

cross join用于连接两个要查询的表。
产生的结果是笛卡尔积,无实际应用意义。

select 查询字段 from 表1 [as 表1别名] cross join 表2 [as 表2别名];
#[]表示可加可不加
#查询字段可以为”别名.字段名“
#cross join可以用,代替
(2)内连接

根据匹配条件,返回表1和表2匹配成功的记录。

select 查询字段 from 表;
[inner] join 表2 on 匹配条件;
#[]表示可写可不写
#不设置on则与cross join等价,此时用where,但是在数据量很大的情况下会浪费性能

自连接:相互连接的表在物理上为同一个表,逻辑上分为两个表。

select distinct 字段1,字段2 from 表 别名1 join 表 别名2 on 匹配条件;
交叉连接内连接
cross join[inner] join
只连接表的笛卡尔积获取符合on筛选条件的连接数据
语法功能相同,可以使用on语法功能相同,可以使用on
(3)左外连接

返回连接关键字左表中所有的记录,以及右表中符合连接条件的记录(左表的记录在右表没有匹配的记录的话,右表对应处显示NULL)

select 查询字段 from 表1 left [outer] join 表2 on 匹配条件
(4)右外连接

二、子查询

1.子查询分类

(1)标量子查询
where 条件判断 {=|<>} (select 字段名 from 数据源 [where][group by][having][order by][limit]);
#{=|<>}的意思是条件判断可以使用”=“或者”<>“
(2)列子查询
where 条件判断 {in|not in} (select 字段名 from 数据源 [where][group by][having][order by][limit]);
#{in|not in}的意思是可以利用比较运算函数in()或者not in()
(3)行子查询

运算符的行比较

(4)表子查询
select 字段列表 from (select语句)[as] 别名 [where][group by][having][order by][limit];
#必须设置别名
#from后的数据源都是表名 

2.子查询关键字

(1)带exists关键字的子查询

判断子查询语句是否有返回的结果,存在返回1,不存在返回0

where exists(子查询语句);
(2)带any关键字的子查询
(3)带all关键字的子查询

全部符合判断条件返回1,否则返回0

where 表达式 比较运算符 all(子查询语句);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值