1 分类
连接查询
内连接:相当于查询A、B交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
2 内连接
内连接查询的是两张表交集部分的数据。
内连接的语法分为两种: 隐式内连接、显式内连接。
1)隐式内连接
SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;
2)显式内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
3 外连接
外连接分为两种,分别是:左外连接 和 右外连接
1). 左外连接
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
左外连接相当于查询左表的所有数据,当然也包含表1和表2交集部分的数据。
2). 右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
右外连接相当于查询右表的所有数据,当然也包含表1和表2交集部分的数据。
其实两种连接方式并没有太多区别,开发中常用左外连接。
4 自连接
自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。
语法:SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;
对于自连接查询,可以是内连接查询,也可以是外连接查询。
5 联合查询
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
语法: SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;
注意:1 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
2 union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。
6 子查询
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
语法:SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );
子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。
根据查询结果不同有所分类:
1 标量子查询(子查询结果为单个值)
2 列子查询(子查询结果为一列)
3 行子查询(子查询结果为一行)
4 表子查询(子查询结果为多行多列)
其中操作符往往也不同:
1 := <> > >= < <=
2:
3: = 、<> 、IN 、NOT IN
等等。