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約束用于指定表中數(shù)據(jù)的規(guī)則。 約束是作用于數(shù)據(jù)表中列上的規(guī)則,用于限制表中數(shù)據(jù)的類型。 約束保證了數(shù)據(jù)庫中數(shù)據(jù)的精確性和可靠性。 約束有列級和表級之分,列級約束作用于單一的列,而表級約束作用于整張數(shù)據(jù)表。

常用約束

NOT NULL 約束:保證列中數(shù)據(jù)不能有 NULL 值 DEFAULT 約束:提供該列數(shù)據(jù)未指定時所采用的默認值 UNIQUE 約束:保證列中的所有數(shù)據(jù)各不相同 主鍵約束:唯一標識數(shù)據(jù)表中的行/記錄 外鍵約束:唯一標識其他表中的一條行/記錄 CHECK 約束:此約束保證列中的所有值滿足某一條件 索引:用于在數(shù)據(jù)庫中快速創(chuàng)建或檢索數(shù)據(jù)

SQL創(chuàng)建約束

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; ....

完整性約束

完整性約束用于保證關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的精確性和一致性。 參照完整性:主鍵約束(Primary Key)、外鍵約束(Foreign Key)、唯一性約束(Unique Constraint)以及其他約束。

SQL NOT NULL 約束

NOT NULL 約束強制列不接受 NULL 值。

SQL UNIQUE 約束

UNIQUE 約束唯一標識數(shù)據(jù)庫表中的每條記錄。 UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。 PRIMARY KEY 約束擁有自動定義的 UNIQUE 約束。 [注意]UNIQUE約束可能在不同關(guān)系型數(shù)據(jù)庫中創(chuàng)建的方法不同

SQL PRIMARY KEY 約束

PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄。 主鍵必須包含唯一的值。 主鍵列不能包含 NULL 值。 每個表都應該有一個主鍵,并且每個表只能有一個主鍵。 [注意]主鍵只有一個,但是可由多個字段組合

SQL FOREIGN KEY 約束

一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。 [注意]外鍵列要求另一個表主鍵列一一對應

SQL DEFAULT 約束

DEFAULT 約束用于向列中插入默認值。 如果沒有規(guī)定其他的值,那么會將默認值添加到所有的新記錄。 [注意]字段擁有UNIQUE約束,默認值使用可能出錯,無法插入

SQL CHECK 約束

CHECK 約束用于限制列中的值的范圍。 如果對單個列定義 CHECK 約束,那么該列只允許特定的值。 如果對一個表定義 CHECK 約束,那么此約束會基于行中其他列的值在特定的列中對值進行限制。

SQL JOIN 連接

內(nèi)連接(INNER JOIN):當兩個表中都存在匹配時,才返回行。 左連接(LEFT JOIN):返回左表中的所有行,即使右表中沒有匹配的行。 右連接(RIGHT JOIN):返回右表中的所有行,即使左表中沒有匹配的行。 全連接(FULL JOIN):只要某一個表存在匹配,就返回行。 笛卡爾連接(CARTESIAN JOIN):返回兩個或者更多的表中記錄集的笛卡爾積。

內(nèi)連接

最常用也最重要的連接形式是內(nèi)連接,有時候也被稱作“EQUIJOIN”(等值連接)。 內(nèi)連接根據(jù)連接謂詞來組合兩個表中的字段,以創(chuàng)建一個新的結(jié)果表。SQL 查詢會比較逐個比較表 1 和表 2 中的每一條記錄,來尋找滿足連接謂詞的所有記錄對。當連接謂詞得以滿足時,所有滿足條件的記錄對的字段將會結(jié)合在一起構(gòu)成結(jié)果表。

左連接

左鏈接返回左表中的所有記錄,即使右表中沒有任何滿足匹配條件的記錄。這意味著,如果 ON 子句在右表中匹配到了 0 條記錄,該連接仍然會返回至少一條記錄,不過返回的記錄中所有來自右表的字段都為 NULL。 這就意味著,左連接會返回左表中的所有記錄,加上右表中匹配到的記錄,或者是 NULL (如果連接謂詞無法匹配到任何記錄的話)。

