文章目录

  • 一、简单类
  • 1、SQL15 查找employees表emp_no与last_name的员工信息----奇数、为某值
  • 2、SQL17 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary----limit 1,1
  • 3、SQL32 将employees表的所有员工的last_name和first_name拼接起来作为Name----concat
  • 4、SQL34 批量插入数据----insert into
  • 5、SQL72 考试分数(一)----round(x,y)
  • 6、SQL77 牛客的课程订单分析(一)----条件判断中变量值需加引号
  • 7、SQL45 将titles_test表名修改为titles_2017----ALTER
  • 8、SQL84 实习广场投递简历分析(一)----having与where的区别,>= <=
  • 9、SQL64 找到每个人的任务--存在2张表的连接,on对应的不一样
  • 10、SQL43 将所有to_date为9999-01-01的全部更新为NULL--update set
  • 11、SQL42 删除emp_no重复的记录,只保留最小的id对应的记录--delete from
  • 12、SQL44 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005--replace
  • 二、中等类
  • 1、SQL36 创建一个actor_name表
  • 2、SQL29 使用join查询方式找出没有分类的电影id以及名称
  • 3、SQL22 统计各个部门的工资记录数
  • 4、SQL19 查找所有员工的last_name和first_name以及对应的dept_name
  • 三、基础知识记录
  • 1、删除表格-DROP
  • 2、字段
  • 3、ALTER



一、简单类

1、SQL15 查找employees表emp_no与last_name的员工信息----奇数、为某值

# 工号为奇数,姓不为Mary
where emp_no%2=1 and last_name not like 'Mary'

2、SQL17 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary----limit 1,1

# limit 1,1:选择排名第二,仅取1个
select emp_no,salary
from salaries
where salary = (select distinct salary from salaries order by salary desc limit 1,1)

3、SQL32 将employees表的所有员工的last_name和first_name拼接起来作为Name----concat

concat函数,将2值拼接起来

select concat(last_name,' ',first_name) as Name 
from employees

4、SQL34 批量插入数据----insert into

insert into XX表 values (),()
注意:values,数据之间使用逗号,SQL语句用;结束。

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

5、SQL72 考试分数(一)----round(x,y)

round(x,y)聚合函数,用于将数据x四舍五入,并保留y位小数

select job,round(avg(score),3) as avg
from grade
group by job
order by avg desc

6、SQL77 牛客的课程订单分析(一)----条件判断中变量值需加引号

select *
from order_info
where date>'2025-10-15' and product_name in ('C++','Java','Python') and status='completed'

7、SQL45 将titles_test表名修改为titles_2017----ALTER

使用ALTER进行表名修改

alter table titles_test rename to titles_2017

8、SQL84 实习广场投递简历分析(一)----having与where的区别,>= <=

select job,sum(num) as cnt
from resume_info
 # 此处不能用having,可以用where。不能用一条对比的式子,可以用and连接2条式子。
 # 当select筛选出date,可以用having。having不一定要与group搭配使用。
where date>='2025-01-01' and date<='2025-12-30' 
group by job
order by cnt desc

9、SQL64 找到每个人的任务–存在2张表的连接,on对应的不一样

mysql 查询id数组中的数据_mysql

select person.id,person.name,task.content
from person left join task
on person.id=task.person_id

10、SQL43 将所有to_date为9999-01-01的全部更新为NULL–update set

更新数据:update XX表 set xxx=‘’, yyy=‘’
注意:null是特殊字符,不需要加引号

update titles_test set to_date=null,from_date='2001-01-01'
where to_date='9999-01-01'

11、SQL42 删除emp_no重复的记录,只保留最小的id对应的记录–delete from

新生成的a表是只有id的表,之所以要重命名,因为不能进行边查找边删除操作

DELETE FROM titles_test
WHERE id NOT IN(
    SELECT * FROM(
    SELECT MIN(id)
    FROM titles_test
    GROUP BY emp_no)a);

12、SQL44 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005–replace

xxx=replace(xxx,原来的值,新的值)

update titles_test 
set emp_no=replace(emp_no,'10001','10005')
where id='5'

二、中等类

1、SQL36 创建一个actor_name表

解题关键:
使用actor表中的数据,所以可用(select …) 或者 as select

请你创建一个actor_name表,并且将actor表中的所有first_name以及last_name导入该表.
actor_name表结构如下,题目最后会查询actor_name表里面的数据来对比结果输出:

create table actor_name as select first_name,last_name from actor;
# 或者
create table actor_name (select first_name,last_name from actor);

2、SQL29 使用join查询方式找出没有分类的电影id以及名称

# 查询值为空,使用 is null,而非 =null
where film_category.category_id is null
where film_category.category_id = null

3、SQL22 统计各个部门的工资记录数

多表查询,注意group by的参数是哪一个
易错点:①应是count,而不是sum;②group by应是dept_no,而不是salary

select departments.dept_no,departments.dept_name,count(salaries.salary) as sum 
from departments left join dept_emp on departments.dept_no=dept_emp.dept_no left join salaries on dept_emp.emp_no=salaries.emp_no
group by departments.dept_no

4、SQL19 查找所有员工的last_name和first_name以及对应的dept_name

一般使用左连接

select employees.last_name,employees.first_name,departments.dept_name
from employees left join dept_emp on employees.emp_no=dept_emp.emp_no left join departments on dept_emp.dept_no=departments.dept_no

三、基础知识记录

1、删除表格-DROP

drop table if exists XX表

2、字段

smallint、datatime

3、ALTER

ALTER TABLE 表名 ADD 列名/索引/主键/外键等;
ALTER TABLE 表名 DROP 列名/索引/主键/外键等;
ALTER TABLE 表名 ALTER 仅用来改变某列的默认值;
ALTER TABLE 表名 RENAME 列名/索引名 TO 新的列名/新索引名;
ALTER TABLE 表名 RENAME TO/AS 新表名;
ALTER TABLE 表名 MODIFY 列的定义但不改变列名;
ALTER TABLE 表名 CHANGE 列名和定义都可以改变。