Base de datos Práctica diaria de LeetCode (2)

contenido

prefacio

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

183. Clientes que nunca piden

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_12, color_FFFFFF, t_70, g_se, x_16

  • 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.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

# 解决方式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

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

  •  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

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

  •  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?

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 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

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

  •  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

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBA5bCP5p2wMzEy, tamaño_20, color_FFFFFF, t_70, g_se, x_16

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  

 

Supongo que te gusta

Origin blog.csdn.net/weixin_53695360/article/details/124020795
Recomendado
Clasificación