mysql -- 连接查询
连接查询是指将多个表通过特定条件进行组合然后筛选出结果的查询语句,连接查询按
年代
来分可分为sql92
和sql99
语法,92就是1992年代诞生的语法,99同理,99是对92的改进和扩充。按功能
可分为内连接
,外连接
,和交叉连接
。92仅仅支持内连接。mysql中92不支持外连接。
内连接
等值连接
等值连接是两张表连接,第一张表匹配第二张表中的数据,依据等值连接的筛选条件,筛选出符合连接条件的数据集。
92的等值连接sql语句可写为:
#列名相同,则列名前要加表名限定,eg: 表名.列名
select 要挑选的字段
from 表1,表2
where 连接条件 # 一般就是两张表中某个字段是否相等
99的等值连接则可写为:
select 字段名
from 表1 [inner] join 表2
on 连接条件 where 筛选条件
连接条件,字段类型最好统一,否则会有性能问题。
非等值连接
与等值连接想比,二者的不同之处在于连接条件中的=
号,< , > , <> 等其他运算符。
自连接
自连接就是一张表自己连接自己的等值连接
外连接
外连接查询时,若两张表满足连接条件则正常显示,若主表里有数据,但是从表里没有与之能匹配的数据,则从表的查询结果为null。
外连接分为左外连接,右外连接,分别用关键词left,right连接,left左边的是主表,right 右边的是主表。
语法示例:
select 字段1,字段2...,字段n
from 表1
left | right [outter] join 表2
on 连接条件
where 筛选条件
除此之外还有一个全外连接
,使用 full outer join
连接,其结果集为两张表的交集,加第一张表里有但是第二张表里不匹配的数据和第二张表里有但是第一张表里不匹配的数据,两张表无主次之分。 my sql 不支持全外连接
交叉连接
交叉连接就是一个笛卡尔乘积,没啥好说的
语法:
select 字段1, 字段2 ... 字段n
from 表1
cross join 表2;