# 带 `WHERE` 语句,左右表可以交换顺序# INNER JOIN 可以用逗号代替SELECT cname, tname FROM categories INNERJOIN titles
WHERE categories.cid = titles.cid;
1.3 外连接;
# 不对称,也分左连接和右连接// 演示表SELECT*FROM users;// uid, nameSELECT*FROM groups;// gid, nameSELECT*FROM user_groups;// uid, gid# 首先用“内连接”来连接三个表的内容(users 的名字和 groups 的名字联系起来)SELECT users.name AS uname, groups.name AS gname FROM users, groups, user_groups
WHERE users.uid = users_groups.uid AND groups.gid = users_groups.gid;# 外连接保证一个表的信息全部完整,然后每一行再对应另一个表对应的信息# LEFT JOIN 和 RIGHT JOIN 必须写# 左链接SELECT*FROM users LEFTJOIN users_group ON users.uid = users.group.uid
WHERE user_groups.gid ISNULL;// uid, name, uid, gid# 右连接# USING 可以直接带上列名SELECT*FROM user_groups RIGHTJOIN groups USING(gid);// gid, name, uid
1.4 自连接;
# 和自身这张表做连接// 演示表SELECT*FROM menu;// id, label, parent# 自连接把一个表看成两个表(分别是 a 和 b),然后对它们做内连接,达到了一个自连接的效果SELECT a.label AS parent_label, b.label AS child_label FROM menu AS a, menu AS b
WHERE a.id = b.parent;// parent_label, child_label
1.5. 联合;
# 关键字是 `UNION`// SELECT * FROM exchangeA; // symbol, price// SELECT * FROM exchangeB; // symbol, priceSELECT symbol, price FROM exchangeA WHERE price >35UNIONSELECT symbol, price FROM exchangeB
WHERE price BETWEEN40.00AND90.00;# UNION 自带 DISTRICT 作用,同样的结果只显示一次# 如果需要带出重复的数据,使用 UNION ALL
2. MySQL 子查询。
子查询概念:在通常的查询中,需要使用 WHERE 语句和 HAVING 语句对结果进行一些过滤和限制。
通常过滤的条件都是针对一个固定的常数,比如列出所有年级大于 40 岁的用户(固定常数 40)。但是在实际的生产环境中,查询数据的限制条件也是查询出来的结果,是动态变化的。所以就要用到 MySQL 的子查询。
本篇概要:1. MySQL 连接和联合;1.1 交叉连接;1.2 内连接;1.3 外连接;1.4 自连接;1.5. 联合;2. MySQL 子查询。1. MySQL 连接和联合;连接的概念SELECT cname, tname FROM categories, titles WHERE categories.cid = titles.cid AND categories.cname =...