SQL 進(jìn)階

2018-08-30 09:47 更新

SQL 進(jìn)階

SQL Aliases 別名[AS 語(yǔ)法]

[注意]Aliases --> AS SQL 別名用于為表或表中的列提供臨時(shí)名稱。 SQL 別名通常用于使列名更具可讀性。 SQL 一個(gè)別名只存在于查詢期間。

列的 SQL Alias 語(yǔ)法

SELECT column_name AS alias_name FROM table_name;

表的 SQL Alias 語(yǔ)法

SELECT column_name(s) FROM table_name AS alias_name;

SQL 約束

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

常用約束

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

SQL創(chuàng)建約束

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

SQL CREATE TABLE + CONSTRAINT 語(yǔ)法

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ù)庫(kù)中數(shù)據(jù)的精確性和一致性。 參照完整性:主鍵約束(Primary Key)、外鍵約束(Foreign Key)、唯一性約束(Unique Constraint)以及其他約束。

SQL NOT NULL 約束

NOT NULL 約束強(qiáng)制列不接受 NULL 值。

SQL UNIQUE 約束

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

SQL PRIMARY KEY 約束

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

SQL FOREIGN KEY 約束

一個(gè)表中的 FOREIGN KEY 指向另一個(gè)表中的 PRIMARY KEY。 [注意]外鍵列要求另一個(gè)表主鍵列一一對(duì)應(yīng)

SQL DEFAULT 約束

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

SQL CHECK 約束

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

SQL JOIN 連接

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

內(nèi)連接

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

左連接

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

右連接

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

全連接

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

笛卡爾連接(交叉連接)

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

SQL UNION 子句

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

UNION ALL 子句

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

SQL INTERSECT , SQL EXCEPT

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

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

1、使用 SHOW CREATE TABLE 命令來(lái)獲取一條指定了原表的結(jié)構(gòu)、索引等信息的 CREATE TABLE 語(yǔ)句。 2、將語(yǔ)句中的表名修改為克隆表的名字,然后執(zhí)行該語(yǔ)句。這樣你就可以得到一張與原表完全相同的克隆表了。 3、如果你還想要復(fù)制表中的數(shù)據(jù)的話,請(qǐng)執(zhí)行 INSERT INTO ... SELECT 語(yǔ)句。

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ù)完整性。唯一索引不允許向表中插入任何重復(fù)值

聚簇索引

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

隱式索引

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

DROP INDEX 命令

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

SQL 子查詢

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

SELECT 語(yǔ)句中的子查詢

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

INSERT 語(yǔ)句中的子查詢

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

UPDATE 語(yǔ)句中的子查詢

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

DELETE 語(yǔ)句中的子查詢

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

SQL ALTER TABLE 命令

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)