题目来源
猴子:常见的SQL笔试题和面试题(下)zhuanlan.zhihu.com1、SQL语言允许使用通配符进行字符串匹配的操作,其中‘%’可以表示:多个字符
2、通过 SQL,如何从 "Persons" 表中选取 "FirstName" 列?
SELECT FirstName FROM Persons;
3、通过 SQL,如何从 "Persons" 表中选取所有的列?
SELECT * FROM Persons;
4、通过 SQL,如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?
SELECT * FROM Persons WHERE FirstName='Peter';
5、通过 SQL,如何从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?
SELECT * FROM Persons WHERE FirstName LIKE 'a%';
6、请判断下列说法是否正确:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录:正确。
7、通过 SQL,您如何在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录?
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter';
8、通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter';
9、哪条 SQL 语句可返回唯一不同的值?
SELECT DISTINCT
10、哪个 SQL 关键词用于对结果集进行排序?
ORDER BY
11、通过 SQL,您如何根据 "FirstName" 列降序地从 "Persons" 表返回所有记录?
SELECT * FROM Persons ORDER BY FirstName DESC;
12、通过 SQL,您如何在 "Persons" 表中删除 "FirstName" 等于 "Fred" 的纪录?
DELETE FROM Persons WHERE FirstName = 'Fred';
13、通过 SQL,如何返回 "Persons" 表中记录的数目?
SELECT COUNT(*) FROM Persons;
14、视图与表有什么区别?
表中存储的是实际数据,而视图中保存的是从表中取出数据所使用的SELECT语句。
15、如果有两张表employees和departments如下:
(1)写出SQL得出每个部门的平均工资
select b.department_name as 部门 ,avg(a.salary) as 平均工资
from employees a inner join departments b
on a.department_id = b.department_id
group by a.department_id;
(2)查询量表得出如下结果:
select a.first_name,a.salary,b.department_name
from employees a inner join departments b
on a.department_id = b.department_id
where a.first_name = 'steven' and b.department_name = 'executive';
16、如有有一张表player,有id、name两个列,我想知道这张表有多少行数据,id最大的前10位的name是什么,请问这两个SQL语句如何写?
-- (1)这张表有多少行数据?
select count(*)
from player;
-- (2)id最大的前十位的name是什么?
select id,name
from player
order by id desc
limit 10;
17、查询一张数据表(tb),基本字段:日期,订单
要求用SQL实现:周次(week),订单总和,日均订单,极大值订单,极小值订单
-- (1)周次
select 日期, date_format(日期,'%u') as 周次
from tb;
-- (2)订单总和、日均订单、极大值订单、极小值订单
select sum(订单) as 订单总和,sum(订单)/count(distinct 日期) as 日均订单,max(订单),min(订单)
from tb;
18、使用SQL实现以下数据表及总分,平均分(数据表:table)
select 姓名,max(case 科目 when '语文' then 分数 else 0 end) as 语文,
max(case 科目 when '数学' then 分数 else 0 end) as 数学,
max(case 科目 when '外语' then 分数 else 0 end) as 外语,
sum(分数) as 总分,avg(分数) as 平均分
from table
group by 姓名;
19、表group有四个字段,表结构如下:
create table group(
id bigint comment '群号',
name string comment '群名',
class string comment '群类别',
num int comment '群成员数量');
数据如下:
1 一起打球 篮球 10
2 来玩球吧 篮球 15
3 滨江一霸 篮球 5
4 足球小将 足球 20
5 绝代双骄 足球 30
6 玩个球啊 乒乓 19
...
PK为id --画外音:这是什么意思?
求群数量少于1000的群类别
select class
from group
group by class
having count(id) < 1000;
19、区间划分问题,使用case语句
select deptid as 部门,
sum(case subjmonth when 1 then sales else null end) as 一月销售额,
sum(case subjmonth when 2 then sales else null end) as 二月销售额,
sum(case subjmonth when 3 then sales else null end) as 三月销售额,
sum(case subjmonth when 4 then sales else null end) as 四月销售额,
from deptsales
group by deptid;