Maison > base de données > tutoriel mysql > MYSQL 内外连接

MYSQL 内外连接

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-06-07 15:46:57
original
1140 Les gens l'ont consulté

假设student表有如下记录: +--------+----------+---------+-----------+| stu_id | stu_name | stu_tel | stu_score |+--------+----------+---------+-----------+| 1 | a | 151 | 60 || 2 | b | 152 | 61 || 3 | c | 153 | 62 |+--------+----------+---

假设student表有如下记录:

+--------+----------+---------+-----------+
| stu_id | stu_name | stu_tel | stu_score |
+--------+----------+---------+-----------+
|      1 | a        |     151 |        60 |
|      2 | b        |     152 |        61 |
|      3 | c        |     153 |        62 |
+--------+----------+---------+-----------+
Copier après la connexion

teacher表有如下记录:
+--------+----------+---------+---------+--------+
| tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+---------+--------+
|      1 | A        |     130 |    3000 |      1 |
|      2 | B        |     131 |    4000 |      2 |
|      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+---------+--------+
Copier après la connexion

连接可分为以下几类:                 
内连接。       

内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行,也可以使用显示内连接:inner join ,没有包含一个连接条件时,;结果就是一个笛卡尔积。

mysql> select * from student inner join teacher;(类似于select * from student,teacher;)
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      1 | A        |     130 |    3000 |      1 |
|      3 | c        |     153 |        62 |      1 | A        |     130 |    3000 |      1 |
|      1 | a        |     151 |        60 |      2 | B        |     131 |    4000 |      2 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|      3 | c        |     153 |        62 |      2 | B        |     131 |    4000 |      2 |
|      1 | a        |     151 |        60 |      3 | C        |     132 |    4000 |      0 |
|      2 | b        |     152 |        61 |      3 | C        |     132 |    4000 |      0 |
|      3 | c        |     153 |        62 |      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
Copier après la connexion

外连接。外连接可以是左向外连接、右向外连接。

在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:   
左向外连接:left join 或者left outer join    
左向外连接的结果集包括left join子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 

mysql> select * from student left join teacher on student.stu_id=teacher.stu_id;
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|      3 | c        |     153 |        62 |   NULL | NULL     |    NULL |    NULL |   NULL |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
Copier après la connexion

右向外连接:right join  或  right outer join 。     
右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
mysql> select * from student right join teacher on student.stu_id=teacher.stu_id;
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|   NULL | NULL     |    NULL |      NULL |      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
Copier après la connexion

自然连接
在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
mysql> select * from student natural join teacher;
+--------+----------+---------+-----------+--------+----------+---------+---------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay |
+--------+----------+---------+-----------+--------+----------+---------+---------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |
+--------+----------+---------+-----------+--------+----------+---------+---------+
Copier après la connexion

交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。如果没有包含一个连接条件,交叉连接的结果就是一个笛卡尔积。  
mysql> select * from student cross join teacher;
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      1 | A        |     130 |    3000 |      1 |
|      3 | c        |     153 |        62 |      1 | A        |     130 |    3000 |      1 |
|      1 | a        |     151 |        60 |      2 | B        |     131 |    4000 |      2 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|      3 | c        |     153 |        62 |      2 | B        |     131 |    4000 |      2 |
|      1 | a        |     151 |        60 |      3 | C        |     132 |    4000 |      0 |
|      2 | b        |     152 |        61 |      3 | C        |     132 |    4000 |      0 |
|      3 | c        |     153 |        62 |      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
Copier après la connexion

如果要连接的列的名字相同,并且连接条件就是两者相等,那么也可以使用using,只需把on语句用using替换即可;
mysql> select * from student inner join teacher using(stu_id);
+--------+----------+---------+-----------+--------+----------+---------+---------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay |
+--------+----------+---------+-----------+--------+----------+---------+---------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |
+--------+----------+---------+-----------+--------+----------+---------+---------+
Copier après la connexion


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Derniers numéros
MySQL arrête le processus
Depuis 1970-01-01 08:00:00
0
0
0
Env中mysql
Depuis 1970-01-01 08:00:00
0
0
0
Erreur lors de l'installation de MySQL sous Linux
Depuis 1970-01-01 08:00:00
0
0
0
php - problème de surveillance MySQL
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal