数据库查询

来源:互联网 发布:淘宝二手钢琴能买吗 编辑:程序博客网 时间:2024/05/19 23:00
  1. use exercise;  
  2. 找出这个数据库中所有的表  
  3. select name FROM sysobjects WHERE type='U'  
  4.   
  5. 1.  创建表  
  6. Create table DEPT  
  7. (DEPTNO INT NOT NULL, DNAME VARCHAR(14),LOC VARCHAR(13));  
  8. Alter table DEPT   
  9. add constraint PK_DEPT PRIMARY KEY (DEPTNO);  
  10.   
  11. create table EMP (EMPNO INT NOT NULL,ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT, HIREDATE DATETIME,  
  12. SAL FLOAT, COMM FLOAT, DEPTNO INT);  
  13. alter table EMP  
  14. add constraint PK_EMP PRIMARY KEY (EMPNO);  
  15. alter table EMP  
  16. add constraint FK_DEPTNO foreign key(DEPTNO) references DEPT(DEPTNO);  
  17.   
  18. create table salgrade  
  19. (grade int,losal int,hisal int  
  20. );  
  21.   
  22. select * from dept;select * from emp;select * from salgrade;  
  23.   
  24. 2.  插入数据  
  25. insert into DEPT values(10,'ACCOUNTING','NEW YORK');  
  26. insert into DEPT values(20,'PESEARCH','DALLAS');  
  27. insert into DEPT values(30,'SALES','CHICAGO');  
  28. insert into DEPT values(40,'OPERATIONS','BOSTON');  
  29.   
  30. insert into EMP values(7369,'SMITH','CLERK',7566,'1980-12-17',800,NULL,20);  
  31. insert into EMP values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);  
  32. insert into EMP values(7521,'WARD','SALESMAN',7698,'1981-02-21',1250,500,30);  
  33. insert into EMP values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);  
  34. insert into EMP values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);  
  35. insert into EMP values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);  
  36. insert into EMP values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);  
  37. insert into EMP values(7788,'SCOTT','ANALYST',7566,'1987-06-13',3000,NULL,20);  
  38. insert into EMP values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);  
  39. insert into EMP values(7844,'TURN','SALESMAN',7698,'1981-09-08',1500,0,30);  
  40. insert into EMP values(7876,'ADMAS','CLERK',7788,'1987-06-13',1100,NULL,20);  
  41. insert into EMP values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);  
  42. insert into EMP values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);  
  43.   
  44. insert into salgrade(grade,losal,hisal)  
  45. select 1,700,1200 union all  
  46. select 2,1201,1400 union all  
  47. select 3,1401,2000 union all  
  48. select 4,2001,3000 union all  
  49. select 5,3001,9999 ;  
  50.   
  51. 3.  将所有员工的工资上浮10%.然后查询员工姓名、薪水、补助。(emp.sal为工资,emp.comm为补助)  
  52. select sal from emp;  
  53. update emp set sal = sal+0.1*sal;  
  54. select ename,sal,comm from emp;  
  55. update emp set sal = sal/1.1;  
  56. 4.  查看EMP表中部门号为10的员工的姓名,职位,参加工作时间,工资。  
  57. select ename,job,hiredate,sal from emp where deptno='10';  
  58. 5.  查所有已有的职位,要求去除重复项。  
  59. select distinct job from emp;  
  60. 6.  计算每个员工的年薪,并取列名为Salary of Year(emp.sal为员工的月薪),要求输出员工姓名,年薪。  
  61. select ename,sal*12 as 'Salary of Year' from emp;  
  62. 7.  查询每个员工每个月拿到的总金额(emp.sal为工资,emp.comm为补助)。(提示:isnull(ex1,ex2)表示如果ex1为空则返回ex2)  
  63. select ename,sal+isnull(comm,0) as total from emp;  
  64. 8.  显示职位是主管(manager)的员工的姓名,工资。  
  65. select ename,sal from emp where job='manager';  
  66. 9.  显示第3个字符为大写O的所有员工的姓名及工资。  
  67. select ename,sal from emp where ename like '__O%';  
  68. 10. 显示职位为销售员(SALESMAN)或主管(MANAGER)的员工的姓名,工资,职位。  
  69. select ename,sal,job from emp where job='salesman' or job='manager';  
  70. 11. 显示所有没有补助的员工的姓名。  
  71. select ename from emp where comm is null;  
  72. 12. 显示有补助的员工的姓名,工资,补助。  
  73. select ename,sal,comm from emp where comm is not null;  
  74. 13. 排序显示所有员工的姓名,工资(按工资降序方式)。  
  75. select ename,sal from emp order by sal desc;  
  76. 14. 显示员工的最高工资和最低工资。  
  77. select max(sal) as '最高工资',min(sal) as '最低工资' from emp;  
  78. 15. 显示所有员工的平均工资和总计工资。  
  79. select avg(sal) as '平均工资',sum(sal) as '总计工资' from emp;  
  80. 16. 显示补助在员工中的发放比例、即有多少比例的员工有补助。  
  81. (此题需注意问题:1.select语句中进行除法如何保留小数点后数据。2.count函数如何处理null型数据。3.cast()语法)  
  82. select cast(cast(count(comm) as float) / cast(count(*) as floatas numeric(13,12))  from emp;  
  83.   
  84.   
  85. 聚合查询  
  86. 17. 显示每种职业的平均工资。  
  87. select job,avg(sal) as 'average' from emp group by job;  
  88. 18. 显示每个部门每种岗位的平均工资和最高工资。  
  89. select deptno,job,avg(sal) as '平均工资',max(sal) as '最高工资' from emp group by deptno,job order by deptno;  
  90. 19. 显示平均工资低于2500的部门号,平均工资及最高工资。  
  91. select deptno,avg(sal)as 'average',max(sal)as 'max' from emp group by deptno having avg(sal) < 2500;  
  92. 20. 上一条语句以平均工资升序排序。  
  93. select deptno,avg(sal)as 'average',max(sal)as 'max' from emp group by deptno having avg(sal) < 2500 order by avg(sal) asc;  
  94.   
  95. 多表查询  
  96. 21. 显示工资高于2500或岗位为MANAGER的所有员工的姓名,工资,职位,和部门号。  
  97. select ename,sal,job,deptno from emp where sal>2500 or job='manager';  
  98. 22. 排序显示所有员工的姓名,部门号,工资(以部门号升序,工资降序,雇用日期升序显示)。  
  99. select ename,deptno,sal from emp order by deptno asc,sal desc,hiredate asc;  
  100. 23. 采用自然连接原理显示部门名以及相应的员工姓名。(Sql server不支持NATURAL JOIN语法。)  
  101. select dname,ename from emp,dept where emp.deptno=dept.deptno order by dname;  
  102. select dname,ename from emp join dept on emp.deptno=dept.deptno;  
  103. 24. 查询SCOTT的上级领导的姓名。  
  104. select ename from emp where empno=(select mgr from emp where ename='scott');  
  105. select a.ename,b.job from emp a join emp b on a.empno=b.mgr and b.ename = 'scott';  
  106. select * from emp a join emp b on a.deptno=b.deptno where a.ename='scott' and b.job='manager';  
  107.   
  108. 25. 显示部门的部门名称,员工名即使部门没有员工也显示部门名称。  
  109. select dname,ename from emp a right join dept b on a.deptno=b.deptno;  
  110. 26. 显示所有员工的名称、工资以及工资级别。  
  111. select ename,sal,grade from emp join salgrade on sal between salgrade.losal and salgrade.hisal;  
  112. 27. 显示ACCOUNTING部门所有员工的名称,工资。  
  113. select ename,sal from emp join dept on emp.deptno=dept.deptno and dept.dname='accounting';  
  114. select ename,sal from emp where deptno=(select deptno from dept where dname='accounting');  
  115. 28. 显示职位属于10号部门所提供职位范围的员工的姓名,职位,工资,部门号。  
  116. select ename,job,sal,deptno from emp where job in(select job from emp where deptno='10');  
  117. 29. 显示在所有员工中高于30号部门中任一个员工工资的员工的姓名,工资和部门号。  
  118. select ename,sal,deptno from emp where sal >(select max(sal) from emp where deptno='30');  
  119.   
  120. 集合查询  
  121. 30. 显示工资高于2500或职位为MANAGER的员工的姓名,工资和职位(采用UNION语法实现)。  
  122. select  ename,sal,job from emp where sal>2500 union select  ename,sal,job from emp where job='manager' order by ename;  
  123. select ename,sal,job from emp where sal>2500 or job='manager'order by ename;  
  124. 31. 显示工资高于2500且职位为MANAGER的员工的姓名,工资和职位(采用INTERSECT语法实现)。  
  125. select ename,sal,job from emp where sal>2500 and job='manager';  
  126. select ename,sal,job from emp where sal>2500 intersect select ename,sal,job from emp where job='manager';  
  127. 32. 显示工资高于2500但职位不是MANAGER的员工的姓名,工资和职位(采用EXCEPT语法实现)。  
  128. select ename,sal,job from emp where sal>2500 except select ename,sal,job from emp where job='manager';  
  129.   
  130. select * from dept; select * from emp; select * from salgrade;  
0 0