### SQL学生选课知识点解析 #### 一、E-R图 **知识点1:E-R图的概念及作用** - **概念**:实体-联系模型(Entity-Relationship Model, E-R Model)是一种用于描述现实世界关系的概念工具,常用于数据库设计阶段。它通过图形的方式展示实体及其之间的关系。 - **作用**: - 帮助分析人员更准确地获取用户需求; - 便于用户的理解和交流; - 为逻辑设计阶段提供良好的基础。 #### 二、关系模式 **知识点2:关系模式的设计** - **关系模式**:是对关系结构的抽象表示,包括表名、各列名及其数据类型等。 - **学生表(Student)**:包含学号、姓名、性别、年龄、所属系等字段。 - **学号(Sno)**:主键,唯一标识一个学生。 - **姓名(Sname)**:唯一,用于区分不同的学生。 - **性别(Ssex)**:记录学生的性别。 - **年龄(Sage)**:记录学生的年龄。 - **所属系(Sdept)**:记录学生所属的专业或系别。 - **课程表(Course)**:包含课程号、课程名、学分等字段。 - **课程号(Cno)**:主键,唯一标识一门课程。 - **课程名(Cname)**:唯一,用于区分不同的课程。 - **学分(Ccredit)**:记录课程的学分数。 - **选课表(SC)**:包含学生学号、课程号、成绩等字段。 - **学生学号(Sno)**:与学生表关联。 - **课程号(Cno)**:与课程表关联。 - **成绩(Grade)**:学生对课程的成绩。 #### 三、实现SQL **知识点3:创建表的基本语法** - **创建学生表**: ```sql CREATE TABLE Student ( Sno VARCHAR2(9) PRIMARY KEY, Sname VARCHAR2(20) UNIQUE, Ssex VARCHAR2(2), Sage INTEGER, Sdept VARCHAR2(20) ); ``` - **创建课程表**: ```sql CREATE TABLE Course ( Cno VARCHAR(4) PRIMARY KEY, Cpno VARCHAR(4), Cname VARCHAR2(20), Ccredit INTEGER, FOREIGN KEY (Cpno) REFERENCES Course(Cno) ); ``` - **创建选课表**: ```sql CREATE TABLE SC ( Sno VARCHAR2(9), Cno VARCHAR2(4), Grade INTEGER, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) ); ``` #### 四、修改基本表 **知识点4:修改表结构的操作** - **添加列**:`ALTER TABLE <表名> ADD <列名> <数据类型>;` - 示例:为学生表添加用户密码列。 ```sql ALTER TABLE STUDENT ADD Spwd VARCHAR2(20); ``` - **增加唯一性约束**:`ALTER TABLE <表名> ADD UNIQUE (<列名>);` - 示例:增加课程名的唯一性约束。 ```sql ALTER TABLE Course ADD UNIQUE (Cname); ``` - **修改列的数据类型**:`ALTER TABLE <表名> ALTER COLUMN <列名> <新数据类型>;` - 示例:将用户密码列的数据类型由`VARCHAR2(20)`改为`VARCHAR2(30)`。 ```sql ALTER TABLE STUDENT ALTER COLUMN Spwd VARCHAR2(30); ``` #### 五、删除基本表 **知识点5:删除表** - **语法**:`DROP TABLE <表名> [RESTRICT|CASCADE];` - `RESTRICT`:如果表没有依赖关系,则可以被删除。 - `CASCADE`:即使表有依赖关系也会被删除。 - 示例:删除学生表。 ```sql DROP TABLE Student CASCADE; ``` #### 六、数据查询 **知识点6:SQL查询语句** - **查询全体学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student; ``` - **查询学生的姓名和出生年**: ```sql SELECT Sname, Sage FROM Student; ``` - **查询学生的姓名和所在系名,并将系名转换为小写**: ```sql SELECT Sname, LOWER(Sdept) AS Sdept_lower FROM Student; ``` - **消除取值重复行**: ```sql SELECT DISTINCT Sname FROM Student; ``` - **查询GIS专业学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student WHERE Sdept = 'GIS'; ``` - **查询年龄小于25的学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student WHERE Sage < 25; ``` - **查询年龄介于20-25之间的学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student WHERE Sage BETWEEN 20 AND 25; ``` - **查询年龄不介于20-25之间的学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student WHERE NOT Sage BETWEEN 20 AND 25; ``` - **查询GIS和RS系学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student WHERE Sdept IN ('GIS', 'RS'); ``` - **查询不在GIS和RS系学生的学号和姓名**: ```sql SELECT Sno, Sname FROM Student WHERE Sdept NOT IN ('GIS', 'RS'); ``` - **字符匹配**: ```sql SELECT * FROM Student WHERE Sname LIKE '%牛%'; ``` - **排序查询**: ```sql SELECT * FROM Student ORDER BY Sage DESC; ``` - **聚集函数**: - **查询学生总人数**: ```sql SELECT COUNT(*) FROM Student; ``` - **查询GIS课程的平均成绩**: ```sql SELECT AVG(Grade) FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = 'GIS'); ``` - **查询学生牛一的平均成绩**: ```sql SELECT AVG(Grade) FROM SC WHERE Sno IN (SELECT Sno FROM Student WHERE Sname = '牛一'); ``` - **查询各个课程的课程号与选课人数**: ```sql SELECT Cno, COUNT(*) AS NumStudents FROM SC GROUP BY Cno; ``` - **复合查询** - **查询选修2号课程且成绩在80分以上的学生**: ```sql SELECT Sno FROM SC WHERE Cno = '2' AND Grade > 80; ``` - **查询每个学生的学号、姓名、选修课程名以及成绩**: ```sql SELECT Student.Sno, Sname, Cname, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno JOIN Course ON SC.Cno = Course.Cno; ``` - **查询和牛一在同一个系的学生**: ```sql SELECT Sno, Sname FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname = '牛一') AND Sname != '牛一'; ``` - **查询选修了GIS课程的学生**: ```sql SELECT Student.Sno, Sname FROM Student JOIN SC ON Student.Sno = SC.Sno JOIN Course ON SC.Cno = Course.Cno WHERE Cname = 'GIS'; ``` #### 七、数据更新 **知识点7:更新数据** - **插入数据**:`INSERT INTO <表名>(<列名列表>) VALUES (<值列表>);` - **修改数据**:`UPDATE <表名> SET <列名>=<新值> WHERE <条件>;` - **删除数据**:`DELETE FROM <表名> WHERE <条件>;` #### 附录:视图 **知识点8:视图的创建与使用** - **创建视图**:`CREATE VIEW <视图名> AS <查询语句>;` - **删除视图**:`DROP VIEW <视图名>;` - **视图的其他操作**:视图还可以进行更新操作,但受限于视图的定义。 - **视图的作用**: - **简化查询**:对于复杂的查询,可以通过视图来简化用户的操作。 - **安全性**:可以限制用户只能通过视图访问数据,而不允许直接访问底层的数据表。 - **数据汇总**:视图可以用来汇总多个表的数据,形成一个统一的视图。
- 粉丝: 6409
- 资源: 62
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 点云数据处理与开发基础教程
- (源码)基于 JavaWeb 的超市收银系统.zip
- (源码)基于Vue和Cordova的移动端在线选座购票系统.zip
- (源码)基于C++的simpleDB数据库管理系统.zip
- (源码)基于Arduino的RTOSMMESGU实时操作系统项目.zip
- (源码)基于STM32和TensorFlow Lite框架的微语音识别系统.zip
- (源码)基于C#的支付系统集成SDK.zip
- (源码)基于Spring Cloud和Spring Boot的微服务架构管理系统.zip
- (源码)基于物联网的自动化开门控制系统 iotsaDoorOpener.zip
- (源码)基于ROS的Buddy Robot舞蹈控制系统.zip