sql server学习笔记-day4
2017-10-18 15:58
357 查看
--今天讲”多表查询“ select * from dept select * from emp --显示sales部门所有员工的情况 select * from emp,dept where dept.depName='sales' and dept.depno=emp.depno --显示雇员名,雇员工资,及所在部门的名字,并按部门编号排序 --如果两张表都有相同名字的字段,则需要带表名 select ename,sal,depName,emp.depno from emp,dept where dept.depno=emp.depno order by dept.depno --使用表名的别名 select ename,sal,depName,e.depno from emp e,dept d --给表起了别名e和d where d.depno=e.depno order by d.depno --显示部门号为10的部门名、员工名和工资 select depName,ename,sal from emp,dept where emp.depno=dept.depno and emp.depno=10 --自连接:指的是同一张表的连接查询 --显示员工‘FORD’的上级领导的姓名 select ename from emp where empno=(select mgr from emp where ename='FORD') --思考题:显示每个员工的姓名和他上级的姓名 --分析,把emp表看成两张表,分别是worker和boss(内连接) --那么什么是外连接(左外连接,右外连接)呢? select worker.ename 雇员,boss.ename 老板 from emp worker,emp boss where worker.mgr=boss.empno --子查询:指的是嵌入在其他sql语句中的select语句,也叫嵌套查询 --①单行子查询:只返回一行数据的子查询语句 --如何显示与Smith同一个部门的所有员工 select * from emp where depno=(select depno from emp where ename='smith') --②多行子查询:返回多行数据的子查询 --请思考:如何查询和部门10的工作相同的雇员的名字、岗位、工资和部门号 --(多行查询应该用关键字in,=只适用于单行查询) select ename,job,sal,depno from emp where job in(select distinct job from emp where depno=10) --如何排除10号部门本身 select ename,job,sal,depno from emp where job in(select distinct job from emp where depno=10) and depno!=10 --在from字句中使用子查询 --思考:如何显示高于部门平均工资的员工的名字、薪资,和他们部门的平均工资 --分析: --1.首先要知道每个部门的平均工资 select depno,avg(sal) 平均工资 from emp group by depno --2.把上面的查询结果,当做一个临时表 对待 select emp.ename,emp.sal,tem.平均工资 from emp, (select depno,avg(sal) 平均工资 from emp group by depno) tem where emp.sal>tem.平均工资 and emp.depno=tem.depno --总结:当在from语句中使用子查询时,该子查询结果会被作为一个临时表来对待,使用该临时表时,必须指定一个别名 --全部显示 select * from emp --分页查询?当数据量很大时,效率也很好! --请显示第5-10个入职的雇员(按照时间的先后顺序) --分析: --1. 显示第1-4个入职的雇员(top xxx) select top 4 * from emp order by hiredate --2. 第5-10个即去除前四个入职之后的前六个人 select top 6 * from emp where empno not in (select top 4 empno from emp order by hiredate) order by hiredate --显示第5-9个人的信息(按照薪水的高低) select top 5 * from emp where empno not in (select top 4 empno from emp order by sal) order by sal --显示emp表中的第5-9个人的信息,并按照这五个人的薪资进行排序 select * from (select top 5 * from emp where empno not in (select top 4 empno from emp)) r order by sal --identity(1,1),表示testId字段自增长,从1,每次加1 create table test2 (testId int primary key identity(1,1), testName nvarchar(30), testPass nvarchar(30)) --当数据量很大时,分页查询的执行语句速度也非常快! --例如我们创建一个有100多万行的表,然后利用分页查询,按照Id排序查询第100-105行的数据: select * from test2 insert into test2 (testName,testPass) values('xy','xyy') insert into test2 (testName,testPass) select testName,testPass from test2 select count(*) from test2 select top 6 * from test2 where testId not in (select top 99 testId from test2)
相关文章推荐
- sql server 的T-SQL 学习笔记(六)
- SQL SERVER 2005 数据挖掘与商业智能完全解决方案---学习笔记(二)
- sql server 2005 排序规则与大小写敏感 (sql server2005学习笔记1)
- 学习笔记:sql server 的触发器概念及使用(2)
- 【SQL Server学习笔记】9:有关SELECT子查询
- 学习笔记:jdbc连接、操作数据库SQL Server 2008 ——MyEclipse web示例
- sql server 的T-SQL 学习笔记(九)
- Lua学习笔记Day4-Lua实现链表
- SQL Server 2005 学习笔记 Part 2 DML增强功能
- SQL Server 2012 学习笔记4
- sql server 的T-SQL 学习笔记(三)
- SQL server 2005 学习笔记 (1)
- sql server 2005学习笔记之触发器简介
- SQL SERVER 存储过程学习笔记
- SQL Server 2005 学习笔记之触发器简介[转]
- 【SQL Server学习笔记】DML触发器、DDL触发器
- 【SQL Server学习笔记】Service Broker创建异步的、数据驱动的消息应用程序
- sql server 2008学习笔记(一)
- sql server 的T-SQL 学习笔记(七)
- SQL SERVER设计与高级查询 第一章 学习笔记