目录
多表查询
笛卡尔积:集合A和集合B的所有组合情况 A * B
在多表查询时应消除无效的笛卡尔积
内连接
查询的是两张表交集的地方
隐式内连接
sql
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显示内连接
sql
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;
外连接
左外连接
sql
SELECT 字段列表 FROM 表一 LEFT [OUTER] JOIN 表二 ON 条件...;
左外连接相当于查询表1(左表)的所有数据 包含表一和表二交集部分的数据
右外连接
sql
SELECT 字段列表 FROM 表二 RIGHT [OUTER] JOIN 表二 ON 条件...;
右外连接可以转换为左外连接
自连接
必须起别名
sql
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
自连接查询,可以是内连接查询,也可以是外连接查询
子查询
在sql语句中嵌套select语句,称为嵌套查询,又称为子查询
sql
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
子查询外部可以是INSERT/UPDATE/DELETE/SELECT中的任意一个
|-------|--------------------------|
| 子查询类型 | 功能 |
| 标量子查询 | 子查询返回的结果是单个值(数字,字符串,日期等) |
| 列子查询 | 返回的结果是一列 |
| 行子查询 | 子查询返回的结果为一行 |
| 表子查询 | 返回的结果为多行多列 |
|--------|-------------------------|
| 常用操作符 | 功能 |
| IN | 在指定的集合范围内多选一 |
| NOT IN | 不在指定的范围内 |
| ANY | 子查询返回列表中,有任意一个满足即可 |
| SOME | 与ANY等同,使用SOME的地方都可以用ANY |
| ALL | 子查询返回列表的所有值都必须满足 |
| <> | 不等于 |