SQL总结

数据库系统原理的第一部分讲完了,也就是SQL语言基础,先做总结如下:

SQL语言基础 绪论 关系数据库 标准SQL语言 数据库安全性 数据库完整性 新建 查询 更新 视图

下面主要说以下标准SQL的语法部分,也就是新建,查询,更新,视图,安全性,完整性

1.新建

创建如下对象的方法:
模式: CREATE SCHEMA
表:CREATE TABLE
视图:CREATE VIEW
索引:CREATE INDEX

同样的,有创建就有删除,删除这些对象的方法如下:
模式: DROP SCHEMA
表:DROP TABLE
视图:DROP VIEW
索引:DROP INDEX

例:建立一个学生表:

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

这其中还包含后面完整性的东西,例如PRIMARY KEY主键的定义。

数据类型 含义
CHAR (n) 定长为n的字符串
INT 长整数(4字节)
SMALLINT 短整数(2字节)
DOUBLE PRECISION 取决于机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度至少为n为数字
DATE 日期,包含年月日,格式为YYYY-MM-DD
TIME 时间,包含一日的时,分,秒格式为HH:MM:SS

例:向Student表中增加“入学时间”列,其数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;

例:删除Student表:

DROP TABLE Student CASCADE;

其中CASCADE是级联的意思,在删除该基本表的同时,相关的依赖对象比如视图,都将一并被删除。

2.查询

数据查询是数据库的核心操作,SQL所提供的是SELECT语句。
经常搭配FROM WHERE GROUP BY语句使用。

例:查询学生表中全体学生的学号

SELECT Sno,
FROM Student;

例:查询Student整表

SELECT *,
FROM Student;

其中,*表示所有属性,也可改成,罗列出所有属性,Sname,Sno,Sage,Ssex等,但是肯定麻烦一些。

可以用DISTINCT来消除重复行
例:

SELECT DISTINCT Sno
FROM SC;
查询条件 谓词
比较 =,<,>,>=,<=,!=;
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件 AND,OR,NOT

GROUP BY子句
可以对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,默认值为升序

聚集函数:
COUNT 统计元组个数
SUM 计算一列值的个数
AVG 计算一列值的平均值
MAX 求一列值中的最大值
MIN 求一列值中的最小值

连接查询:
即涉及到两个及两个以上的表的查询。
一般使用连接运算符,分为等值查询(使用=连接的)和非等值查询(不使用等号连接的)

例:查询选修2号课且成绩在90分以上的所有学生的学号和姓名:

SELECT Student,Sno,Sname
FROM Student,SC
WHERE Student.Sno=SC.Sno AND
SC.Cno='2' AND SC.Grade>90;

当然,也可以进行自身连接查询,但是需要对表分别命名,如SC X,SC Y

嵌套查询:
和C语言中的嵌套差不多意思。
例:

SELECT Sname/*外层查询或父查询*/
FROM Student
WHERE Sno IN
(SELECT Sno/*内层查询或子查询*/
FROM SC
WHERE Cno='2');

需要注意的是:子查询的条件不依赖父查询,叫做不相关子查询,也可以理解为由里向外,而由外向里的叫做相关子查询。

集合查询
多个SELECT语句的结果可以进行集合操作,包括并操作UNION,交操作INTERSECT,差操作EXCEPT。

例:查询选修了课程1的学生集合和选修2号课程的学生集合的并集

SELECT Sno
FROM SC
WHERE Cno=‘1’
UNION
SELECT Sno
FROM SC
WHERE Cno=‘2’;

上例也可以用AND语句,更简单一些。使用的时候要学会视情况而选择最简便最适合的方法。

3.更新
更新操作主要分3种,插入修改删除
插入
INSERT语句
例:将一个新的学生元组插入到Student表中

INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈东',‘男’,‘IS’,18);

修改
UPDATE语句
例:将学生201215121的年龄改为22岁

UPDATE Student
SET Sage=22
WHERE Sno='201215121';

删除
DELETE语句,需要注意的是,DROP语句也有删除的作用,但是后者一般用于删除结构,比如TABLE,而DELETE一般适用于删除数据。

例:删除学号为201215128的学生记录

DELETE 
FROM Student
WHERE Sno='201215128';

ps:原来我都是建表之后手打数据,但是直接删掉太心疼了,所以学会了INSERT的用法。
4.视图
视图类似表,但是是“虚”的,数据库只存放其定义,不存放其显示的数据
定义:
建立视图
例:建立信息系学生的视图

CERATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';

删除视图
例:删除视图BT_S和视图IS_S1

DROP VIEW BT_S;
DROP VIEW IS_S1 CASCADE;

查询视图
语句和普通的查询一致
例:在信息系学生的视图中找出年龄小于20岁的学生:

SELECT Sno,Sage
FROM IS_Student
WHERE Sage<20;

更新视图
和表的更新操作一致,改成VIEW就行了
例:删除信息系学生视图IS_Student中学号为“201215129”的记录
DELETE
FROM IS_Student
WHERE Sno=‘201215129’;

总结,SQL语言要多练习,熟悉之后还是可以发现很多共同点。
加油

上一篇:20210418SQL基于视图的操作


下一篇:普华和诚测试笔试试题