MySQL练习题

MySQL练习题
让emp表中所员工的工资 + 200, 同时显示之前的工资和加薪之后的工资
SELECT
sal,
(sal + 200)
FROM
emp;
员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入,要求显示列标题为员工姓名,工资收入,奖金收入,总收入
SELECT
ename AS 员工姓名,
sal AS 工资收入,
ifnull(comm, 0) AS 奖金收入,
(
sal * 6 + sal * 1.2 * 6 + ifnull(comm, 0)
) AS 总收入
FROM
emp;
查询员工表中一共有哪几种岗位类型
SELECT DISTINCT
job
FROM
emp;
查询职位为SALESMAN的员工编号、职位、入职日期。
SELECT
empno,
job,
hiredate
FROM
emp
WHERE
job = 'SALESMAN';
查询1985年12月31日之前入职的员工姓名及入职日期。
SELECT
empno,
hiredate
FROM
emp
WHERE
hiredate < '1985-12-31';
查询部门编号不在10部门的员工姓名、部门编号
SELECT
empno,
deptno
FROM
emp
WHERE
deptno <> 10;
查询入职日期在82年至85年的员工姓名,入职日期
SELECT
ename,
hiredate
FROM
emp
WHERE
hiredate BETWEEN '1982-01-01'
AND '1985-01-01';
查询月薪在3000到5000的员工姓名,月薪。
SELECT
ename,
sal
FROM
emp
WHERE
sal BETWEEN 3000
AND 5000;
查询经理编号为7902, 7566, 7788的员工姓名,经理编号
SELECT
ename,
mgr
FROM
emp
WHERE
mgr IN (7902, 7566, 7788);
查询员工姓名以W开头的员工姓名。
SELECT
ename
FROM
emp
WHERE
ename LIKE 'W%';
查询员工姓名倒数第2个字符为T的员工姓名。
SELECT
ename
FROM
emp
WHERE
ename LIKE "%T_";
查询奖金为空的员工姓名,奖金
SELECT
ename,
comm
FROM
emp
WHERE
comm IS NULL;
查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
SELECT
ename,
job,
sal
FROM
emp
WHERE
sal > 2000
AND job IN ('MANAGER', 'SALESMAN');
查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
deptno IN (10, 20)
AND sal BETWEEN 3000
AND 5000;
查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
hiredate BETWEEN '1981-01-01'
AND '1982-01-01'
AND job NOT LIKE 'SALES%';
查询职位为SALESMAN或MANAGER,部门编号为10或者20,
姓名包含A的员工姓名、职位、部门编号。
SELECT
ename,
job,
deptno
FROM
emp
WHERE
job IN ('SALESMAN', 'MANAGER')
AND deptno IN (10, 20)
AND ename LIKE 'A';
查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
deptno IN (20, 30)
ORDER BY
sal;
查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
sal BETWEEN 2000
AND 3000
AND deptno NOT IN (10)
ORDER BY
deptno ASC,
sal DESC;
查询入职日期在81年至82年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
(
hiredate BETWEEN '1981-01-01'
AND '1983-01-01'
)
AND (
job LIKE 'SALES%'
OR job LIKE 'MAN%'
)
ORDER BY
hiredate DESC;
查询入职日期最早的前5名员工姓名,入职日期。
SELECT
ename,
hiredate
FROM
emp
ORDER BY
hiredate
LIMIT 5;
查询20号部门下入职日期最早的前2名员工姓名,入职日期。
SELECT
ename,
hiredate
FROM
emp
WHERE
deptno = 20
ORDER BY
hiredate
LIMIT 2;
按照每页显示5条记录,分别查询第1页,第2页,第3页信息,
要求显示员工姓名、入职日期、部门编号。
SELECT
ename,
hiredate,
deptno
FROM
emp
LIMIT 0,
5;

SELECT
ename,
hiredate,
deptno
FROM
emp
LIMIT 5,
5;

