Set Operators
The union Operator
union默认的操作会对合并后的数据进行排序,并删除掉重复的数据;union all则会将两组数据表合并,不会删除重复的部分。example
# UNION ALL SELECT c.first_name, c.last_name FROM customer c WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%' UNION ALL SELECT a.first_name, a.last_name FROM actor a WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%'; # UNION SELECT c.first_name, c.last_name FROM customer c WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%' UNION SELECT a.first_name, a.last_name FROM actor a WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%';
The intersect Operator
intersectandintersect all- example
SELECT c.first_name, c.last_name FROM customer c WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%' INTERSECT SELECT a.first_name, a.last_name FROM actor a WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%';
- example
- MySQL 8.0之后的版本没有
INTERSECT操作- 可以使用内联表的方式产生交集
- example
SELECT c.first_name, c.last_name FROM customer c INNER JOIN ( SELECT a.first_name, a.last_name FROM actor a WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%' ) a2 USING(first_name,last_name) WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%';
The except Operator
EXCEPTandEXCEPT ALL- example
SELECT a.first_name, a.last_name FROM actor a WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%'; EXCEPT SELECT c.first_name, c.last_name FROM customer c WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%' EXCEPT ALLA
| actor_id | |----------| | 10 | | 11 | | 12 | | 10 | | 10 |B
| actor_id | |----------| | 10 | | 10 |A EXCEPT ALL B(根据B里的各元素个数删除,若是EXCEPT则会将属于B的元素全部删除)| actor_id | |----------| | 10 | | 11 | | 12 |
- example
-
- 但可以使用外联表
- 如:A EXCEPT B可以使用以下query
SELECT a.str FROM a_set a LEFT OUTER JOIN b_set bs on a.str = bs.str WHERE bs.str IS NULL;
Set Operations
ORDER BY需要先给field定各名字- demo(根据field1排序)
SELECT a.field1 $field_name1, a.field2 $field_name2 FROM a_table a UNION SELECT b.field1 $field_name1, b.field2 $field_name2 FROM b_table b ORDER BY $field_name1;