sql练习

本文回顾了SQL基础知识,包括分页查询、GROUP BY语句、表结构修改、JOIN操作及Oracle的XML数据类型。针对不同数据库特性提供了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天去参加了一个笔试,考到sql的时候懵了,发现长时间的使用hibernate框架让我对sql语句真是越来越陌生了,针对笔试题目回家温习了一下。

首先记忆最清楚的是分页的sql语句,比如查询第10条到第20条数据记录,不同数据库的实现方法也是不一样的

mysql:select * from test limit 10,20--主要使用了limit关键字

oracle:select * from (select t.*,rownum rn from test t) where rn<=20 and rn>=10;

oracle主要使用了子查询和rownum关键字

 

第二,对group by语句和聚合函数的使用考察

group by语句将记录进行分组,返回的字段信息有的是单体、有的是集合,对于单体的字段我们可以直接添加到select的后面,而对于集合字段必须通过聚合函数处理让其返回值变成单体后才能放到select的后面,因为一条数据库记录是没有办法来显示一个集合字段的;

where语句要放在group by的前面,大致格式如:select field from test t where 条件 group by t.field,如果想要对分组之后的集合字段进行条件判断要使用having()函数而不是where(having()函数跟在group by语句之后).

 

第三,更改表结构的sql语句

--增加字段--
alter table test add field varchar2(3);
--删除字段--
alter table test drop column field;
--更新字段oracle与mssql的实现不同---
oracle:alter table test modify field varchar2(10);--oracle使用的是modify关键字
mssql:alter table test alter column field type varchar2(10);--mssql使用的是alter column

 

第四,有关表的join操作

join操作,就其名称来看,是将两个表的信息拼接成一个表
想要拼接,必然两张表要有联系,要有公共的字段即表的外键,以下所说的共用字段
--inner join--
只是拼接两个表中含有公用字段值相同的记录
--left join--
是以左面的表为基准,将右面的表的信息join到左面
若关联的两个表有公共用字段值,则同inner join
若共用字段中左面表有的记录值而右面表没有则将null值join到左面表
--right join--
是以右面的表为基准,将左面的表的信息join到右面
若关联的两个表有公共用字段值,则同inner join
若共用字段中右面表有的记录值而左面表没有则将null值join到右面表
--full join--
相当于left join+right join

 

第五,oracle的xml数据类型xmltype:用于存储xml文档

create table test(
   xml SYS.XMLTYPE;
);
insert into test values(sys.XMLTYPE.createXML('<root>'||'<chid>'||'</child>'||'</root>'));//插入语句

select t.xml.getClobVal() from test t;//查询语句

### 关于SQL练习题及答案 以下是关于SQL的相关练习题以及解答,这些题目可以帮助初学者更好地理解SQL的基础语法和实际应用。 #### 题目一:查询两门及其以上不及格课程的同学的学号、姓名及其平均成绩 此问题可以通过嵌套子查询来实现。具体逻辑如下: 1. 找到所有不及格的成绩记录。 2. 使用 `GROUP BY` 和 `HAVING COUNT(*) >= 2` 来筛选出至少有两门课不及格的学生。 3. 计算这些学生的平均成绩并返回其学号和姓名。 代码示例如下: ```sql SELECT s.Sid, s.Sname, AVG(sc.Degree) AS AvgDegree FROM Student s JOIN SC sc ON s.Sid = sc.Sid WHERE sc.Degree < 60 GROUP BY s.Sid, s.Sname HAVING COUNT(sc.Cid) >= 2; ``` 上述语句实现了所需功能[^1]。 --- #### 题目二:查询Score表中的最高分的学生学号和课程号 通过使用子查询找到最大分数,并将其与原始数据匹配即可得到目标学生的信息。 代码示例如下: ```sql SELECT Sno, Cno FROM Score WHERE Degree = (SELECT MAX(Degree) FROM Score); ``` 这段代码能够有效解决该问题[^2]。 --- ### SQL学习资源推荐 对于希望深入学习SQL的人群来说,除了完成各种类型的练习题外,还可以参考以下几种方式获取更多知识: 1. **在线平台** - LeetCode 提供了大量的SQL挑战题目,适合不同层次的学习者尝试。 - W3Schools 是一个非常友好的入门网站,它提供了详尽的SQL教程和实例演示。 2. **书籍资料** 推荐《SQL必知必会》这本书籍作为基础读物;另外,《高性能MySQL》则更侧重性能优化方面的话题,适用于有一定经验的技术人员进一步提升自己能力水平。 3. **实践操作环境搭建** 安装本地数据库服务器如 MySQL 或 PostgreSQL ,创建虚拟项目场景来进行反复试验也是极为重要的环节之一 。可以利用Docker快速部署所需的测试环境。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值