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技术内幕:SQL编程 姜承尧 第1章 SQL编程 >> B是由MySQL创始人之一Monty分支的一个版...
    沉默剑士阅读 2,475评论 0 3
  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 824评论 0 3
  • 1. 了解SQL 1.1 数据库基础 ​ 学习到目前这个阶段,我们就需要以某种方式与数据库打交道。在深入学习MyS...
    锋享前端阅读 1,139评论 0 1
  • 那天,烈日与棉衣相遇 招来了汗珠的嫉妒 我从背后拿出这束花 阳光照在我们身上呈现出了彩虹 我不了解什么花语 我给她...
    Dr熊猫阅读 315评论 0 0
  • 我再次想到那个眉眼弯弯的女子 长发飘逸 她曾被交给九月 那时的月光 开始变冷 枝头 衍生出一枚新叶 那年那天 恰好...
    韩倾阅读 265评论 2 3