资讯详情

mysql DQL

📅 2026/11/12 2:18:07 | 华诺云谱 👁 阅读
mysql DQL
--1取得每个部门中的最高薪水的人员名称。第一步取得每个部门的最高薪水。第二步把上面获得的结果作为临时表t然后与emp表进行内连接中的等值连接连接条件为emp表的deptno,sal和t中的deptno,maxsal相等。SELECT d.deptno,d.dname,max(e.sal)from dept d INNER JOIN emp e on d.deptnoe.deptno GROUP BY d.deptnoSELECT s.dname,e1.enameFROM emp e1 INNER JOIN(SELECT d.deptno,d.dname,max(e.sal) maxsalfrom dept d INNER JOIN emp e on d.deptnoe.deptno GROUP BY d.deptno ) s on e1.deptnos.deptno and e1.sals.maxsal--2哪些人的薪水在部门的平均薪水之上。select d.deptno ,d.dname,avg(e.sal) avgsalfrom dept d INNER JOIN emp e on d.deptnoe.deptno GROUP BY d.deptnoselect e1.enamefrom emp e1 INNER JOIN (select d.deptno ,d.dname,avg(e.sal) avgsalfrom dept d INNER JOIN emp e on d.deptnoe.deptno GROUP BY d.deptno) s on e1.deptnos.deptnoand e1.sals.avgsal--3--3.1取得部门所有人的平均薪水的等级。select avg(e.sal) avgsalfrom dept d INNER JOIN emp e on d.deptnoe.deptnoselect sal.gradefrom salgrade sal INNER JOIN (select avg(e.sal) avgsalfrom dept d INNER JOIN emp e on d.deptnoe.deptno ) s on s.avgsal BETWEENsal.losal and sal.hisal--3.2取得每个部门中所有人的薪水等级的平均等级。select d.dname,avg( s.grade) avgfrom dept d INNER JOIN emp e on d.deptnoe.deptno INNER JOIN salgrade s on e.sal BETWEENs.losal and s.hisal GROUP BY d.deptnoselect avg(s.grade)from salgrade s INNER JOIN (select s.gradefrom dept d INNER JOIN emp e on d.deptnoe.deptno INNER JOIN salgrade s on e.sal BETWEENs.losal and s.hisal ) s1 on s.grades1.gradeselect s.dname, sal.gradefrom salgrade sal INNER JOIN (select avg(e.sal) avgsal ,d.dname dnamefrom dept d INNER JOIN emp e on d.deptnoe.deptno GROUP BY d.deptno ) s on s.avgsal BETWEENsal.losal and sal.hisal--4不准用分组函数Max取得最高薪水。select e.sal 最高薪水FROM emp e where e.salall(select sal from emp where sal!e.sal )SELECT salFROM emp ORDER BY sal desc LIMIT 1--5、取得平均薪水最高的部门的部门编号select d.dname,avg(e.sal) avgfrom emp e INNER JOIN dept d on e.deptnod.deptno GROUP BY d.deptnoselect deptnofrom (select deptno, avg(sal) as avg_sal from emp GROUP by deptno) sorder by avg_sal desclimit 1;--6、取得平均薪水最高的部门的部门名称。select s.dnamefrom (select e.deptno deptno, d.dname dname,avg(e.sal) avgfrom emp e left JOIN dept d on e.deptnod.deptno GROUP BY e.deptno) s ORDER BY avg desc LIMIT 1--7、求平均薪水的等级最低的部门的部门名称。select d.dname,avg( s.grade) avgfrom dept d INNER JOIN emp e on d.deptnoe.deptno INNER JOIN salgrade s on e.sal BETWEENs.losal and s.hisal GROUP BY d.deptnoselect s.dnamefrom ( select d.dname,avg( s.grade) avgfrom dept d INNER JOIN emp e on d.deptnoe.deptno INNER JOIN salgrade s on e.sal BETWEENs.losal and s.hisal GROUP BY d.deptno) s ORDER BY avg LIMIT 1附表CREATE TABLE student (id INT(10) PRIMARY KEY auto_increment , --学生ID 自增name VARCHAR(20) NOT NULL , -- 学生姓名sex VARCHAR(4) , -- 学生性别birth YEAR, -- 学生出生年份department VARCHAR(20) , --所在院系address VARCHAR(50) -- 家庭住址);CREATE TABLE score (id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT , --自增IDstu_id INT(10) NOT NULL , --学生ID 外键创建可有可无c_name VARCHAR(20) , -- 学科名称grade INT(10) -- 分数);INSERT INTO student VALUES( 901,张老大, 男,1985,计算机系, 北京市海淀区);INSERT INTO student VALUES( 902,张老二, 男,1986,中文系, 北京市昌平区);INSERT INTO student VALUES( 903,张三, 女,1990,中文系, 湖南省永州市);INSERT INTO student VALUES( 904,李四, 男,1990,英语系, 辽宁省阜新市);INSERT INTO student VALUES( 905,王五, 女,1991,英语系, 福建省厦门市);INSERT INTO student VALUES( 906,王六, 男,1988,计算机系, 湖南省衡阳市);INSERT INTO score VALUES(NULL,901, 计算机,98);INSERT INTO score VALUES(NULL,901, 英语, 80);INSERT INTO score VALUES(NULL,902, 计算机,65);INSERT INTO score VALUES(NULL,902, 中文,88);INSERT INTO score VALUES(NULL,903, 中文,95);INSERT INTO score VALUES(NULL,904, 计算机,70);INSERT INTO score VALUES(NULL,904, 英语,92);INSERT INTO score VALUES(NULL,905, 英语,94);INSERT INTO score VALUES(NULL,906, 计算机,90);INSERT INTO score VALUES(NULL,906, 英语,85);CREATE TABLE emp (empno int(11) NOT NULL AUTO_INCREMENT,ename varchar(50) DEFAULT NULL,job varchar(50) DEFAULT NULL,mgr int(11) DEFAULT NULL,hiredate date DEFAULT NULL,sal decimal(7,2) DEFAULT NULL,comm decimal(7,2) DEFAULT NULL,deptno int(11) DEFAULT NULL,PRIMARY KEY (empno))INSERT INTO emp VALUES (1001, 张贝贝, 文员, 1013, 2000-12-17, 8000.00, null, 20);INSERT INTO emp VALUES (1002, 黛依思, 销售员, 1006, 2001-02-20, 16000.00, 3000.00, 30);INSERT INTO emp VALUES (1003, 李莫愁, 销售员, 1006, 2001-02-22, 12500.00, 5000.00, 30);INSERT INTO emp VALUES (1004, 刘备, 经理, 1009, 2001-01-02, 29750.00, null, 20);INSERT INTO emp VALUES (1005, 谢逊, 销售员, 1006, 2001-09-28, 12500.00, 14000.00, 30);INSERT INTO emp VALUES (1006, 关羽, 经理, 1009, 2001-05-01, 27000.00, null, 30);INSERT INTO emp VALUES (1007, 张飞, 经理, 1009, 2003-04-01, 25000.00, null, 10);INSERT INTO emp VALUES (1008, 诸葛亮, 分析师, 1004, 2007-04-09, 30000.00, null, 20);INSERT INTO emp VALUES (1009, 黄盖, 文员, 1007, 2005-01-01, 9500.00, 1000.00, 10);INSERT INTO emp VALUES (1010, 张三, 董事长, null, 1998-01-01, 50000.00, null, 10);INSERT INTO emp VALUES (1011, 李四, 保洁, 1001, 2023-10-01, 80000.00, 10000.00, 50);CREATE TABLE dept(deptno INT PRIMARY KEY,dname varchar(14),loc varchar(13));INSERT INTO dept VALUES (10, 教研部, 北京);INSERT INTO dept VALUES (20, 学工部, 郑州);INSERT INTO dept VALUES (30, 销售部, 广州);INSERT INTO dept VALUES (40, 财务部, 深圳);CREATE TABLE salgrade (grade int(11) NOT NULL DEFAULT 0,losal decimal(7,2) DEFAULT NULL,hisal decimal(7,2) DEFAULT NULL)INSERT INTO salgrade VALUES (1, 7000.00, 12000.00);INSERT INTO salgrade VALUES (2, 12010.00, 14000.00);INSERT INTO salgrade VALUES (3, 14010.00, 20000.00);INSERT INTO salgrade VALUES (4, 20010.00, 30000.00);INSERT INTO salgrade VALUES (5, 30010.00, 99999.00);
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