首页> 基础笔记 >Mysql基础学习 Mysql基础学习
MySQL多表查询(连接查询)
作者:小萝卜 2019-08-29 【 MySql 数据库 】 浏览 1812
简介MySQL多表查询(连接查询),非等值和等值的多表查询,自身连接查询,复合连接查询
MySQL多表查询(连接查询)
多表查询给用户带来很大的灵活性,可以在任何时候增加新的数据类型,为不同实体创建新的表,然后通过连接进行查询。包括两种形式:
➢ 非等值和等值的多表查询
多表查询和普通的单表查询相似,都是使用SELECT语句。只不过在多表查询时需要把多张表的名字,全部填写在FROM子句中,并用逗号“,”将表名分开。同时,也可以对数据表使用别名进行引用。另外,为了在查询时区分多个表中出现的重复字段名,可以在字段列表中使用“表名.列名”的形式,如果不存在重名的列,可以省略表名。
➢ 自身连接查询
连接查询操作不仅可以用于多个表之间,也可以是一个表与其自己进行连接,称为自身连接查询。当一个表所代表的实体之间有关系时,就可以使用自身连接查询。
➢ 复合连接查询
前面介绍的多表查询是两个表之间,只有一个WHERE子句查询条件。如果在FROM子句后面有n个表需要查询,则在WHERE子句中就需要有多个连接条件。至少要比出现的表格数量少1个,也就是不能少于n−1个查询条件,多个条件使用“AND”关键词连接即可。
实例:
-- 新建数据表
mysql> create table grade(
-> id int unsigned not null auto_increment primary key,
-> sid int unsigned,
-> php tinyint unsigned,
-> mysql tinyint unsigned
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> insert into grade values
-> (null,4,89,90),
-> (null,2,90,95),
-> (null,1,87,80),
-> (null,5,100,100),
-> (null,6,58,62),
-> (null,7,78,94);
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
-- 关联查询
mysql> select * from stu,grade where stu.id = grade.sid;
+----+----------+-----+-----+---------+----+------+------+-------+
| id | name | age | sex | classid | id | sid | php | mysql |
+----+----------+-----+-----+---------+----+------+------+-------+
| 4 | zhaoliu | 31 | m | lamp110 | 1 | 4 | 89 | 90 |
| 2 | lisi | 22 | w | lamp110 | 2 | 2 | 90 | 95 |
| 1 | zhangsan | 20 | m | lamp110 | 3 | 1 | 87 | 80 |
| 5 | xiaowang | 18 | w | lamp111 | 4 | 5 | 100 | 100 |
| 6 | laowang | 38 | m | lamp106 | 5 | 6 | 58 | 62 |
| 7 | xiaoli | 28 | w | lamp110 | 6 | 7 | 78 | 94 |
+----+----------+-----+-----+---------+----+------+------+-------+
6 rows in set (0.00 sec)
mysql> select s.*,g.php,g.mysql from stu s,grade g
-> where s.id=g.sid;
+----+----------+-----+-----+---------+------+-------+
| id | name | age | sex | classid | php | mysql |
+----+----------+-----+-----+---------+------+-------+
| 4 | zhaoliu | 31 | m | lamp110 | 89 | 90 |
| 2 | lisi | 22 | w | lamp110 | 90 | 95 |
| 1 | zhangsan | 20 | m | lamp110 | 87 | 80 |
| 5 | xiaowang | 18 | w | lamp111 | 100 | 100 |
| 6 | laowang | 38 | m | lamp106 | 58 | 62 |
| 7 | xiaoli | 28 | w | lamp110 | 78 | 94 |
+----+----------+-----+-----+---------+------+-------+
6 rows in set (0.09 sec)
mysql> select * from grade;
+----+------+------+-------+
| id | sid | php | mysql |
+----+------+------+-------+
| 1 | 4 | 89 | 90 |
| 2 | 2 | 90 | 95 |
| 3 | 1 | 87 | 80 |
| 4 | 5 | 100 | 100 |
| 5 | 6 | 58 | 62 |
| 6 | 7 | 78 | 94 |
+----+------+------+-------+
6 rows in set (0.00 sec)
mysql> select g.id,g.sid,s.name,g.php,g.mysql from grade g,stu s
-> where s.id = g.sid;
+----+------+----------+------+-------+
| id | sid | name | php | mysql |
+----+------+----------+------+-------+
| 1 | 4 | zhaoliu | 89 | 90 |
| 2 | 2 | lisi | 90 | 95 |
| 3 | 1 | zhangsan | 87 | 80 |
| 4 | 5 | xiaowang | 100 | 100 |
| 5 | 6 | laowang | 58 | 62 |
| 6 | 7 | xiaoli | 78 | 94 |
+----+------+----------+------+-------+
6 rows in set (0.00 sec)
很赞哦! (0)
上一篇:MySQL查询优化
下一篇:MySQL嵌套查询(子查询)