mysql 知识库最牛大兴MySQL

MySQL的多表联查

2019-01-10  本文已影响347人  妄心xyx
  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的多表联查就讲到这里啦。

上一篇下一篇

猜你喜欢

热点阅读