mysql 多子表联查_MySQL-子查询和多表联查

1、多表联查

使用多表联查的场景,有些时候数据在不同的表中,这个时候我们就需要用到mysql中的多表联查。

2、多表联查概念

将两个或两个以上的表按某个条件连接起来,从而选取需要的数据。多表联查是同时查询两个或两个以上的表时使用的。

3、多表联查分类

1. 内连接查询

内连接查询使用关键字join或cross join 或 inner join, 然后通过on连接表与表之间的条件

注意: 内连接查询只能查询出两个表符合条件的数据

语法: SELECT 字段,字段1,.. FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name

2. 外连接查询

2.1 左外连接

左外连接使用关键字left join, 然后通过on连接表与表之间的条件

注意:left join 会查询出left join左边的表所有的数据,即使右表没有匹配

语法:SELECT 字段,字段1,... FROM table_name1 LEFT JOIN table_name2  ON table_name1.column_name=table_name2.column_name

2.2 右外连接

左外连接使用关键字right join,然后通过on连接表与表之间的条件

注意: 即使左表中没有匹配,也从右表返回所有的行

语法: SELECT 字段,字段1,.... FROM table_name1RIGHT JOIN table_name2ON table_name1.column_name=table_name2.column_name

4、注意

1. 子查询先执行里面的SQL语句,再执行外面SQL语句。

2. 子查询的效率比较低,一般建议使用join替换子查询

3. 子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句再临时表中查询记录。查询完毕后,MySQL需要撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

5、 使用子查询原则

1. 一个子查询必须放在圆括号中

2. 将子查询放在比较条件的右边,这样可以增加SQL可读性

子查询分类

1. where 型子查询(重点掌握) ,where型子查询把内层查询结果当作外层查询的比较条件

例如:SELECT * FROM user WHERE id in (SELECT uid FROM user_detail );

2. exists/not exists型子查询

EXISTS关键字表示存在。使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,只要子查询中至少返回一个值,则EXISTS语句的值就为True。就返回true,否则返回false。当返回的值为true时,外层查询语句将进行查询,否则不进行查询

3. 使用IN/NOT IN的子查询

SELECT * FROM user WHERE id not in (SELECT uid FROM user_detail );

4. 使用比较运算符的子查询 ( = > < >= <= != )

SELECT * FROM user WHERE id = (SELECT uid FROM user_detail limit 1 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值