当前位置: 首页 > news >正文

基础的sql练习,全都理解你就是高手了!

以下sql我都是亲测:大多数用法都会在面试当中被问到,切记一步一个脚印的去实现,结果不重要,重要的是你的实现过程的想法,第一步做什么然后第二步做什么等具体的详细过程!(学东西不能贪多,慢慢来)

先从单表查询开始——>多表查询->复杂查询->嵌套查询等等;

01.查询每个雇员的编号、姓名、职位。

  select e.empno as "雇员编号",e.ename as "雇员姓名",e.job as "雇员职位" from emp e

02.查询每个雇员的职位,职位。

  select e.job as "雇员职位" ,e.* from emp e;

03.查询每个雇员的职位,使用DISTINCT消除掉显示的重复行记录。

  select DISTINCT e.job as "雇员职位",e.* from emp e;

04.计算出每个雇员的基本年薪,同时查询出雇员的编号、姓名。

  select e.empno as "雇员编号",e.ename as "雇员姓名",(e.sal+IFNULL(comm,0)*12) as "基本年薪" from emp e

05.每个雇员每个月公司会补贴饭食200元,交通补助300元,计算年薪(年薪=(工资+奖金)*12)。

  select e.empno as "雇员编号",e.ename as "雇员姓名",(e.sal+IFNULL(comm,0)+200+300)*12 as "基本年薪" from emp e;

06.查询基本工资高于2000的全部雇员信息。

  select e.* from emp e where e.sal>2000;

07.查询出smith的信息。

  select e.* from emp e where e.ename="SMITH";

08.查询出所有不是CLERK的详细信息。

  select e.* from emp e where e.job != "CLERK";

  select e.* from emp e where e.job <> "CLERK";

  select e.* from emp e WHERE e.job not in("CLERK");

09.查询出所有销售人员(SALESMAN)的基本信息,并且要求销售人员的工资高于1300。

  select e.* from emp e where e.job = "SALESMAN" && e.sal>1300;

  select e.* from emp e where e.job in ("SALESMAN") and e.sal>1300;

10.查询出工资范围在1500~3000之间的全部雇员信息(包含1500和3000)。

  select e.* from emp e where e.sal>=1500 and e.sal<= 3000;

  select e.* from emp e where e.sal BETWEEN 1500 and 3000;

11.查询出所有经理或者是销售人员的信息,并且要求这些人的基本工资高于1500

  select e.* from emp e WHERE (e.job='SALESMAN' or e.job='manager') and e.sal>1500;

12.要求查询出所有在1981年雇佣的雇员信息。

  select * from emp e where e.HIREDATE between('1981-1-01') and('1981-12-31');

  select * from emp e where e.hiredate >= '1981-1-01' and e.hiredate <= '1981-12-31';

13.查询所有领取奖金的雇员信息(comm不为空)

  select * from emp e where e.comm is not null;

  select * from emp e where e.comm="";

14.查询所有领取奖金高于100的雇员信息

  select e.* from emp e WHERE e.comm > 100;

15.查询出雇员编号是7369、7566、9999的雇员信息。

  select e.* from emp e where e.empno in (7369,7566,9999);

16.查询出所有雇员姓名是以A开头的全部雇员信息。

  select * from emp e where e.ename like "A%";

17.查询出雇员姓名第二个字母是M的全部雇员信息。

  select * from emp e where SUBSTR(e.ename,2,1)='m';

  select * from emp e where e.ename like "%_m";

18.查询出雇员姓名任意位置上包含字母A的全部雇员信息。

  select * from emp e WHERE e.ename like "%a%";

  select * from emp e where regexp_like(first_name,'[,a]+');(正则表达式)

19.查询出所有雇员的信息,要求按照工资排序。

  select * from emp e order by e.sal asc;(默认是asc,是升序)

  select * from emp e order by e.sal desc;(desc,是降序)

20.要求查询所有雇员的信息,按照雇佣日期由先后排序。

  select * from emp e order by e.HIREDATE asc;

  select * from emp e order by e.HIREDATE

21.查询全部雇员信息,按照工资由高到低排序,如果工资相同,则按照雇佣日期由先后排序。

  select * from emp e order by e.sal desc,e.hiredate asc;

22.查询部门30中的所有员工。

  select * from emp e where e.deptno = 30;

23.查询出所有办事员(CLERK)的姓名,编号和部门编号。

  select * from emp e where e.job = "CLERK";

24.查询出奖金高于薪金的员工。

  select * from emp e where e.comm > e.sal;

25.查询出奖金高于薪金的60%的员工。

  select * from emp e where e.comm > 0.6*e.sal

26.查询出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。

  (select * from emp e where e.job='manager' and e.DEPTNO=10 )union all(SELECT * from emp b where b.job='clerk' and b.DEPTNO=20);

select * from emp e where e.deptno = 10 and e.job = 'Manager' union select * from emp e where e.deptno = 20 and e.job = 'clerk';

27.查询出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但其薪金大于或等于2000的所有员工的信息。

  (select * from emp e where e.job!='manager' and e.DEPTNO=10 and e.SAL>=2000 and e.job != 'clerk' )union (select * from emp b where b.job!='clerk' and b.job!= 'manager'and b.DEPTNO=20 and b.sal>=2000);

