SQL语言
结构化查询语言,非过程化,面向集合操作
1、DDL (数据定义语言) — 数据表的建立
1)CREATE DATABASE 建立数据库
CREATE DATABASE database_name
2)CREATE TABLE 建立数据表
CREATE TABLE table_name
(属性名1 数据类型和长度 [字段级完整性约束],
属性名2 数据类型和长度 [字段级完整性约束],
……
属性名n 数据类型和长度 [字段级完整性约束],
[表级完整性约束]
)[其他参数]
- 数据类型和长度
属性定义按“,”管理,一个属性占据一个逗号空间
数值型自动分配宽度,字符型要同时定义长度char(6)/varchar(6)
名称 | 类型 |
---|---|
精确数字 | bigint,numeric,bit,smallint<2>,decimal,smallmoney,int,tinyint,money |
近似数字 | float,real |
日期和时间 | date,datetimeoffset,datetime2,smalldatetime,datetime,time |
字符串 | char,varchar(根据数据自动调整长度),text |
二进制字符串 | binary,varbinary,image |
其它数据类型 | cursor,timestamp,hierarchyid |
Unicode字符串 | nchar,nvarcha,ntext |
- 完整性约束
字段级完整性约束 | 含义 |
---|---|
NULL / NOT NULL | 是否允许字段取空值 |
PRIMARY KEY | 主键(字段级完整性约束的主键只能有一个) |
UNIQUE | 唯一性约束 |
FOREIGN KEY() REFERENCES table[(field)] | 外键约束,引用其他表中的字段 |
DEFAULT() | 说明字段的默认值 |
CHECK() | 约束字段的取值 |
表级完整性约束 | 含义 |
---|---|
PRIMARY KEY() | 说明由多个字段构成的复合主键 |
FOREIGN KEY() | 外键是复合主键 |
CHECK() | 不同字段同时需要约束或有某种函数关系 |
- CHECK子句的条件控制
![]() |
![]() |
其他: isnumeric(), left(xxx,n), right(xxx,n)
3)ALTER TABLE 修改基本表的结构
ALTER TABLE table1
ADD 新字段名 数据类型 完整性约束
DROP 完整性约束
DROP COLUMN 字段名
ALTER COLUMN 字段名 数据类型 完整性约束
4)DROP TABLE 删除基本表
DROP TABLE table1
5)CREATE INDEX 建立索引
CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名> <列名1><次序1>...<列名n><次序n>
6)DROP INDEX 删除索引
DROP INDEX <索引名>
2、DML (数据操纵语言) — 数据查询SELECT
可以通过WHERE条件中IN | NOT IN | NOT EXISTS等语句嵌套使用
(WHERE语句的条件控制与CHECK类似)
SELECT[ALL/DISTINCT] select_list(,) [<as> label] /*可以用属性名/表达式/聚合函数,查询的结果也是表*/ /*相当于关系代数π*/
/*ALL表示查询结果中可以包含重复的记录(默认值),DISTINCT表示结果中不出现重复记录*/
[INTO new_table]
FROM table_source [LEFT/INNER/RIGHT/FULL JOIN table_source2 /*左匹配/全部匹配/右匹配/全外连接*/
ON join_condition]
[WHERE search_condition] /*对分组前的表或视图进行过滤,或用来建立多表之间的联系;不允许出现聚合函数*/ /*相当于关系代数σ*/
[GROUP BY group_by_expression] /*SELECT语句中的分组属性一定要出现在GROUP BY语句中*/
[HAVING search_condition] /*对分组后的汇总结果进行过滤*//*允许出现聚合函数*/
[ORDER BY order_expression [ASC|DESC]] /*可以用属性名或表达式,默认为ASC升序*/ /*用多个字段表示嵌套分组*/
[LIMIT n,m] /*展示从第(n+1)条记录开始的m条记录(n从0开始取)*/
[examples]
/*分组汇总*/
SELECT num,count(*)
FROM table_source
GROUP BY num
/*建立多表关联*/
SELECT *
FROM table1,table2
WHERE table1.field = table2.field and ...
/*常用的聚合函数*/
avg(field), count(*), count(field), sum(field), max(field), min(field)
/* 符号*代表所有字段/所有记录 */
/*交、并、差*/
union, intersect, except
3、DCL (数据控制语言)
- INSERT
/*把记录插入指定的表中*/
INSERT INTO table1 [(field1,field2,...,fieldn)]
VALUES (value11,value12,...value1n),
(value21,value22,...value2n)
/*把记录插入指定的表中*/
INSERT INTO table1 [(field1,field2,...,fieldn)]
SELECT * FROM table2
- UPDATE
UPDATE table1
SET field1=expression1,field2=expression2
[WHERE condition]
- DELETE
DELETE
FROM table1
[WHERE condition]
4、视图(虚拟表)的操作
CREATE VIEW <视图名> /*ALTER 和 DROP也一样*/
AS
SELECT字句
/*不能包含INTO或ORDER BY字句*/