SELECT
ename,
hiredate,
deptno
FROM
emp
LIMIT 10,
5;
查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
hiredate > '1982-07-09'
AND job <> 'SALESMAN';
查询员工姓名的第三个字母是a的员工姓名。
SELECT
ename
FROM
emp
WHERE
ename LIKE '__a%';
查询除了10、20号部门以外的员工姓名、部门编号。
SELECT
ename,
deptno
FROM
emp
WHERE
deptno NOT IN (10, 20);
查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序。
SELECT
*
FROM
emp
WHERE
deptno = 30
ORDER BY
sal DESC,
ename;
查询工资大于等于4500并且部门为10或者20的员工的姓名\工资、部门编号。
SELECT
ename,
sal,
deptno
FROM
emp
WHERE
sal >= 4500
AND deptno IN (10, 20);
写一个查询,显示所有员工姓名,部门编号,部门名称。
SELECT
e.ename,
e.empno,
e.job
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno;
写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
SELECT
e.ename,
d.loc,
e.comm
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
AND d.loc = 'CHICAGO'
AND comm IS NOT NULL;
写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
SELECT
e.ename,
d.loc
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
AND e.ename LIKE '%A%';
查询每个员工的姓名和直接上级姓名
SELECT
w.ename 员工姓名,
m.ename 领导姓名
FROM
emp w,
emp m
WHERE
w.mgr = m.empno;

查询所有雇员姓名,部门编号,部门名称,包括没有部门的员工也要显示出来(左外连接)
SELECT
e.ename,
e.deptno,
d.dname
FROM
emp e
LEFT OUTER JOIN dept d ON (e.deptno = d.deptno);

查询所有雇员姓名,部门编号,部门名称,包括没有员工的部门也要显示出来 (右外连接)
SELECT
e.ename,
e.deptno,
d.dname
FROM
emp e
RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);

