SQL 进阶

2018-08-30 09:47 更新

SQL 进阶

SQL Aliases 别名[AS 语法]

[注意]Aliases --> AS SQL 别名用于为表或表中的列提供临时名称。 SQL 别名通常用于使列名更具可读性。 SQL 一个别名只存在于查询期间。

列的 SQL Alias 语法

SELECT column_name AS alias_name FROM table_name;

表的 SQL Alias 语法

SELECT column_name(s) FROM table_name AS alias_name;

SQL 约束

SQL约束用于指定表中数据的规则。 约束是作用于数据表中列上的规则,用于限制表中数据的类型。 约束保证了数据库中数据的精确性和可靠性。 约束有列级和表级之分,列级约束作用于单一的列,而表级约束作用于整张数据表。

常用约束

NOT NULL 约束:保证列中数据不能有 NULL 值 DEFAULT 约束:提供该列数据未指定时所采用的默认值 UNIQUE 约束:保证列中的所有数据各不相同 主键约束:唯一标识数据表中的行/记录 外键约束:唯一标识其他表中的一条行/记录 CHECK 约束:此约束保证列中的所有值满足某一条件 索引:用于在数据库中快速创建或检索数据

SQL创建约束

CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, column3 datatype constraint, .... );

SQL CREATE TABLE + CONSTRAINT 语法

CREATE TABLE table_name ( column_name1 data_type(size) constraint_name, column_name2 data_type(size) constraint_name, column_name3 data_type(size) constraint_name, .... );

删除约束

ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK; ALTER TABLE EMPLOYEES DROP PRIMARY KEY; ....

完整性约束

完整性约束用于保证关系型数据库中数据的精确性和一致性。 参照完整性:主键约束(Primary Key)、外键约束(Foreign Key)、唯一性约束(Unique Constraint)以及其他约束。

SQL NOT NULL 约束

NOT NULL 约束强制列不接受 NULL 值。

SQL UNIQUE 约束

UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。 [注意]UNIQUE约束可能在不同关系型数据库中创建的方法不同

SQL PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 [注意]主键只有一个,但是可由多个字段组合

SQL FOREIGN KEY 约束

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。 [注意]外键列要求另一个表主键列一一对应

SQL DEFAULT 约束

DEFAULT 约束用于向列中插入默认值。 如果没有规定其他的值,那么会将默认值添加到所有的新记录。 [注意]字段拥有UNIQUE约束,默认值使用可能出错,无法插入

SQL CHECK 约束

CHECK 约束用于限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

SQL JOIN 连接

内连接(INNER JOIN):当两个表中都存在匹配时,才返回行。 左连接(LEFT JOIN):返回左表中的所有行,即使右表中没有匹配的行。 右连接(RIGHT JOIN):返回右表中的所有行,即使左表中没有匹配的行。 全连接(FULL JOIN):只要某一个表存在匹配,就返回行。 笛卡尔连接(CARTESIAN JOIN):返回两个或者更多的表中记录集的笛卡尔积。

内连接

最常用也最重要的连接形式是内连接,有时候也被称作“EQUIJOIN”(等值连接)。 内连接根据连接谓词来组合两个表中的字段,以创建一个新的结果表。SQL 查询会比较逐个比较表 1 和表 2 中的每一条记录,来寻找满足连接谓词的所有记录对。当连接谓词得以满足时,所有满足条件的记录对的字段将会结合在一起构成结果表。

左连接

左链接返回左表中的所有记录,即使右表中没有任何满足匹配条件的记录。这意味着,如果 ON 子句在右表中匹配到了 0 条记录,该连接仍然会返回至少一条记录,不过返回的记录中所有来自右表的字段都为 NULL。 这就意味着,左连接会返回左表中的所有记录,加上右表中匹配到的记录,或者是 NULL (如果连接谓词无法匹配到任何记录的话)。

右连接

右链接返回右表中的所有记录,即是左表中没有任何满足匹配条件的记录。这意味着,如果 ON 子句在左表中匹配到了 0 条记录,该连接仍然会返回至少一条记录,不过返回的记录中所有来自左表的字段都为 NULL。 这就意味着,右连接会返回右表中的所有记录,加上左表中匹配到的记录,或者是 NULL (如果连接谓词无法匹配到任何记录的话)。

全连接

全连接将左连接和右连接的结果组合在一起。

笛卡尔连接(交叉连接)

笛卡尔连接或者交叉连接返回两个或者更多的连接表中记录的笛卡尔乘积。也就是说,它相当于连接谓词总是为真或者缺少连接谓词的内连接。

SQL UNION 子句

SQL UNION 子句/运算符用于将两个或者更多的 SELECT 语句的运算结果组合起来。 在使用 UNION 的时候,每个 SELECT 语句必须有相同数量的选中列、相同数量的列表达式、相同的数据类型,并且它们出现的次序要一致,不过长度不一定要相同。

UNION ALL 子句

UNION ALL 运算符用于将两个 SELECT 语句的结果组合在一起,重复行也包含在内。 UNION ALL 运算符所遵从的规则与 UNION 一致。

SQL INTERSECT , SQL EXCEPT

SQL INTERSECT 子句:用于组合两个 SELECT 语句,但是只返回两个 SELECT 语句的结果中都有的行。 SQL EXCEPT 子句:组合两个 SELECT 语句,并将第一个 SELECT 语句的结果中存在,但是第二个 SELECT 语句的结果中不存在的行返回。

SQL 克隆数据表

1、使用 SHOW CREATE TABLE 命令来获取一条指定了原表的结构、索引等信息的 CREATE TABLE 语句。 2、将语句中的表名修改为克隆表的名字,然后执行该语句。这样你就可以得到一张与原表完全相同的克隆表了。 3、如果你还想要复制表中的数据的话,请执行 INSERT INTO ... SELECT 语句。

SQL 索引

CREATE INDEX 命令

CREATE INDEX index_name ON table_name;

单列索引

CREATE INDEX index_name ON table_name (column_name);

唯一索引

CREATE UNIQUE INDEX index_name on table_name (column_name); [注意]唯一索引不止用于提升查询性能,还用于保证数据完整性。唯一索引不允许向表中插入任何重复值

聚簇索引

CREATE INDEX index_name on table_name (column1, column2); [注意]聚簇索引在表中两个或更多的列的基础上建立

隐式索引

隐式索引由数据库服务器在创建某些对象的时候自动生成

DROP INDEX 命令

DROP INDEX table_name.index_name; [注意]数据量大,不需要频繁更新数据库表,不含NULL、大数,不需频繁操作可创建索引。 [注意]索引工作需要消耗设备资源,额外工作消耗的查询资源总和不超过简单查询所需消耗资源。

SQL 子查询

1、子查询必须括在圆括号中。 2、子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。 3、子查询不能使用 ORDER BY,不过主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。 4、返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。 5、SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。 6、子查询不能直接用在集合函数中。 7、BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。

SELECT 语句中的子查询

SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])

INSERT 语句中的子查询

INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]

UPDATE 语句中的子查询

UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]

DELETE 语句中的子查询

DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]

SQL ALTER TABLE 命令

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号