连接,查询的核心;简单的理解就是多表联合查询;
如:有员工表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,这个用得很少,几乎不怎么用了