数据库基础刷题:联合查询和正则表达式

联合查询案例

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$';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值