Maison > Article > base de données > En savoir plus sur les requêtes logiques dans MySQL
La requête est l'opération la plus fréquente dans MySQL, et c'est également la base de la construction du traitement des requêtes DELETE et UPDATE qui peut être divisé en requêtes logiques et requêtes physiques. Aujourd'hui, nous allons vous présenter la requête logique en détail. J'espère qu'elle vous sera utile !
Dans MySQL, la requête est la base de la construction de DELETE et UPDATE, car lorsque vous souhaitez les supprimer ou les mettre à jour, vous devez d'abord trouver ces enregistrements, donc SELECT est particulièrement important pour le traitement des requêtes, il peut être divisé. into Ce sont des requêtes logiques et des requêtes physiques. La requête logique indique quel type de résultats doit être produit lors de l'exécution de l'instruction SELECT, et la requête physique indique comment MySQL obtient ce résultat. [Recommandations associées : Tutoriel vidéo mysql]
Ce chapitre parlera des requêtes logiques.
Dans une instruction SQL, l'instruction FROM est traitée en premier et l'instruction LIMIT est exécutée en dernier Si toutes les instructions sont utilisées, telles que GROUP BY et ORDER BY, elle peut être grossièrement divisée en 10 étapes, comme indiqué ci-dessous, chacune. L’opération générera une table virtuelle.
(7) select (8)distinct<select_list> (1) from <left table> (3) <join_type> join <right_table> (2) on<条件> (4) where <条件> (5) group by<字段list> (6) having<条件> (9) order by<字段> (10) limit
Analysons-le à travers un exemple pratique, créons d'abord deux tables, utilisateurs et commandes.
mysql> create table user (userId int(11),userName varchar(255),city varchar(255), primary key (userId)); Query OK, 0 rows affected, 1 warning (0.05 sec) mysql> create table orders(orderId int(11) ,userId int(11) ,primary key (orderId)); Query OK, 0 rows affected, 2 warnings (0.05 sec)
Insérer des données.
insert user values(1,"张三","内蒙"); insert user values(2,"李四","内蒙"); insert user values(3,"王五","北京"); insert user values(4,"迪迦","西藏"); insert user values(5,"金甲战士","内蒙"); insert orders values(10001,1); insert orders values(10002,1); insert orders values(10003,4); insert orders values(10004,1); insert orders values(10005,1); insert orders values(10006,4); insert orders values(10007,2);
D'accord, interrogeons maintenant les utilisateurs de Mongolie intérieure dont la quantité commandée est inférieure à 3. Le SQL est le suivant.
mysql> select userName,count(orders.orderId) as total from user left join orders on user.userId = orders.userId where city="内蒙" group by user.userId having count(orders.orderId)<3 order by total desc; +--------------+-------+ | userName | total | +--------------+-------+ | 李四 | 1 | | 金甲战士 | 0 | +--------------+-------+ 2 rows in set (0.00 sec)
Il y a des données et du SQL. Analysons le processus spécifique.
1. Produit cartésien
La première chose à faire est d'effectuer un produit cartésien sur les deux tables avant et après l'instruction FROM Alors, qu'est-ce qu'un produit cartésien ? Par exemple, en supposant que l'ensemble A={a, b} et l'ensemble B={0, 1, 2}, le produit cartésien des deux ensembles est {(a, 0), (a, 1), ( a , 2), (b, 0), (b, 1), (b, 2)}.
Ainsi, correspondant aux données ci-dessus, une table virtuelle VT1 sera finalement générée, qui contiendra 35 lignes de données. Les données spécifiques sont les suivantes.
userId | userName | city | orderId | userId |
---|---|---|---|---|
1 | Zhang San | Mongolie intérieure | 100 0 1 | 1 |
1 | Zhang San | Mongolie intérieureMongolie intérieure | 10005 | 1 |
1 | Zhang Trois | Mongolie intérieure | 10006 | 1 |
1 | Zhang San | Mongolie intérieure | 10005 | 4 |
1 | Zhang San | Mongolie intérieure | 10007 | 2 |
.................. | ||||
5 | Guerrier Armure Dorée | Mongolie intérieure | ||
1 | |
5 | Guerrier à l'armure dorée
Mongolie intérieure |
10002 | 1
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!