28.查询出收取奖金的员工的不同工作。

  select e.job,e.* from emp e where e.comm !="";

  select e.job,e.* from emp e where e.comm is not null;

29.查询出不收取奖金或收取的奖金低于100的员工。

30.查询出不带有“R”的员工的姓名。

  select * from emp e where e.ename not like "%R%";

select * from emp e where not regexp_like(first_name,'[,r]+');

31.查询出每个雇员的姓名、职位、领导姓名。

  select a.ename "雇员的姓名", a.job "雇员的职位", b.ename "雇员领导姓名" FROM emp a,emp b where a.mgr = b.empno;

32.查询出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列。 

  select a.empno as "员工编号",a.ename as "员工姓名" , b.empno"上司编号",b.ename as "上司姓名", (B.SAL+IFNULL(B.COMM,0))12 "领导年工资"
from emp a,emp b
where a.mgr= b.empno
orderby by (b.sal+IFNULL(b.comm,0))
12 desc;

33.查询出在销售部(SALES)工作的员工姓名、基本工资、雇佣日期、部门名称。(不知道销售部编号)。

  select e.ename as "员工姓名",e.empno as "员工编号",e.sal as "员工薪资",e.hiredate as "雇佣日期",d.dname as "部门名称" from emp e,dept d where e.job="salesman" and e.deptno = d.deptno;

34.查询出所有员工的姓名、部门名称和工资。

  select emp.ename as "雇员姓名",dept.dname as "雇员职位",emp.sal as "雇员薪资" from emp,dept WHERE emp.deptno = dept.deptno;

35.查询出所有员工的年工资,所在部门名称,按年薪从低到高排序。

  select (e.sal+IFNULL(e.comm,0))12 as allYearSales,d.dname as "部门名称",e. from emp e,dept d where e.deptno = d.deptno order by allYearSales desc;

36.查询出某个员工的上级主管及所在部门名称,并要求出这些主管中的薪水超过3000。

  select distinct
e2.ename,d.dname
from emp e1,emp e2,dept d
where e1.mgr = e2.empno && e2.deptno = d.deptno && e2.sal > 300;

37.查询出公司的最高和最低工资。

  select MAX(e.sal) as "最高工资",MIN(e.sal) as "最低工资" from emp e;

38.查询出每个部门的人数、平均工资,只显示部门编号。

  select deptno as "部门编号",count(e.deptno) as "部门员工数量",avg(e.sal) as "平均薪资" from emp e group by e.deptno;

39.查询出每种职位的最高和最低工资。

  SELECT job as "职位", MAX(sal) as "最高薪资",MIN(sal) as "最低薪资" FROM emp group by job;

40.查询平均工资高于2000的职位信息,以及从事此职位的雇员人数、平均工资。  

  select job as "职业",count(job) as "从事的职业数量",AVG(sal) as "平均薪资" from emp group by job having AVG(sal)>2000;

41查询出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。  

  select
e.deptno as "部门编号", d.dname as "部门名称", AVG(sal) as "部门平均薪资",MIN(sal) as "最低薪资",MAX(sal) as "最高薪资"
from
emp e,dept d
where
e.deptno = d.deptno
group by
d.dname;

42.查询出部门名称和这些部门的员工信息(数量、平均工资),同时列出那些没有员工的部门。 

  select p.deptno as "部门编号",p.dname as "部门名称",p.loc as "部门地址",count(job)as "部门人数",IFNULL(AVG(e.sal),0) as "部门平均工资" from emp e
right join dept p
on e.deptno = p.deptno
group by p.dname;   (右连接)

http://www.zskr.cn/news/26826.html

相关文章:

  • 102500416 王浩宇
  • 中级问题
  • 20251021周二日记
  • 好想好想你
  • 【C语言学习记录】你好世界
  • 解答这些常见的智能合约安全问题,并提供相应的防护措施
  • 读AI赋能05消费者盈余
  • 梦回大唐王一牛
  • 一文读懂字体文件
  • C++编程练习
  • L07_在RuoYI项目中添加自己的接口并实现CRUD功能(轻松+AI版)
  • hevc解码器下载
  • [网络] [iproute2] tc命令:Linux网络异常模拟(Network Emulation, netem)指南
  • NOI 八
  • 10.18测试
  • [PaperReading] DeepSeek-OCR: Contexts Optical Compression
  • Win10安装WindowsCamera相机
  • 简易的本地部署OI-Wiki方法 for CCSP
  • [systemd] 如何为systemd服务进行资源限制
  • 宝塔面板
  • 机器学习基础 -- 线性回归模型
  • 软件工程作业三
  • 一键生成爆款文章,并自动发布!
  • 1188. 设计有限阻塞队列
  • MySQL分页解决方案
  • Failed to resolve: org.webrtc:google-webrtc:1.0.32006
  • 日总结 15
  • NVIDIA Triton服务器漏洞危机:攻击者可远程执行代码,AI模型最高权限告急
  • lgP14254 分割(divide)
  • 2025.10.21