Preguntas de práctica de consultas complejas de la base de datos MYSQL (dificultad moderada)

Los que pueden insistir en hacerlo todo son maestros.

Ve al grano

Crear una base de datos, crear una tabla, insertar datos

El código se puede copiar directamente en orden

-- 建库
CREATE DATABASE `emp`;
-- 打开库
USE emp;
-- 建dept表
CREATE TABLE `dept`( `deptno` INT(2) NOT NULL, `dname` VARCHAR(14), `loc` VARCHAR(13), CONSTRAINT pk_dept PRIMARY KEY(deptno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 键emp表
CREATE TABLE `emp` ( `empno` int(4) NOT NULL PRIMARY KEY, `ename` VARCHAR(10), `job` VARCHAR(9), `mgr` int(4), `hiredate` DATE, `sal` float(7,2), `comm` float(7,2), `deptno` int(2), CONSTRAINT fk_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 建salgrade表
CREATE TABLE `salgrade` ( `grade` int, `losal` int, `hisal` int ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入数据
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');
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-07',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);
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);

tabla dept: tabla
inserte la descripción de la imagen aquí
emp: tabla
inserte la descripción de la imagen aquí
salgrade:
inserte la descripción de la imagen aquí

preguntas de prueba

1. Enumere todos los empleados y departamentos que se dedican al mismo trabajo que "SCOTT" y el número de departamentos.
2. Indique el número y salario promedio de los empleados en cada grado de salario de la empresa.
3. Enumere los nombres y salarios de los empleados, los nombres de los departamentos cuyos salarios son más altos que los salarios de todos los empleados que trabajan en el departamento 30.
4. Enumere el número de empleados que trabajan en cada departamento, el salario promedio y la antigüedad promedio.
5. Enumere los nombres, departamentos y salarios de todos los empleados.
6. Enumere todos los detalles del departamento y el número de empleados del departamento.
7. Indique el salario mínimo para cada trabajo y el nombre del empleado que realiza el trabajo.
8. Indique el salario mínimo, nombre, nombre del departamento y número de personas del GERENTE (gerente) de cada departamento.
9. Enumere el salario anual de todos los empleados, el nombre del departamento al que pertenecen y ordénelos de menor a mayor salario anual.
10. Averigüe el nombre del supervisor y departamento de un empleado, y solicite que el salario de estos supervisores supere los 3000.
11. Averigüe el nombre del departamento con el carácter 'S' en el nombre del departamento, el salario total y el número de empleados del departamento.
12. Otorgue un aumento de salario a los empleados que hayan servido por más de 30 años o que hayan sido contratados en 1987. El principio de aumento de salario: 10% para 10 departamentos, 20% para 20 departamentos, 30% para 30 departamentos, etc. .
13. Indique la información de todos los departamentos con al menos un empleado:
14. Indique todos los empleados con un salario superior al de SMITH:
15. Indique los nombres de todos los empleados y sus supervisores inmediatos:
16. Indique las fechas de empleo anteriores a Los números, nombres, y nombres de departamento de todos los empleados de sus superiores
directos
, el número de departamentos
19. Enumere varios puestos de trabajo con salarios mínimos superiores a 1500 y el número total de empleados que trabajan en ellos
20. Enumere los nombres de los empleados que trabajan en el departamento "VENTAS", asumiendo que no se conoce el número de departamento del departamento de ventas
21. Enumere los salarios superior a Todos los empleados con el salario promedio de la empresa, su departamento, líderes superiores y el grado de salario de la empresa
22. Enumere todos los números y nombres de departamentos con al menos un empleado, y cuente el salario promedio, el salario mínimo y el salario máximo de estos departamentos.
23. Enumere el número, nombre, nombre del departamento y nombre del líder de todos los empleados cuyo salario es mayor que "SMITH" o "ALLEN".
24. Enumere los números y nombres de todos los empleados y los números y nombres de sus superiores inmediatos Los resultados mostrados están ordenados en orden descendente del salario anual del líder.
25. Indique el número, el nombre, el nombre del departamento, la ubicación del departamento, el número de empleados del departamento de todos los empleados cuya fecha de empleo es anterior a la de su supervisor inmediato.
26. Enumere los nombres de los departamentos y la información de los empleados (número, salario promedio) en esos departamentos, y también enumere los departamentos que no tienen empleados.
27. Enumere los nombres de todos los "CLERK" (empleados) y los nombres de sus departamentos, el número de personas en el departamento y los grados salariales.
28. Enumere varios trabajos con un salario mínimo de más de 1500 y el número de todos los empleados que participan en este trabajo y el nombre del departamento, la ubicación y el salario promedio.
29. Indique el nombre, salario base, fecha de empleo, nombre del departamento del empleado que trabaja en el departamento "VENTAS", asumiendo que no se conoce el número de departamento del departamento de ventas.
30. Enumere todos los empleados cuyo salario es superior al salario promedio de la empresa, su departamento, sus superiores y el grado de salario de la empresa.
31. Enumere todos los empleados y departamentos que se dedican al mismo trabajo que "SCOTT", y el número de departamentos.
32. Consultar la estructura de la tabla de departamentos
33. Recuperar la tabla emp y usar la cadena es a para conectar los dos campos de nombre de empleado y tipo de trabajo
34. Recuperar el nombre del empleado, ingreso mensual y comisión en la tabla emp.

La respuesta no es única, solo como referencia.

Es un poco desordenado, el formato del pegado directo es diferente.

– 2. Indique el número y salario promedio de los empleados en cada grado de salario de la empresa. mostrar tablas, seleccionar * de salgrade, seleccionar s.grade,count( ),avg(e.sal) from emp e left unir salgrade s en e.sal entre s.losal y s.hisal agrupar por s.grade ;
– 3 Enumere los nombres y salarios de los empleados, los nombres de los departamentos con salarios superiores a los salarios de todos los empleados que trabajan en el departamento 30. select ename,sal,d.dname,d.deptno from emp donde deptno = d.deptno = d.deptno donde e.sal > (select max(sal) from emp where deptno = 30)
– 4. Columnas El número de empleados que trabajan en cada departamento, el salario promedio y la antigüedad promedio. select count(
),avg(sal),avg(year(now())-year(hiredate)) from emp group by deptno:
– 5. Enumere los nombres, departamentos y salarios de todos los empleados. Contabilidad de investigación de VENTAS seleccione e.ename,d.dname,e.sal from emp e left join dept d on d.deptno = e.deptno;
– 6. Enumere todos los detalles del departamento y el número de empleados del departamento. OPERACIONES seleccionar d. ,cuenta(e.ename) from dept d left join emp e on e.deptno = d.deptno group by d.deptno;
– 7. Indique el salario mínimo para cada trabajo y el nombre del empleado que realiza el trabajo.
select a.ename,t.
from emp a left join (select e.job,min(e.sal) from emp e group by e.job) t on a.job = t.job;
– 8. Enumere cada departamento El GERENTE (gerente) salario mínimo, nombre, nombre del departamento, número del departamento. – la implementación binaria distingue entre mayúsculas y minúsculas – seleccione ename de emp donde trabajo = binario 'ADMINISTRADOR'; – seleccione binario 'a' = 'a'; – seleccione binario 'a'; – seleccione binario 'A'; seleccione * de emp donde trabajo = binario 'ADMINISTRADOR'; seleccione a.mm,c.ename,c.job,b.dname,b.cc from (select d.deptno,min(sal) mm from emp e left join dept d on e.deptno = d.deptno where job = 'MANAGER' group by deptno) a left join (select d.deptno,d.dname,count( ) cc from emp e left join dept d on e.deptno = d.deptno group by d.deptno ) b on a.deptno = b.deptno left join emp c on c.sal = a.mm and b.deptno = c.deptno ;
– 9. Enumere el salario anual de todos los empleados, el nombre del departamento al que pertenecen y ordénelos en orden ascendente de salario anual. select empno,ename,sal
12,d.dname from emp left join dept d on d.deptno = emp.deptno order by sal 12 asc;
- 10. Averigüe el nombre del supervisor y el departamento de un empleado, y pregunte por el salario en estos supervisores hay más de 3000 seleccione a.empno,a.ename,b.ename,b.sal from emp a left join emp b on a.mgr = b.empno where b.sal>3000 and a.empno = 7566 ; seleccionar a.empno,a.ename,b.ename,b.sal from emp a left join emp b on a.mgr = b.empno where b.sal>3000;select a.empno,a.ename,b.ename ,b.sal from emp a left join emp b on a.mgr = b.empno;
– 11. Encuentre el nombre del departamento, el salario total y el personal del departamento para los empleados del departamento con caracteres 'S'. seleccione d.dname, cuenta (
),sum(e.sal) from emp e left join dept d on e.deptno = d.deptno where d.dname like '%s%' group by d.deptno; select * from emp; – 12. Dar la cita fecha Para más de 30 años o empleados contratados en 1987, el aumento de salario se basa en el principio de aumento de salario: 10% de aumento en 10 departamentos, 20% de aumento en 20 departamentos, 30% de aumento en 30 departamentos, y así sucesivamente. select empno,ename,sal,sal+sal*(deptno/100) from emp donde año(fechaactual()) - año(fechacontratación)>30 o año(fechacontratada)=2022; actualizar emp set sal = sal+sal*( deptno/100) donde año(fecha de contratación()) - año(fecha de contratación)>30 o año(fecha de contratación)=2022; seleccione * de emp;
- 13. Enumere todos los departamentos con al menos un empleado, seleccione distinto d.* del departamento d join emp e on d.deptno = e.deptno; – 14. Enumere todos los empleados cuyo salario sea inferior al de SMITH select * from emp where sal < (select sal from emp where ename = 'SMITH')
– 15. Columna Enumere los nombres de todos los empleados y sus superiores inmediatos: select a.empno,a.ename,b.ename from emp a left join emp b on a.mgr = b.empno;
– 16. Enumere los números, nombres y nombres de departamentos de todos los empleados cuya fecha de empleo es anterior a la de su supervisor inmediato Seleccione a.empno,a.ename,b.ename,d.dname from emp a left join emp b on a .mgr = b.empno and a.hiredate<b.hiredate left join dept d on d.deptno = a.deptno;
– 17. Enumere los nombres de los departamentos y la información de los empleados de estos departamentos, y enumere los departamentos sin empleados seleccione * de dept d left join emp e on d.deptno = e.deptno;
– 18. Liste todos los nombres de "CLERK (personal)" y nombres de departamento, seleccione a.ename,a.job,b.dname,b para el número de departamentos .cc from emp a join (select d.deptno,d.dname,count( ) from dept d left join emp e on d.deptno = e.deptno group by d.deptno) b on b.deptno = a.deptno y a.job = 'CLERK';
- 19. Enumere varios trabajos con un salario mínimo superior a 1500 y el número total de empleados que participan en este trabajo select job,max(sal),min(sal),avg(sal), count(
) from emp donde sal>1500 grupo por trabajo;
– 20. Enumere los nombres de los empleados que trabajan en el departamento "VENTAS", suponiendo que se desconoce el número de departamento del departamento de ventas select ename from emp where deptno in (select deptno from dept where dname='sales'); select e.ename from emp e join dept d on e.deptno = d.deptno and d.dname='sales';
- 21. Enumere todos los empleados cuyo salario es superior al salario promedio de la empresa, su departamento, sus superiores y el grado salarial de la empresa seleccione a.ename ,a.en,d.dname,a.sal,s.grade from (select a.deptno,a.ename,b.ename en,a.sal from emp a join emp b on a.mgr = b .empno y a.sal>(select avg(sal) from emp)) a izquierda unir dept d en a.deptno=d.deptno izquierda unir salgrade s en a.sal entre s.losal y s.hisal; seleccionar a. ename,b .ename from emp a join emp b on a.mgr = b.empno and a.sal> (select avg(sal) from emp)
– 22. Enumere todos los números y nombres de departamento con al menos un empleado, y contarlos Salarios medios, mínimos y máximos de estos sectores. select e.deptno,d.dname,avg(e.sal),max(e.sal),min(sal),count( ) from dept d join emp e on e.deptno = d.deptno group by e.deptno ;
– 23. Indique el número, el nombre, el nombre del departamento y el nombre del líder de todos los empleados cuyo salario es superior a “SMITH” o “ALLEN”. seleccione a.empno,a.ename,d.dname,b.ename from (select * from emp where sal >(select min(sal) from emp where ename in ('smith','allen'))) una combinación izquierda emp b on a.mgr = b.empno left join dept d on d.deptno = a.deptno;
– 24. Enumere los números y nombres de todos los empleados y los números y nombres de sus superiores inmediatos. Los resultados mostrados se basan en el salario anual del líder en orden descendente. seleccionar a.empno,a.ename,a.sal
12,b.empno,b.ename,b.sal 12 from emp a left join emp b on a.mgr = b.empno order by b.sal 12;
– 25 Indique el número, el nombre, el nombre del departamento, la ubicación del departamento, el personal del departamento de todos los empleados cuya fecha de empleo es anterior a la de su supervisor inmediato.
seleccione a.empno,a.ename,b.ename,d.dname from emp a left join emp b on a.mgr = b.empno and a.hiredate<b.hiredate left join dept d on d.deptno = a. depto;
– 26. Enumere los nombres de los departamentos y la información de los empleados (número, salario promedio) en estos departamentos, y también enumere los departamentos que no tienen empleados. select d.deptno,d.dname,count(e.ename),avg(sal) from dept d left join emp e on d.deptno = e.deptno group by d.deptno;
– 27. Liste todos los "CLERK" ( Empleado) nombre y nombre del departamento, número de personas en el departamento, grado de salario. select a.ename,a.job,b.dname,b.cc from emp a join (select d.deptno,d.dname,count( ) from dept d left join emp e on d.deptno = e.deptno group by d.deptno) b on b.deptno = a.deptno and a.job = 'CLERK'; select e.deptno,count(e.deptno) from (select a.deptno,a.ename,d.dname,s .grado de (seleccione nro.dept,ename,sal from emp donde trabajo='CLERK') a izquierda únase dept d en a.deptno=d.deptno izquierda únase salgrade s en a.sal entre s.losal y s.hisal) aa izquierda unir emp e en aa.deptno = e.deptno agrupar por e.deptno, seleccionar t1.,t2.deptcount from (select d.deptno,e.ename,e.job,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s. losal y s.hisal donde e.job = 'CLERK') t1 join (select deptno, count( ) as deptcount from emp group by deptno) t2 on t1.deptno = t2.deptno;
– 28. Indique el salario mínimo superior a 1500 Los diversos trabajos y el número total de empleados que participan en este trabajo y el nombre del departamento, ubicación, salario promedio. select job,max(sal),min(sal),avg(sal),count(
) from emp where sal>1500 group by job
– 29. Liste los nombres de los empleados que trabajan en el departamento “SALES” (Ventas), salario base, fecha de contratación, nombre del departamento, suponiendo que se desconoce el número de departamento del departamento de ventas. select e.ename,e.sal,e.hiredate,d.dname from emp e join dept d on d.deptno = e.deptno and d.dname='sales';
– 30. Enumere todos los empleados cuyo salario es superior al salario promedio de la empresa, su departamento, sus superiores y el grado salarial de la empresa. select a.ename,a.en,d.dname,a.sal,s.grade from (select a.deptno,a.ename,b.ename en,a.sal from emp a join emp b on a.mgr = b.empno and a.sal>(select avg(sal) from emp)) a left join dept d on a.deptno=d.deptno left join salgrade s on a.sal between s.losal and s.hisal;
– 31 Indique los nombres de todos los empleados y departamentos involucrados en el mismo trabajo que "SCOTT", y el número de departamentos. cree la vista v1 como seleccione b.ename,d.dname,a.cc from (seleccione deptno,count (*) cc from emp group by deptno) una unión (select ename,deptno from emp where job = (select job from emp where ename = 'scott')) b on b.deptno=a.deptno
left join dept d on d.deptno = b.deptno;select * from v1;
– 32. Consultar la estructura de la tabla dept desc emp, describe emp; mostrar crear tabla emp, mostrar columnas de emp;
– 33. Recupere la tabla emp y use la cadena is a para conectar los dos campos del nombre del empleado y el tipo de trabajo is a es la base de datos Oracle seleccione concat(empno,ename,job) de emp; seleccione concat_ws('-',empno ,ename, trabajo) de emp; seleccione trabajo distinto de emp; seleccione group_concat(trabajo distinto) de emp; seleccione group_concat(nombre distinto) de emp; seleccione group_concat(orden de trabajo distinto por trabajo asc separador '=') de emp;
– 34. Recuperación La tabla emp contiene el nombre del empleado, el ingreso mensual y la comisión. seleccione ename,sal,comm de emp donde comm no es nulo, seleccione ename,sal,comm de emp donde comm no es nulo y comm>0;

Preguntas en la sección de comentarios.

Supongo que te gusta

Origin blog.csdn.net/weixin_50843918/article/details/123086590
Recomendado
Clasificación