//[ ]中的内容不是必须内容,是为了实现某些功能时才添加的。
SQL (Structured Query Language):结构化查询语言,是关系数据库的标准语言。
九个核心词
SQL功能 |
动词 |
数据查询 |
SELECT |
数据定义 |
CREATE,DROP,ALTER |
数据操纵 |
INSERT,UPDATE,DELETE |
数据控制 |
GRANT,REVOKE |
SQL支持关系数据库三级模式结构:
基本表
视图
SQL的数据定义功能:模式定义、表定义、视图和索引的定义。
操作对象 |
操作方式 |
||
创建 |
删除 |
修改 |
|
模式 |
CREATE SCHEMA |
DROP SCHEMA |
|
表 |
CREATE TABLE |
DROP TABLE |
ALTER TABLE |
视图 |
CREATE VIEW |
DROP VIEW |
|
索引 |
CREATE INDEX |
DROP INDEX |
ALTER INDEX |
1.定义模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> ;
说明:
2.删除模式
DROP SCHEMA <模式名> ;
说明:
1.定义基本表
CREATE TABLE <表名>(
<列名> <数据类型> [<列级完整性约束条件>],
……
);
说明:
2.数据类型
SQL 数据类型 (w3school.com.cn)
3.修改基本表
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [完整性约束]]
[ADD <表级完整性约束>]
[DROP [COLUMN ] <列名> [CASCADE |RESTRICT]]
[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]
[ALTER COLUMN <列名> <数据类型>];
说明:
4.删除基本表
DROP TABLE <表名> [CASCADE |RESTRICT]
1.建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名>[次序]);
(ASC升序 DESC降序)
UNIQUE表明此索引每一个索引值只对应唯一的数据。
CLUSTER表示要建立的索引是聚簇索引。聚簇索引是指索引顺序与表中记录的物理顺序一致。
2.删除索引
DROP INDEX <索引名>
(目标列表达式)函数(列名);表达式运算符号列名;‘字符串’;列名 想在表中显示的名字。
SELECT Sname,Ssex FROM Student WHERE Sdept IN('IS','MA','CS');
SELECT Sname,Sno,Ssex FROM Student WHERE Sname LlKE '刘%';(%——任意字符,_——任意单个字符)
SELECT * FROM Course WHERE Cname LIKE 'DB\_%i_ _ ' EXCAPE '\';(换码字符)
SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC;
SELECT Cno,Count(Sno) FROM SC GROUP BY Cno;
聚集函数 |
作用 |
count(id) |
统计表中id个数 |
count(distinct id) |
统计表中id个数(去重) |
max(id) |
统计id最大值 |
min(id) |
统计id最小值 |
sum(id) |
统计id之和 |
avq(id) |
统计id平均值 |
例:
SELECRT COUNT(*) FROM Student;
PS:WHERE子句中是不能用聚集函数作为条件表达式的。聚函数只能用于SELECT子句和GROUP BY中的HAVING子句。
1.等值与非等值连接查询
连接查询的WHERE子句中用来连接两个表的条件称为连接谓词;‘=’——等值连接,其他运算符号称为非等值连接。
SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;
一个SELECT-FROM-WHERE语句称为一个查询块。
嵌套查询定义:是指将一个查询块嵌套另一个查询块的子句或HAVING短语条件中的查询。
集合操作的种类:并操作、交操作、差操作.
1.并操作UNION
2.交操作INTERSECT
3.差操作EXCEPT
子查询出现在FROM子句中,子查询可以生成临时派生表成为主查询的查询对象。
SELECT Sno, Cno
FROM SC (SELECT Sno,Avg(Grade) FROM SC GROUP BY Sno)
AS Avg_sc (avg_sno,avg_grade) -- 派生表
WHERE SC.Sno=Avg_sc.avg_sno AND SC.Grade >=Avg_sc.avg_grade;
1.插入元组
INSERT INTO <表名> [(<属性列1>[……])] VALUES (<常量1>[,<常量2>]……);
2.插入子查询结果
UPDATE <表名> SET<列名>==<表达式>[,<列名> = <表达式>]…… [WHERE <条件>];
DELETE FROM<表名> [WHERE<条件>];
若无WHERE,删除所有元组。
1.视图的特点:
SQL VIEW(视图)
1.建立视图
(1)语句格式
CREATE VIEW<视图名>[ (<列名>[,<列名>]…)] AS <子查询>[WITH CHECK OPTION];
(2)带表达式的视图——子查询中带有表达式;
(3)分组视图——子查询中带有GROUP BY;
(4)行列子集视图——从单个基本表导出,保留了主码,仅去除基本表中某些行。
2.删除视图
DROP VIEW,<视图名>[CASCADE];
1.RDBMS实现视图查询的方法——视图消解法
(GROUP BY 可能使视图消解法出现错误)
说明:因为视图不适宜存储数据,因此对视图的更新操作将通过视图消解,转为对实际表的更新操作。为防止在更新视图时出错,定义视图时要加上WITH CHECK OPTION子句。有些视图不可更新。
end~