数据库SQL
文章目录
一、SQL概述
1.SQL的特点
·综合统一:集模式定义语言、外模式定义语言、数据描述语言、数据操纵语言于一体
·高度非过程化
·面向集合的操作方式
·以同一种语法结构提供多种使用方式
·语言简洁,易学易用
2.SQL使用的动词
SQL功能 | 动词 |
---|---|
数据查询 | SELECT(查询) |
数据定义 | CREATE(生成),DROP(删除),ALTER(修改) |
数据操纵 | INSERT(插入),UPDATE(更新),DELETE(删除) |
数据控制 | GRANT,REVOKE |
3.SQL与三级模式体系结构
外模式:视图
模式:基本表
内模式:存储文件
SQL语句:操作视图和基本表,仅索引可以直接操作存储文件,故索引属于内模式的内容
二、数据定义
1.数据定义语句
操作对象 | 创建 | 删除 | 修改 |
---|---|---|---|
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX |
2.数据类型
数据类型 | 含义 |
---|---|
CHAR(n) | 长度为n的定长字符串 |
VARCHAR(n) | 最大长度为n的变长字符串 |
INT | 长整数(也可INTEGER) |
SMALLINT | 短整数 |
NUMERIC(p,d) | 定点数,p位数字(不含符号、小数点)组成,小数后有d位数字 |
REAL | 取决于机器精度的浮点数 |
Double Precision | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 浮点数,精度至少n位数字 |
DATE | 日期 格式为YYYY-MM-DD |
TIME | 时间 格式位 HH:MM:SS |
3.创建删除语句
(1)创建模式:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
(2)删除模式
DROP SCHEMA <模式名><CASCADE|RESTRICT>
CASCADE和RESTRICT必须二选一
CASCADE(级联)表示删除模式时把该模式全部对象删除
RESTRICT(限制)表示如果该模式中已有下属对象则禁止此语句执行
#需要数据库管理权限或语句使用权限
#为用户LIXING定义一个模式SCHOOL
#没有指定模式名则模式名默认为用户名
#定义模式相当于定义了一个命名空间
CREATE SCHEMA SCHOOL AUTHORIZATION LIXING;
#级联删除表SCHOOL
DROP SCHEMA SCHOOL CASCADE;
#限制删除表SCHOOL
DROP SCHEMA SCHOOP RESTRICT;
(3)创建表
CREATE TABLE <表名>(
<列名><数据类型><列级完整性约束条件>
<表级完整性约束规则>
)
约束 | 意义 |
---|---|
PRIMARY KEY | 主码约束 |
UNIQUE | 不能取相同值,但能有多个空值 |
NOT NULL | 非空 |
FOREIGN <列名>REFERENCES<表名>(<列名>) | 参照完整性约束 |
CREATE TABLE STUDENT(
SNO CHAR(5) NOT NULL UNIQUE,
SNAME CHAR(20) UNIQUE,
SAGE INT,
PRIMARY KEY SNO
);
(4)删除表
DROP TABLE <表名> [RESTRICT|CASCADE]
同模式删除,RESTRICT有限制条件,若其他表存在依赖该表,则此表不能删除
CASCADE会将依赖表一同删除
不同:可缺省,默认RESTRICT
(5)修改表:
ALTER ATBLE<表名>
操作 | 意义 |
---|---|
ADD COLUMN <新列名><完整性约束> | 添加新列 |
DROP [COLUMN] <列名> [RESTRICT|CASCADE] | 删除列 |
ADD <表级完整性约束> | 添加表级完整性规则 |
DROP CONSTRAINT<完整性约束>[RESTRICT|CASCADE] | 删除完整性约束规则 |
ALTER [COLUMN] <列名><数据类型> | 修改某列的数据类型 |
#针对上表
ALTER TABLE STUDENT ADD UNIQUE(SNAME);
ALTER TABLE STUDENT DROP STUDENT;
(6)建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [ASC|DESC] )
ASC 升序、DESC降序,默认升序
(7)修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>
(8)删除索引
DROP INDEX <索引名>
三、数据查询
1、单表查询
SELECT [ALL] <目标列> FROM <表、视图> [WHERE <条件表达式>]
[GROUP BY <列名>[HAVING<条件表达式>]]
[ORDER BY <列名>[ASC,DESC]];
注:WHERE:条件选项
GROUP BY:按列的值分组
ORDER BY:升降序
2.谓词
查询条件 | 谓词 |
---|---|
比较 | = ,<,>,<=,>=,<>,!=,!>,!<;NOT +前述 |
确定范围 | BETWEEN AND;NOT BETWEEN AND |
确定集合 | IN;NOT IN |
字符匹配 | LIKE; NOT LIKE (通配符%(任意长度个任意字符),_(任意单个字符)) |
空值 | IS NULL,IS NOT NULL(不可以=NULL) |
多重条件 | AND ;OR |
3.集函数
集函数 | 作用 |
---|---|
COUNT (*) | 统计元组个数 |
COUNT([DISTINCT|ALL]<列名>) | 统计一列中值的个数 |
SUM([DISTINCT|ALL]<列名>) | 求和,必须为数值型 |
AVG([DISTINCT|ALL]<列名>) | 求平均值,必须为数值型 |
MAX([DISTINCT|ALL]<列名>) | 求最大值 |
MIN([DISTINCT|ALL]<列名>) | 求最小值 |
DISTINCT:删除重复值
4.GROUP BY 子句
每一组都会有一个集函数。
SELECT CNO,COUNT(SNO)
FROM SC
GROUP BY CON;
5.连接查询
(1)自身连接
定义COURSE 的两个表FIRST、SECOND区分
SELECT FIRST.CNO,SECOND.CPNO
FROM COURSE FIRST,COURSE SECOND
WHERE FIRST.CPNO=SECOND.CNO;
(2)外连接
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC
USING(Sno);
USING表示同名连接列
左外连接:LEFT OUTER JOIN
右外连接:RIGHT OUTER JOIN
内连接:INNER JOIN
6.嵌套查询
<父查询块><表达式>(<子查询块>)
谓词 | 意义 |
---|---|
IN | 在子查询返回的集合中 |
比较运算符+ANY(SOME) | 与某个值符合条件 |
比较运算符+ALL | 与全部值符合条件 |
EXISTS | 存在量词,若内层空返回假,非空返回真 |
7.集合查询
(1)操作:
并UNION (自动去重,保留UNION ALL)
交INTERSECT
差 EXCEPT
(2)基本语句结构
<查询块>操作<查询块>
四、数据更新
1.插入数据
INSERT INTO <表名>[(属性列集合)] VALUES (值集合);
INSERT INTO <表名>[(属性列集合)] 子查询;
2.修改数据
UPDATE <表名> SET <列名>=值 WHERE <条件>
3.删除数据
并UNION (自动去重,保留UNION ALL)
交INTERSECT
差 EXCEPT
(2)基本语句结构
<查询块>操作<查询块>
四、数据更新
1.插入数据
INSERT INTO <表名>[(属性列集合)] VALUES (值集合);
INSERT INTO <表名>[(属性列集合)] 子查询;
2.修改数据
UPDATE <表名> SET <列名>=值 WHERE <条件>
3.删除数据
DELETE FROM <表名> WHERE<条件>