0
点赞
收藏
分享

微信扫一扫

数据库系统工程师软考备战:第三篇 - SQL语言深入解析与应用


数据库系统工程师软考备战:第三篇 - SQL语言深入解析与应用

1. SQL语言概述

SQL(Structured Query Language)是关系数据库的标准语言,具有数据定义、数据操纵、数据控制等功能。

1.1 SQL语言特点

  • 综合统一:集数据定义、数据操纵、数据控制于一体
  • 高度非过程化:只需提出"做什么",无需说明"怎么做"
  • 面向集合操作:操作对象和结果都是元组的集合
  • 多种使用方式:既可独立使用,也可嵌入到高级语言中

1.2 SQL语言组成

  • 数据定义语言(DDL):CREATE、ALTER、DROP
  • 数据操纵语言(DML):SELECT、INSERT、UPDATE、DELETE
  • 数据控制语言(DCL):GRANT、REVOKE
  • 事务控制语言(TCL):COMMIT、ROLLBACK

2. 数据定义语言(DDL)

2.1 基本表操作

创建表

CREATE TABLE Student (
    Sno CHAR(9) PRIMARY KEY,
    Sname VARCHAR(20) NOT NULL,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept VARCHAR(20)
);

修改表

ALTER TABLE Student ADD EntranceDate DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Student DROP COLUMN EntranceDate;

删除表

DROP TABLE Student;

2.2 索引管理

创建索引

CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE INDEX Stusname ON Student(Sname);

删除索引

DROP INDEX Stusname;

3. 数据查询语言(DQL)

3.1 单表查询

基本查询

SELECT Sno, Sname FROM Student;
SELECT * FROM Student;
SELECT DISTINCT Sdept FROM Student;

条件查询

SELECT Sname, Sage FROM Student WHERE Sage > 20;
SELECT Sname FROM Student WHERE Sdept = 'CS' AND Sage < 22;

排序查询

SELECT Sno, Grade FROM SC ORDER BY Grade DESC;

3.2 连接查询

等值连接

SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno;

自然连接

SELECT Student.*, SC.*
FROM Student NATURAL JOIN SC;

3.3 嵌套查询

IN谓词

SELECT Sname FROM Student
WHERE Sno IN (
    SELECT Sno FROM SC WHERE Cno = '2'
);

比较运算符

SELECT Sno, Sname FROM Student
WHERE Sage < (
    SELECT AVG(Sage) FROM Student
);

EXISTS谓词

SELECT Sname FROM Student
WHERE EXISTS (
    SELECT * FROM SC
    WHERE Sno = Student.Sno AND Cno = '1'
);

3.4 集合查询

并操作

SELECT * FROM Student WHERE Sdept = 'CS'
UNION
SELECT * FROM Student WHERE Sage <= 19;

交操作

SELECT * FROM Student WHERE Sdept = 'CS'
INTERSECT
SELECT * FROM Student WHERE Sage <= 19;

差操作

SELECT * FROM Student WHERE Sdept = 'CS'
EXCEPT
SELECT * FROM Student WHERE Sage <= 19;

4. 数据操纵语言(DML)

4.1 插入数据

INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept)
VALUES ('2023001', '张三', '男', 20, 'CS');

INSERT INTO Student
SELECT * FROM NewStudents;

4.2 修改数据

UPDATE Student SET Sage = Sage + 1;
UPDATE Student SET Sdept = 'IS' WHERE Sdept = 'CS';

4.3 删除数据

DELETE FROM Student WHERE Sno = '2023001';
DELETE FROM SC WHERE Grade IS NULL;

5. 视图

5.1 视图定义

CREATE VIEW CS_Student AS
SELECT Sno, Sname, Sage
FROM Student
WHERE Sdept = 'CS';

CREATE VIEW Student_Grade(Sno, Sname, Cname, Grade) AS
SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno;

5.2 视图查询

SELECT Sno, Sage FROM CS_Student WHERE Sage > 20;

5.3 视图更新

UPDATE CS_Student SET Sage = 22 WHERE Sno = '2023001';
INSERT INTO CS_Student VALUES('2023005', '李四', 21);

6. 数据控制语言(DCL)

6.1 权限授予

GRANT SELECT ON TABLE Student TO U1;
GRANT ALL PRIVILEGES ON TABLE Student TO U2;
GRANT UPDATE(Sage) ON TABLE Student TO U3;

6.2 权限回收

REVOKE SELECT ON TABLE Student FROM U1;
REVOKE UPDATE ON TABLE Student FROM U3;

7. 典型试题解析

7.1 选择题

试题1:SQL语言中,实现数据检索的语句是( )
A. SELECT B. INSERT C. UPDATE D. DELETE

解析:正确答案是A。SELECT语句用于数据查询,INSERT用于插入数据,UPDATE用于更新数据,DELETE用于删除数据。

试题2:在SQL语言中,与"NOT IN"等价的操作符是( )
A. = SOME B. <> SOME C. = ALL D. <> ALL

解析:正确答案是D。"NOT IN"等价于"<> ALL",表示不等于所有值。

7.2 综合题

试题:设有三个表:
学生表S(Sno, Sname, Ssex, Sage, Sdept)
课程表C(Cno, Cname, Cpno, Ccredit)
选课表SC(Sno, Cno, Grade)

用SQL语句实现以下查询:

  1. 查询选修了3门以上课程的学生学号
  2. 查询所有学生的选课情况(包括没有选课的学生)
  3. 将计算机系学生的年龄增加1岁

参考答案

-- 1. 查询选修3门以上课程的学生
SELECT Sno FROM SC
GROUP BY Sno
HAVING COUNT(*) > 3;

-- 2. 查询所有学生的选课情况
SELECT S.Sno, Sname, Cno, Grade
FROM S LEFT JOIN SC ON S.Sno = SC.Sno;

-- 3. 更新计算机系学生年龄
UPDATE S SET Sage = Sage + 1 WHERE Sdept = 'CS';

8. 备考建议

  1. 熟练掌握SQL语法:特别是SELECT语句的各种用法
  2. 理解视图概念:掌握视图的定义、查询和更新限制
  3. 注重实践操作:通过实际数据库环境练习SQL语句
  4. 理解权限管理:掌握GRANT和REVOKE的使用方法

下一篇我们将讲解数据库设计与ER模型,这是数据库系统设计的重要基础。

本文仅供参考,具体备考请以官方指定教材和考纲为准。

举报

相关推荐

软考中级1(数据库系统工程师)

0 条评论