Vérification rapide MySQL
Parce que j'oublie souvent certaines instructions, mots-clés, opérations, etc. MySQL dans mon travail et mes études quotidiens, j'ai récemment pris le temps d'écrire le contenu suivant sur MySQL. C'est comme un dictionnaire
Réinitialiser le mot de passe MySQL Opérateurs
de type de données Fonctions communes Intégrité des données Opérations de base de la base de données Opérations sur la table elle-même Opérations sur les données de la table Sous-requêtes Cet article Vue d'index prétraitement des instructions SQL Fonctions personnalisées et procédures stockées Programmation dans MySQL
Jointure de plusieurs tables
écrire devant
Pour plus de détails, veuillez visiter la clause de jointure
Tableaux utilisés
mysql> desc user;
+-------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | char(10) | YES | | NULL | |
| sex | enum('f','m') | YES | | NULL | |
+-------+---------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> desc commodity;
+---------+-----------+------+-----+--------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------+------+-----+--------------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| price | int | NO | | NULL | |
| name | char(128) | YES | | 匿名商品 | |
| user_id | int | YES | | NULL | |
+---------+-----------+------+-----+--------------+----------------+
4 rows in set (0.00 sec)
données dans le tableau
mysql> select * from user;
+----+--------+------+
| id | name | sex |
+----+--------+------+
| 1 | 铁子 | m |
| 2 | 嘎子 | m |
| 3 | 潘子 | m |
| 4 | 翠花 | f |
| 5 | 阿秀 | f |
+----+--------+------+
5 rows in set (0.00 sec)
mysql> select * from commodity;
+----+-------+--------+---------+
| id | price | name | user_id |
+----+-------+--------+---------+
| 1 | 100 | 手机 | 1 |
| 2 | 299 | 电脑 | 1 |
| 3 | 18990 | 假酒 | 3 |
| 4 | 18990 | 中华 | 3 |
| 5 | 18 | 中华 | 2 |
+----+-------+--------+---------+
5 rows in set (0.00 sec)
jointure interne
jointure interne
Le résultat de la requête de jointure interne contient uniquement les lignes qui remplissent les conditions.
select user.name as 姓名,user.sex as 性别,commodity.name as 商品名称
from user
inner join commodity
on user.id = commodity.user_id;
+--------+--------+--------------+
| 姓名 | 性别 | 商品名称 |
+--------+--------+--------------+
| 铁子 | m | 手机 |
| 铁子 | m | 电脑 |
| 潘子 | m | 假酒 |
| 潘子 | m | 中华 |
| 嘎子 | m | 中华 |
+--------+--------+--------------+
5 rows in set (0.00 sec)
# 只显示符合"user.id = commodity.user_id"条件的行
# 还可以通过其他字句进一步筛选,如:
select user.name as 姓名,user.sex as 性别,commodity.name as 商品名称
from user
inner join commodity
on user.id = commodity.user_id
where commodity.price > 100;
+--------+--------+--------------+
| 姓名 | 性别 | 商品名称 |
+--------+--------+--------------+
| 铁子 | m | 电脑 |
| 潘子 | m | 假酒 |
| 潘子 | m | 中华 |
+--------+--------+--------------+
3 rows in set (0.00 sec)
jointure externe
jointure externe gauche
Les résultats de la requête de jointure [externe] gauche
incluent les lignes qui remplissent les conditions et toutes les lignes de la table de gauche.
select user.name as 姓名,user.sex as 性别,commodity.name as 商品名称
from user
left join commodity
on user.id = commodity.user_id;
+--------+--------+--------------+
| 姓名 | 性别 | 商品名称 |
+--------+--------+--------------+
| 铁子 | m | 电脑 |
| 铁子 | m | 手机 |
| 嘎子 | m | 中华 |
| 潘子 | m | 中华 |
| 潘子 | m | 假酒 |
| 翠花 | f | NULL |
| 阿秀 | f | NULL |
+--------+--------+--------------+
7 rows in set (0.00 sec)
# “翠花”和“阿秀”不满足条件,也会显示出来
Jointure [externe] droite
Le résultat de la requête de jointure [externe] droite
contient les lignes qui remplissent les conditions et toutes les lignes de la table de gauche.
select user.name as 姓名,user.sex as 性别,commodity.name as 商品名称
from user
right join commodity
on user.id = commodity.user_id;
+--------+--------+--------------+
| 姓名 | 性别 | 商品名称 |
+--------+--------+--------------+
| 铁子 | m | 手机 |
| 铁子 | m | 电脑 |
| 潘子 | m | 假酒 |
| 潘子 | m | 中华 |
| 嘎子 | m | 中华 |
+--------+--------+--------------+
5 rows in set (0.00 sec)
# 因为我的右表的全部行都满足条件,所以左表列中没有显示NULL
connexion croisée
Le résultat de la jointure croisée
contient la combinaison (produit cartésien) de toutes les lignes des deux tables.
select user.name as 姓名,user.id as uid,commodity.id as cid
from user
cross join commodity;
+--------+-----+-----+
| 姓名 | uid | cid |
+--------+-----+-----+
| 铁子 | 1 | 5 |
| 铁子 | 1 | 4 |
| 铁子 | 1 | 3 |
| 铁子 | 1 | 2 |
| 铁子 | 1 | 1 |
| 嘎子 | 2 | 5 |
| 嘎子 | 2 | 4 |
| 嘎子 | 2 | 3 |
| 嘎子 | 2 | 2 |
| 嘎子 | 2 | 1 |
| 潘子 | 3 | 5 |
| 潘子 | 3 | 4 |
| 潘子 | 3 | 3 |
| 潘子 | 3 | 2 |
| 潘子 | 3 | 1 |
| 翠花 | 4 | 5 |
| 翠花 | 4 | 4 |
| 翠花 | 4 | 3 |
| 翠花 | 4 | 2 |
| 翠花 | 4 | 1 |
| 阿秀 | 5 | 5 |
| 阿秀 | 5 | 4 |
| 阿秀 | 5 | 3 |
| 阿秀 | 5 | 2 |
| 阿秀 | 5 | 1 |
+--------+-----+-----+
25 rows in set (0.00 sec)