Requête conjoin...LOGIN

Requête conjointe multi-tables Mysql

Souvent, dans les affaires réelles, nous ne nous contentons pas d'interroger une table.

  1. Dans le système de commerce électronique, recherchez quels utilisateurs n'ont pas acheté de produits.

  2. La banque peut interroger les enregistrements de violation, et en même temps interroger l'utilisateur

  3. interroger les informations gagnantes et les informations de base du gagnant .

Si ce qui précède n'est qu'une situation de colonne, nous devons interroger les deux tables ensemble.

Dans les activités mentionnées ci-dessus, plusieurs tables doivent être réunies pour interroger afin d'obtenir des résultats, et l'essence d'une requête conjointe multi-tables est : la connexion de tables.

Connexion de table

Lorsque vous devez interroger des champs dans plusieurs tables, vous pouvez utiliser la connexion de table. Les jointures de table sont divisées en jointures internes et jointures externes.

  1. Jointure interne : joignez les enregistrements dont les champs dans les deux tables ont une relation de jointure qui correspond à la relation de jointure pour former un jeu d'enregistrements.

  2. Jointure externe : d'autres enregistrements sans correspondance seront sélectionnés, divisés en jointure externe gauche et jointure externe droite.

Avant l'expérience d'apprentissage, j'ai préparé deux tableaux de données simulés pour tout le monde :

  1. Tableau utilisateur pour stocker les informations utilisateur
  2. Tableau de commande, qui stocke quel utilisateur a acheté quel produit

déclaration de création de table utilisateur

CREATE TABLE IF NOT EXISTS user (
uid int(11) PAS NULL,
username varchar(30) PAS NULL,
password char(32) PAS NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS order_goods (
oid int(11) NOT NULL,
uid int(11) NOT NULL,
name varchar(50) NON NULL,
buytime int(11) NON NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

les données de la table utilisateur sont les suivantes :

uidusernamepassword
1景甜123456
2王小二245667
3王宝强1235531
4井柏然123455
5范冰冰5abcwa
6黄晓明abcdeef
7anglebabycaption
8TFBOYSabcdwww
9安小超12tfddwd
10高小峰3124qwqw
11李小强323fxfvdvd
12李小超311aqqee
13韩小平121rcfwrfq
14宋小康123123tcsd
15佟小刚3cxvdfs

Les données order_goods sont les suivantes :

oiduidnamebuytime
110苹果鼠标1212313
23iphone 12s123121241
312雪碧13232333
415
34242123
53iphone 键盘12123413

Remarque : Dans la table order_goods ci-dessus, uid fait référence au champ uid dans la table user. Dans le tableau ci-dessus, la ligne de données avec oid est 1 et l'utilisateur avec uid est 10. Pour l'utilisateur avec l'uid 10 dans la table utilisateur : Gao Xiaofeng. L'utilisateur a acheté une souris Apple. L'heure d'achat est un horodatage Unix.

Jointure interne

Syntaxe de base 1 :

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 [别名],表n where 条件;
示例select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user,order_goods  where user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

Remarque : Dans l'exemple suivant, la table from utilise des alias de table.

Le nom de la table étant trop long, il est facile de faire des erreurs à chaque fois que vous l'écrivez. Nous pouvons suivre le tableau directement avec une chaîne anglaise abrégée. Lors de l'épissage de champs plus tôt, utilisez simplement l'abréviation string.field.

mysql> sélectionnez u.uid,u.username comme nom d'utilisateur,o.oid,o.uid,o.name comme nom de boutique de l'utilisateur u,order_goods o où u.uid = o.uid ;
+-----+-----------+-----+-----+---------------+
| identifiant | nom d'utilisateur | identifiant | nom de la boutique |
+-----+-----------+-----+-----+---------------+
| 10 | Gao Xiaofeng | 1 | 10 | Pomme Souris |
| |12 |Li Xiaochao |3 |12 |
|15 |Tong Xiaogang |4 |15 |
| 3 | Li Wenkai | 5 | 3 | clavier iphone |
+-----+-----------+-----+-----+---------------+
5 lignes dans l'ensemble (0,00 sec)

Syntaxe de base 2 :

Le résultat est conforme à la grammaire de base 1.

mysql> sélectionnez user.uid, user.username comme nom d'utilisateur,order_goods.oid,order_goods.uid,order_goods.name comme nom de boutique de l'utilisateur, rejoignez order_goods sur user.uid = order_goods. uid;
+-----+-----------+-----+-----+---------------+
| identifiant | nom d'utilisateur | identifiant | nom de la boutique |
+-----+-----------+-----+-----+---------------+
| 10 | Gao Xiaofeng | 1 | 10 | Pomme Souris |
| |12 |Li Xiaochao |3 |12 |
|15 |Tong Xiaogang |4 |15 |
| 3 | Wang Baoqiang | 5 | 3 | clavier iphone |
+-----+-----------+-----+-----+---------------+
5 lignes dans l'ensemble (0,00 sec)

Jointure externe

Les jointures externes sont divisées en jointures gauches et liens droits. Les définitions spécifiques sont les suivantes.

Jointure gauche : contient tous les enregistrements de la table de gauche, même les enregistrements qui ne correspondent pas à ceux de la table de droite

mysql> .uid = order_goods.uid;
+-----+---------------+------------+------+ - -----+---------------+-----------+
| nom d'utilisateur | mot de passe oid | heure d'achat |
+-----+-----------+------------+------+----- - +---------------+---------+
| 10 | Gao Xiaofeng | 3124qwqw 1 | 10 | >| 3 | dfs | 4 | 15 | 34242123 |
| 3 | 1235531 | 5 | 3 | Wang Xiao二 | NULL | NULL | NULL |
| abcdeef | NULL | NULL |
| 7 | anglebaby | NULL |
| 9 | ----------+------+------+---------------+------ --- -+
16 lignes dans l'ensemble (0,00 sec)

Jointure à droite : contient tous les enregistrements de la table de droite, même les enregistrements qui ne correspondent pas à la table de droite

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 right JOIN 表n on  条件;
示例select *  from user right join order_goods  on  user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

mysql> .uid = order_goods.uid;
+------+---------------+----------+-----+-- - --+--------------+----------+
| nom d'utilisateur | mot de passe | nom d'utilisateur | 🎜>+------+-----------+----------+-----+-----+---- - ----------+----------+
| 10 | Gao Xiaofeng | 3124qwqw | 10 | Baoqiang | 2 | 3 | iphone 123121241 |
| 15 | 34242123 |
| 3 | Wang Baoqiang | 1235531 | 5 | 3 | clavier iphone |
+-------+---------+-------- --- +-----+-----+---------------+---------------+
5 lignes dans set (0,00 sec)

Sous-requête

Parfois, lorsque nous interrogeons, la condition requise est le résultat d'une autre instruction select, nous devons alors utiliser une sous-requête. Les mots clés utilisés pour les sous-requêtes incluent dans, pas dans, =, !=, existe, n'existe pas, etc.

Exemple 1 :

mysql> sélectionnez * de l'utilisateur où l'uid est dans (1,3,4);
+-----+-----------+----------+
| identifiant | nom d'utilisateur | mot de passe |
+-----+-----------+----------+
| 1 | Jing Tian | 123456 |
|3 |Wang Baoqiang |1235531 |
| 4 |Jing Boran | 123455 |
+-----+-----------+----------+
3 lignes dans l'ensemble (0,00 sec)

Exemple 2 :

mysql> ;
+-----+-----------+----------+
| identifiant | nom d'utilisateur | mot de passe |
+-----+-----------+----------+
|10 |Gao Xiaofeng |3124qwqw |
|3 |Wang Baoqiang |1235531 |
|12 |Li Xiaochao |311aqqee |
|15 |Tong Xiaogang |3cxvdfs |
+-----+-----------+----------+
4 lignes dans l'ensemble (0,00 sec)

mysql> sélectionnez * depuis emp où deptno in (sélectionnez deptno dans dept);

Enregistrez l'union

Utilisez l'union et Le mot-clé union all est utilisé pour interroger les données des deux tables selon certaines conditions de requête, puis fusionner les résultats et les afficher ensemble. La principale différence entre les deux est que les résultats sont directement fusionnés, tandis que l'union est le résultat de l'exécution d'une opération distincte sur les résultats après l'union et de la suppression des enregistrements en double.

类别详细解示
基本语法select语句1 union[all] select语句2
示例select *  from user where uid in (1,3,4);
示例说明将商品表中的用户信息和用户表中的用户信息的结果组合在一起

mysql> sélectionnez l'uid de l'union des utilisateurs, sélectionnez l'uid de order_goods ;
+-----+
| uide |
+-----+
|1 |
|2 |
| 3 |
| 4 |
| 5 |
|6 |
|7 |
| 8 |
|9|
|10 |
|11 |
|12 |
|13 |
|14 |
|15 |
+-----+
15 lignes par série (0,00 sec)

section suivante
<?php echo "Hello Mysql"; ?>
soumettreRéinitialiser le code
chapitredidacticiel