Skip to content

多表查询

可以查询多张有关联的表结构,会产生大量的无效的笛卡尔积


内连接

分为显式内连接和隐式内连接。

隐式内连接

sql
select 查询字段 from 表1,表2 where 通常是主副键的一致性;

利用主副键的一致性进行筛选无效的笛卡尔积

显式内连接

sql
select 查询字段 from 主表 inner join 副表 on 筛选条件 where 筛选条件;

外连接

分为左外连接和有右连接,会分别完全显示这个表的内容,即使另外一个表没有所对应的信息

左外连接:以左表为主表

sql
select 查询字段 from 主表 left join 副表 on 筛选条件 where 筛选条件;

右外连接:以右表为主表

sql
select 查询字段 from 副表 right join 主表 on 筛选条件 where 筛选条件;

自连接

自己和自己进行筛选,可以内连接,也可以外连接 select 查询字段 from 表1 别名1 , 表1 别名2 where 筛选条件;


联合查询

可以塞在两个查询语句中间,使得结果进行简单的合并:union all 缺点很明显,就是这个只能进行简单的结果的叠加,不能去重,那么,怎么解决呢----去掉all 限制:所合并的查询的字段必须相同


子查询

子查询是指嵌套在其他语句中的查询语句 子查询可以嵌套在insert,update,delete,select中 根据结果不同,可以分为四类:

标量子查询子查询结果为单个的值
列子查询子查询结果为一列
行子查询子查询结果为一行
表子查询查询结果为多行多列

标量子查询

用于查询查询一个数据之后的查询,可以放在where后,记得要加括号

sql
select 字段 from 主表 where (select 字段 from *where 匹配条件) = 匹配条件;

常用操作符:算数运算符进行比较


列子查询

返回结果是一列 常用操作符:in,not in,any,sum,all (not) in : (不)在 any 子查询返回的列表中,有任意一个满足条件就好 some 和any一样,二者通用 all 子查询返回的所有列表值都必须全部满足


行子查询

返回一行 常用操作符 = != (not)in

sql
select 字段名 from 表名 where (字段1,字段2...字段n) = (select 字段1,字段2...字段n from 表名 where 判断条件);

本质就是用括号将多个字段整合到一起,进行判断是否符合


表子查询

主要对多行多列的表进行查询 常用操作符:in

sql
select 字段名 from 表名 where (字段1,字段2...字段n) in (select 字段1,字段2...字段n from 表名 where 判断条件);

Contact me: 1943284256@qq.com