1、内连接查询(重点):
基本语法:
select 数据表1.字段列表,数据表2.字段列表 from 数据表1 inner join 数据表2 on 连接条件;
案例:获取产品表中每个产品的分类信息:
mysql> select * from tb_goods inner join tb_category;
+----+-------------+---------+------+----+--------------+------+
| id | title | price | cid | id | name | pid |
+----+-------------+---------+------+----+--------------+------+
| 1 | IPhone 11 | 5699.00 | 1 | 1 | 手机 | 0 |
| 1 | IPhone 11 | 5699.00 | 1 | 2 | 电脑 | 0 |
| 1 | IPhone 11 | 5699.00 | 1 | 3 | 游戏手机 | 1 |
| 2 | MI 10 | 4699.00 | 1 | 1 | 手机 | 0 |
| 2 | MI 10 | 4699.00 | 1 | 2 | 电脑 | 0 |
| 2 | MI 10 | 4699.00 | 1 | 3 | 游戏手机 | 1 |
| 3 | ThinkPad X1 | 9999.00 | 2 | 1 | 手机 | 0 |
| 3 | ThinkPad X1 | 9999.00 | 2 | 2 | 电脑 | 0 |
| 3 | ThinkPad X1 | 9999.00 | 2 | 3 | 游戏手机 | 1 |
| 4 | Nike air | 999.00 | 10 | 1 | 手机 | 0 |
| 4 | Nike air | 999.00 | 10 | 2 | 电脑 | 0 |
| 4 | Nike air | 999.00 | 10 | 3 | 游戏手机 | 1 |
+----+-------------+---------+------+----+--------------+------+
12 rows in set (0.00 sec)mysql> select * from tb_goods inner join tb_category on tb_goods.cid = tb_category.id;
+----+-------------+---------+------+----+--------+------+
| id | title | price | cid | id | name | pid |
+----+-------------+---------+------+----+--------+------+
| 1 | IPhone 11 | 5699.00 | 1 | 1 | 手机 | 0 |
| 2 | MI 10 | 4699.00 | 1 | 1 | 手机 | 0 |
| 3 | ThinkPad X1 | 9999.00 | 2 | 2 | 电脑 | 0 |
+----+-------------+---------+------+----+--------+------+
3 rows in set (0.00 sec)
然后,我们只要部分字段,那我们就要进行具体指定:
mysql> select tb_goods.*,tb_category.name from tb_goods inner join tb_category on tb_goods.cid = tb_cat
egory.id;
+----+-------------+---------+------+--------+
| id | title | price | cid | name |
+----+-------------+---------+------+--------+
| 1 | IPhone 11 | 5699.00 | 1 | 手机 |
| 2 | MI 10 | 4699.00 | 1 | 手机 |
| 3 | ThinkPad X1 | 9999.00 | 2 | 电脑 |
+----+-------------+---------+------+--------+
3 rows in set (0.00 sec)
产品表中的所有的字段和产品目录中的name字段。
内连接查询:把两个表甚至多个表进行连接,然后拿表1中的每一条记录与表2中的每一条记录进行匹配,如果有与之对应的结果,则显示。反之,则忽略这条记录。
2、外连接查询(重点):
内连接查询要求,表1和表2中的每一条记录都必须一一对应,如果无法匹配,则这条记录会被忽略掉,那如果我需要保留表1中的所有记录或者表2中的所有记录,怎么办?
答:使用外连接查询。
基本语法:
左外连接查询;把左表中的每一条数据都保留,右表匹配到结果就显示,匹配不到就NULL
select 数据表1.字段列表,数据表2.字段列表 from 数据表1 left join 数据表2 on 连接条件;
右外连接查询:把右表中的每一条数据都保留,左表匹配到结果就显示,匹配不到就NULL
select 数据表1.字段列表,数据表2.字段列表 from 数据表1 right join 数据表2 on 连接条件;
案例:获取产品表中的每个产品的分类信息,(无论匹配到与否)
mysql> select tb_goods.*,tb_category.name from tb_goods left join tb_category on tb_goods.cid = tb_category.id;
+----+-------------+---------+------+--------+
| id | title | price | cid | name |
+----+-------------+---------+------+--------+
| 1 | IPhone 11 | 5699.00 | 1 | 手机 |
| 2 | MI 10 | 4699.00 | 1 | 手机 |
| 3 | ThinkPad X1 | 9999.00 | 2 | 电脑 |
| 4 | Nike air | 999.00 | 10 | NULL |
+----+-------------+---------+------+--------+
4 rows in set (0.00 sec)
别名机制,简化内外连接
原始语句:
mysql> select tb_goods.*,tb_category.name from tb_goods left join tb_category on tb_goods.cid=tb_category.id;
给数据表起个简单的名字,如tb_category叫c,tb_goods叫g
① mysql> select * from tb_goods left join tb_category;
起别名
② mysql> select * from tb_goods g left join tb_category c;
写on条件
③ mysql> select * from tb_goods g left join tb_category c on g.cid=c.id;
筛选字段
④ mysql> select g.*,c.name from tb_goods g left join tb_category c on g.cid=c.id;
想成为高级的数据库管理员(DBA),数据库还是非常重要的。
作为运维人员,还是要做掌握一些知识。