联合查询案例
Employee table:
±------------±--------------±-------------+
| employee_id | department_id | primary_flag |
±------------±--------------±-------------+
| 1 | 1 | N |
| 2 | 1 | Y |
| 2 | 2 | N |
| 3 | 3 | N |
| 4 | 2 | N |
| 4 | 3 | Y |
| 4 | 4 | N |
±------------±--------------±-------------+
这张表的主键为 employee_id, department_id (具有唯一值的列的组合)
primary_flag 是一个枚举类型,值分别为(‘Y’, ‘N’). 如果值为’Y’,表示该部门是员工的直属部门。 如果值是’N’,则否
一个员工可以属于多个部门。当一个员工加入超过一个部门的时候,他需要决定哪个部门是他的直属部门。请注意,当员工只加入一个部门的时候,那这个部门将默认为他的直属部门,虽然表记录的值为'N'
.
查出员工所属的直属部门
select employee_id,department_id from Employee
where primary_flag='Y'
union
select employee_id,department_id from Employee
group by employee_id having count(1)=1
思路:
两种查询数据。一种是primary_flag 为Y的数据,一种是当department只有1个,但是primary_flag为N的数据。
将这两种数据联合查询,当然两种查询数据中,存在重复值,需要去重,那么就是union
正则表达式
(今天看到了,顺手重新记一下)
字段名 regexp ‘匹配方式’
- ^ 匹配文本的开始字符
- $ 匹配文本的结束字符
- . 匹配任何单个字符
- *匹配零个或多个在他前面的字符
- +匹配前面的字符1次或多次
- <字符串> 匹配包含指定字符的文本
- [ 字符集合 ] 匹配字符集合中的任何一个字符
- [ ^ ] 匹配不在括号中的任何字符
- 字符串{n,} 匹配前面的字符串至少n次
- 字符串{n,m} 匹配前面的字符串至少n次,至多m次
select * from users where mail regexp '^[a-zA-Z]+[a-zA-Z0-9_\\.\\/\\-]*@leetcode\\.com$';