CREATE TABLE EMP
(
EMPNO numeric(5,0) NOT NULL primary key,--雇员的编号
ENAME nvarchar(10) not null,--雇员的名字
JOB nvarchar(9)not null,--雇员的的职位
MGR numeric(5,0),--上级主管编号
HIREDATE datetime,--入职(受雇)日期
SAL numeric(7, 2),--薪金;
COMM numeric(7, 2),--佣金;
DEPTNO numeric(2,0)--部门编号
)

CREATE TABLE DEPT
(
DEPTNO numeric(2) primary key,--部门编号
DNAME nvarchar(14) not null,--部门名称
LOC部门所在地 nvarchar(13) --部门所在地
);
INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902,'2000-12-17', 800, NULL, 20);
INSERT INTO EMP VALUES (7499, 'allen', 'SALESMAN', 7698,'2001-2-20', 1600, 300, 30);
INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698,'2001-2-22', 1250, 500, 30);
INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839,'2001-4-2', 2975, NULL, 20);
INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,'2001-9-28',1250, 1400, 30);
INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,'2001-5-1', 2850, NULL, 30);
INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,'2001-6-9', 2450, NULL, 10);
INSERT INTO EMP VALUES (7788, 'scott', 'ANALYST', 7566,'2002-12-9',3000, NULL, 20);
INSERT INTO EMP VALUES (7839, 'king', 'PRESIDENT', NULL,'2001-11-17',5000, NULL, 10);
INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,'2001-9-8', 1500, 0, 30);
INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,'2003-1-12',1100, NULL, 20);
INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,'2001-3-12',950, NULL, 30);
INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,'2001-3-12',3000, NULL, 20);
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,'2002-01-23',1300, NULL, 10);
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');
SELECT *FROM EMP

--1、查询所有的雇员名字
SELECT ENAME FROM EMP

--2、查询所有的部门
SELECT DISTINCT JOB FROM EMP --DISTINCT 隐藏重复的行

--3、查询没有佣金(COMM)的所有雇员信息
SELECT * FROM EMP
WHERE COMM IS NULL

--4、查询薪金(SAL)和佣金(COMM)总数大于2000的所有雇员信息
SELECT * FROM EMP
WHERE SAL+ISNULL(COMM,0)>2000
提示:isnull(列名,0) :如果该列中有空值,就把空值当做0做计算
--5、选择部门编号=30中的雇员
SELECT * FROM DEPT
WHERE DEPTNO=30

--6、列出所有Job办事员("CLERK")的姓名、编号和部门名称
SELECT ENAME,EMPNO,DNAME FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO AND JOB='CLERK'

--7、找出佣金高于薪金的雇员
SELECT ENAME FROM EMP
WHERE COMM>SAL

--8、找出佣金高于薪金的60%的雇员
SELECT ENAME FROM EMP
WHERE COMM>0.6 * SAL
--9、找出部门10中所有经理和部门20中的所有办事员的详细资料
SELECT *FROM EMP
WHERE JOB='MANAGER' AND DEPTNO=10 OR JOB='CLERK' AND DEPTNO =20

--10、既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料
SELECT *FROM EMP
WHERE JOB!='MANAGER' AND SAL>=2000 OR JOB!='CLERK' AND SAL>=2000

--11、找出收取佣金的雇员的不同工作
SELECT DISTINCT JOB FROM EMP
WHERE COMM IS NOT NULL

--12、找出不收取佣金或收取的佣金低于100的雇员
SELECT ENAME FROM EMP
WHERE COMM IS NULL OR COMM<100

--13、找出早于8年之前受雇的雇员
SELECT ENAME FROM EMP
WHERE GETDATE()-HIREDATE>8

--14、显示首字母大写的所有雇员的姓名
--区分大小写:collate:指定排序规则的
--修改表,设置大小写是否敏感, chinese_prc_ci_as 不区分大小写
--区分大小写 chinese_prc_cs_as
alter table emp
alter column ename varchar(20)
collate chinese_prc_cs_as

select ename from emp
where ENAME like '[A]%'

--15、显示正好为5个字符的雇员姓名
SELECT ENAME FROM EMP
WHERE ENAME LIKE '_____'

