Sql Server2008温故而知新系列09:查询-连接查询(join关键字)

连接,查询的核心;简单的理解就是多表联合查询;

如:有员工表emp,其中记录了所有员工信息,包含了员工的部门编号,但是没有部门名称;

  有部门表dept,其中记录了所有部门信息,包含部门编号、名称、部门人数、办公地点等;

现在想查询所有员工姓名及其所有的部门名称,那么仅查询员工表或者仅查询部门表都满足不了;

这个时候就需要用到多表查询了;

如上查询简单的查询有两个:

1 --查询五行记录
2 select top 5 emp.name,dept.name 
3     from emp,dept 
4     where emp.deptid=dept.deptid 
5     order by emp.name
6 select top 5 emp.name,dept.name 
7     from emp
8     inner join dept on emp.deptid=dept.deptid     --连接依据:过滤掉一些多余的不符合条件的数据(连接产生笛卡尔乘积)
9     order by emp.name

 

这是最基本的内连接:inner join  不过inner通常会略去,直接写成join; 

当查询语句中有重复的字段名称时,需要用table_name.field_name来区别;也可以用别名来代替表名简化书写。

上面的查询也可以直接写成:

select top 5 a.name,b.name from emp a,dept b where a.deptid=b.deptid order by a.name

select top 5 a.name,b.name from emp a join dept b on a.deptid = b.deptid order by a.name

结果都是一致的;

 

 当然了,有内连接,自然有外连接;左连接left outer join,右连接right outer join; 全连接full outer join,outer通常省略;

不过都大同小异,同时内连接是使用最频繁的;

附上其它几个连接:

1、left join :左连接 --> tableA left join tableB [on tableA.field = tableB.field] :查询所得的记录中,如果左表中有不符合(ON条件)的,

  也列举出来,tableB中没有数据以则显示NULL

2、right join : 右连接 与左连接刚好相反

3、full join (笛卡尔乘积) 显示左右两个表的所有记录,不符合匹配条件的全部显示NULL,这个用得很少,几乎不怎么用了

 

posted @ 2019-11-20 13:59  無尘  阅读(326)  评论(0编辑  收藏  举报