Práctica de consulta de unión de tablas únicas y de varias tablas

1. Práctica de consulta de una sola tabla
/* material
CREAR TABLA emp (
empno int(4) NO NULO,
ename varchar(255) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
trabajo varchar(255) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
mgr int(4) NULO POR DEFECTO NULO,
fecha de contratación NO NULA,
sai int(255) NO NULO,
comm int(255) NULO POR DEFECTO NULO,
deptno int(2) NO NULO,
CLAVE PRIMARIA ( empno ) USANDO BTREE
) MOTOR = InnoDB JUEGO DE CARACTERES = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dinámico;
INSERT INTO emp VALUES (1001, ' Ganning ', ' secretario ', 1013, '2000-12-17', 8000, NULL, 20);
INSERT INTO emp VALUES (1002, ' Daikis ', ' Vendedor ', 1006, '2001-02-20', 16000, 3000, 30);
INSERTAR EN VALORES emp (1003, ' Yin Tianzheng ', ' Vendedor ', 1006, '2001-02-22', 12500, 5000, 30);
INSERT INTO emp VALUES (1004, ' Liu Bei ', ' Manager ', 1009, '2001-04-02', 29750, NULL, 20);
INSERTAR EN VALORES emp (1005, ' Xie Xun ', ' Vendedor ', 1006, '2001-09-28', 12500, 14000, 30);
INSERT INTO emp VALUES (1006, ' Guan Yu ', ' Manager ', 1009, '2001-05-01', 28500, NULL, 30);
INSERTAR EN VALORES emp (1007, ' Zhang Fei ', ' Gerente ', 1009, '2001-09-01', 24500, NULL, 10);
INSERT INTO emp VALUES (1008, ' Zhuge Liang ', ' Analista ', 1004, '2007-04-19', 30000, NULL, 20);
INSERT INTO emp VALUES (1009, ' Zeng A Niu ', ' Presidente ', NULL, '2001-11-17', 50000, NULL, 10);
INSERTAR EN VALORES emp (1010, ' Wei Yixiao ', ' Vendedor ', 1006, '2001-09-08', 15000, 0, 30);
INSERT INTO emp VALUES (1011, ' Zhou Tai ', ' secretario ', 1006, '2007-05-23', 11000, NULL, 20);
INSERT INTO emp VALUES (1012, ' Cheng Pu ', ' secretario ', 1006, '2001-12-03', 9500, NULL, 30);
INSERTAR EN VALORES emp (1013, ' Pang Tong ', ' Analista ', 1004, '2001-12-03', 30000, NULL, 20);
INSERT INTO emp VALUES (1014, ' cubierta amarilla ', ' secretario ', 1007, '2002-01-23', 13000, NULL, 10);
INSERTAR EN VALORES emp (1015, ' Zhang San ', ' limpiador ', 1001, '2013-05-01', 80000, 50000, 50);
1. Consultar todos los empleados cuyo número de departamento es 30,
seleccione * de emp donde deptno = 30;
2. Nombres, números y números de departamento de todos los vendedores.
 seleccione ename,empno,mgr de emp
3. Encuentre empleados cuya bonificación sea superior al salario.
 seleccione * de emp donde sai < comm;
4. Encuentre empleados cuya bonificación sea un 60% mayor que su salario.
 seleccione * de emp donde sai < (comm * 0.6);
5. Descubra los detalles de todos los gerentes en el departamento número 10 y todos los vendedores en el departamento número 20.
 seleccione * de emp donde número de departamento en (10,20) y trabajo en ('gerente', 'vendedor');
6. Encuentre todos los gerentes en el departamento número 10, todos los vendedores en el departamento número 20 y los detalles de todos los empleados que no son ninguno de los dos. gerentes ni vendedores pero cuyo salario sea mayor o igual a 20000.
 seleccione * de emp donde (nºdepto = 10 y trabajo = 'Gerente') o (nºdepto = 20 y trabajo = 'Ventas') o (sai >= 20000 y trabajo!= 'Gerente' y trabajo!='Ventas');
7. Empleados sin bonificación o bonificación inferior a 1000.
 seleccione * de emp donde comm es nulo o comm < 1000.
8. Consulta a los empleados cuyos nombres constan de tres caracteres.
seleccione * de emp donde longitud (ename) = 9;  
9. Consulta los empleados que se unieron en 2000.
seleccione * de emp donde año (fecha de contratación) = 2000;
10. Consulte la información detallada de todos los empleados y ordénelos en orden ascendente por número
 seleccione * de emp orden por empno;
11. Consulte la información detallada de todos los empleados y ordénelos por salario en orden descendente. Si el salario es el mismo, use la entrada Fecha en orden ascendente
 seleccione * de emp orden por sai desc,hiredate;
12. Consulte el salario promedio de cada departamento
seleccione deptno,avg(sai) como total del grupo emp por deptno;
13. Consulta el número de empleados en cada departamento
 selecciona deptno, cuenta (trabajo) como total del grupo emp por deptno;
14. Consulta el salario máximo, salario mínimo y número de personas para cada trabajo
selecciona job,max(sai) ,min(sai),count(job) del grupo emp por trabajo;
2. Consulta de unión de varias tablas
utilizar mydb3;
--Crear tabla de departamentos
crear tabla si no existe departamento3 (
deptno varchar(20) clave primaria, - número de departamento
nombre varchar(20) -- nombre del departamento
);
--Crear tabla de empleados
crear tabla si no existe emp3(
eid varchar(20) clave primaria, --número de empleado
ename varchar(20), --nombre del empleado
edad int, --edad del empleado
dept_id varchar(20) --Departamento del empleado
);
--Agregar datos a la tabla del departamento 3
insertar en valores dept3('1001',' departamento de I+D ');
insertar en valores dept3('1002',' Departamento de ventas ');
insertar en valores dept3('1003',' Departamento de Finanzas ');
insertar en valores de departamento3('1004',' HR ');
--Agregar datos a la tabla emp3
insertar en valores emp3 ('1', ' Qiao Feng ', 20, '1001');
insertar en valores emp3('2',' Duanyu ',21,'1001');
insertar en valores emp3('3',' Xuzhu ',23,'1001');
insertar en valores emp3('4',' Azi ',18,'1001');
insertar en valores emp3 ('5', ' monje barrido ', 85, '1002');
insertar en valores emp3 ('6', ' Li Qiushui ', 33, '1002');
insertar en valores emp3('7',' Jumozhi ',50, '1002');
insertar en valores emp3 ('8', ' Tianshan Child Elder ', 60, '1003');
insertar en valores emp3('9',' Murongbo ',58,'1003');
insertar en valores emp3 ('10', ' Ding Chunqiu ', 71, '1005');
1 Consulta a los empleados de cada departamento,
 selecciona el nombre, GROUP_CONCAT(ename) de emp3 e RIGHT JOIN dept3 d on e.dept_id = d.deptno GROUP BY name;
2 Consulta a los empleados del departamento de I+D,
selecciona el nombre, GROUP_CONCAT(ename) de emp3 e RIGHT JOIN dept3 d en e.dept_id = d.deptno y nombre = 'departamento de I+D';
3. Consulte a los empleados del departamento de I+D y del departamento de ventas,
seleccione el nombre, GROUP_CONCAT(ename) de emp3 e RIGHT JOIN dept3 d en e.dept_id = d.deptno agrupar por nombre y d.name='Departamento de I+D' o d.name='Departamento de Ventas';
4. Consulta el número de empleados en cada departamento y ordénalos en orden ascendente,
selecciona nombre, cuenta (deptno) como total de emp3 e izquierda JOIN dept3 d en e.dept_id = d.deptno GROUP BY d.name HAVING NAME no es nulo ORDEN POR total 5.
Consulta los departamentos con un número mayor o igual a 3 y ordénalos en orden descendente según el número de personas
seleccione nombre, cuente (deptno) como total de emp3 e left ÚNASE a dept3 d en e.dept_id = d.deptno GROUP BY d.name HAVING NAME no es nulo y total> 1 ORDEN POR descripción total 

Agregar nueva tabla de empleados emp y departamento de tabla de departamento
 crear tabla departamento (dept1 int, nombre_depto varchar(11));
 crear tabla emp (sid int, nombre varchar(11), edad int, fecha de inicio_tiempo de trabajo, int entrante, dept2 int);

     insertar en los valores del departamento
    (101, 'finanzas'),
    (102, 'ventas'),
    (103, 'tecnología de TI'),
    (104, 'administración');

     insertar en valores emp
    (1789,'Zhang San',35,'1980/1/1',4000,101),
    (1674,'Li Si',32,'1983/4/1',3500,101 ),
    (1776,'Wang Wu',24,'1990/7/1',2000,101),
    (1568,'Zhao Liu',57,'1970/10/11',7500,102),
    (1564 , 'Rongqi',64,'1963/10/11',8500,102),
    (1879,'Niuba',55,'1971/10/20',7300,103);

1. Descubra el nombre del empleado de mayor edad en el departamento de ventas,
seleccione el nombre de emp e, departamento d donde e.dept2=d.dept1 y dept_name='sales' y edad=(seleccione max(age) de emp donde dept2= (seleccione departamento1 del departamento donde nombre_depto='ventas'));
 2. Busque el nombre del empleado con el salario mínimo en el departamento financiero,
seleccione nombre de emp e, departamento d donde e.dept2=d.dept1 y nombre_depto=' finanzas' y entrante=(
seleccione min(entrante) de emp donde departamento2=(seleccione departamento1 de departamento donde nombre_depto='servicio'));

 3. Enumere los nombres de los departamentos cuyos ingresos totales de cada departamento sean superiores a 9000
seleccione nombre_depto de departamento d, (seleccione departamento2 del grupo emp por departamento2 con suma (entrante)> 9000) e donde d.dept1 = e.dept2;
 4. Pregunte por el salario entre 7500 y 8500 yuanes,
seleccione el nombre y el departamento de la persona de mayor edad nombre_depto, `nombre` de emp e ÚNETE A LA DERECHA departamento d en e.dept2 = d.dept1 DONDE entrante >= 7500 Y entrante <= 8500 y d.dept_name = 'ventas' PEDIDO POR edad desc LÍMITE 1;
5. Encuentre la hora de entrada del empleado con los ingresos más bajos en el departamento de ventas 
SELECT worktime_start FROM emp e RIGHT JOIN dept d ON e.dept2 = d.dept1 donde d.dept_name = 'Ventas' ORDEN POR LÍMITE ASC entrante 1;
6 Los ingresos del departamento financiero exceden Seleccione el nombre
de emp e RIGHT JOIN dept d en e.dept2 = d.dept1 donde d.dept_name = 'finanzas' y entrante > 2000;
7. Enumere el ingreso promedio y el nombre del departamento de cada departamento.
seleccione nombre_depto, AVg(entrante) de emp e UNIRSE A LA DERECHA departamento d en e.dept2 = d.dept1 agrupar por nombre_depto
8.
Seleccione sid de emp e UNIRSE A LA DERECHA departamento d en e.dept2 = d.dept1 donde d.nombre_depto = 'Tecnología de TI'
9. La suma de los ingresos del departamento financiero;
seleccione nombre_depto, suma (entrante) de emp e JOIN DERECHO departamento d en e.dept2 = d.dept1 WHERE d.nombre_dept = 'finanzas';
10. Ordenar por departamento primero el número y luego ordene la tabla de información de los empleados de temprano a tarde de acuerdo con la hora de entrada
seleccione * de emp e ÚNETE A LA DERECHA departamento d en e.dept2 = d.dept1 ORDENAR POR dept2, inicio_tiempo de trabajo
11. Descubra qué departamento aún no tiene empleados,
seleccione nombre_depto de emp e ÚNETE A LA DERECHA departamento d en e.dept2 = d. dept1 WHERE worktime_start es NULL;
12. Enumere el número de departamento y el nombre del departamento de los empleados del departamento cuyos ingresos son superiores a 7000;
seleccione dept1, nombre_dept de emp e RIGHT JOIN dept d en e.dept2 = d.dept1 WHERE entrante > 7000;
13 Enumere los ingresos totales de los empleados y el nombre del departamento de cada departamento;
seleccione nombre_depto, suma (entrante) de emp e ÚNASE A LA DERECHA departamento d en e.dept2 = d.dept1 grupo por nombre_depto

14. Enumere el nombre y el nombre del departamento del empleado de mayor edad en cada departamento,
seleccione MAX(edad), nombre_depto de emp e JOIN DERECHO departamento d en e.dept2 = d.dept1 grupo por nombre_depto
15. Busque los ingresos de Li Si y el nombre del departamento
seleccione `nombre`, entrante, nombre_depto de emp e ÚNASE A LA DERECHA departamento d en e.dept2 = d.dept1 donde nombre = 'Li Si'
16. Enumere los nombres de los empleados con los ingresos más altos en cada departamento, nombre del departamento, ingresos y seleccione nombre, MAX (entrante), nombre_depto de emp e JOIN DERECHO departamento d en e.dept2 = d.dept1 grupo por nombre_depto en orden descendente de ingresos ;

17. Enumere los nombres de los departamentos con más de 1 empleado,
seleccione nombre_depto, departamento2 de emp e ÚNASE A LA DERECHA departamento d en e.dept2 = d.dept1 grupo por nombre_depto HAVING COUNT(dept2) > 1; 19.
Encuentre dónde se encuentra Zhang San Nombre del departamento
seleccione nombre_departamento de emp e ÚNASE A LA DERECHA departamento d en e.dept2 = d.dept1 donde nombre = 'Zhang San'

Supongo que te gusta

Origin blog.csdn.net/m0_70940822/article/details/131651369
Recomendado
Clasificación