Base de données LeetCode Pratique quotidienne (2)

teneur

avant-propos

Sujet 1 : Clients qui ne commandent jamais

Sujet 2 : Supprimer les e-mails en double

Sujet 3 : Hausse des températures

Sujet 4 : Deuxième salaire le plus élevé

Résumé des questions de ce chapitre


 

avant-propos

  • L'article précédent est magnifique

Pratique quotidienne de la base de données LeetCode (1) _Le blog de Xiaojie 312

Sujet 1 : Clients qui ne commandent jamais

183. Clients qui ne commandent jamais

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_20, color_FFFFFF, t_70, g_se, x_16

 filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_12, color_FFFFFF, t_70, g_se, x_16

  • Exigences du sujet : ce que nous devons interroger, ce sont les clients qui n'ont jamais passé de commande
  • Idée de départ : filtrez directement, utilisez une sous-requête pour filtrer les enregistrements dont l'identifiant n'apparaît pas dans la colonne customerid des commandes de la table des clients via les informations de la table des commandes ;  
  • Saisissez le noyau, la relation : le customerid dans la table jointe Oders correspond à la colonne id de la table principale customers

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_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 vous ne comprenez pas la connexion externe, vous pouvez voir l'explication détaillée dans ma dernière question sur le pinceau.

Pratique quotidienne de la base de données LeetCode (1) _Le blog de Xiaojie 312

Sujet 2 : Supprimer les e-mails en double

196. Supprimer les e-mails en double

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_20, color_FFFFFF, t_70, g_se, x_16

  •  Exigences relatives au titre : supprimez tous les enregistrements d'e-mail en double, c'est-à-dire supprimez-les en fonction de l'e-mail, conservez l'e-mail unique avec un petit identifiant, de sorte que l'identifiant des enregistrements en double supprimés soit le suivant 
  • Idée : Vous pouvez utiliser la méthode d'auto-connexion pour connecter votre propre table avec vous-même, puis comparer, si p2.id > p1.id && p2.email = p1.email, nous supprimerons cet enregistrement.   (Le noyau réside dans le connexion Il peut être utilisé non seulement pour la sélection, mais également pour d'autres opérations telles que la suppression)                        ---   Si vous avez besoin d'opérations de comparaison de données sur la même table, veuillez faire bon usage des opérations d'auto-connexion
  • Notez que la suppression est une suppression conditionnelle.Selon la condition where suivante, supprimez l'enregistrement spécifié conditionnellement dans notre table spécifiée.Je vois qu'il y aura une telle question dans la zone de commentaire LeetCode, indiquant que p1 et p2 ne sont pas des produits cartésiens. Après la suppression, p1 C'est un problème de table temporaire. Ici, p1 est l'ontologie de la table des personnes. Nous utilisons simplement le produit cartésien pour réaliser la relation de connexion, afin de filtrer en continu les e-mails répétés dans la table p1 et de supprimer l'enregistrement id Earth. 
# p1 和 p2 都是 person 表
delete 
    p1
from 
    person as p1, person as p2
where p1.id > p2.id && p1.email = p2.email;

Sujet 3 : Hausse des températures

197. Température en hausse

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_20, color_FFFFFF, t_70, g_se, x_16

  •  Exigences de la question : trouver tous les identifiants de date avec une température plus élevée que la veille
  • Le sujet est très simple, et il est évident d'utiliser l'auto-jointure, car la comparaison des données de ce tableau, la clé est de savoir comment faire la différence entre les dates, comment exprimer la relation de date entre aujourd'hui et hier ?

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_20, color_FFFFFF, t_70, g_se, x_16

 Nous pouvons utiliser sql pour améliorer la fonction datediff ci-dessus

select 
    w1.id
from 
    weather w1 inner join weather w2
    on datediff(w1.recorddate, w2.recorddate) = 1
where
    w1.temperature > w2.temperature;

Sujet 4 : Deuxième salaire le plus élevé

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_20, color_FFFFFF, t_70, g_se, x_16

  •  Exigences de la question : très simple, demandez à renvoyer le deuxième salaire le plus élevé du tableau
  • Idée : Ce type de salaire, notre première réaction doit être d'effectuer un tri pour trier par ordre décroissant de desc, de supprimer le re-tri, puis d'utiliser la requête Limite de pagination pour demander si le deuxième enregistrement est le deuxième salaire le plus élevé. record.
  • Mais il y a toujours une exigence dans le titre selon laquelle s'il n'y a pas de deuxième salaire le plus élevé, remettre la requête nulle
  • Pour la manipulation de Null je prends la fonction isfull

filigrane, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5bCP5p2wMzEy, size_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

Résumé des questions de ce chapitre

  • Résumé de l'expérience : généralement, si vous devez atteindre les exigences du titre grâce à la comparaison mutuelle de la même table, vous pouvez généralement utiliser une sous-connexion pour interroger ou traiter. L'auto-jointure de la table signifie que la table elle-même est connectée à elle-même.
  • La connexion de deux tables est un produit cartésien sans aucune qualification conditionnelle. La qualification est généralement limitée par une clé étrangère logique. La clé étrangère existe dans la table attachée, et la clé étrangère est généralement la clé primaire dans la table principale.
  • Lors de l'élaboration d'un sujet, nous devons saisir la colonne de clé primaire.   La clé primaire identifie de manière unique l'enregistrement, et elle existe uniquement et n'est pas nulle. Dans de nombreuses opérations de requête complexes, nous n'interrogeons généralement pas directement la colonne de demande, mais utilisons la clé primaire colonne de clé pour l'opération de requête de qualification conditionnelle
  • Diverses jointures internes et jointures externes ne s'appliquent pas seulement aux requêtes de sélection, mais également à la suppression de la mise à jour. 
  • Pour trouver les enregistrements les plus grands et les plus petits, les enregistrements les plus grands et les plus petits doivent commencer par le mot-clé order by + distinct + limit  

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_53695360/article/details/124020795
conseillé
Classement