码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server中的内连接

时间:2016-08-22 00:10:25      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

内连接是查询的重点,也是数据库学习的重点。

待查询的是scott数据库中的三个表:

emp表:

技术分享

dept表:

技术分享

salgrade表:

技术分享

1、select .... from A ,B的用法

--emp是14行8列,dept是5行3列
select * from emp,dept;   --输出结果是70行11列

产生的结果是笛卡尔积:

技术分享

2、select .... from A, B where ...的用法

select * 
	from emp, dept 
	where empno = 7369;   --对产生的笛卡尔积用where过滤

 技术分享

3、select  ....from A join B  on 的用法

select *
	from emp "E"
	join dept "D"    --join是连接
	on  1 = 1;       --on是连接条件 on不能省 有join就必须有on

因为连接条件是1 = 1 永远成立,所以输出的结果是70行11列,跟:

select * from emp,dept;

输出的结果一样。

 

所以:

select * 
	from emp "E"
	join dept "D"                        --SQL99标准
	on "E".deptno = "D".deptno;

的输出结果是:

技术分享

它的原理如下(重要):

技术分享

其实这跟:

select * 
	from emp, dept                       
	where emp.deptno = dept.deptno;            --SQL92标准

输出的结果是一样的,推荐使用SQL99标准。

 

例子:

1、把工资大于2000的员工的姓名、部门的名称和工资的等级输出。

--SQL99标准
select "E".ename "员工姓名","E".sal "工资","D".dname "部门名称","S".GRADE "工资等级"
	from emp "E"
	join dept "D"
	on "E".deptno = "D".deptno
	join salgrade "S"
	on "E".sal >= "S".losal and "E".sal <= "S".hisal
	where "E".sal > 2000;

 

--SQL92标准
select "E".ename "员工姓名","E".sal "工资","D".dname "部门名称","S".GRADE "工资等级"
	from emp "E",dept "D",salgrade "S"
	where ("E".deptno = "D".deptno) and ("E".sal >= "S".losal) and ("E".sal <= "S".hisal and "E".sal > 2000);

技术分享

2、输出姓名中不包含A的所有员工中工资做高的前三名的每个员工的姓名、工资、工资等级和部门名称

select top 3 "E".ename, "E".sal, "S".grade, "D".dname
	from emp "E"
	join dept "D"
	on "E".deptno = "D".deptno
	join salgrade "S"
	on "E".sal between "S".LOSAL and "S".HISAL
	where "E".ename not like ‘%A%‘
	order by "E".sal desc;

技术分享 

3、查找每个部门的编号 该部门所有员工的平均工资 平均工资的等级

select "T".deptno, "T".avg_sal "平均工资","S".GRADE "工资等级"
	from salgrade "S"
	join (
			select deptno, avg(sal) as "avg_sal"
			from emp
			group by deptno             --临时表,查找出部门编号和员工的平均工资
	) "T"                         
	on "T"."avg_sal" between "S".LOSAL and "S".HISAL;

 技术分享



 


SQL Server中的内连接

标签:

原文地址:http://www.cnblogs.com/yzy-blogs/p/5793825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!