右連接

右鏈接返回右表中的所有記錄,即是左表中沒有任何滿足匹配條件的記錄。這意味著,如果 ON 子句在左表中匹配到了 0 條記錄,該連接仍然會返回至少一條記錄,不過返回的記錄中所有來自左表的字段都為 NULL。 這就意味著,右連接會返回右表中的所有記錄,加上左表中匹配到的記錄,或者是 NULL (如果連接謂詞無法匹配到任何記錄的話)。

全連接

全連接將左連接和右連接的結(jié)果組合在一起。

笛卡爾連接(交叉連接)

笛卡爾連接或者交叉連接返回兩個或者更多的連接表中記錄的笛卡爾乘積。也就是說,它相當于連接謂詞總是為真或者缺少連接謂詞的內(nèi)連接。

SQL UNION 子句

SQL UNION 子句/運算符用于將兩個或者更多的 SELECT 語句的運算結(jié)果組合起來。 在使用 UNION 的時候,每個 SELECT 語句必須有相同數(shù)量的選中列、相同數(shù)量的列表達式、相同的數(shù)據(jù)類型,并且它們出現(xiàn)的次序要一致,不過長度不一定要相同。

UNION ALL 子句

UNION ALL 運算符用于將兩個 SELECT 語句的結(jié)果組合在一起,重復行也包含在內(nèi)。 UNION ALL 運算符所遵從的規(guī)則與 UNION 一致。

SQL INTERSECT , SQL EXCEPT

SQL INTERSECT 子句:用于組合兩個 SELECT 語句,但是只返回兩個 SELECT 語句的結(jié)果中都有的行。 SQL EXCEPT 子句:組合兩個 SELECT 語句,并將第一個 SELECT 語句的結(jié)果中存在,但是第二個 SELECT 語句的結(jié)果中不存在的行返回。

SQL 克隆數(shù)據(jù)表

1、使用 SHOW CREATE TABLE 命令來獲取一條指定了原表的結(jié)構(gòu)、索引等信息的 CREATE TABLE 語句。 2、將語句中的表名修改為克隆表的名字,然后執(zhí)行該語句。這樣你就可以得到一張與原表完全相同的克隆表了。 3、如果你還想要復制表中的數(shù)據(jù)的話,請執(zhí)行 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); [注意]唯一索引不止用于提升查詢性能,還用于保證數(shù)據(jù)完整性。唯一索引不允許向表中插入任何重復值

聚簇索引

CREATE INDEX index_name on table_name (column1, column2); [注意]聚簇索引在表中兩個或更多的列的基礎(chǔ)上建立

隱式索引

隱式索引由數(shù)據(jù)庫服務器在創(chuàng)建某些對象的時候自動生成

DROP INDEX 命令

DROP INDEX table_name.index_name; [注意]數(shù)據(jù)量大,不需要頻繁更新數(shù)據(jù)庫表,不含NULL、大數(shù),不需頻繁操作可創(chuàng)建索引。 [注意]索引工作需要消耗設(shè)備資源,額外工作消耗的查詢資源總和不超過簡單查詢所需消耗資源。

SQL 子查詢

1、子查詢必須括在圓括號中。 2、子查詢的 SELECT 子句中只能有一個列,除非主查詢中有多個列,用于與子查詢選中的列相比較。 3、子查詢不能使用 ORDER BY,不過主查詢可以。在子查詢中,GROUP BY 可以起到同 ORDER BY 相同的作用。 4、返回多行數(shù)據(jù)的子查詢只能同多值操作符一起使用,比如 IN 操作符。 5、SELECT 列表中不能包含任何對 BLOB、ARRAY、CLOB 或者 NCLOB 類型值的引用。 6、子查詢不能直接用在集合函數(shù)中。 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 命令

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號