sql习题及解答

个人对刷题后的记录和整理。随机更新。(主要运行环境:sqlite3、POLARDB-MySQL)
推荐在线刷题网站:牛客sql实战
个人目前接触的刷题网主要是leetcode和牛客,由于牛客在线提交时,若语句没有错误,它会提供题目中的建表语句和表中数据,所以在刷题时,可以复制建表语句和插入数据的语句到私人的数据库中,在自己的库中完成sql的编写。这让我们提交自己的语句时,能先一步进行检查、更清晰的看见错误的地方。


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

select * from employees limit 5,5;
select * from employees limit 5 offset 5;
select * from employees limit(2-1)*5,5;

解决方式:
limit x,n :从第x条数据开始,取n条数据。第一条数据序号为0
limit x offset n :从第x条数据开始,取n条数据。第一条数据序号为0
limit(2-1)*5,5 :这条语句主要是为了体现limit的分页思想,*5表示每页5条数据,2-1代表跳过第一页,然后取第二页的5条数据,即整个第二页的数据


2、子串排序,获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列

SELECT first_name from employees ORDER BY substr( first_name,-2);
SELECT first_name from employees ORDER BY substring( first_name,-2);
SELECT first_name from employees ORDER BY substr( first_name,length( first_name)-1, 2);
select first_name from employees order by right(first_name,2);

解决方式:【主要是提取字段中的字符】
substr( str,-n) 和 substring( str,-n) :从末尾处,取字符串str的n个字符
substr( str,n) 和 substring( str,n) :取字符串str的前n个字符
substr( str,x, n) :从字符串str中下标为x的字符开始(包含下标为x的字符),取n个字符。字符串下标从1开始。
right(str,n) :从字符串的右边开始,取n个字符。同理 left(str,n)从左边开始,取n个字符
length(str) :获取str的长度,即字符个数


3、添加序列号,学生成绩排名,表名grade,列id,score。按成绩排名。

select id,score,(@i:=@i+1) as rank from grade,(select @i:=0) b order by score desc;

4、修改表名,将titles_test表名修改为titles_2017

alter table employees rename to employees_007;

5、获取第二薪资,表名salaries,列:emp_no、salary。(尝试不使用order by完成)

1、按薪资倒序排序,取第二条数据。(但若有多条相同薪资,则有错误)
select * from salaries order by salary desc limit 1,1;
2、子查询:对salary薪资进行去重并倒序,获取第二条数据(即第二薪资)。主语句:获取薪资等于第二薪资的salaries表中所有数据。
select * from salaries where salary = 
(select distinct salary from salaries order by salary desc limit 1,1)
3、不使用order byselect id,max(salary) as salary from salaries 
where salary < (select max(salary) from salaries)
[这里使用了两次求最大值,子查询:获取salaries中最大薪资;主语句:在小于最大薪资的数据中求最大薪资]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值