数据定义语句

创建数据库

1
CREATE  DATABASE  <数据库名>;

修改数据库

1
ALTER  DATABASE  <数据库名> <修改内容>;

删除数据库

1
DROP  DATABASE  <数据库名>;

创建数据表

1
2
3
4
5
6
CREATE TABLE  <表名>
<列名1> <数据类型> [列完整性约束],
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [ 列完整性约束],

);

列完整性约束关键词
PRIMARY KEY——主键
NOT NULL——非空值
NULL——空值
UNIQUE——值唯一
CHECK——有效性检查
DEFAULT——缺省值

表约束定义主键

使用列约束关键词PRIMARY KEY定义表的主键列只能定义单列主键,若要定义由多个列构成的复合主键,则需要使用表约束方式来定义。

1
CONSTRAINT  <约束名>  PRIMARY Key(主键列)

表约束定义代理键

在一些关系表中,为了方便数据处理,可以使用代理键去替代复合主键。在SQL语句中,关系表的代理键采用表约束方式来定义。

1
2
3
4
5
6
7
8
CREATE TABLE  <表名>
<代理键列名> <Serial数据类型> NOT NULL
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],

CONSTRAINT <约束名> PRIMARY Key(代理键列名)
);

表约束定义外键

在数据库中,一些关系表之间存在关联。在一个表中作为主键的列,在另外的关联表中则作为外键。

1
2
3
4
5
6
7
8
CREATE TABLE  <表名>
<列名1> <数据类型> [列完整性约束],
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],

CONSTRAINT <约束名> FOREIGN Key(外键列)
);

修改表结构

1
ALTER TABLE <表名> <修改方式>;

ADD修改方式,用于增加新列或列完整性约束

1
ALTER TABLE <表名> ADD <新列名称><数据类型>|[完整性约束]

DROP修改方式,用于删除指定列或列的完整性约束条件

1
2
3
ALTER TABLE<表名> DROP  COLUMN <列名>

ALTER TABLE<表名> DROP CONSTRAINT<完整性约束名>

RENAME修改方式,用于修改表名称、列名称

1
2
3
ALTER TABLE <表名> RENAME TO <新表名>

ALTER TABLE <表名> RENAME <原列名> TO <新列名>

ALTER修改方式,用于修改列的数据类型

1
ALTER TABLE <表名> ALTER  COLUMN <列名> TYPE<新的数据类型>

删除表结构SQL语句

1
DROP TABLE <表名>;

索引创建

索引作用:支持对数据库表中数据快速查找,其机理类似图书目录可以快速定位章节内容。

索引优点:

  • 提高数据检索速度
  • 可快速连接关联表
  • 减少分组和排序时间

索引开销:

  • 创建和维护索引都需要较大开销
  • 索引会占用额外存储空间
  • 数据操纵因维护索引带来系统性能开销
1
CREATE INDEX  <索引名>  ON <表名><(列名)>

索引修改

1
2
3
4
ALTER  INDEX  <索引名> <修改项>

ALTER INDEX <索引名> RENAME TO <新索引名>

索引删除

1
DROP  INDEX  <索引名>

数据操作语句

插入语句:

1
INSERT  INTO  <表名|视图名>[<列名表>]  VALUES (列值表);

修改语句:

1
2
3
UPDATE  <表名|视图名>
SET <列名1>=<表达式1> [,<列名2>=<表达式2>...]
[WHERE <条件表达式>];

删除语句:

1
2
3
DELETE 
FROM <表名|视图名>
[WHERE <条件表达式>];

数据查询语句

数据查询SQL语句格式

1
2
3
4
5
6
SELECT  [ALL|DISTINCT]  <目标列>[,<目标列>…]
[ INTO <新表> ]
FROM <表名|视图名>[,<表名|视图名>…]
[ WHERE <条件表达式> ]
[ GROUP BY <列名> [HAVING <条件表达式> ]]
[ ORDER BY <列名> [ ASC | DESC ] ];

从单个表读取指定列(投影运算)

1
2
SELECT  <目标列>[,<目标列>…]
FROM <关系表>

从单个表读取指定行(选择运算)

1
2
3
SELECT  *
FROM <关系表>
WHERE <条件表达式>;

从单个表读取指定行和列:

1
2
3
SELECT   <目标列>[,<目标列>…]
FROM <关系表>
WHERE <条件表达式>;

Where条件子句

使用BETWEEN..AND关键词来限定列值范围,还可以使用关键词LIKE与通配符来限定查询条件。

使用通配符来限定字符串数据范围。下划线(_)通配符用于代表一个未指定的字符。百分号(%)通配符用于代表一个或多个未指定的字符。

在SQL查询Where子句中,还可以使用多个条件表达式,并通过逻辑运算符(AND、OR、NOT)连接操作,以及使用IN或NOT IN关键词,进一步限定结果集的数据范围。

使用IN关键字限定范围

