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

时间:2023-03-08 21:37:34
MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)

先建立一张 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操作)

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

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

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

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

      把gid替换成t表的tname

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

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

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

union

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

or

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

或者用union

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

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

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

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

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

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

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

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

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

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

如果这么写就会报错

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

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

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

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

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