### SQL常用语法大全 在本篇文章中,我们将详细介绍SQL(Structured Query Language)中的一些常见语法,特别是针对一个涉及50个SQL语句的项目。这些语句覆盖了基本的数据库操作,包括创建表、插入数据以及执行各种查询。通过本文,你将能够更好地理解和掌握SQL的基础知识,并学会如何构建复杂的查询。 #### 一、数据库表结构定义 在开始之前,我们需要了解几个关键的表结构: 1. **学生表** (Student): 包含学生的学号(S#)、姓名(Sname)、年龄(Sage)和性别(Ssex)。 - 学号 (S#): 学生的唯一标识符。 - 姓名 (Sname): 学生的名字。 - 年龄 (Sage): 学生的年龄。 - 性别 (Ssex): 学生的性别。 2. **课程表** (Course): 包含课程编号(C#)、课程名(Cname)和教师编号(T#)。 - 课程编号 (C#): 课程的唯一标识符。 - 课程名 (Cname): 课程的名称。 - 教师编号 (T#): 授课教师的编号。 3. **教师表** (Teacher): 包含教师编号(T#)和教师名(Tname)。 - 教师编号 (T#): 教师的唯一标识符。 - 教师名 (Tname): 教师的名字。 4. **成绩表** (SC): 包含学生的学号(S#)、课程编号(C#)和成绩(score)。 - 学号 (S#): 学生的唯一标识符。 - 课程编号 (C#): 课程的唯一标识符。 - 成绩 (score): 学生在该课程中的得分。 #### 二、表的创建与数据插入 我们创建以上提到的四个表,并向它们插入一些示例数据。 - 创建学生表: ```sql CREATE TABLE Student ( S# VARCHAR(10), Sname NVARCHAR(10), Sage DATETIME, Ssex NVARCHAR(10) ); ``` - 插入学生数据: ```sql INSERT INTO Student VALUES ('01', N'', '1990-01-01', N''); INSERT INTO Student VALUES ('02', N'Ǯ', '1990-12-21', N''); ``` - 创建课程表: ```sql CREATE TABLE Course ( C# VARCHAR(10), Cname NVARCHAR(10), T# VARCHAR(10) ); ``` - 插入课程数据: ```sql INSERT INTO Course VALUES ('01', N'', '02'); INSERT INTO Course VALUES ('02', N'學', '01'); ``` - 创建教师表: ```sql CREATE TABLE Teacher ( T# VARCHAR(10), Tname NVARCHAR(10) ); ``` - 插入教师数据: ```sql INSERT INTO Teacher VALUES ('01', N''); INSERT INTO Teacher VALUES ('02', N''); ``` - 创建成绩表: ```sql CREATE TABLE SC ( S# VARCHAR(10), C# VARCHAR(10), score DECIMAL(18,1) ); ``` - 插入成绩数据: ```sql INSERT INTO SC VALUES ('01', '01', 80); INSERT INTO SC VALUES ('01', '02', 90); ``` #### 三、查询示例 接下来,我们将演示几个常见的查询语句。 1. **查询同时选修“01”课程和“02”课程的学生信息**。 - **查询同时选修两个课程的学生**: ```sql SELECT s.S#, s.Sname FROM Student s JOIN SC sc1 ON s.S# = sc1.S# JOIN SC sc2 ON s.S# = sc2.S# WHERE sc1.C# = '01' AND sc2.C# = '02'; ``` - **查询同时选修两个课程的学生,并且显示未选修某个课程的学生(使用左连接)**: ```sql SELECT s.S#, s.Sname, sc1.C# AS C1, sc2.C# AS C2 FROM Student s LEFT JOIN SC sc1 ON s.S# = sc1.S# AND sc1.C# = '01' LEFT JOIN SC sc2 ON s.S# = sc2.S# AND sc2.C# = '02'; ``` 2. **查询至少选修了“01”课程或“02”课程的学生信息**。 - **查询至少选修其中一个课程的学生**: ```sql SELECT DISTINCT s.S#, s.Sname FROM Student s JOIN SC sc ON s.S# = sc.S# WHERE sc.C# IN ('01', '02'); ``` - **查询至少选修其中一个课程的学生,并且显示未选修这两个课程的学生**: ```sql SELECT s.S#, s.Sname, sc1.C# AS C1, sc2.C# AS C2 FROM Student s LEFT JOIN SC sc1 ON s.S# = sc1.S# AND sc1.C# = '01' LEFT JOIN SC sc2 ON s.S# = sc2.S# AND sc2.C# = '02'; ``` 3. **查询平均成绩低于60分的学生及其所有课程的成绩**。 - **查询平均成绩小于60分的学生及其所有课程的成绩**: ```sql SELECT s.S#, s.Sname, c.C#, sc.score FROM Student s JOIN SC sc ON s.S# = sc.S# JOIN Course c ON sc.C# = c.C# WHERE s.S# IN ( SELECT S# FROM SC GROUP BY S# HAVING AVG(score) < 60 ); ``` 4. **查询平均成绩高于60分的学生及其所有课程的成绩**。 - **查询平均成绩大于60分的学生及其所有课程的成绩**: ```sql SELECT s.S#, s.Sname, c.C#, sc.score FROM Student s JOIN SC sc ON s.S# = sc.S# JOIN Course c ON sc.C# = c.C# WHERE s.S# IN ( SELECT S# FROM SC GROUP BY S# HAVING AVG(score) > 60 ); ``` 以上就是基于一个涉及50个SQL语句的项目中的部分示例。通过这些示例,你可以看到SQL的强大之处,它能够帮助我们在复杂的数据环境中进行高效的数据管理和分析。无论你是初学者还是有一定经验的开发人员,熟练掌握这些基础知识都是非常重要的。希望这些示例能为你提供一些实用的指导和帮助!
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Chain of thought 链式思考扩展Transformer解码器计算能力的研究
- Chain of thought 链式思考赋能Transformer模型解决串行计算难题
- Firefox 渗透专版
- 一个恶搞的小程序硬盘炸弹
- 写给大忙人看的JAVA核心技术
- Java8实战-Java 8实战
- 发那科系统整套PMC梯形图设计调试维修 FANUC全套PMC设计 发那科标准PLC 详情从图2开始 内容很全 请仔细看完:
- 三相桥式两电平逆变器的SVPWM调制和三相T型三电平逆变器的SVPWM模型和说明文档 对比着看绝对有助于你理解SVPWM调制方
- PROGPPCNEXUS读写烧录刷写软件 飞思卡尔MPC55xx 56xx 57xx 58xx 没有次数限制
- FactoryIO输送线汇流仿真实验程序 使用简单的梯形图编写,逻辑清晰,通俗易懂,写有详细注释,起到抛砖引玉的作用,比较适合有