SQL里各种联合查询总结
2013-01-28 11:47
369 查看
转自:http://www.2cto.com/database/201208/149044.html
SQL里各种联合查询总结
SQL里各种联合查询总结
create database mytest go www.2cto.com use mytest go create table t_dept ( d_id int primary key identity(1,1), d_name varchar(20), d_remark varchar(20) ) go create table t_emp ( e_id int primary key identity(1,1), d_id int references t_dept(d_id), e_name varchar(20), e_sex varchar(4) ) go www.2cto.com insert into t_dept values('一部','1111'); insert into t_dept values('二部','2222'); insert into t_dept values('三部','3333'); insert into t_dept values('四部','4444'); go insert into t_emp values(1,'一部A君','男'); insert into t_emp values(1,'一部B君','男'); insert into t_emp values(2,'二部C君','女'); insert into t_emp values(null,'三部D君','男'); go select * from t_dept; select * from t_emp; go --注:联接查询,哪个表在前,就以哪个表为主表 --内联接(两表标识号相同的所有行) select * from t_dept a inner join t_emp b on a.d_id=b.d_id ; 1 一部 1111 1 1 一部A君 男 1 一部 1111 2 1 一部B君 男 2 二部 2222 3 2 二部C君 女 --外连接(外联接可以是左向外联接、右向外联接或完整外部联接) --(1) select * from t_dept a left outer join t_emp b on a.d_id=b.d_id ;--"左外连接 等同于 左连接" select * from t_dept a left join t_emp b on a.d_id=b.d_id ;--左连接(所有的部门显示,员工表里部门id为null的显示不出来) 1 一部 1111 1 1 一部A君 男 1 一部 1111 2 1 一部B君 男 2 二部 2222 3 2 二部C君 女 3 三部 3333 NULL NULL NULL NULL 4 四部 4444 NULL NULL NULL NULL www.2cto.com --(2) select * from t_dept a right outer join t_emp b on a.d_id=b.d_id ;--"右外连接 等同于 右连接" select * from t_dept a right join t_emp b on a.d_id=b.d_id ;--右连接,员工表所有员工显示,"三部"和"四部"没有员工的部门则该部门不显示 1 一部 1111 1 1 一部A君 男 1 一部 1111 2 1 一部B君 男 2 二部 2222 3 2 二部C君 女 NULL NULL NULL 4 NULL 三部D君 男 --(3) --完整外部联接,返回左表和右表中的所有行 --当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 select * from t_dept a full outer join t_emp b on a.d_id=b.d_id ; select * from t_dept a full join t_emp b on a.d_id=b.d_id ; 1 一部 1111 1 1 一部A君 男 1 一部 1111 2 1 一部B君 男 2 二部 2222 3 2 二部C君 女 3 三部 3333 NULL NULL NULL NULL 4 四部 4444 NULL NULL NULL NULL NULL NULL NULL 4 NULL 三部D君 男 --笛卡尔积 select * from t_emp,t_dept select * from t_dept,t_emp --返回16条数据,左表有4条,右表有4条,返回行数为4*4=16(条),产生笛卡尔积 www.2cto.com 1 一部 1111 1 1 一部A君 男 2 二部 2222 1 1 一部A君 男 3 三部 3333 1 1 一部A君 男 4 四部 4444 1 1 一部A君 男 1 一部 1111 2 1 一部B君 男 2 二部 2222 2 1 一部B君 男 3 三部 3333 2 1 一部B君 男 4 四部 4444 2 1 一部B君 男 1 一部 1111 3 2 二部C君 女 2 二部 2222 3 2 二部C君 女 3 三部 3333 3 2 二部C君 女 4 四部 4444 3 2 二部C君 女 1 一部 1111 4 NULL 三部D君 男 2 二部 2222 4 NULL 三部D君 男 3 三部 3333 4 NULL 三部D君 男 4 四部 4444 4 NULL 三部D君 男
相关文章推荐
- SQL里各种联合查询总结
- SQL里各种联合查询总结
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- SQL查询中用replace替换ntext,text字段的各种方法总结
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- Hibernate中各种查询方法的总结
- 00104 SQL查询进阶2:多表联合查询JOIN
- SQL 联合查询
- 每日总结(一)Sql查询只显示时间、GridView去除表格线、DateTimeControl重置、GridView分页、Jquery取值
- sql 联合查询并更新
- MS SQLServer 高级查询总结
- 查询删除SQL语句知识总结
- oracle 多表联合查询总结归纳
- SQL优化查询建议(个人总结 仅供参考)
- sql的各种连接查询
- 又一个通用分页存储过程,支持表别名,多表联合查询SQL语句--转载
- SQL总结(七)查询实战
- oracle 多表联合查询总结归纳
- Sql联合查询
- sql各种查询技巧