contenido
Tema 1: Clientes que nunca hacen pedidos
Tema 2: eliminar correos electrónicos duplicados
Tema 3: Temperaturas en aumento
Tema 4: Segundo salario más alto
Resumen de las preguntas de este capítulo
prefacio
- El artículo anterior es maravilloso.
Práctica diaria de la base de datos LeetCode (1) _Blog de Xiaojie 312
Tema 1: Clientes que nunca hacen pedidos
- Requisitos del tema: lo que necesitamos consultar son los clientes que nunca han realizado un pedido
- Idea inicial: filtrar directamente, usar sub-consulta para filtrar los registros cuya id no aparece en la columna de id de cliente de pedidos en la tabla de clientes a través de la información en la tabla de Pedidos;
- Tome el núcleo, la relación: el ID de cliente en la tabla adjunta Oders corresponde a la columna de ID de la tabla principal de clientes.
# 解决方式1: 子查询方式
select
name as 'Customers'
from
customers
where
id not in (select distinct customerid from orders);
# 解决方式2 : 外连接的方式
# 取出customers表的全部 和 orders表进行左外连接
# 连接条件利用 c.id = o.customerid. 不存在连接关系的记录o.id = null
select
c.name as 'Customers'
from
customers as c left join orders as o
on c.id = o.customerid
where
o.id is null;
- Si no comprende la conexión externa, puede ver la explicación detallada en mi última pregunta de pincel.
Práctica diaria de la base de datos LeetCode (1) _Blog de Xiaojie 312
Tema 2: eliminar correos electrónicos duplicados
196. Eliminar correos electrónicos duplicados
- Requisitos del título: elimine todos los registros de correo electrónico duplicados, es decir, elimine de acuerdo con el correo electrónico, mantenga el correo electrónico único con una identificación pequeña, por lo que la identificación de los registros duplicados eliminados es la siguiente
- Idea: puede usar el método de autoconexión para conectar su propia tabla consigo mismo y luego comparar, si p2.id > p1.id && p2.email = p1.email, eliminaremos este registro (el núcleo se encuentra en el conexión Se puede usar no solo para seleccionar, sino también para otras operaciones como eliminar) --- Si necesita operaciones de comparación de datos en la misma tabla, haga un buen uso de las operaciones de autoconexión
- Tenga en cuenta que eliminar es una eliminación condicional. De acuerdo con la siguiente condición where, elimine el registro especificado condicionalmente en nuestra tabla especificada. Veo que habrá una pregunta de este tipo en el área de comentarios de LeetCode, diciendo que p1 y p2 no son productos cartesianos. Después de eliminar, p1 Es un problema de tabla temporal. Aquí p1 es la ontología de la tabla de personas. Solo usamos el producto cartesiano para realizar la relación de conexión, para filtrar continuamente los correos electrónicos repetidos en la tabla p1 y eliminar el registro de tierra de identificación.
# p1 和 p2 都是 person 表
delete
p1
from
person as p1, person as p2
where p1.id > p2.id && p1.email = p2.email;
Tema 3: Temperaturas en aumento
197. Aumento de la temperatura
- Requisitos de la pregunta: busque todos los identificadores de fecha con una temperatura más alta que el día anterior
- El tema es muy simple, y es obvio usar autounión, porque la comparación de los datos en esta tabla, la clave es cómo hacer la diferencia entre las fechas, ¿cómo expresar la relación de fechas entre hoy y ayer?
Podemos usar sql para mejorar la función dateiff anterior
select
w1.id
from
weather w1 inner join weather w2
on datediff(w1.recorddate, w2.recorddate) = 1
where
w1.temperature > w2.temperature;
Tema 4: Segundo salario más alto
- Requisitos de la pregunta: muy simple, pide que te devuelvan el segundo salario más alto de la tabla
- Idea: Este tipo de salario, nuestra primera reacción debe ser realizar una clasificación para ordenar en orden descendente de desc, para eliminar la re-clasificación, y luego usar la consulta Limite paginación para consultar si el segundo registro es el segundo salario más alto registro.
- Pero todavía hay un requisito en el título de que si no hay un segundo salario más alto, vuelva a colocar la consulta nula
- Para el manejo de Null tomo la función isfull
select ifnull(
(select distinct
salary
from
employee
order by salary desc
limit 1, 1
), null
) as 'SecondHighestSalary';
# 如果子查询select 结果不为Null则正常输出结果
# 否则输出null
Resumen de las preguntas de este capítulo
- Resumiendo la experiencia: en general, si necesita cumplir con los requisitos del título a través de la comparación mutua de la misma tabla, generalmente puede usar la subconexión para consultar o procesar. La autounión de la tabla significa que la tabla misma está conectada a sí misma.
- La conexión de dos tablas es un producto cartesiano sin ninguna calificación condicional. La calificación generalmente está limitada por una clave externa lógica. La clave externa existe en la tabla adjunta, y la clave externa es generalmente la clave principal en la tabla principal.
- Al hacer un tema, debemos comprender la columna de clave principal. La clave principal identifica de forma única el registro, y solo existe y no es nula. En muchas operaciones de consulta complejas, generalmente no consultamos directamente la columna de demanda, sino que usamos la columna primaria. columna clave para la operación de consulta de calificación condicional
- Varias uniones internas y uniones externas no solo son aplicables para seleccionar consultas, sino también para eliminar la actualización.
- Para encontrar los registros más grandes y más pequeños, los registros más grandes y más pequeños deben comenzar con la palabra clave ordenar por + distinto + límite