查询练习(三)

在上述基础上排除20的部门的员工
select ename,sal,deptno,job from emp where job in(select job
from emp where deptno=10) and deptno <> 20
select ename,sal,deptno,job from emp where job in(select job
from emp where deptno=10) and deptno not in(20,30,40)

 

在FROM中使用子查询。
显示各部门高于本部门平均工资的员工信息
本部门:
select avg(sal),deptno from emp group by deptno

select  e.ename,e.sal,e.deptno from emp e,
(select avg(sal) amavg from emp group by deptno) as tem where
e.sal>tem.myavg and e.deptno=tem.deptno

 

当在from子句中使用查询时,该子查询会被当做一个临时表来对待
当对from字句中使用子查询时,必须给子查询指定一属性个别名

 

真分页:数据库分页:可以查询大量数据 假分页:内存分页:查询少量数据,先将数据存入内存中提取其中的部分
数据库分页好,省时间,省资源!!!

 

分页查询,按员工的hiredate属性升序取条记录出5条和10
1.显示第1到第4条记录
select top 4 empno from emp order by hiredate
2.显示后6条记录
select top 6 * from emp where empno
not in(select top 4 empno from emp order by hiredate) order by hiredate

 

分页思路:
int pagesize 10
count num
page num :num/pagesize  第一页0*10 第一页1*10 2*10

 

显示第11到13的入职信息
select top 3* from emp where empno
not in(select top 10 empno from emp order by hiredate) order by hiredate

 

显示第5到9的人的信息,按薪水的降序
select top 5* from emp where empno
not in(select top 5 empno from emp order by sal desc) order by sal desc

 

在同一张表中的数据复制
1.创建一张临时表:identity(1,1)表示该testld字段,从1开始每次+1

create table test(
testid int primary key  identity(1,1),
testname varchar(30),
testpass varchar(30)
)


2.插入一条数据
insert into test values('zhangsan',123456)
select * from test


3.复制数据
insert into test select testname,testpass from test
select * from test
drop table test where testid between 11 and 52322
delete from test

 

用查询结果创建一张新表
语法:select *(这里可以选字段) into 另一张表 from  表
:
select testname,testpass into testcopy from test where testid<8
select * from testcopy


:添加主键之类可使用修改表的命令
alter  table testcopy
add primary key(testid)

 

select testname,testpass into test02 from test where testid<8
insert into test02(testname,testpass) values('lishi',666666)
select * from test02

删除表中重复的数据
1,查出原表其中的数据用在生成临时表,去掉重复的
临时表存储在内存中,看不到的,但能查看。关掉数据库也会自动关掉

select distinct testname,testpass into #temp from test02
select * from #temp
2,将原表删除
drop table test02
3.创建新的test02表
select testname,testpass into test02 from #temp
4,删除临时表
drop table #temp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值