MySQL的多表联查

  1. 嵌套查询:一个查询的结果是另外sql查询的条件

如:查询stu表中年龄最大的是谁?

mysql> select * from stu where age=(select max(age) from stu);

mysql> select * from stu where age in(select max(age) from stu); –(子查询结果是多条时使用in查询)

+—-+——+——+—–+———-+

| id | name | age | sex | classid |

+—-+——+——+—–+———-+

| 14 | abc | 33 | w | python01 |

+—-+——+——+—–+———-+

1 row in set (0.01 sec)

  1. where关联查询

已知:员工personnel表和部门department表,其中员工表中的did字段为部门表id主键关联。

查询所有员工信息,并显示所属部门名称

要求:显示字段:员工id 部门 姓名

mysql> select p.id,d.name,p.name from personnel p,department d where p.did = d.id;

+—-+———–+———–+

| id | name | name |

+—-+———–+———–+

| 2 | 人事部 | 李玉刚 |

| 10 | 人事部 | 阿杜 |

| 4 | 市场部 | 刘欢 |

……

  1. 连接join查询

左联:left join

右联:right join

内联:inner join

已知如下表所示,商品类别信息表(具有两层类别关系,通过pid表示,0表示一级类别)

mysql> select * from type;

+—-+———–+——+

| id | name | pid |

+—-+———–+——+

| 1 | 服装 | 0 |

| 2 | 数码 | 0 |

| 3 | 男装 | 1 |

| 4 | 手机 | 2 |

| 5 | 相机 | 2 |

| 6 | 电脑 | 2 |

| 7 | 女装 | 1 |

| 8 | 童装 | 1 |

| 9 | 食品 | 0 |

| 10 | 零食 | 9 |

| 11 | 特产 | 9 |

| 12 | 休闲装 | 1 |

+—-+———–+——+

12 rows in set (0.00 sec)

mysql> desc type;

+——-+——————+——+—–+———+—————-+

| Field | Type | Null | Key | Default | Extra |

+——-+——————+——+—–+———+—————-+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| name | varchar(16) | NO | | NULL | |

| pid | int(10) unsigned | YES | | NULL | |

+——-+——————+——+—–+———+—————-+

3 rows in set (0.00 sec)

— 查询二级类别信息,并关联出他们的父类别名称

mysql> select t1.id,t1.name,t2.name from type t1,type t2 where t1.pid!=0 and t1.pid=t2.id;

+—-+———–+——–+

| id | name | name |

+—-+———–+——–+

| 3 | 男装 | 服装 |

| 4 | 手机 | 数码 |

| 5 | 相机 | 数码 |

| 6 | 电脑 | 数码 |

| 7 | 女装 | 服装 |

| 8 | 童装 | 服装 |

| 10 | 零食 | 食品 |

| 11 | 特产 | 食品 |

| 12 | 休闲装 | 服装 |

+—-+———–+——–+

9 rows in set (0.01 sec)

–统计每个一级类别下都有多少个子类别。

mysql> select t1.id,t1.name,count(t2.id) from type t1,type t2 where t1.pid=0 and t1.id=t2.pid group by t1.id;

+—-+——–+————–+

| id | name | count(t2.id) |

+—-+——–+————–+

| 1 | 服装 | 4 |

| 2 | 数码 | 3 |

| 9 | 食品 | 2 |

+—-+——–+————–+

3 rows in set (0.00 sec)

MySQL的多表联查就讲到这里啦。

    原文作者:妄心xyx
    原文地址: https://www.jianshu.com/p/2e5c49855496
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