sous-requête [MySQL] [base de données]

sous-requête

Une sous-requête est une requête dans laquelle une instruction de requête est imbriquée dans une autre instruction de requête

  • Les sous-requêtes ont été introduites depuis MySQL 4.1
  • L'utilisation de sous-requêtes dans SQL améliore considérablement la capacité des requêtes SELECT, car dans de nombreux cas, la requête doit d'abord obtenir des données à partir du jeu de résultats ou calculer d'abord un résultat de données à partir d'une table, puis utiliser le résultat de la première requête. dans la condition de jugement pour la deuxième requête, après avoir une sous-requête, nous pouvons le faire dans une instruction SELECT dans ce cas

Comprenons les sous-requêtes à travers l'exemple suivant

Question : Interroger le nom de la personne dans la table des employés qui a un salaire supérieur à Abel

  • Nous avons trois solutions à ce problème

Méthode 1 : Utiliser l'instruction SELECT deux fois

SELECT salary
FROM employees
WHERE last_name = 'abel';
  • À ce stade, nous devons d'abord interroger le salaire de l'employé nommé abel dans la table des employés. À ce stade, si le salaire d'abel interrogé est de 11000
SELECT last_name,salry
FROM employees
WHERE salary >11000;
  • Ensuite, nous allons interroger le nom (last_name) de la personne dont le salaire est supérieur au salaire abel (11000) dans la table des employés

Résumé : Ce type de requête utilisant deux instructions SELECT distinctes est trop inefficace, car à ce stade, notre système de gestion de base de données et la base de données doivent interagir deux fois, et l'efficacité sera très médiocre.

Méthode 2 : Méthode d'auto-connexion (l'une des méthodes de requête multi-tables)

SELECT last_name,salry
FROM employees
WHERE salary >11000;
  • Ici, nous utilisons le salaire des employés d'abel (11000) obtenu à partir de la première requête comme condition de comparaison pour cette requête, puis nous pouvons calculer le nom de la personne dont le salaire est supérieur à celui d'abel.

Résumé : L'efficacité de cette requête utilisant deux instructions de sélection est très faible, car à l'heure actuelle, nous utilisons deux instructions de sélection, le système de gestion de base de données et la base de données interagissent deux fois, de sorte que l'efficacité est relativement faible.

Méthode 2 : méthode d'auto-connexion (l'une des méthodes de requête multi-tables)

SELECT e2.last_name,e2.salary
FROM employyees e1,employeese2
WHERE e2.salary>e1.salary
AND e1.last_name = 'abel';
  • À ce stade, une auto-connexion est effectuée. À ce stade, il existe deux tables identiques e1 et e2. À ce stade, notre condition de connexion multitable est que l'enregistrement de e2 correspondra à l'enregistrement de la table e1 avec un salaire inférieur à l'enregistrement, puis nous le ferons. Le filtrage conditionnel est également effectué, c'est-à-dire que les enregistrements nommés abel dans la table e1 sont filtrés, puis le résultat de la requête à ce moment est le nom et le salaire de tous les employés de la table e2 avec un salaire supérieur à abel dans la table e1.

Résumé : Cette méthode d'auto-connexion n'utilise qu'une seule fois une instruction SELECT, donc l'efficacité de la requête est relativement élevée, alors pourquoi proposer une sous-requête ? — Parce que tous les problèmes qui peuvent être résolus par des sous-requêtes ne peuvent pas utiliser la méthode d'auto-connexion il est juste que ce problème puisse être résolu en utilisant une sous-requête ou une auto-connexion

Méthode 3 : La méthode de sous-requête

SELECT last_name,salary
FROM employees
WHERE salary > (SELECT salary
                FROM employees
                WHERE last_name = 'abel');
  • A ce stade, la requête est exécutée à l'aide d'une sous-requête. A ce stade, une instruction SELECT est utilisée dans l'instruction SELECT. La requête imbriquée dans cette requête est appelée une sous-requête.

Spécification d'appellation : requête externe (requête principale), requête interne (sous-requête)

Remarquer:

  1. La sous-requête (requête interne) est exécutée avant la requête principale (requête externe)
    • Autrement dit, la sous-requête est exécutée en premier, puis la requête principale est exécutée
  2. Le résultat de la sous-requête est utilisé par la requête principale (requête externe)
  3. Les sous-requêtes sont entre parenthèses
  4. Si nous plaçons la sous-requête dans la condition de comparaison, nous la plaçons généralement du côté droit de la condition de comparaison (ce qui peut améliorer l'esthétique du code)
  5. Une opération sur une seule ligne correspond à une sous-requête sur une seule ligne, et un opérateur sur plusieurs lignes correspond à une sous-requête sur plusieurs lignes

Classification des sous-requêtes :

  • Nous classons ici sous deux angles

Angle 1 : le nombre d'entrées dans le résultat renvoyé par la requête interne

Sous-fonction à une ligne vs sous-requête à plusieurs lignes

Si la requête en angulaire deux est exécutée plusieurs fois

Sous-requêtes corrélées vs sous-requêtes non corrélées

  • Si la requête interne est exécutée plusieurs fois, nous l'appelons une sous-requête corrélée, alors pourquoi la requête interne exécutée plusieurs fois est-elle liée ?
    • En fait, après nos recherches à ce stade, nous pouvons constater que la requête interne sera exécutée plusieurs fois uniquement lorsque la requête interne est liée à la requête externe.

Je suppose que tu aimes

Origine blog.csdn.net/m0_57001006/article/details/123701064
conseillé
Classement