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) ».
L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.
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. 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.
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.
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 = '张三');
3.2 comme une requête imbriquée
select count(distinct(Tname)) --查询姓“张”的老师的个数 from Teacher where Tname like '张%';
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 = '中国');
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 = '中国');
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 = '中国');
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.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='001') a, (select Sno,scorefrom SC where Cno='002') 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!