多表查询
可以查询多张有关联的表结构,会产生大量的无效的笛卡尔积
内连接
分为显式内连接和隐式内连接。
隐式内连接
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 判断条件);