先建立一张 m 表

mysql> create table m (
-> mid int,
-> hid int,
-> gid int,
-> mres varchar(10),
-> matime date
-> )engine myisam charset utf8;
Query OK, 0 rows affected (0.07 sec)

mysql> insert into m
-> values
-> (1, 1, 2, '2:0', '2018-08-03'),
-> (2, 2, 3, '1:2', '2018-08-03'),
-> (3, 3, 1, '2:5', '2018-08-04'),
-> (4, 2, 1, '3:2', '2018-08-05');
Query OK, 4 rows affected (0.00 sec)

再建立一个 t 表

mysql> create table t(
-> tid int,
-> tname varchar(10)
-> )engine myisam charset utf8;
Query OK, 0 rows affected (0.07 sec)

mysql> insert into t
-> values
-> (1, '甲'),
-> (2, '乙'),
-> (3, '丙');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

题目要求:把hid和gid中的数字替换成tid中的tname

(一)根据m表和t表左连接,把hid替换成t表的tname

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

(二)把(一)的结果集当成一张表再做一次左连接

      把gid替换成t表的tname

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

或左连接两张表(用两次left join)

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

union

查出价格低于100元或价格高于4000元的商品

or

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

或者用union

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

当取出的结果集,列名不一致时,依然可以用union

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

但是当列的数量不等时,就无法合并

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

用union,取出cat_id = 4 和cat_id = 5 的商品,并按照价格升序排列 (union后的结果集依然可以看成一个表)

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

取cat_id = 3的价格前三高的商品以及cat_id = 4的前两高的商品

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

如果这么写就会报错

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

(一定要用括号将一句的select放在一起)

并且union在遇到重复行时,会取出重复行

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)-LMLPHP

05-06 16:01