Maison >base de données >tutoriel mysql >Qu'est-ce qu'une instruction de requête imbriquée MySQL ?

Qu'est-ce qu'une instruction de requête imbriquée MySQL ?

WBOY
WBOYoriginal
2022-03-09 15:44:168439parcourir

Dans MySQL, une requête imbriquée représente une requête qui imbrique une autre instruction SELECT dans la clause WHERE ou la clause HAVING d'une instruction SELECT. Elle est également appelée sous-requête. La syntaxe est « instruction SELECT WHERE condition (instruction SELECT) ».

Qu'est-ce qu'une instruction de requête imbriquée MySQL ?

L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.

Qu'est-ce qu'une instruction de requête imbriquée MySQL

Requête imbriquée

Définition : Un bloc d'instruction de requête interne (select-from-where) peut être imbriqué dans la clause Where d'un autre bloc de requête externe, où la couche externe La requête est également appelée la requête parent, la requête principale. Les requêtes internes sont également appelées sous-requêtes, à partir de requêtes. Les sous-requêtes n'utilisent généralement pas la clause order by et ne peuvent trier que les résultats finaux de la requête.

Autre définition : une requête qui imbrique une autre instruction SELECT dans la clause WHERE ou la clause HAVING d'une instruction SELECT est appelée une requête imbriquée, également appelée sous-requête.

Le fonctionnement des requêtes imbriquées est le suivant : la requête interne est traitée en premier et traitée de l'intérieur vers l'extérieur. La requête externe utilise les résultats de la requête interne. Les requêtes imbriquées ne peuvent pas être utilisées uniquement dans l'instruction de sélection de la requête parent. Il peut également être utilisé dans des instructions d'insertion, de mise à jour, de suppression ou d'autres sous-requêtes.

1. Composition de la sous-requête

1. Requête de sélection standard contenant des composants de liste de sélection standard.

2. Clause from standard contenant un ou plusieurs noms de table ou de vue.

3. Clause Where facultative.

4. Clause facultative de groupe par.

5. Clause d'avoir facultative.

2. Règles de syntaxe des sous-requêtes

1. La requête de sélection d'une sous-requête est toujours entre parenthèses.

2. Ne peut pas inclure de clauses computing ou for.browse.

3. Si la clause supérieure est spécifiée en même temps, seule la clause order by peut être incluse.

4. Les sous-requêtes peuvent être imbriquées jusqu'à 32 niveaux. Certaines requêtes peuvent ne pas prendre en charge 32 niveaux d'imbrication.

5. La sous-requête peut être utilisée partout où une expression peut être utilisée, à condition qu'elle renvoie une seule valeur.

6. Si une table apparaît uniquement dans la sous-requête et non dans la requête externe, les colonnes de la table ne peuvent pas être incluses dans la sortie.

3. Sous-requête qui renvoie une valeur

Lorsque la sous-requête ne renvoie qu'une seule valeur, vous pouvez utiliser des opérateurs de comparaison tels que =,, >=, <=, !=, etc. pour connecter la requête enrichie et la sous-requête. . Les exemples sont les suivants :

3.1 Sous-requête simple

select name,age
from person
where age > ( select age
from person
where name = &#39;张三&#39;);

3.2 comme une requête imbriquée

select count(distinct(Tname)) --查询姓“张”的老师的个数
from Teacher
where Tname like &#39;张%&#39;;

4 Sous-requête qui renvoie un ensemble de valeurs

Si la sous-requête renvoie plus d'une valeur, mais un ensemble, elle ne peut pas être utilisée directement. Comparaison. opérateur, vous pouvez insérer ANY, SOME ou ALL entre l'opérateur de comparaison et la sous-requête. La relation d'équivalence peut utiliser l'opérateur IN.

4.1 Le mot-clé in nested query

in est utilisé dans la clause Where pour déterminer si l'expression de requête se trouve dans une liste de plusieurs valeurs. Renvoie les enregistrements qui satisfont aux conditions de la liste d'entrée.

select name
from person
where countryid in ( select countryid
from country
where countryname = &#39;中国&#39;);

4.2 une requête imbriquée

some est un symbole d'opération logique en SQL Si dans une série de comparaisons, certaines valeurs sont vraies, alors le résultat est vrai. La syntaxe de some est :

select name from person
where countryid = some ( select countryid from country    --用等号和以下查询到的值比较,如果与其中一个相等,就返回
where countryname = &#39;中国&#39;);

4.3 all nested query

all est un opérateur logique en SQL Si une série de comparaisons est vraie, alors le résultat peut être vrai.

select name from person
where countryid > all ( select countryid from country  --当countryid大于以下返回的所有id,此结果才为True,此结果才返回
where countryname = &#39;中国&#39;);

4.4 existe une requête imbriquée

exists est un symbole d'opération logique en SQL. True si la sous-requête renvoie un jeu de résultats. existe représente le sens de « existence », et il ne trouve que les enregistrements qui remplissent les conditions. Une fois le premier enregistrement correspondant trouvé, la recherche s'arrête.

Sous-requête existe

La sous-requête est une première instruction de sélection, et la clause calculate et le mot-clé into ne sont pas autorisés.

exists signifie si la sous-requête renvoie un ensemble de résultats.

SELECT * FROM Person
WHERE exists ( SELECT 1); --SELECT 0 SELECT NULL 返回结果都一样,因为这三个子查询都有结果集返回,因此总是True,SELECT * FROM Person照常执行

Mais si aucun jeu de résultats n'est renvoyé en raison de conditions ajoutées dans la sous-requête, l'instruction principale ne sera pas exécutée :

SELECT * FROM Person
WHERE exists ( SELECT * FROM Person
WHERE Person_Id = 100); --如果不存在Person_Id的记录,则子查询没有结果集返回,主语句不执行

5 Sous-requête qui renvoie la nouvelle table de données

5.1 Requête "001" rapport de cours "002". Nombre d'étudiants de tous les étudiants ayant des résultats de cours élevés

Select a.Sno from (select Sno,score from SC where Sno=&#39;001&#39;) a,
(select Sno,scorefrom SC where Cno=&#39;002&#39;) b
Where a.score>b.score and a.Sno=b.Sno;

Apprentissage recommandé : Tutoriel vidéo MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn