SQL 牛客网刷题02——中等

目录

1、 查找当前薪水详情以及部门编号dept_no

2、查找已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工

 3、获取员工和对应的经理,如果员工本身是经理的话则不显示

4、各个title类型对应的员工薪水对应的平均工资avg

5、所有员工的last_name和first_name以及对应的dept_name,包括未分配员工

6、计各个部门的工资记录数

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

8、使用子查询的方式找出属于Action分类的所有电影对应的title,description

9、创建一个actor表

10、批量插入数据,不使用replace操作

11、对first_name创建唯一索引,对last_name创建普通索引

12、针对actor表创建视图actor_name_view

13、针对salaries表emp_no字段创建强制索引idx_emp_no

14、在last_update后面新增加一列名字为create_date

15、构造一个触发器audit_log

16、audit表上创建外键约束,其emp_no对应employees_test表的主键id

17、将所有获取奖金的员工当前的薪水增加10%

18、所有员工的last_name和first_name通过(')连接起来

19、查找字符串中逗号出现的次数

 20、获取employees中的first_name,按最后两个字母升序

21、按照dept_no进行汇总

22、平均工资

23、分页查询employees表,每5行一页,返回第2页的数据

24、使用含有关键字exists查找未分配具体部门的员工的信息

25、刷题通过的题目排名

 26、考试分数(二)

27、牛客的课程订单分析(二)

28、牛客的课程订单分析(三)

29、牛客的课程订单分析(六)

30、实习广场投递简历分析(二)

31、 最差是第几名(一)

32、获得积分最多的人(一)

33、商品交易(网易校招笔试真题

34、今天的刷题量(一)

35、 创建一个actor_name表


1、 查找当前薪水详情以及部门编号dept_no

 各个部门当前领导的薪水详情以及其对应部门编号dept_no,salaries.emp_no升序:

# 方法一
select s., d.dept_no from dept_manager d, salaries s
where d.emp_no=s.emp_no
and d.to_date='9999-01-01' and s.to_date='9999-01-01'
order by emp_no;

# 方法二:内联结
select s.*, d.dept_no from salaries as s
inner join dept_manager as d on s.emp_no = d.emp_no
order by s.emp_no;

2、查找已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工

# 部分员工还没有分配到部门,因此不能使用内连接,使用左连接确保员工没有缺失
select last_name, first_name, dept_no
from employees em
left join dept_emp dm
on em.emp_no = dm.emp_no

 3、获取员工和对应的经理,如果员工本身是经理的话则不显示

select d.emp_no, de.emp_no as manager from dept_emp d
inner join dept_manager de 
on d.dept_no = de.dept_no 
where d.emp_no != de.emp_no;

4、各个title类型对应的员工薪水对应的平均工资avg

# 经过 group by 之后,select 中只能包含分组的字段以及聚合函数
select t.title, avg(s.salary) from titles t
inner join salaries s
on t.emp_no = s.emp_no
group by title
order by avg(s.salary);

5、所有员工的last_name和first_name以及对应的dept_name,包括未分配员工

题目有三个表:

【部门的信息】departments: dept_no, dept_name

【部门员工所属】dept_emp: emp_no, dept_no,...

【员工的信息】employees: emp_no, first_name, last_name,...

# 方法一:两次left join嵌套
SELECT last_name, first_name, dept_name
FROM employees AS e LEFT JOIN (SELECT emp_no, dept_name
                               FROM dept_emp AS de LEFT JOIN departments AS d
                               ON de.dept_no = d.dept_no)k
ON e.emp_no = k.emp_no;

# 方法二:两次LEFT JOIN连接
select e.last_name, e.first_name, dept_name from employees e
left join dept_emp de on e.emp_no = de.emp_no
left join departments d on de.dept_no = d.dept_no;

6、计各个部门的工资记录数

给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序

# 方法一:窗口函数count()over()
select distinct d.dept_no , d.dept_name,
count(s.salary)over(partition by d.dept_no order by d.dept_no)
from departments as d join dept_emp as de on d.dept_no = de.dept_no
                      join salaries as s  on s.emp_no = de.emp_no;

# 方法二:三表连结再分组使用聚合函数
# 当group by 后面跟上主键或者不为空唯一索引时,查询是有效的,因为此时的每一笔数据都具有唯一性。
select de.dept_no, de.dept_name,count(s.salary) from departments de
inner join dept_emp d on de.dept_no = d.dept_no
inner join salaries s on d.emp_no = s.emp_no
group by de.dept_no
order by de.dept_no;

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

# 方法一:内连接+not in
select film_id as '电影id',title as '名称'
from film
where film_id not in(select f.film_id
from film f inner join film_category fc on f.film_id=fc.film_id);

# 方法二:左连接+is null
select f.film_id, f.title from film f 
left join film_category fc on f.film_id=fc.film_id
where fc.category_id is null;

8、使用子查询的方式找出属于Action分类的所有电影对应的title,description

select title, description from film f
where f.film_id in (select film_id from film_category fc 
                    inner join category c  
                    on fc.category_id = c.category_id 
                    where name = 'Action');   

9、创建一个actor表

create table actor
(actor_id smallint(5) not null COMMENT '主键id',
 first_name varchar(45) not null COMMENT '名字',
 last_name	varchar(45) not null COMMENT '姓氏',
 last_update date not null COMMENT '日期',
 PRIMARY KEY (actor_id)
);

10、批量插入数据,不使用replace操作

# mysql中常用的三种插入数据的语句:
# insert into表示插入数据,数据库会检查主键,如果出现重复会报错;
# replace into表示插入替换数据,需求表中有PrimaryKey,
#             或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;

# insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据;
insert ignore into actor values("3","ED","CHASE","2006-02-15 12:34:33");

11、对firs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您介绍一下 SQL Server 刷题的相关内容。SQL Server 是一种关系型数据库管理系统,用于存储和管理大量结构化数据。在刷题过程中,您可以通过解决一系列与 SQL Server 相关的问题来提高对其的理解和应用能力。 以下是一些常见的 SQL Server 刷题方向和相关问题: 1. SQL 基础知识: - 什么是 SQL Server?它有哪些特点和优势? - SQL Server 中的数据类型有哪些?它们分别用于存储什么类型的数据? - 如何创建数据库和表格? - 如何插入、更新和删除数据? - 如何使用 SELECT 语句查询数据? 2. 数据查询与筛 - 如何使用 WHERE 子句进行条件选? - 如何使用 ORDER BY 子句对查询结果进行排序? - 如何使用 GROUP BY 子句进行分组聚合操作? - 如何使用 HAVING 子句进行条件筛选(针对分组后的结果)? . 数据操作与修改: - 如何使用 UPDATE 语句修改表格中的数据? - 如何使用 DELETE 语句删除表格中的数据? - 如何使用 INSERT INTO 语句插入新的数据? 4. 数据连接与联结: - 如何使用 JOIN 连接多个表格? - 什么是内连接、外连接和交叉连接? - 如何使用子查询进行复杂的数据查询? 5. 数据聚合与统计: - 如何使用聚合函数(如 SUM、AVG、COUNT、MAX、MIN)进行数据统计? - 如何使用 GROUP BY 子句进行分组统计? - 如何使用 HAVING 子句进行条件筛选(针对分组后的统计结果)? 这些问题只是 SQL Server 刷题中的一部分,您可以根据自己的需求和水平选择适合的题目进行练习。同时,还可以参考 SQL Server 官方文档、教程和在线资源来深入学习和提高技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值