MySQL的多表联查

作者: 妄心xyx | 来源:发表于2019-01-10 10:49 被阅读347次
    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的多表联查就讲到这里啦。

    相关文章

      网友评论

        本文标题:MySQL的多表联查

        本文链接:https://www.haomeiwen.com/subject/sqvorqtx.html