首页 > 试题广场 >

查找employees表emp_no与last_name的员

[编程题]查找employees表emp_no与last_name的员
  • 热度指数:288738 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工表employees简况如下:
emp_no
birth_date
first_name
last_name
gender hire_date
10001
1953-09-02
Georgi
Facello
M 1986-06-26
10002
1964-06-02
Bezalel
Simmel
F 1985-11-21
10003
1959-12-03
Bezalel
Mary M 1986-08-28
10004
1954-05-01
Christian
Koblick
M 1986-12-01
10005 1953-11-07 Mary Sluis F 1990-01-22

请你查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列,以上例子查询结果如下:
emp_no birth_date first_name last_name gender hire_date
10005
1953-11-07 Mary
Sluis   F
1990-01-22
10001 1953-09-02 Georgi Facello   M 1986-06-26
示例1

输入

drop table if exists  `employees` ; 
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Bezalel','Mary','M','1986-08-28');
INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01');
INSERT INTO employees VALUES(10005,'1953-11-07','Mary','Sluis','F','1990-01-22');

输出

10005|1953-11-07|Mary|Sluis|F|1990-01-22
10001|1953-09-02|Georgi|Facello|M|1986-06-26
这题就NM离谱,emp_no为基数的数据压根就没有last_name为Mary的人,麻烦数据丰富点行吗,严谨一些
发表于 2020-04-09 18:34:26 回复(0)
更多回答
select *
from employees
where mod(emp_no,2)=1
and last_name <> "Mary"
order by hire_date desc

使用mod()函数好像速度比使用%取余慢一些,还是建议使用%吧
发表于 2022-06-09 17:28:03 回复(0)
select *
from employees
where emp_no%2 =1
and last_name <> 'Mary'
order by hire_date desc

发表于 2022-04-21 15:27:30 回复(0)

select * from employees
where last_name <> 'Mary'
and mod(emp_no,2) <> 0
order by hire_date desc;
1.虽然用!= 不报错,还是建议用<>
发表于 2021-08-08 14:46:28 回复(0)
SELECT *
FROM employees
WHERE emp_no % 2 = 1
AND last_name <> 'Mary'
GROUP BY hire_date
ORDER BY hire_date DESC;
发表于 2021-03-28 09:57:52 回复(0)
select * from employees 
where emp_no % 2 = 1
and last_name != 'Mary'
order by hire_date desc;
编辑于 2021-01-30 18:11:20 回复(0)
SELECT * FROM employees
WHERE emp_no % 2 = 1 AND last_name != 'Mary'
ORDER BY hire_date DESC;
发表于 2019-06-18 13:26:52 回复(0)
SELECT * FROM employees 
WHERE emp_no%2=1
AND last_name!='Mary'
ORDER BY hire_date DESC

发表于 2019-04-01 20:09:33 回复(0)
SELECT
    emp_no,
    birth_date,
    first_name,
    last_name,
    gender,
    hire_date
FROM
    employees
WHERE
    emp_no % 2 = 1
AND last_name != 'Mary'
ORDER BY
    hire_date desc;

发表于 2018-07-03 13:39:12 回复(0)
SELECT *
FROM employees
WHERE emp_no % 2 = 1
AND last_name <> 'Mary'
ORDER BY hire_date DESC

发表于 2017-09-24 16:07:10 回复(0)
select * from employees
 where (emp_no%2=1 and last_name not in ('Mary')) order by hire_date desc

发表于 2017-08-01 09:41:22 回复(0)
select *
from employees e
where e.emp_no & 1 = 1 and e.last_name != 'Mary'
ORDER BY e.hire_date desc

我看了下你们都是用的取余做奇偶的判断,然而在机器中,位运算才是最厉害的🤣
发表于 2019-07-16 21:04:40 回复(22)
select *
from employees
where emp_no%2 = 1 and last_name <> 'mary'
order by hire_date desc
发表于 2017-07-08 16:22:54 回复(0)
select * from employees
where emp_no % 2 = 1
and last_name != 'Mary'
order by hire_date desc
三点需要注意:
1、员工号为奇数,则emp_no取余应为1
2、last_name不为Mary,用‘!=’表示
3.根据hire_date逆序排列,用desc
发表于 2017-08-04 16:41:09 回复(33)

判断奇偶数

  • MOD(id,2) = 1 表示对2求余 = 1 -------奇数
    MOD(id,2) = 0 表示对2求余 = 0 -------偶数

  • id%2=1 表示对2求余 = 1 -------奇数
    id%2=0 表示对2求余 = 0 -------偶数

  • &位运算 ,奇数和1做&操作得到1,偶数和1做&操作得到0
    id & 1= 1 -------奇数
    id & 1= 0 -------偶数

发表于 2022-05-09 17:56:01 回复(1)
mod 这里不能用,改成%
(感觉很无奈,笔试的时候也不知道什么能用什么不能用,也来不及试)
发表于 2019-07-17 15:54:56 回复(9)
可以通过按位与来判定emp_no的奇偶性:
emp_no & 1 = 1,则为奇数,反之为偶数.
另外,判定是否为偶数,可以通过先除以2再乘以2
emp_no >> 1 << 1 是否等于emp_no
select
*
from employees
where emp_no & 1
and last_name != 'Mary'
order by hire_date desc
编辑于 2019-06-14 17:12:53 回复(2)
select * from employees
where last_name not like 'Mary'
and emp_no %2=1
order by hire_date DESC

翻了一下回复,大家都不用not like嘛哈哈 
发表于 2020-08-10 19:26:05 回复(5)
select * 
    from employees
    where
        emp_no % 2 =1
        and
        last_name !="Mary"
    order by hire_date desc;

发表于 2019-10-09 15:45:36 回复(0)
select * from employees
where emp_no%2=1 and last_name!='Mary'
order by hire_date desc

发表于 2022-05-16 22:31:03 回复(0)
学到了,用“%”号
发表于 2021-10-29 09:06:26 回复(1)