创建一个员工表和部门表的交叉连接。
SELECT
e.ename,
e.deptno,
d.deptno
FROM
emp e
CROSS JOIN dept d;
使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期
SELECT
e.ename,
d.dname,
e.hiredate
FROM
emp e
NATURAL JOIN dept d
WHERE
hiredate > '1980-05-01';
使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
SELECT
w.ename,
m.ename
FROM
emp w
LEFT JOIN emp m ON w.mgr = m.empno;
使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
SELECT
w.ename,
m.ename
FROM
emp m
RIGHT JOIN emp w ON w.mgr = m.empno;
显示员工SMITH的姓名,部门名称,直接上级名称
SELECT
w.ename 员工姓名,
m.ename 领导姓名,
d.dname 部门名称
FROM
emp w,
emp m,
dept d
WHERE
w.mgr = m.empno
AND w.deptno = d.deptno
AND w.ename = 'SMITH';
显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
SELECT
e.ename,
d.dname,
e.sal,
s.grade
FROM
emp e,
dept d,
salgrade s
WHERE
e.deptno = d.deptno
AND e.sal BETWEEN s.losal
AND s.hisal
AND s.grade > 4;
显示员工KING和FORD管理的员工姓名及其经理姓名。
SELECT
e.ename AS '管理的员工姓名',
m.ename AS '员工姓名',
p.ename AS '经理姓名'
FROM
emp e,
emp m
LEFT OUTER JOIN emp p ON (m.mgr = p.empno)
WHERE
m.ename IN ('KING', 'FORD')
AND e.mgr = m.empno;
显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。
SELECT
w.ename 员工姓名,
m.ename 经理姓名,
w.hiredate 员工入职时间,
m.hiredate 经理入职时间
FROM
emp w,
emp m
WHERE
w.mgr = m.empno
AND w.hiredate > m.hiredate;
查询部门30有多少个员工领取奖金
SELECT
COUNT(comm)
FROM
emp
WHERE
deptno = 30;
查询入职日期最早和最晚的日期
SELECT
MIN(hirdate),
MAX(HIREDATE)
FROM
emp
查询职位以SALES开头的所有员工平均工资、最低工资、最高工资、工资和。
SELECT
AVG(SAL) 平均工资,
MIN(SAL) 最低工资,
MAX(SAL) 最高工资,
SUM(SAL) 工资和
FROM
emp
WHERE
JOB LIKE 'SALES%'
IFNULL 函数可以使分组函数强制包含含有空值的记录
SELECT
COUNT(IFNULL(COMM,0))
FROM
emp;
所有员工的平均奖金
SELECT
AVG(IFNULL(COMM,0))
FROM
emp;
有奖金的平均奖金
SELECT
AVG(COMM)
FROM
emp;
查询部门20的员工,每个月的工资总和及平均工资。
SELECT
AVG(sal) 平均工资,
SUM(sal) 工资和
FROM
emp
WHERE
deptno = 20;
查询工作在CHICAGO的员工人数,最高工资及最低工资。
SELECT
COUNT(m.empno) 员工人数,
MAX(sal) 最高工资,
MIN(sal) 最低工资
FROM
emp m,
dept d
WHERE
m.deptno = d.DEPTNO
AND d.loc = 'CHICAGO';
查询员工表中一共有几种岗位类型
SELECT
COUNT(DISTINCT JOB)
FROM
emp;
group by 语句
查询每个部门的部门编号, 平均工资
SELECT
deptno,
avg(sal)
FROM
emp
GROUP BY
deptno;
查询每个部门的部门编号, 每个部门的最低工资
SELECT
deptno,
min(sal)
FROM
emp
GROUP BY
deptno;
查询每个部门的部门编号, 每个部门的最高工资
SELECT
deptno,
max(sal)
FROM
emp
GROUP BY
deptno;
查询每个部门每个岗位的工资总和
SELECT
deptno,
job,
sum(sal)
FROM
emp
GROUP BY
deptno,
job;
查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
SELECT
d.DEPTNO 部门编号,
d.DNAME 部门名称,
COUNT() 部门人数,
MAX(e.SAL) 最高工资,
MIN(e.SAL) 最低工资,
SUM(e.SAL) 工资总和,
AVG(e.SAL) 平均工资
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO, d.DNAME;
查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
SELECT
d.DEPTNO 部门编号,
d.DNAME 部门名称,
e.JOB 岗位名称,
COUNT(
) 部门人数,
MAX(e.SAL) 最高工资,
MIN(e.SAL) 最低工资,
SUM(e.SAL) 工资总和,
AVG(e.SAL) 平均工资
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
d.DEPTNO,d.DNAME, e.JOB;
查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
SELECT
COUNT() 管理人数,
m.EMPNO 经理编号,
m.ENAME 经理姓名
FROM
emp w
LEFT OUTER JOIN emp m ON w.MGR = m.EMPNO
GROUP BY
m.EMPNO,
m.ENAME
查询每个部门最高薪水大于2900的部门编号,最高工资
SELECT
e.DEPTNO,
MAX(e.sal)
FROM
emp e
GROUP BY
e.DEPTNO
HAVING
MAX(e.SAL) > 2900
查询每个工种, 工资总和, 并且工作不是以 SALE开头的且每个工种的工资和大于5000时输出,并按照结果的工资总数进行升序排序
SELECT
job 工种,
SUM(sal) 工资总和
FROM
emp
WHERE
job NOT LIKE 'SALES%'
GROUP BY
job
HAVING
SUM(sal) > 5000
ORDER BY
SUM(sal);
查询部门人数大于2的部门编号,部门名称,部门人数。
SELECT
e.DEPTNO 部门编号,
d.DNAME 部门名称,
COUNT(
) 部门人数
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO
HAVING
COUNT() > 2
查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。
SELECT
e.DEPTNO 部门编号,
d.DNAME 部门名称,
COUNT(
) 部门人数,
AVG(e.SAL) 部门平均工资
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO
HAVING
(COUNT(*) > 2)
AND (AVG(e.SAL) > 2000)
ORDER BY
3
查询工资比Jones工资高的员工信息
SELECT
*
FROM
emp e
WHERE
e.SAL > ( SELECT e.SAL from emp e WHERE e.ENAME = 'JONES');
查询工资最低的员工姓名
SELECT
e.ENAME
FROM
emp e
WHERE
e.SAL = (SELECT MIN(e.sal) from emp e);
显示和工号7369从事相同工作并且工资大于7876的员工姓名和工作
SELECT e.ENAME, e.JOB
from emp e
WHERE
e.JOB = (SELECT JOB FROM emp WHERE EMPNO = 7369) and
e.sal > (SELECT SAL FROM emp WHERE EMPNO = 7876);
查询部门最低工资比20部门最低工资高的部门编号及最低工资
SELECT e.DEPTNO 部门编号 ,MIN(e.SAL)
from emp e
GROUP BY e.DEPTNO
HAVING
MIN(e.SAL) > (SELECT MIN(sal) from emp WHERE DEPTNO = 20)
查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工
SELECT
e.ename AS '员工姓名',
e.hiredate AS '入职日期'
FROM
emp e
WHERE
e.deptno <> 10
AND e.hiredate > ANY (
SELECT
hiredate
FROM
emp
WHERE
deptno = 10
);
查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工
SELECT
e.ename AS '员工姓名',
e.hiredate AS '入职日期'
FROM
emp e
WHERE
e.empno <> 10
AND e.hiredate > ALL (
SELECT
hiredate
FROM
emp
WHERE
deptno = 10
);
查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工
SELECT
e.ename AS '员工姓名',
e.job AS '职位'
FROM
emp e
WHERE
e.deptno <> 10
AND e.job = ANY (
SELECT
job
FROM
emp
WHERE
deptno = 10
);
查询部门平均工资在2500元以上的部门名称及平均工资。
SELECT
d.dname AS '部门名称',
avg(e.sal) AS '平均工资'
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
GROUP BY
e.deptno
HAVING
avg(e.sal) > 2500;
查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。
SELECT
e.job AS '岗位',
avg(e.sal) AS '平均工资'
FROM
emp e
WHERE
e.job NOT LIKE 'SA%'
GROUP BY
e.job
HAVING
avg(e.sal) > 2500
ORDER BY
2 DESC;
查询部门人数在2人以上的部门名称、最低工资、最高工资。
SELECT
d.dname AS '部门名称',
min(e.sal) AS '最低工资',
max(e.sal) AS '最高工资'
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
GROUP BY
d.deptno
HAVING
count(e.empno) > 2;
查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。
SELECT
e.job AS '岗位',
sum(e.sal) AS '工资和'
FROM
emp e
WHERE
e.job <> 'SALESMAN'
GROUP BY
e.job
HAVING
sum(e.sal) > 2500;
显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序
SELECT
m.empno AS '经理编号',
m.ename AS '经理姓名',
min(w.sal) AS '管理员工的最低工资'
FROM
emp w
LEFT OUTER JOIN emp m ON (w.mgr = m.empno)
GROUP BY
m.empno
HAVING
min(w.sal) > 3000
ORDER BY
3 DESC;
查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。
SELECT
e.empno AS '员工编号',
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
WHERE
e.sal > (
SELECT
sal
FROM
emp
WHERE
empno = 7782
)
AND e.job = (
SELECT
job
FROM
emp
WHERE
empno = 7369
);
查询工资最高的员工姓名和工资。
SELECT
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
ORDER BY
e.sal DESC
LIMIT 1;
SELECT
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
WHERE
e.sal = (SELECT max(sal) FROM emp);
查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
SELECT
d.deptno AS '部门编号',
d.dname AS '部门名称',
min(e.sal) AS '部门最低工资'
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
GROUP BY
d.deptno
HAVING
min(e.sal) > (
SELECT
min(sal)
FROM
emp
WHERE
deptno = 10
);
查询员工工资为其部门最低工资的员工的编号和姓名及工资。
SELECT
e.empno AS '员工编号',
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
WHERE
e.sal IN (
SELECT
min(e.sal)
FROM
emp e
GROUP BY
e.deptno
);
显示经理是KING的员工姓名,工资。
SELECT
w.ename AS '员工姓名',
w.sal AS '员工工资'
FROM
emp w,
emp m
WHERE
w.mgr = m.empno
AND m.ename = 'KING';
SELECT
w.ename AS '员工姓名',
w.sal AS '员工工资'
FROM
emp w
WHERE
w.mgr = (
SELECT
empno
FROM
emp
WHERE
ename = 'KING'
);
显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

SELECT
w.ename AS '员工姓名',
w.sal AS '员工工资',
w.hiredate AS '参加工作时间'
FROM
emp w
WHERE
w.hiredate > (
SELECT
hiredate
FROM
emp
WHERE
ename = 'SIMTH'
);

作者:le_u
链接:https://www.jianshu.com/p/5b2da120a673
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352