在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。下面做个语法及示例汇总:
1. 内连接(join)
内连接侧重于两个表之间的共性,它的作用是使用连接,比较两个(或多个)表之间的共有数据,然后进行返回。语法:
1.select * from 表名1 join 表名2 [on 条件] [where 表达式];
2.select * from 表名1,表名2 [where 表达式];
3.select * from 表名1 inner join 表名2 [on 条件] [where 表达式];
4.select * from 表名1 cross join 表名2 [where 表达式];
示例1:
select A.USER_NAME from sys_usermanage A join ma_emp B on A.USER_ID=B.USER_ID where USER_CODE='67810'
示例2:
select * from sys_usermanage A,ma_emp B where USER_CODE='67810'
示例3:
select * from sys_usermanage A inner join ma_emp B on A.USER_ID=B.USER_ID where USER_CODE='67810'
示例4:
select * from sys_usermanage A cross join ma_emp B where USER_CODE='67810'
2. 外连接(left join)
外连接分为左(外)连接和右(外)连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。左连接语法:
-- 左外连接,表1完全显示
select * from 表名1 left join 表名2 on 连接条件 [where 连接条件];
示例:
select A.USER_NAME from sys_usermanage A left join ma_emp B on A.USER_ID=B.USER_ID where USER_CODE='67810'
注:左连接和右连接只需要掌握一种语法即可,可以使用左连接实现“右连接”,只需要把表的查询顺序调换一下就可以实现左/右连接的转换。
3. 自连接
自连接是指在同一张表连接查询多次。语法:
SELECT 别名A.列名1,别名B.列名2 FROM 表名A 别名A JOIN 表名A 别名B where条件 ;
注:自连接查询必须对表起别名。
示例:
select A.USER_NAME,B.USER_CODE from sys_usermanage A,sys_usermanage B where A.USER_ID=B.USER_ID
4. 子查询(嵌套查询)
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。将当前查询的结果作为另一个查询的where的选项。语法:
SELECT * FROM 表名1 where 列名=(SELECT 列名 FROM 表名2 where 条件)
示例:
select * from sys_usermanage A where A.USER_ID=(select B.USER_ID from ma_emp B where B.EMP_CODE='81502')
5. 合并查询(union)
合并查询用于合并结果集相同的两张(多张)表,他有两个关键字:union、union all语法:
SELECT 列名 FROM 表名1 union SELECT 列名 FROM 表名2
SELECT 列名 FROM 表名1 union all SELECT 列名 FROM 表名2
示例:
select A.USER_ID from sys_usermanage A union all select B.SEX from ma_emp B
select A.USER_ID from sys_usermanage A union select B.SEX from ma_emp B
union和union all 区别:union会将合并的结果集中的重复数据去重,只保留重复数据中的一条数据;而union all 是将结果集全部合并,即使有重复的数据结果也不会进行合并操作。