对结果集进行排序:

在SELECT查询语句返回的结果集中,行的顺序是任意的。如果需要结果集排序,可以在SELECT语句中加入ORDER BY关键字。

在默认情况下,SQL查询的结果集是按指定列值的升序排列。可以使用关键词ASC和DESC选定排序是升序或降序。

如果结果集需要按多个列排序,可以分别加入关键字ASC或DESC改变。

内置函数

SQL语言提供了大量内置函数,支持对SELECT查询结果数据进行处理。

典型SQL内置函数类型如下:

  • 聚合函数
  • 算术函数
  • 字符串函数
  • 日期时间函数
  • 数据类型转换函数

聚合函数

聚合函数是一些对关系表中数值属性列进行计算并返回一个结果数值的函数。

聚合函数 功能
AVG() 计算结果集指定列数据的平均值
COUNT() 计算结果集行数
MIN() 找出结果集指定列数据的最小值
MAX() 找出结果集指定列数据的最大值
SUM() 计算结果集指定列数据的总和

分组统计

1
2
3
4
5
SELECT    统计函数(目标列)
FROM <表名>
[WHERE 条件]
GROUP BY <目标列>
[Having 条件];
  • GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用

  • group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面或者包含在having 后的聚合函数里。

  • where 子句的作用是在对查询结果进行分组前将不符合where条件的行去掉,即在分组之前过滤数据条件中不能包含聚合函数。

  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚合函数。

  • 注意:

    • 除了使用GROUP BY语句外,列的名称是不允许和内置函数一起混合使用
    • 一般来说,内置函数是不能用于WHERE子句中的。
  • 当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
    执行where子句查找符合条件的数据;
    使用group by 子句对数据进行分组;
    对group by 子句形成的组运行聚集函数计算每一组的值;
    最后用having 子句去掉不符合条件的组。

多表关联查询

子查询与多表关联查询

1
2
3
4
子查询SQL语句基本格式:
SELECT <目标列>[,<目标列>…]
FROM <表名>
WHERE <条件中嵌套另一关系表的SELECT 查询结果集>

内连接关联多表查询

在使用多个表查询时,子查询只有在结果数据均来自一个表的情况下才有用。但如果需要从两个或多个表中获取结果数据,就不能使用子查询,而需要采用连接关联多表查询。

1
2
3
4
5
6
7
8
9
连接关联多表查询SQL语句基本格式:
SELECT <目标列>[,<目标列>…]
FROM <表名1><表名2>,…, <表名n>
WHERE <关系表之间的连接关联条件>
使用临时变量指定表 table1 as A,table2 as B

两表连接关联查询的JOINON语句格式如下:
SELECT <目标列>[,<目标列>…]
FROM <表名1> JOIN <表名2> ON <连接条件>;

外连接关联多表查询

在SQL 应用中,有时候也希望输出那些不满足连接条件的元组数据。这时,可使用JOIN…ON外连接方式实现。其实现方式有三种形式,具体如下:

  • LEFT JOIN: 左外连接,即使没有与右表关联列值匹配,也从左表返回所有的行。
  • RIGHT JOIN: 右外连接,即使没有与左表关联列值匹配,也从右表返回所有的行。
  • FULL JOIN: 全外连接,同时进行左连接和右连接,就返回所有行。

数据控制语句

在SQL语言中,数据控制SQL语句是一种可对用户数据访问权进行控制的操作语句,它可以控制特定用户或角色对数据表、视图、存储过程、触发器等数据库对象的访问权限。

主要有如下语句:

  • GRANT授权语句

  • REVOKE 收权语句

  • DENY拒绝权限语句

GRANT权限授予语句

GRANT语句是一种由数据库对象创建者或管理员执行的权限授予语句,它可以把访问数据库对象权限授予给其他用户或角色。

1
GRANT  <权限列表>  ON  <数据库对象>  TO  <用户或角色> [ WITH GRANT OPTION ];

REVOKE权限收回语句

REVOKE语句是一种由数据库对象创建者或管理员将赋予其它用户或角色的权限进行收回语句,它可以收回原授予给其他用户或角色的权限。

1
REVOKE  <权限列表>  ON  <数据库对象>  FROM  <用户或角色> ;

DENY权限拒绝语句

DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。

1
DENY  <权限列表>  ON  <数据库对象>  TO  <用户或角色> ;

视图

视图——是一种通过基础表或其它视图构建的虚拟表。它本身没有自己的数据,而是使用了存储在基础表中的数据。

视图创建

1
CREATE  VIEW  <视图名>[(列名1),(列名2),…]  AS  <SELECT查询>

视图删除

1
DROP  VIEW  <视图名>

视图的好处:

  1. 使用视图简化复杂SQL查询操作
  2. 使用视图提高数据访问安全性
  3. 提供一定程度的数据逻辑独立性
  4. 集中展示用户所感兴趣的特定数据