MYSQL例题和答案

    技术2026-02-19  11

    CREATE TABLE employee( id INT, NAME VARCHAR(20), sex VARCHAR(10), salary FLOAT );INSERT INTO employee VALUES(1,"zhangsan","male",2000);INSERT INTO employee VALUES(2,"lisi","male",1000);INSERT INTO employee VALUES(3,"xiaohong","female",4000);-- 将所有员工薪水修改为5000元。UPDATE employee SET salary = 5000;-- 将姓名为’zhangsan’的员工薪水修改为3000元。UPDATE employee SET salary = 3000 WHERE NAME='zhangsan';-- 将姓名为’lisi’的员工薪水修改为4000元,sex改为female。UPDATE employee SET salary = 4000,sex = 'female' WHERE NAME='lisi';-- 将xiaohong的薪水在原有基础上增加1000元。UPDATE employee SET salary = salary + 1000 WHERE NAME='xiaohong';-- select练习CREATE TABLE student( id INT, NAME VARCHAR(20), chinese INT, english INT, math INT);INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'张小明',89,78,90);INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'李进',67,53,95);INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'王五',87,78,77);INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'李一',88,98,92);INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'李来财',82,84,67);INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'张进宝',55,85,45);INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);-- 查询表中所有学生的信息。SELECT * FROM student;-- 查询表中所有学生的姓名和对应的英语成绩。SELECT NAME '名字', english '英语成绩' FROM student;-- 过滤表中重复数据。SELECT DISTINCT * FROM student;-- 统计每个学生的总分。SELECT NAME '名字', (chinese + english + math) '总成绩' FROM student;-- 在所有学生总分数上加10分特长分。SELECT NAME '名字', (chinese + english + math + 10) '总成绩' FROM student;-- 使用别名表示学生分数。-- 查询英语成绩大于90分的同学SELECT * FROM student WHERE english > 90;-- 查询总分大于200分的所有同学SELECT * FROM student WHERE (chinese + english + math) > 200;-- 查询英语分数在 80-90之间的同学。SELECT * FROM student WHERE english BETWEEN 80 AND 90;-- 查询英语分数不在 80-90之间的同学。SELECT * FROM student WHERE NOT(english BETWEEN 80 AND 90);-- 查询数学分数为89,90,91的同学。SELECT * FROM student WHERE math IN(90,89,91)-- 查询所有姓李的学生英语成绩。SELECT NAME,english FROM student WHERE NAME LIKE '李%';-- 查询数学分80并且语文分80的同学。SELECT * FROM student WHERE chinese = 80 AND math = 80;-- 查询英语80或者总分200的同学SELECT * FROM student WHERE english = 98 or (chinese + english + math)=200; CREATE TABLE student( id INT, NAME VARCHAR(20), chinese INT, english INT, math INT ); INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'张小明',89,78,90); INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'李进',67,53,95); INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'王五',87,78,77); INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'李一',88,98,92); INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'李来财',82,84,67); INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'张进宝',55,85,45); INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30); #对数学成绩排序后输出。 #对总分排序后输出,然后再按从高到低的顺序输出 #对姓李的学生成绩排序输出 select math from student ORDER BY math ASC; SELECT (math + english + chinese) as 总分 from student ORDER BY 总分 DESC; SELECT name 名字,(math + english + chinese) as 总分 from student where name like '李%' ORDER BY 总分 DESC ; -- ---------------------------------------------------------- CREATE TABLE emp( empno INT, ename VARCHAR(50), job VARCHAR(50), mgr INT, -- 上级领导编号 hiredate DATE,-- 入职日期 sal INT, comm INT, -- 奖金 deptno INT -- 部门编号 ) ; 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-04-19',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-05-23',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); #------------------------------------------------------------ -- 1、按员工编号升序排列不在10号部门工作的员工信息 select * from emp where deptno !=10 order by empno ASC; -- 2、查询姓名第二个字母不是”A”且薪水大于800元的员工信息,按年薪降序排列 SELECT * from emp where ename NOT like '_A%' AND sal >800 ORDER BY (sal * 12 + comm) DESC; -- 3、求每个部门的平均薪水 SELECT deptno 部门,avg(sal) 平均薪水 from emp GROUP BY deptno ; -- 4、求各个部门的最高薪水 SELECT deptno 部门,MAX(sal) 最高薪水 from emp GROUP BY deptno; -- 5、求每个部门每个岗位的最高薪水 SELECT deptno 部门,job 岗位,MAX(sal) 最高薪水 from emp GROUP BY deptno,job; -- 6、求平均薪水大于2000的部门编号 SELECT deptno,avg(sal) from emp GROUP BY deptno HAVING avg(sal) > 2000; -- 7、将部门平均薪水大于1500的部门编号列出来,按部门平均薪水降序 SELECT deptno,avg(sal) from emp GROUP BY deptno HAVING avg(sal) > 1500 ORDER BY avg(sal) DESC; -- 部门表 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) ); 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; -- 练习(7-12题:自己练习): -- 1、查询部门和所属的员工 SELECT * FROM dept d,emp e WHERE d.deptno = e.deptno; -- 2、工资水平多于smith的员工信息。 SELECT * FROM emp WHERE sal >(SELECT sal FROM emp WHERE ename = 'SMITH'); -- 3、返回员工和所属上级的姓名。 SELECT e.ename,m.ename FROM emp e, emp m WHERE e.mgr = m.empno; -- 4、返回雇员的雇佣日期早于其领导雇佣日期的员工及其领导姓名。 SELECT e.ename,m.ename FROM emp e, emp m WHERE e.mgr = m.empno AND e.HIREDATE < m.HIREDATE; -- 5、返回从事clerk工作的员工姓名和所在部门名称。 SELECT ename,dname FROM dept d,emp e WHERE d.deptno = e.deptno AND job='clerk'; -- 6、返回部门号,部门名称及其本部门的最低工资 SELECT e.deptno,d.dname,MIN(sal) FROM emp e, dept d WHERE d.deptno = e.deptno GROUP BY e.deptno; -- 7、返回销售部(sales)所有员工的姓名。 SELECT e.ename from emp e, dept d where d.DNAME = "sales" and d.deptno = e.deptno; -- 8、返回与SCOTT从事相同工作的员工。 SELECT * from emp where job = (SELECT job from emp where ename = 'SCOTT'); -- 9、返回与30部门员工工资水平相同(在最低和最高之间)的员工姓名与工资。 SELECT ename, sal FROM emp HAVING sal BETWEEN (SELECT MIN(sal) FROM emp WHERE DEPTNO = 30)AND (SELECT MAX(sal) FROM emp WHERE DEPTNO = 30); -- 10、返回工资高于30部门所有员工工资水平的员工信息。 SELECT * FROM emp WHERE sal > (SELECT MAX(sal) FROM emp where deptno = 30); -- 11、返回部门号、部门名、部门所在位置及其每个部门的员工总数。 SELECT e.DEPTNO,d.DNAME,d.LOC, COUNT(e.DEPTNO)FROM emp e ,DEPT d WHERE e.deptno = d.deptno GROUP BY e.DEPTNO; -- 12、返回员工工作及其从事此工作的最低工资。 SELECT job,MIN(sal) FROM emp GROUP BY job;

     

    Processed: 0.022, SQL: 9