MySQL做题实战8|| 2号简单篇(包含题目5道,难度:简单)

简介:题目来自牛客网在线编程SQL实战,文章内容主要是讲解博主自己做题时的思路、相关见解以及要点总结。总的来说,就是明bug易改,暗bug难查,路漫漫其修远兮,吾将上下而求索!

题目一(难度:简单)

有一个员工表employees简况如下:

有一个部门领导表dept_manager简况如下:

编写要求:

找出所有非部门领导的员工emp_no,以上例子输出:

解题思路:

解题代码:

# 解法一:
select employees.emp_no from employees
left join dept_manager
on employees.emp_no=dept_manager.emp_no
where dept_no is null;

# 解法二:
select employees.emp_no from employees
where emp_no not in (
select emp_no from dept_manager);

比较总结:

  • 该题主要考查多表连接、where条件筛选以及子查询的用法,比较简单

题目二(难度:简单)

有一个员工表employees简况如下:

编写要求:

查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列,以上例子查询结果如下:

解题思路:

解题代码:

# 解法一:
select * from employees
where emp_no % 2 
and last_name <> 'Mary'
order by hire_date desc;

# 解法二:
select * from employees
where emp_no & 1 
and last_name != 'Mary'
order by hire_date desc;

比较总结:

  • 判断不等于可使用<> 或 !=
  • 判断奇偶数的方法首先会想到 除2取余为1,但其实使用位运算更加巧妙,规律为:
    1 & 奇数 = 1;1 & 偶数 = 0。所以判断一个数(前提为整数)是奇偶数,直接用某个数与1进行按位与即可。
  • 详细知识拓展见博文

由一道简单的Leetcode题 “620. 有趣的电影 ”发现了一个有趣的东西 -- “位运算中的按位与运算”_小白的编码屋-CSDN博客


题目三(难度:简单)

有一个薪水表salaries简况如下:

编写要求:

获取薪水第二多的员工的emp_no以及其对应的薪水salary,若有多个员工的薪水为第二多的薪水,则将对应的员工的emp_no和salary全部输出,并按emp_no升序排序。

解题思路:

解题代码:

select emp_no, salary from salaries
where salary = (
select distinct salary from salaries
order by salary desc limit 1, 1)
order by emp_no;

要点总结:

  • 注意limit用法的局限之处,where+子查询用法更加全面

题目四(难度:简单)

现有员工表employees如下:

编写要求:

将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分。(注:sqllite,字符串拼接为 || 符号,不支持concat函数,mysql支持concat函数)。

解题思路:

解题代码:

select CONCAT(e.last_name,' ',e.first_name) as 'Name'
from employees as e;

要点总结:

  • 主要考察concat函数的用法,concat函数的作用是:将多个字符串连接成一个字符串,语法:concat(str1, str2,...)  返回结果为连接参数产生的字符串,如果其中有一个参数为null,则返回值为null

题目五(难度:简单)

题目已经先执行了如下语句:

 编写要求:

对于表actor批量插入如下数据(不能有2条insert语句哦!)

解题代码:

insert into actor 
VALUES(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),
      (2,'NICK','WAHLBERG','2006-02-15 12:34:33');

比较总结:

  • 主要考查insert插入数据的用法
    方式一:insert into 表名(字段名,...) values(值1,...);
    方式二:insert into 表名 set 字段=值,字段=值,...;
  • 方式一支持一次插入多行,语法如下: insert into 表名(字段名,..) values(值,..),(值,...),...; 且支持子查询,语法如下:insert into 表名 查询语句;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值