关于SQL经典题
最近刚刚练过的一道sql分享给大家,
先上题目:
-- 部门表
CREATE TABLE DEPT(
DEPTNO INT PRIMARY KEY, -- 部门编号
DNAME VARCHAR(14) , -- 部门名称
LOC VARCHAR(13) ) ; -- 部门地址
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
-- 员工表
CREATE TABLE EMP
(
EMPNO INT PRIMARY KEY, -- 员工编号
ENAME VARCHAR(10), -- 员工名称
JOB VARCHAR(9), -- 工作
MGR DOUBLE, -- 直属领导编号
HIREDATE DATE, -- 入职时间
SAL DOUBLE, -- 工资
COMM DOUBLE, -- 奖金
DEPTNO INT, -- 部门号
FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO));
SELECT * FROM emp;
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,'1987-07-13',3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
-- 工资等级表
CREATE TABLE SALGRADE
( GRADE INT, -- 工资等级
LOSAL DOUBLE, -- 最低工资
HISAL DOUBLE ); -- 最高工资
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
SELECT * FROM salgrade;
网上查了一下有很多类似的 但我还是想自己记录下希望有所帮助:
-- 1.返回拥有员工的部门名、部门号。(dept,emp)
select distinct d.deptno,d.dname from dept d,emp e where e.deptno=d.deptno;
-- 2.工资多于smith的员工信息。
select sal from emp where ename='smith';
select * from emp where sal>800
select * from emp where sal>(select sal from emp where ename='smith');
-- 3.返回员工和其所属领导的姓名。(自连接)
select e.ename,l.ename from emp e,emp l where e.mgr=l.empno;
-- 4.返回雇员的雇佣日期早于其领导雇佣日期的员工及其领导姓名。(在日期类型可以直接比较)
select e.ename,l.ename from emp e,emp l where e.mgr=l.empno and e.hiredate<l.hiredate;
-- 5.返回员工姓名及其所在的部门名称。
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
-- 6.返回从事clerk工作的员工姓名和所在部门名称
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno and e.job='clerk';
-- 7.返回部门号及其本部门的最低工资。
select deptno,min(sal) from emp group by deptno;
-- 8.返回销售部(sales)所有员工的姓名。
select deptno from dept where dname='sales';
select ename from emp where deptno=30
select ename from emp where deptno=(select deptno from dept where dname='sales')
-- 9.返回工资多于平均工资的员工。
select avg(sal) from emp;
select * from emp where sal >?
select * from emp where sal >(select avg(sal) from emp)
-- 10.返回与SCOTT从事相同工作的员工。
select job from emp where ename='SCOTT';
select * from emp where job=?
select * from emp where job=(select job from emp where ename='SCOTT') and ename <> 'SCOTT';
-- 11.返回与30部门员工工资相同的员工姓名与工资。
select sal from emp where deptno=30
select ename,sal from emp where sal in(??)
select ename,sal from emp where sal in(select sal from emp where deptno=30)
-- 12.返回工资高于30部门所有员工工资水平的员工信息。
select max(sal) from emp where deptno=30
select * from emp where sal >?
select * from emp where sal >(select max(sal) from emp where deptno=30)
select * from emp where sal >all(select sal from emp where deptno=30);
-- 13.返回部门号、部门名、部门所在位置及其每个部门的员工总数。
select deptno,count(*) from emp group by(deptno)
select d.*,tmp.total from dept d,(select deptno,count(*) total from emp group by(deptno)) tmp where d.deptno=tmp.deptno;
select d.*,tmp.total
from dept d
left join (select deptno,count(*) total
from emp group by(deptno)) tmp
on d.deptno=tmp.deptno;
-- 14.返回员工的姓名、所在部门名及其工资。
select e.ename,d.dname,e.sal from emp e,dept d where e.deptno=d.deptno;
select e.ename,d.dname,e.sal from emp e join dept d on e.deptno=d.deptno;
-- 15.返回员工的详细信息。(包括部门名)
select e.*,d.dname from emp e join dept d on e.deptno=d.deptno;
-- 16.返回员工工作及其从事此工作的最低工资。
select job,min(sal) from emp group by job
-- 17.返回不同部门经理的最低工资。
select deptno,min(sal) from emp where job='manager' group by deptno;
-- 18.计算出员工的年薪,并且以年薪排序。
select ename,sal*12+ifnull(comm,0) yearsal from emp order by yearsal;
-- 19.返回工资处于第四级别的员工的姓名。
select * from salgrade where grade=4;
select e.ename from emp e,(select * from salgrade where grade=4) tmp where e.sal between tmp.losal and tmp.hisal;
select e.ename from emp e,salgrade s where s.grade=4 and e.sal between s.losal and s.hisal ;
-- 20.返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资
select e.ename,d.loc,s.losal,s.hisal from emp e,salgrade s,dept d where s.grade=2 and e.deptno=d.deptno and e.sal between s.losal and s.hisal ;
select e.ename,d.loc,s.losal,s.hisal
from emp e
join salgrade s
on s.grade=2 and e.sal between s.losal and s.hisal
join dept d
on e.deptno = d.deptno
-- 21.工资等级多于smith的员工信息。
select s.hisal from emp e,salgrade s where e.ename='smith' and e.sal between s.losal and s.hisal;
select * from emp where sal >?
select * from emp where sal >(select s.hisal from emp e,salgrade s where e.ename='smith' and e.sal between s.losal and s.hisal)
本人小白一枚。欢迎提出各类建议,
关于SQL经典题的更多相关文章
- SQL经典题
1触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性, 可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以联级运算 ...
- SQL经典题-实战
Student(S#,Sname,Sage,Ssex) 学生表 S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname,T#) 课程表 ...
- 最强最全面的大数据SQL经典面试题(由31位大佬共同协作完成)
本套SQL题的答案是由许多小伙伴共同贡献的,1+1的力量是远远大于2的,有不少题目都采用了非常巧妙的解法,也有不少题目有多种解法.本套大数据SQL题不仅题目丰富多样,答案更是精彩绝伦! 注:以下参考答 ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- poj 1611:The Suspects(并查集,经典题)
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 21472 Accepted: 10393 De ...
- Hihicoder 题目1 : Trie树(字典树,经典题)
题目1 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编 ...
- poj 3264:Balanced Lineup(线段树,经典题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32820 Accepted: 15447 ...
- poj 2503:Babelfish(字典树,经典题,字典翻译)
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 30816 Accepted: 13283 Descr ...
- poj 2001:Shortest Prefixes(字典树,经典题,求最短唯一前缀)
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12731 Accepted: 544 ...
随机推荐
- [HDU1001] Sum Problem
Problem Description Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge). In this problem, ...
- ASP.NET MVC5(一):ASP.NET MVC概览
ASP.NET MVC概览 ASP.NET MVC是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.ASP.NET MV ...
- 【PHP】最详细PHP从入门到精通(三)——PHP中的数组
PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...
- python爬虫番外篇(一)进程,线程的初步了解
一.进程 程序并不能单独和运行只有将程序装载到内存中,系统为他分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别在于:程序是指令的集合,它是进程的静态描述文本:进程是程序的一次执行活动, ...
- python爬虫 模拟登陆校园网-初级
最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登 ...
- log4j 在项目中的详细配置
1.添加log4j 包 2.首先在src目录下添加log4j.properties文件 log4j.rootLogger=debug, stdout, R log4j.appender.stdout= ...
- Idea 常用功能汇总,工作中常用技巧
1.隐藏没用到的文件 比如 IDEA 的项目配置文件(.iml 和.idea),打开 Settings-File Types, 加入要隐藏的文件后缀. 2.常用技巧 2.1 通过Alt+F8查看变量 ...
- 多个项目MyEclipse中启动出现OutOfMemoryError: PermGen space如何解决
在MyEclipse中启动程序运行,报错java.lang.OutOfMemoryError: PermGen space应该怎么办?这是eclipse 内存不够的原因. PermGen space的 ...
- 单例模式与静态变量在PHP中
在PHP中,没有普遍意义上的静态变量.与Java.C++不同,PHP中的静态变量的存活周期仅仅是每次PHP的会话周期,所以注定了不会有Java或者C++那种静态变量. 1. 静态变量在PHP中 在PH ...
- 一篇文章让你搞懂 SSL 证书
关于结婚这件事 那天和同事讨论到底什么才算是真正的「结婚」?这种话题本来是极其不应该存在的.传统意义的领个证书,办个婚礼.吃吃喝喝,但随着社会各族人民身心发展进化,原本那些繁琐流程简直是反人类,貌似现 ...