一、数据的定义
建表、改表、删表
create table 表名(
CHECK (写入用户定义约束条件)
PRIMARY KEY(指明哪个属性当主键),
FOREIGN KEY(指明外键) REFERENCES 被参考表名(属性名),
CHECK (写入用户定义约束条件)
)
ALTER包括的操作有三种:增加字段(增字段)、改变类型(改类型)、删除约束(删约束);
增字段:ALTER TABLE 表名 ADD 属性名 类型(长度)约束;
改类型:ALTER TABLE 表名 MODIFY 属性名 类型;
删约束:ALTER TABLE 表名 DROP 约束(属性名);
删表:DROP TABLE 表名;
建立与删除索引
CREATE UNIQUE/CLUSTER INDEX 索引名 ON 表名(属性名 ASC/DESC,...);
这里UNIQUE/CLUSTER表示是唯一值索引还是聚簇索引,缺省值是UNIQUE,对于CLUSTER只用记住每张表只能建立一个聚簇索引,并且聚簇只适用于不常更新的属性。
删除索引
DROP INDEX 索引名
查询
单表查询
SELECT [ALL/DISTICNT] 属性名,
FROM 表名
WHERE 查询条件(这里门道很多)
ORDER BY 属性名 ASC/DESC
GROUP BY 属性名;
HAVING 条件;
连接查询
等值与非等值连接
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno;
消除重复列后就是自然连接。
- 非等值连接
不是 = 的连接操作就是非等值连接。
示例:查询选课信息,并显示成绩级别
SELECT Sno,Cno,Grade,Stage
FROM Sc, Gstage
WHERE Grade BETWEEN Low AND High;
自身连接
一个表与其自己进行连接,称为表的自身连接。
示例:查询每一门课的先行课名
SELECT First.Cname 课名, Second.Cname 先行课名
FROM Course First,course Second
WHERE First.Cpno = Second.Cno;
输出:
课名 先行课名
数据库 数据结构
信息系统 数据库
注:需要给表起别名以示区别如示例中的First和Second;由于所有属性名都是同名属性,因此必须使用别名前缀,如示例中的First.Cname和Second.Cname。
- ALL查询满足条件的元组
SELECT ALL Sno FROM SC;(SELECT Sno FROM SC;)
- DISTINCT消除取值重复的行
SELECT DISTINCT Sno FROM SC;
查询满足条件的元组
查询满足指定条件的元组可以通过WHERE字句实现。WHERE字句常用的查询条件如下:
示例:
查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ( 'IS','MA','CS' );
查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN ( 'IS','MA','CS' );
对查询结果排序
排序使用ORDER BY子句,可以按一个或多个属性列排序,升序关键字是ASC,降序关键字是DESC,缺省值为升序。当排序列含空值时,ASC:排序列为空值的元组最后显示;DESC:排序列为空值的元组最先显示 。
使用集函数
查询学生总人数。
SELECT COUNT(*)
FROM Student;
计算总和(对非空列)
SUM([DISTINCT|ALL] <列名>)
计算平均值(对非空列)
AVG([DISTINCT|ALL] <列名>)
对查询结果分组
使用GROUP BY子句分组,用来细化集函数的作用对象
示例:求各个课程号及相应的选课人数。
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
示例:查询每个系男女生人数。
SELECT Sdept, Ssex, COUNT(*)
FROM Student
GROUP BY Sdept, Ssex;
复合条件连接
WHERE字句中可以有多个连接条件,称为复合条件连接
左外连接
右外连接
全外连接
嵌套查询
嵌套查询概述
一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
集合查询
elect语句的查询结果是元组的集合,所以多个select语句的结果可进行集合操作。集合操作主要包括并操作(union)、交操作(intersect)和差操作(except)。注意:参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。
数据更新
插入单个元组
修改数据
删除数据
视图
定义视图
语句格式:
CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
删除视图
格式:
DROP VIEW <视图名> [CASCADE];
视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其他视图,则使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除。
基本表删除后,由该基本表导出的所有视图没有删除,但均已无法使用了。
查询视图
更新视图
视图的作用
简化用户的操作
使用户能以多种角度看待同一数据
提供了一定程度的逻辑独立性