Requête conjointe de plusieurs tables

Requête conjointe multi-tables

Connexion de table

Lorsque vous devez interroger des champs dans plusieurs tables, Ceci peut être réalisé en utilisant des jointures de tables. Les jointures de table sont divisées en jointures internes et jointures externes.

1. Jointure interne : une jointure qui forme un ensemble d'enregistrements en combinant les enregistrements dont les champs dans les deux tables ont une relation de connexion et correspondent à la relation de connexion.

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

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

1. Table utilisateur, qui stocke les informations utilisateur

2. Quel produit l'utilisateur a-t-il acheté ?

Déclaration de création de table utilisateur

     CREATE TABLE IF NOT EXISTS user (
 uid int(11) NOT NULL,
 username varchar(30) NOT NULL,
 password char(32) NOT 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) NOT NULL,
 buytime int(11) NOT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

QQ截图20161009160016.png

QQ截图20161009160030.png

QQ截图20161009160042.png


Remarque : dans la table order_goods ci-dessus, uid fait référence au champ uid de 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

QQ截图20161009160110.png

Remarque : dans l'exemple suivant, la table from utilise un 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> select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_goods o where u.uid = o.uid;
 +-----+-----------+-----+-----+---------------+
 | uid | username | oid | uid | shopname |
 +-----+-----------+-----+-----+---------------+
 | 10 | 高小峰 | 1 | 10 | 苹果鼠标 |
 | 3 | 李文凯 | 2 | 3 | iphone 12s |
 | 12 | 李小超 | 3 | 12 | 雪碧 |
 | 15 | 佟小刚 | 4 | 15 | |
 | 3 | 李文凯 | 5 | 3 | iphone 键盘 |
 +-----+-----------+-----+-----+---------------+
 5 rows in set (0.00 sec)

Grammaire de base 2 :

QQ截图20161009160138.png

Le résultat est cohérent avec la grammaire de base 1.

mysql> select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user inner join order_goods on user.uid = order_goods.uid;
 +-----+-----------+-----+-----+---------------+
 | uid | username | oid | uid | shopname |
 +-----+-----------+-----+-----+---------------+
 | 10 | 高小峰 | 1 | 10 | 苹果鼠标 |
 | 3 | 李文凯 | 2 | 3 | iphone 12s |
 | 12 | 李小超 | 3 | 12 | 雪碧 |
 | 15 | 佟小刚 | 4 | 15 | |
 | 3 | 李文凯 | 5 | 3 | iphone 键盘 |
 +-----+-----------+-----+-----+---------------+
 5 rows in set (0.00 sec)

Jointure externe

QQ截图20161009160204.png

La jointure externe est divisée en jointure gauche et lien droit, les définitions spécifiques sont les suivants.

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

mysql> select * from user left join order_goods on user.uid = order_goods.uid;
 +-----+-----------+------------+------+------+---------------+-----------+
 | uid | username | password | oid | uid | name | buytime |
 +-----+-----------+------------+------+------+---------------+-----------+
 | 10 | 高小峰 | 3124qwqw | 1 | 10 | 苹果鼠标 | 1212313 |
 | 3 | 李文凯 | 1235531 | 2 | 3 | iphone 12s | 123121241 |
 | 12 | 李小超 | 311aqqee | 3 | 12 | 雪碧 | 13232333 |
 | 15 | 佟小刚 | 3cxvdfs | 4 | 15 | | 34242123 |
 | 3 | 李文凯 | 1235531 | 5 | 3 | iphone 键盘 | 12123413 |
 | 1 | 景甜 | 123456 | NULL | NULL | NULL | NULL |
 | 2 | 王小二 | 245667 | NULL | NULL | NULL | NULL |
 | 4 | 井柏然 | 123455 | NULL | NULL | NULL | NULL |
 | 5 | 范冰冰 | 5abcwa | NULL | NULL | NULL | NULL |
 | 6 | 黄晓明 | abcdeef | NULL | NULL | NULL | NULL |
 | 7 | anglebaby | caption | NULL | NULL | NULL | NULL |
 | 8 | TFBOYS | abcdwww | NULL | NULL | NULL | NULL |
 | 9 | 安小超 | 12tfddwd | NULL | NULL | NULL | NULL |
 | 11 | 李小强 | 323fxfvdvd | NULL | NULL | NULL | NULL |
 | 13 | 韩小平 | 121rcfwrfq | NULL | NULL | NULL | NULL |
 | 14 | 宋小康 | 123123tcsd | NULL | NULL | NULL | NULL |
 +-----+-----------+------------+------+------+---------------+-----------+
 16 rows in set (0.00 sec)

Jointure droite : contient tous les enregistrements de la table de droite, même les enregistrements de la table de droite table de droite Il n'y a aucun enregistrement correspondant dans

QQ截图20161009160220.png

mysql> select * from user right join order_goods on user.uid = order_goods.uid;
 +------+-----------+----------+-----+-----+---------------+-----------+
 | uid | username | password | oid | uid | name | buytime |
 +------+-----------+----------+-----+-----+---------------+-----------+
 | 10 | 高小峰 | 3124qwqw | 1 | 10 | 苹果鼠标 | 1212313 |
 | 3 | 李文凯 | 1235531 | 2 | 3 | iphone 12s | 123121241 |
 | 12 | 李小超 | 311aqqee | 3 | 12 | 雪碧 | 13232333 |
 | 15 | 佟小刚 | 3cxvdfs | 4 | 15 | | 34242123 |
 | 3 | 李文凯 | 1235531 | 5 | 3 | iphone 键盘 | 12123413 |
 +------+-----------+----------+-----+-----+---------------+-----------+
 5 rows in set (0.00 sec)

Sous-requête

Parfois, lorsque nous interrogeons, la condition requise est le résultat d'une autre instruction select, auquel cas nous devons 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.


QQ截图20161009160240.png

Exemple 1 :

mysql> select * from user where uid in (1,3,4);
 +-----+-----------+----------+
 | uid | username | password |
 +-----+-----------+----------+
 | 1 | 景甜 | 123456 |
 | 3 | 李文凯 | 1235531 |
 | 4 | 井柏然 | 123455 |
 +-----+-----------+----------+
 3 rows in set (0.00 sec)

Exemple 2 :

mysql> select * from user where uid in (select uid from order_goods);
 +-----+-----------+----------+
 | uid | username | password |
 +-----+-----------+----------+
 | 10 | 高小峰 | 3124qwqw |
 | 3 | 李文凯 | 1235531 |
 | 12 | 李小超 | 311aqqee |
 | 15 | 佟小刚 | 3cxvdfs |
 +-----+-----------+----------+
 4 rows in set (0.00 sec)
rrree

Union d'enregistrement

Utilisez les mots-clés union et union all pour interroger les données des deux tables selon certaines conditions de requête, puis fusionnez les résultats pour les afficher. 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.


QQ截图20161009160259.png

mysql> select * from emp where deptno in (select deptno from dept);


Formation continue
||
<?php echo "Hello Mysql"; ?>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel