SQL
SQL(Structure Query Language
)又称结构化设计语言。是一门数据库语言,其作用包括数据定义Statistic Define
、数据操纵Maniplation
、数据控制Control
三个主要部分。其运行基于数据库管理系统(DBMS)
对数据库的外模式进行操作控制,为外置的数据库用户或程序提供对数据库数据进行操作提供一种方式,并集成常用的操作和功能。
其语句结构包括一下方面:
- 数据定义
- 数据查询
- 数据操作
- 数据控制
- 指针控制
- 事务控制
此篇文章主要介绍SQL语句结构的前三种
数据定义Data Define Language
SQL的数据定义有特定的谓词CREATE
,DROP
,ALTER
谓词CREATE
谓词CREATE
用于创建数据类型 、表、模式。数据库等同时定义完整性约束。
使用方法:
- 创建数据库
-
CREATR {DATABASE | SCHEMA} db_name [create_spcification[,create_specification]...]
[create_specification]: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
- 创建数据表
CREATE [sc_name] TABLE table_name [(create_definition, create_definition, ...)] [table_options] [select_statement]
[create_definition]
包括数据列名称col_name
,数据类型data type
,数据完整性约束[[NOT] NULL]
,数据索引[INDEX]
,数据主键[PRIMARY KEY]
- 创建模式
CREATE SCHEMA sc_name AUTHORIZATION <user_name [<CREATE DOMAIN 子句>|<CREATE TABLE 子句 >|<CREATE VIEW 子句>|...]
- 创建索引
CREATE [UNIQUE] [CLUSTER] INDEX <index_name> ON <table_name> [<col_name> [<(ASC|DESC)>]],...]);
UNIQUE
表示索引值唯一对应CLUSTER
表示要建立的索引为聚族索引,与表中记录顺序一致的索引组织
关于
[create_definition]
的定义,其中包括三个部分 [<列名> <数据类型> [列级完整性约束]],其中不同层级的[CREATE_DEFINITION]
用半角逗号,
分隔 数据库的数据类型分为:- 预定义数据类型: 即可在SQL中直接使用的数据类型(较为常用)
INT
整数类型,SMALLINT
短整数类型REAL
浮点数类型,DOUBLE PRECISION
双精度浮点数类型,FLOAT(n)
浮点数类型, 精度至少为n位数字NUMERIC(p,d)
定点数类型,共有p位数字,其中小数点后d位CHAR(n)
长度为n的字符串,VARCHAR(n)
最大长度为n的字符串BIT
(n)长度为n的二进制位串,BIT
和VARYING(n)
最大长度为n的二进制位串DATE
日期类型:YYYY-MM-DD
, 时间类型:HH:MM:SS
,TIMESTAMP
时间戳(DATE
加TIME
)BOOLEAN
布尔型,有三个值TRUE
、FALSE
和UNKNOWN
- 构造数据类型: 由特性的保留字和预定义数据类型构造而成, 如
REF
、ROW
和ARRAY
等 - 用户定义数据类型: 是一个对象类型,是由用户按照一定的规则用预定义数据类型组合定义的用户自用的数据类型
- 大对象类型: 可储存多达
1Gbyts
的串。称为LOB
:BLIB
二进制大对象,储存音频、图像、视频等。CLOB
谓词DROP
谓词DROP
用于删除数据类型:
- 删除模式
DROP SCHEMA sc_name (CASCADE | RESTRICT)
- CASCADE 删除模式时, 将模式及其下属的表、视图索引等全部删除
- RESTRICT 只删除空模式
- 删除表
DROP col_name (CASCADE | RESTRICT) [DROP 完整性约束]
- 删除索引
DROP INDEX [ON table_name] index_name
谓词MODIFY
谓词MODIFY
用于修改数据类型:
- 修改数据表的列:
MODIFY [TABLE table_name] col_name create_spcification
数据查询DATA Query Language
SQL的数据查询有特定的谓词SELECT
也是SQL用的最多的谓词
简单查询
简单查询仅涉及数据库中的一个表,也称为单表查询
- 查询表中的若干列(投影)
SELECT col_name1[, col_name2]... FROM table_name
//投影部分列SELECT * FROM table_name
//投影所有列
- 查询若干元组
SELECT {[col_names]} FROM table_name WHERE {Expression}
SELECT {[col_names]} FROM table_name WHERE [col_name] BETWEEN [left_limit] AND [right_linit]
SELECT {[col_names]} FROM table_name WHERE [col_name] [NOT] LIKE [Expression]
[Expression]
中使用’’包裹条件- %匹配任意长的字符串
- _匹配单个任意字符
SELECT {[col_names]} FROM table_name WHERE [col_name] IN ('MA', 'CS', 'EE');
- 排序查询结果
SELECT * FROM table_name ORGER BY {[col_names]} DESC;
数组中的第一列优先级最高
- 使用聚集函数
COUNT ([DISTINCT | ALL] *)
统计元组个数COUNT ([DISTINCT | ALL] col_name)
统计一列元组个数SUM ([DISTINCT | ALL] col_name)
对数值列求和AVG ([DISTINCT | ALL] col_name)
对数值求平均MAX ([DISTINCT | ALL] col_name)
求最大值MIN ([DISTINCT | ALL] col_name)
求最小值SELECT COUNT(*) FROM table_name
查询元组数量
- 对查询结果分组
- SELECT {[col_names]} FROM table_name GROUP BY {[col_names]} [HAVING Expression]
连接查询
查询通过多个表取得数据,称为连接查询
- 等值连接和非等值连接
SELECT table_name1 {[col_names]} FROM table_name2 WHERE table1.att1 = table2.att2
当两个表有相同的某列的值时,将其连接起来
- 符合条件链接
SELECT {[col_names]} FROM table_name WHERE [Express] [AND] [table1.att1 = table2.att2]
- 自身连接
- `SELECT {[col_names]} FROM table_name AS [alias1], table_name AS [alias2] WHERE alias1.att1 > alias2.att2 AND [Expression]
- 多表连接
SELECT {[col_names]} FROM table_name FROM {[table_names]} WHERE {[Expression]}
嵌套查询
- 带有谓词
IN
的子查询- `SELECT {[col_names]} FROM table_name WHERE [clo_name] IN (SELECT [col_NAme] FROM table_name WHERE [Epression])
- 带有ANY(SOME)或ALL谓词的子查询
SELECT {[col_names]} FROM table_name WHERE [col_name] < ANY(select_array)
SELECT {[col_names]} FROM table_name WHERE [col_name] < ALL(select_array)
- 带有`[NOT] EXISTS谓词的子查询
SELECT {[col_names]} FROM table_name WHERE EXISTS(select_array)
集合查询
- 并
(UNION)
SELECT {[col_names]} FROM table_name WHERE [Expression1] UNION SELECT {[col_names]} FROM table_name WHERE [Expression2]
- 交
(Intersect)
SELECT {[col_names]} FROM table_name WHERE [Expression1] INTERSECT SELECT {[col_names]} FROM table_name WHERE [Expression2]
- 差
(EXCEPT)
SELECT {[col_names]} FROM table_name WHERE [Expression1] EXCEPT SELECT {[col_names]} FROM table_name WHERE [Expression1]
连接表
连接表允许用户在一个`SELECT`语句的`FROM`子句中指定连接操作,这种连接操作所得到的表称为连接表。
- ` [NATURAL]
Connect_Type
includes JOIN, OUTER, JOIN, NATURAL JOIN and CROSS JOINConnect_Condition
includes ON, USING({col_names})SELECT {col_names} FROM (<table_name1> JOIN {col_names} ON <table_name2.col_names> [Judge_condition]) Where {Judge_condition}
数据修改
数据插入
SQL
的插入操作通过INSERT
语句实现,该语句将数据插入到一个表中.其一般格式有两种:
- 插入一行
INSERT INFO table_name [{col_names}] VALUES({col_values})
- 使用查询插入多行
INSERT INTO table_name[{col_names}] {child_query}
数据删除
SQL
的数据删除由DELETE
实现
DELETE FROM table_name [WHERE {expressions}]
更新数据
SQL
数据更新操作由UPDATE
语句实现
UPDATE table_name SET {col_names=col_values} WHERE {expressions}
更新操作一次只能更新一个表,若更新多个表,需要执行多个更新语句