Maison  >  Article  >  base de données  >  Une brève introduction à la sous-requête MySQL

Une brève introduction à la sous-requête MySQL

小云云
小云云original
2018-03-15 10:41:452067parcourir

La signification fondamentale d'une sous-requête est une « instruction de requête » qui apparaît à certaines positions dans une instruction de requête (instruction select). Cet article partage principalement avec vous une brève introduction aux sous-requêtes MySQL, dans l'espoir d'aider tout le monde.

Exemple :
Une brève introduction à la sous-requête MySQL
Après modification :
Une brève introduction à la sous-requête MySQL

Si l'instruction de sous-requête de "select 5000" est remplacée par "Select le prix moyen de tous les biens" a une signification pratique.

  • La sous-requête sert la requête principale

  • La requête principale est exécutée uniquement après que la sous-requête ait obtenu certaines données de résultat ;

Sous forme, il peut être exprimé comme suit :

  • sélectionner un champ, une expression ou une sous-requête [comme alias] à partir du nom de la table ou lier les résultats ou des sous-requêtes où des champs ou des expressions ou des jugements conditionnels de sous-requêtes

Autrement dit, les sous-requêtes peuvent apparaître dans ces positions (avoir est en fait OK, car cela a la même signification que où) ;

sous-requête, divisée par position (occasion) :

类型 形式
作为主查询的结果数据 select c1,(select f1 from tab2) as f11 from tab1; #这里子查询应该只有一个数据(一行一列,标量子查询)
作为主查询的条件数据 select c1 from tab1 where c1 in (select f1 from tab2); #这里子查询可以是多个数据(多行一列,列子查询)
作为主查询的来源数据 select c1 from (select f1 as c1, f2 from tab2) as t2; #这里子查询可以是任意查询结果(表子查询)

Sous-requêtes courantes

Sous-requêtes dans les opérateurs de comparaison

Forme :

  • Opérateurs de comparaison d'opérandes (sous-requête scalaire) ; 🎜>

Explication :

  • L'opérande est en fait l'une des deux données de l'opérateur de comparaison, généralement un nom de champ

    ;
  select ....  from XXX where  id > 5;
Exemple :

  • Trouver le produit le plus cher

select * from product  where  price = (select  max(price)  from  product );
Sous-requête utilisant dans ;

  • Utilisation précédente de in :

XX  in  (值1,值2,值3,....);
  • Ensuite, la sous-requête in est :

XX  in  (列子查询)
Exemple :

  • Découvrez tous les noms de catégories avec « électricité » « Tous les produits avec le mot ;

select  *  from  product  where  protype_id  in( 
select  protype_id  from  product_type  where  protype_name  like ‘%电%’
);
Utilisez la sous-requête de n'importe quel

sous la forme :

操作数 比较运算符 any  (列子查询);
Signification :

  • Lorsqu'un certain opérande (champ) satisfait l'opérateur de comparaison pour n'importe quelle valeur de la sous-requête de colonne, la condition est satisfaite

    Exemple :

select  *  from  tab1  where  id >  any  (select  f1  from  tab2);
Sous-requête utilisant ; all :

Forme :

操作数  比较运算符 all   (列子查询);
Signification :

  • Quand un certain opérande (champ) satisfait l'opérateur de comparaison pour toutes les données valeurs de la sous-requête de colonne, la condition est satisfaite

Exemple :

select  *  from  tab2  where  f1  >  all  ( select  id  from   tab1 );
Utilisation de la sous-requête de certains

  • En une phrase : some est synonyme de any.

Requête utilisant existe

Forme :

where  exists( 子查询 )
Signification :

  • Si cette sous-requête "a des données", le résultat de l'existence est vrai, sinon il est faux

Explication :

Parce que la sous-requête existe Cette signification conduit souvent à la situation dans la requête principale : soit tous sont supprimés, soit aucun d'entre eux n'est supprimé. S’il se limite à cette signification (situation d’usage), il perd fondamentalement sa signification pratique.

Donc :

Dans les applications réelles, cette sous-requête n'est souvent pas une sous-requête indépendante, mais doit être combinée avec la source de données (table de la "requête principale" ), établir une sorte de relation - généralement une relation de connexion. Le mode d'établissement est « implicite », c'est-à-dire que la relation n'est pas reflétée dans le code, mais il y a la « substance » de sa connexion en interne.

  • Cette méthode de connexion implicite est généralement reflétée dans l'instruction conditionnelle Where de la sous-requête, en utilisant les données (champs) de la table de requête principale

  • Exemple :

    Interrogez tous les produits avec le mot « électricité » dans leurs noms de catégorie dans le tableau des produits ;

  • Une brève introduction à la sous-requête MySQL

  • Le résultat est :


Une brève introduction à la sous-requête MySQLRemarque :

- Ce type d'instruction de sous-requête ne peut pas « exister indépendamment (s'exécuter indépendamment) », mais doit être utilisé avec la requête principale

 ; - D'autres sous-requêtes peuvent être exécutées indépendamment et obtiendront un résultat courant.
- Les conditions de cette sous-requête doivent être définies pour avoir une certaine corrélation avec un certain champ de la requête principale. Habituellement, ce jugement est la "condition de connexion originale" des deux tables

Enfin une conclusion :

Si une exigence de requête peut être obtenue à l'aide d'une requête de jointure ou d'une sous-requête, il est généralement recommandé d'utiliser l'interpolation de jointure, qui est plus efficace.

Recommandations associées :

Introduction détaillée à la sous-requête MySQL

Qu'est-ce qu'une sous-requête MySQL ? Comment filtrer à l'aide d'une sous-requête ?

Optimisation des sous-requêtes 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