SQL刷题笔记day1

1题目

我的代码:

select * from employees
order by hire_date desc
limit 2,1

标准代码:

select * from employees
where hire_date=
(select distinct hire_date 
from employees 
order by hire_date desc 
limit 2,1)

复盘:因为按照入职日期排列,都不一定只有一个,所以要用distinct按照hire_date进行去重分组,这样才能保证取到的是倒数第三个日期,而不仅仅是倒数第三个记录。

2 题目

我的代码:

select *,dept_no
from salaries join dept_manager
on salaries.emp_no=dept_manager.emp_no
order by salaries.emp_no asc

正确答案:

select s.*,d.dept_no
from salaries s join dept_manager d
on s.emp_no=d.emp_no
order by s.emp_no asc

复盘:涉及到表链接问题,select时要表明是哪个表的,不然会报错。s.和d.,也可以不用重命名,反正要让SQL知道是读出哪个表里面的。

3 题目

我的通过代码:

select e.last_name,e.first_name,d.dept_no
from employees e right join dept_emp d
on e.emp_no =d.emp_no

复盘:这里inner join 和right join(employees当主表在前时)都可以

复习一下 表链接:把表连接在一起(3种方式)

(1)内连接:只两个表保留相同的

那么在dept_emp表中没有的emp_no就不会保存,即employees表中能够保存下来的都是在dept_emp表出现过的表,实现了部门存在才可以分配。

(2)左连接:合并后左边的表所有行都保留,若左边的表有空值则删除(即删除右边没有匹配上的)

(3)右连接:与左相反,合并后右边的表所有行都保留,若右边的表中有空值则删除,但是左边表行中有空值不删(即删除左边没有匹配上的)

相当于也是dept_emp表中出现的有部门的员工才都保存,没有部门的,合并后dept_no 肯定是空值,也会被删除。所以employees当主表的右连接和两个表直接内连接效果相同。

4 题目

我的通过代码:

select e.last_name,e.first_name,d.dept_no
from employees e left join dept_emp d
on e.emp_no=d.emp_no

复盘:考点是左连接,合并后,employees本来存在的行都要保留,即使行中出现空值也要保留。

5 题目

我的通过代码:

select emp_no,count(emp_no) from salaries
group by emp_no
having count(emp_no)>15

复盘:复习了一下之前的笔记才知道,(1)count要先进行聚合,group by字段名:规定依据哪个字段分组聚合,使用该子句是为了依据相同字段值分组后进行聚合运算,常和聚合函数联用。(2)但是在group by之后,就不能用where了,要用having!

————————————————今天就这样吧,明天继续maybe——————

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值