经典50道SQL练习题

前言

作为一个SQL小白,在一个月的努力后终于把这50道练习题做完了,分享一下我的答案给大家,说不定能给你提供一些思路。

我使用的是在线SQL,个人认为十分方便,使用的版本是“Ms SQL Server 2017”。

一、数据表

  1. 学生表 Student(SId,Sname,Sage,Ssex)–SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('09' , '张三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2017-12-30' , '女');
insert into Student values('12' , '赵六' , '2017-01-01' , '女');
insert into Student values('13' , '孙七' , '2018-01-01' , '女');
  1. 课程表 Course(CId,Cname,TId) – CId 课程编号,Cname 课程名称,TId 教师编号
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
  1. 教师表 Teacher(TId,Tname)–TId 教师编号,Tname 教师姓名
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
  1. 成绩表 SC(SId,CId,score)–SId 学生编号,CId 课程编号,score 分数
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 
  • 48
    点赞
  • 436
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。
好的,以下是经典的51SQL查询练习题: 1. 查询表中所有记录 ``` SELECT * FROM table_name; ``` 2. 查询表中的某些列 ``` SELECT column_name1, column_name2 FROM table_name; ``` 3. 查询表中不重复的某些列 ``` SELECT DISTINCT column_name1, column_name2 FROM table_name; ``` 4. 按条件查询表中的记录 ``` SELECT * FROM table_name WHERE condition; ``` 5. 对查询结果进行排序 ``` SELECT * FROM table_name ORDER BY column_name; ``` 6. 对查询结果进行倒序排序 ``` SELECT * FROM table_name ORDER BY column_name DESC; ``` 7. 查询表中前 n 条记录 ``` SELECT * FROM table_name LIMIT n; ``` 8. 查询表中第 m 条到第 n 条记录 ``` SELECT * FROM table_name LIMIT m, n-m+1; ``` 9. 对查询结果进行计数 ``` SELECT COUNT(*) FROM table_name; ``` 10. 对查询结果进行求和 ``` SELECT SUM(column_name) FROM table_name; ``` 11. 对查询结果进行平均值计算 ``` SELECT AVG(column_name) FROM table_name; ``` 12. 对查询结果进行最大值计算 ``` SELECT MAX(column_name) FROM table_name; ``` 13. 对查询结果进行最小值计算 ``` SELECT MIN(column_name) FROM table_name; ``` 14. 对查询结果进行分组计算 ``` SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name; ``` 15. 对查询结果进行分组计算并进行排序 ``` SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY COUNT(*) DESC; ``` 16. 对查询结果进行多条件查询 ``` SELECT * FROM table_name WHERE condition1 AND condition2; ``` 17. 对查询结果进行模糊查询 ``` SELECT * FROM table_name WHERE column_name LIKE '%keyword%'; ``` 18. 对查询结果进行通配符查询 ``` SELECT * FROM table_name WHERE column_name LIKE '_keyword'; ``` 19. 对查询结果进行多表查询 ``` SELECT * FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name; ``` 20. 对查询结果进行多表联合查询 ``` SELECT * FROM table_name1 UNION SELECT * FROM table_name2; ``` 21. 对查询结果进行多表交集查询 ``` SELECT * FROM table_name1 INTERSECT SELECT * FROM table_name2; ``` 22. 对查询结果进行多表差集查询 ``` SELECT * FROM table_name1 EXCEPT SELECT * FROM table_name2; ``` 23. 对查询结果进行子查询 ``` SELECT * FROM table_name WHERE column_name IN (SELECT column_name FROM another_table WHERE condition); ``` 24. 对查询结果进行连接查询 ``` SELECT * FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name; ``` 25. 对查询结果进行左连接查询 ``` SELECT * FROM table_name1 LEFT OUTER JOIN table_name2 ON table_name1.column_name=table_name2.column_name; ``` 26. 对查询结果进行右连接查询 ``` SELECT * FROM table_name1 RIGHT OUTER JOIN table_name2 ON table_name1.column_name=table_name2.column_name; ``` 27. 对查询结果进行全连接查询 ``` SELECT * FROM table_name1 FULL OUTER JOIN table_name2 ON table_name1.column_name=table_name2.column_name; ``` 28. 对查询结果进行自连接查询 ``` SELECT * FROM table_name t1, table_name t2 WHERE t1.column_name=t2.column_name; ``` 29. 对查询结果进行临时表查询 ``` CREATE TEMPORARY TABLE temp_table_name AS SELECT * FROM table_name WHERE condition; SELECT * FROM temp_table_name; ``` 30. 对查询结果进行自定义列名 ``` SELECT column_name1 AS name1, column_name2 AS name2 FROM table_name; ``` 31. 对查询结果进行多条件排序 ``` SELECT * FROM table_name ORDER BY column_name1 ASC, column_name2 DESC; ``` 32. 对查询结果进行多表连接查询并进行分组计算 ``` SELECT table_name1.column_name1, COUNT(*) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name GROUP BY table_name1.column_name1; ``` 33. 对查询结果进行多表连接查询并进行聚合计算 ``` SELECT table_name1.column_name1, SUM(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name GROUP BY table_name1.column_name1; ``` 34. 对查询结果进行多表连接查询并进行统计计算 ``` SELECT table_name1.column_name1, COUNT(*) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1; ``` 35. 对查询结果进行分页查询 ``` SELECT * FROM table_name LIMIT m, n-m+1; ``` 36. 对查询结果进行日期计算 ``` SELECT DATE_ADD(date_column, INTERVAL 1 MONTH) FROM table_name; ``` 37. 对查询结果进行日期格式化 ``` SELECT DATE_FORMAT(date_column, '%Y-%m-%d') FROM table_name; ``` 38. 对查询结果进行日期比较 ``` SELECT * FROM table_name WHERE DATEDIFF(date_column1, date_column2) > 30; ``` 39. 对查询结果进行日期范围查询 ``` SELECT * FROM table_name WHERE date_column BETWEEN 'start_date' AND 'end_date'; ``` 40. 对查询结果进行日期部分提取 ``` SELECT YEAR(date_column), MONTH(date_column), DAY(date_column) FROM table_name; ``` 41. 对查询结果进行多表连接查询并进行分组计算和排序 ``` SELECT table_name1.column_name1, COUNT(*) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name GROUP BY table_name1.column_name1 ORDER BY COUNT(*) DESC; ``` 42. 对查询结果进行多表连接查询并进行多条件排序 ``` SELECT * FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name ORDER BY table_name1.column_name1 ASC, table_name2.column_name2 DESC; ``` 43. 对查询结果进行多表连接查询并进行多条件分组计算和排序 ``` SELECT table_name1.column_name1, COUNT(*) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) DESC; ``` 44. 对查询结果进行多表连接查询并进行多条件聚合计算和排序 ``` SELECT table_name1.column_name1, SUM(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY SUM(table_name2.column_name2) DESC; ``` 45. 对查询结果进行多表连接查询并进行多条件统计计算和排序 ``` SELECT table_name1.column_name1, COUNT(*) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) ASC; ``` 46. 对查询结果进行多表连接查询并进行多条件分组计算、聚合计算和排序 ``` SELECT table_name1.column_name1, COUNT(*), SUM(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) DESC, SUM(table_name2.column_name2) ASC; ``` 47. 对查询结果进行多表连接查询并进行多条件统计计算、聚合计算和排序 ``` SELECT table_name1.column_name1, COUNT(*), SUM(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) ASC, SUM(table_name2.column_name2) DESC; ``` 48. 对查询结果进行多表连接查询并进行多条件分组计算、聚合计算、统计计算和排序 ``` SELECT table_name1.column_name1, COUNT(*), SUM(table_name2.column_name2), AVG(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) DESC, SUM(table_name2.column_name2) ASC; ``` 49. 对查询结果进行多表连接查询并进行多条件分组计算、聚合计算、统计计算、排序和分页查询 ``` SELECT table_name1.column_name1, COUNT(*), SUM(table_name2.column_name2), AVG(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) DESC, SUM(table_name2.column_name2) ASC LIMIT m, n-m+1; ``` 50. 对查询结果进行多表连接查询并进行多条件分组计算、聚合计算、统计计算、排序、分页查询和列过滤 ``` SELECT table_name1.column_name1, COUNT(*), SUM(table_name2.column_name2), AVG(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 ORDER BY COUNT(*) DESC, SUM(table_name2.column_name2) ASC LIMIT m, n-m+1 OFFSET k ROWS FETCH NEXT l ROWS ONLY; ``` 51. 对查询结果进行多表连接查询并进行多条件分组计算、聚合计算、统计计算、排序、分页查询、列过滤和条件过滤 ``` SELECT table_name1.column_name1, COUNT(*), SUM(table_name2.column_name2), AVG(table_name2.column_name2) FROM table_name1 JOIN table_name2 ON table_name1.column_name=table_name2.column_name WHERE condition GROUP BY table_name1.column_name1 HAVING COUNT(*) > 10 ORDER BY COUNT(*) DESC, SUM(table_name2.column_name2) ASC LIMIT m, n-m+1 OFFSET k ROWS FETCH NEXT l ROWS ONLY; ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值