文章目录
- 一、简单类
- 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对应的不一样
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 列名和定义都可以改变。