mysql基础(3)

多表联查

多表联查

投影查询 简写

加where

使用多表查询可以获取M x N行记录(M,N为两个表各自的行数)
多表查询的结果集可能非常巨大,要小心使用。

内连接

mysql>   SELECT  s.id, s.name,`s`.`class id`, s.nickname,s.sex,c.name,s.in_time,s.is_vaild FROM students s INNER JOIN class c ON `s`.`class id` = c.id;
+----+---------+----------+-----------+------+--------------+---------------------+----------+
| id | name    | class id | nickname  | sex  | name         | in_time             | is_vaild |
+----+---------+----------+-----------+------+--------------+---------------------+----------+
|  7 | weilai  |      202 | imwl      | 男   | 二年二班     | 2018-12-27 22:05:41 |        1 |
|  8 | weilai  |      202 | imwl      | 男   | 二年二班     | 2018-12-27 22:05:41 |        2 |
|  9 | weilai  |      202 | imwl      | 男   | 二年二班     | 2018-12-27 22:05:41 |     NULL |
| 10 | weilai2 |      201 | imwl      | 男   | 二年一班     | 2018-12-27 22:05:41 |     NULL |
| 12 | name1   |      201 | nickname1 | 女   | 二年一班     | NULL                |     NULL |
| 13 | name2   |      201 | nickname2 | 男   | 二年一班     | NULL                |     NULL |
| 19 | 2       |      301 | i         | 男   | 三年一班     | 2019-02-27 12:02:04 |     NULL |
| 20 | 3       |      301 | m         | 女   | 三年一班     | 2019-02-27 12:02:04 |     NULL |
| 21 | 4       |      302 | w         | 男   | 三年二班     | 2019-02-27 12:02:04 |     NULL |
| 22 | 5       |      302 | l         | 男   | 三年二班     | 2019-02-27 12:02:04 |     NULL |
+----+---------+----------+-----------+------+--------------+---------------------+----------+

INNER JOIN查询的写法是:

先确定主表,仍然使用FROM <表1>的语法;
再确定需要连接的表,使用INNER JOIN <表2>的语法;
然后确定连接条件,使用ON <条件...>,这里的条件是s.class id = c.id,表示students表的class id列与class表的id列相同的行需要连接;
可选:加上WHERE子句、ORDER BY等子句。

小结

JOIN查询需要先确定主表,然后把另一个表的数据“附加”到结果集上;

INNER JOIN是最常用的一种JOIN查询,它的语法是SELECT ... FROM <表1> INNER JOIN <表2> ON <条件...>;

JOIN查询仍然可以使用WHERE条件和ORDER BY排序。

补充知识

假设查询语句是:

SELECT ... FROM tableA ??? JOIN tableB ON tableA.column1 = tableB.column2;

我们把tableA看作左表,把tableB看成右表,那么INNER JOIN是选出两张表都存在的记录:

inner-join

LEFT OUTER JOIN是选出左表存在的记录:

left-outer-join

RIGHT OUTER JOIN是选出右表存在的记录:

right-outer-join

FULL OUTER JOIN则是选出左右表都存在的记录:

full-outer-join

你可能感兴趣的:(mysql基础(3))