--16、显示带有'R'的雇员姓名 不区分大小写
SELECT ENAME FROM EMP
WHERE ENAME LIKE '%R%'

--17、显示不带有'R'的雇员姓名
SELECT ENAME FROM EMP
WHERE ENAME NOT LIKE '%R%'

--18、显示包含"A"的所有雇员的姓名及"A"在姓名字段中的位置
-- 提示: 使用函数 charindex()
SELECT ENAME,CHARINDEX('A',ENAME) FROM EMP
WHERE ENAME LIKE '%A%'

--19、显示所有雇员的姓名,用a替换所有'A'
提示:replace()
SELECT ENAME,REPLACE(ENAME,'A','a') FROM EMP

--20、显示所有雇员的姓名的前三个字符
提示:left()
SELECT ENAME,LEFT(ENAME,3)FROM EMP

--21、显示雇员的详细资料,按姓名排序
--ORDER BY 排序
SELECT * FROM EMP
ORDER BY ENAME

--22、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
SELECT ENAME,HIREDATE FROM EMP
ORDER BY HIREDATE ASC

--23、显示所有雇员的姓名、工作和薪金,按工作降序顺序排序,
--而工作相同的按薪金升序排序.
SELECT ENAME,JOB,SAL FROM EMP
ORDER BY JOB DESC,SAL ASC --如果第一个排序条件重复,则继续用第二个排序

--24、显示在一个月为30天的情况下所有雇员的日薪金,忽略小数
SELECT ENAME,SAL/30, CAST(SAL/30 AS INT) FROM EMP
--CAST(xx AS 转换成什么类型)

--25、找出在(任何年份的)2月受聘的所有雇员
提示:month()取月,year()获取年,day()取天,datepart()获取日期时➹的某个部分
SELECT ENAME,HIREDATE FROM EMP
WHERE MONTH(HIREDATE)=2

--26、对于每个雇员,显示其加入公司的天数
提示:datediff(day,hiredate,getdate())
获取两个时间的差值.(单位可选)
SELECT ENAME ,DATEDIFF(DAY,HIREDATE,GETDATE())FROM EMP

--27、列出至少有一个雇员的所有部门
SELECT DEPTNO,COUNT(EMPNO) 人数 FROM EMP
GROUP BY DEPTNO
HAVING COUNT(EMPNO) IS NOT NULL

--28、列出各种类别工作的最低工资
SELECT JOB,MIN(SAL+ISNULL(COMM,0)) 最低工资 FROM EMP
GROUP BY JOB

--29、列出各个部门的MANAGER(经理)的最低薪金

SELECT DEPTNO 部门名称,MIN(SAL) 最低薪金 FROM EMP
WHERE JOB='MANAGER'
GROUP BY DEPTNO

--30、列出薪金高于公司平均水平的所有雇员
SELECT ENAME 雇员名称 FROM EMP
WHERE SAL>(SELECT AVG(SAL)FROM EMP)

--31、列出各种工作类别的最低薪金,并显示最低薪金大于1500
SELECT JOB,MIN(SAL) FROM EMP
GROUP BY JOB
HAVING MIN(SAL)>1500

--32、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇 日所在月排序,将最早年份的项目排在最前面$$$$$$$$$$$$$$$
SELECT ENAME,MONTH(HIREDATE),YEAR(HIREDATE)FROM EMP
ORDER BY MONTH(HIREDATE) ,YEAR(HIREDATE)ASC

--33、显示所有雇员的姓名以及满8年服务年限的日期
SELECT ENAME,HIREDATE FROM EMP
WHERE DATEDIFF(YEAR,HIREDATE,GETDATE())>=8
--DATEDIFF(年/月/日,字段,GETDATE()) 时间差值

--34、显示所有雇员的服务年限:总的年数或总的月数或总的天数
SELECT ENAME AS 姓名,DATEDIFF(YEAR,HIREDATE ,GETDATE())AS 工作年数,
DATEDIFF(MONTH,HIREDATE,GETDATE())AS 工作月数,DATEDIFF(DAY,HIREDATE,GETDATE())AS 工作天数
FROM EMP

--35、列出按计算的字段排序的所有雇员的年薪.即:按照年薪对雇 员进行排序,年薪指雇员每月的总收入总共12个月的累加
SELECT ENAME ,SAL*12 FROM EMP
ORDER BY SAL*12 ASC

--36、列出年薪前5名的雇员
SELECT TOP 5 ENAME, SAL*12 AS 年薪 FROM EMP
ORDER BY SAL*12 DESC

--37、列出年薪低于10000的雇员
SELECT ENAME ,SAL*12 AS 年薪 FROM EMP
WHERE SAL*12<10000

--38、列出雇员的平均月薪和平均年薪
SELECT CAST( AVG(SAL)AS INT)AS 平均月薪,CAST( AVG(SAL*12)AS INT)AS 平均年薪 FROM EMP

--39、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
SELECT DNAME,ENAME FROM EMP RIGHT JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO

--40、列出每个部门的信息以及该部门中雇员的数量
SELECT DEPT.DEPTNO,DNAME,LOC部门所在地,COUNT(EMPNO) 雇员数量 FROM EMP RIGHT JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
GROUP BY DNAME,LOC部门所在地,DEPT.DEPTNO

--41、列出薪金比"SMITH"多的所有雇员
SELECT * FROM EMP
SELECT A.ENAME,A.SAL FROM EMP AS A,EMP AS B
WHERE A.SAL>B.SAL AND B.ENAME='SMITH'--自连接 当同一列的值相互之间进行比较时
ORDER BY A.SAL ASC

--42、列出所有雇员的姓名及其直接上级的姓名(自连接)$$$$$$$$$$$$$$$$$$$$$$$$$
--自连接:就是一个表自己和自己连接,
--注意一定要用表别名,区分它们
--EG1:
SELECT a.EMPNO AS 雇员,a.ENAME,a.mgr,b.EMPNO,b.ENAME AS 上级
FROM EMP a,EMP b
WHERE a.MGR=b.EMPNO

--EG2:
SELECT a.EMPNO AS 雇员,b.ENAME AS 上级
FROM EMP a,EMP b
WHERE a.MGR=b.EMPNO

--EG3:
SELECT a.ENAME 雇员,b.ENAME AS 上级
FROM EMP a left join EMP b
ON a.MGR=b.EMPNO

--43、列出入职日期早于其直接上级的所有雇员$$$$$$$$$$$$$$$$$$$$$$$$$
SELECT A.ENAME FROM EMP AS A,EMP AS B
WHERE A.MGR=B.EMPNO AND A.HIREDATE<B.HIREDATE

--44、列出所有办事员("CLERK")的姓名及其部门名称
SELECT * FROM EMP,DEPT
-- 用内连接查询
--EG1:
SELECT EMP.ENAME,DEPT.DNAME FROM EMP JOIN DEPT
ON EMP.JOB='CLERK' AND EMP.DEPTNO=DEPT.DEPTNO
--EG2:
SELECT ENAME,DNAME FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO AND EMP.JOB='CLERK'

--45、列出从事"SALES"(销售)工作的雇员的姓名,假定不知道 销售部的部门编号
--EG1:
SELECT EMP.ENAME FROM EMP JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO AND DNAME='SALES'
--EG2:
SELECT ENAME FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO AND DEPT.DNAME='SALES'

--46、列出与"SCOTT"从事相同工作的所有雇员
--SELECT DISTINCT EMP.ENAME FROM EMP LEFT JOIN DEPT
--ON EMP.DEPTNO=DEPT.DEPTNO

--SELECT DISTINCT * FROM EMP
SELECT B.ENAME FROM EMP AS A JOIN EMP AS B
ON A.DEPTNO=B.DEPTNO AND A.ENAME='SCOTT'AND B.ENAME!=A.ENAME
JOIN DEPT
ON DEPT.DEPTNO=A.DEPTNO

--47、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30 中任何一个雇员的薪金

--48、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30 中所有雇员的薪金

--49、列出从事同一种工作但属于不同部门的雇员的不同组合
SELECT DISTINCT A.ENAME, B.ENAME FROM EMP AS A,EMP AS B
WHERE A.JOB=B.JOB AND A.DEPTNO!=B.DEPTNO

018.查询练习50题(sql实例)的更多相关文章

  1. sql 经典查询50题 思路(一)

    因为需要提高一下sql的查询能力,当然最快的方式就是做一些实际的题目了.选择了这个sql的50题,这次大概做了前10题左右,把思路放上来,也是一个总结. 具体题目见: https://zhuanlan ...

  2. sql查询50题

    一个项目涉及到的50个Sql语句问题及描述:--1.学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2 ...

  3. Sql server2005 优化查询速度50个方法小结

    Sql server2005 优化查询速度50个方法小结   Sql server2005优化查询速度51法查询速度慢的原因很多,常见如下几种,大家可以参考下.   I/O吞吐量小,形成了瓶颈效应.  ...

  4. 转:sql 经典50题--可能是你见过的最全解析

    题记:从知乎上看到的一篇文章,刚好最近工作中发现遇到的题目与这个几乎一样,可能就是从这里来的吧.^_^ 里面的答案没有细看,SQL求解重在思路,很多时候同一种结果可能有多种写法,比如题中的各科成绩取前 ...

  5. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...

  6. SQL练习题-50道SQL练习题及答案与详细分析

    网上流传较广的50道SQL训练,奋斗了不知道多久终于写完了.前18道题的难度依次递增,从19题开始的后半部分算是循环练习和额外function的附加练习,难度恢复到普通状态.第9题非常难,我反正没有写 ...

  7. 50道sql练习题和答案

    最近两年的工作没有写过多少SQL,感觉水平下降十分严重,网上找了50道练习题学习和复习 原文地址:50道SQL练习题及答案与详细分析 1.0数据表介绍 --1.学生表 Student(SId,Snam ...

  8. 教你管理SQL实例系列(1-15)

    全系列转自:51CTO ->jimshu http://jimshu.blog.51cto.com 目录及原本连接如下: 教你管理SQL实例(1)数据库实例 教你管理SQL实例(2)服务启动帐户 ...

  9. MySQL练习50题

    介绍一个学习SQL的网站:https://sqlbolt.com/ 习题来源于网络,SQL语句是自己的练习答案,部分参考了网络上的答案. 花了一晚上的时间做完,个人认为其中的难点有:分组提取前几名的数 ...

随机推荐

  1. SpringBoot: 17.热部署配置(转)

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...

  2. groupby+agg

    一.在处理pandas表格数据时,有时会遇到这样的问题:按照某一列聚合后,判断另一列是否出现唯一值,比如安泰杯--跨境电商比赛中,某个商人的ID如果出现在两个国家(xx和yy),则要剔除这样的数据,这 ...

  3. wp-query调用前几篇文章的方法

    ---恢复内容开始--- 利用强大的wp-query函数调用指定分类下的前几篇文章,下面的代码表示调用的是分类ID4下的前两篇文章. <?php $cunt_wenzhen = array('c ...

  4. Caché,Cache数据库连接并查询数据

    1.Caché数据库安装好后,在开始菜单中启动 2.打开管理中心,地址为:http://localhost:57772/csp/sys/UtilHome.csp ,输入用户密码,登录 3.要对表数据进 ...

  5. codevs 1163:访问艺术馆

    题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精 ...

  6. java动态更新枚举类

    工作中遇到需要对枚举类的值进行动态更新 手动改不现实也不方便 现记录下来方便以后学习使用 1.在工程utils包中添加动态更新枚举类得工具类(根据自己得项目,放到指定位置调用就可以) 2.一开始陷入了 ...

  7. 【AtCoder】AGC005

    AGC005 A - STring 用一个栈,如果遇到S就弹入,如果遇到T栈里有S就弹出栈顶,否则T在最后的串里,最后计算出的T和栈里剩的S就是答案 #include <bits/stdc++. ...

  8. C++ Primer 5th Chap1.Getting Started

    在CommandPrompt上:(即cmd) 假定文件名为prog1.cc: 编译:$Compiler'sName prog1.cc 打开(prog1.exe):$prog1 打开(在当前目录):$. ...

  9. Kindergarten(网络流解法)

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=2458 问你二分图的最大团是多大. #define IOS ios_base::sync_with_stdi ...

  10. 基于docker的mongodb安装以及PHP使用

    说明:用docker基于单服务器,虚拟多个服务器的方案, 以下是两个config服务器,两个分片,以及每个分片有一个副本的方案 这里关于给mongodb设置远程密码的问题,我采取了用两个compser ...