15

查找employees表

http://www.nowcoder.com/questionTerminal/a32669eb1d1740e785f105fa22741d5c

题目:查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列
题意:每个title下,emp_no重复的员工忽略不计

方法1:使用%
SELECT *
FROM employees
WHERE emp_no % 2 = 1
AND last_name<>'Mary'
ORDER BY hire_date DESC;
补充:emp_no % 2=1也可以改成MOD(emp_no, 2)=1,但是某些sql版本可能不支持后者(比如题库就不支持)
补充:不相等有三种表示方式:<>、!=、IS NOT
注意:last_name是varchar类型,所以对它的判断需要加上单引号

方法2:使用&
SELECT *
FROM employees
WHERE emp_no & 1
AND last_name<>'Mary'
ORDER BY hire_date DESC;
补充:sql中/表示标准除法,如101/2得到50.5,而DIV表示整数除法,如101 DIV 2得到50

补充:奇偶数查询:参考资料:https://blog.csdn.net/ccStroy/article/details/78061861
查询奇数的一般方法:如上(最好是位运算&)
查询偶数的一般方法:emp_no=(emp_no>>1<<1)
但是,以上的一般方法,针对的是字段全是数字的情况,如果对于身份证这种中间隐藏了一部分的,积极无法使用
所以更好的方法是使用正则化表达式(当然题库这里无法使用正则化表达式,可能是版本或设置问题)
查询奇数的正则化方法:emp_no REGEXP ‘[13579]
注意:表示以13579中的任意一个结尾
补充:顺便说一下正则化表达式:
^aa:以aa开头
aa$:以aa结尾
.:匹配任何字符
[abc]:[字符集合],包含中括号内的字符
[^abc]或[!abc]:[字符集合],不包含中括号内的字符
a|b|c:匹配a或b或c,如(中|美)国
:匹配前面的子表达式0次或者多次。如,zo能匹配’z’以及’zoo’。*等价于{0,}
+:匹配前面的子表达式1次或者多次。如,’zo+’能匹配’zo’,但不能匹配’z’。+等价于{1,}
{n}:n是一个非负整数,匹配前面的子表达式2次。如,o{2} 能匹配’food’中的两个o,但不能匹配’Bob’中的o
{n, m}:m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。

全部评论
可以用not like表示不相等
1 回复 分享
发布于 2021-05-07 20:45
"——补充:不相等有三种表示方式:<>、!=、IS NOT" 此处的不相等无法等同于 is not
1 回复 分享
发布于 2021-01-15 14:33
RIGHT(emp_no,1) not in(0,2,4,6,8) 奇数一下子没想起来 用了这个 哈哈哈哈哈哈哈哈哈
11 回复 分享
发布于 2021-09-23 15:42
纠正题库是可以使用正则表达式的,这题: select * from employees where emp_no regexp'[1,3,5,7,9]$' and last_name<>'Mary' order by hire_date desc
8 回复 分享
发布于 2021-03-05 13:05
我们也可以将last_name<>'Mary' 改为 last_name not in ('Mary')
3 回复 分享
发布于 2021-08-05 16:37
应该是这样吧where regexp emp_no '[13579]$'
点赞 回复 分享
发布于 2024-01-22 21:26 北京
想问下,这里的%号背后运算的原理是啥,跟mod()函数一样吗
点赞 回复 分享
发布于 2021-09-24 10:36

相关推荐

评论
217
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务