0
点赞
收藏
分享

微信扫一扫

MySQL上课笔记 |多表操作

Python百事通 2022-04-26 阅读 67
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 条评论