[注意]Aliases --> AS SQL 別名用于為表或表中的列提供臨時(shí)名稱。 SQL 別名通常用于使列名更具可讀性。 SQL 一個(gè)別名只存在于查詢期間。
SELECT column_name AS alias_name FROM table_name;
SELECT column_name(s) FROM table_name AS alias_name;
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ù)
CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, column3 datatype 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ù)庫(kù)中數(shù)據(jù)的精確性和一致性。 參照完整性:主鍵約束(Primary Key)、外鍵約束(Foreign Key)、唯一性約束(Unique Constraint)以及其他約束。
NOT NULL 約束強(qiáng)制列不接受 NULL 值。
UNIQUE 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。 UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。 PRIMARY KEY 約束擁有自動(dòng)定義的 UNIQUE 約束。 [注意]UNIQUE約束可能在不同關(guān)系型數(shù)據(jù)庫(kù)中創(chuàng)建的方法不同
PRIMARY KEY 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。 主鍵必須包含唯一的值。 主鍵列不能包含 NULL 值。 每個(gè)表都應(yīng)該有一個(gè)主鍵,并且每個(gè)表只能有一個(gè)主鍵。 [注意]主鍵只有一個(gè),但是可由多個(gè)字段組合
一個(gè)表中的 FOREIGN KEY 指向另一個(gè)表中的 PRIMARY KEY。 [注意]外鍵列要求另一個(gè)表主鍵列一一對(duì)應(yīng)
DEFAULT 約束用于向列中插入默認(rèn)值。 如果沒(méi)有規(guī)定其他的值,那么會(huì)將默認(rèn)值添加到所有的新記錄。 [注意]字段擁有UNIQUE約束,默認(rèn)值使用可能出錯(cuò),無(wú)法插入
CHECK 約束用于限制列中的值的范圍。 如果對(duì)單個(gè)列定義 CHECK 約束,那么該列只允許特定的值。 如果對(duì)一個(gè)表定義 CHECK 約束,那么此約束會(huì)基于行中其他列的值在特定的列中對(duì)值進(jìn)行限制。
內(nèi)連接(INNER JOIN):當(dāng)兩個(gè)表中都存在匹配時(shí),才返回行。 左連接(LEFT JOIN):返回左表中的所有行,即使右表中沒(méi)有匹配的行。 右連接(RIGHT JOIN):返回右表中的所有行,即使左表中沒(méi)有匹配的行。 全連接(FULL JOIN):只要某一個(gè)表存在匹配,就返回行。 笛卡爾連接(CARTESIAN JOIN):返回兩個(gè)或者更多的表中記錄集的笛卡爾積。
最常用也最重要的連接形式是內(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 子句/運(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 運(yùn)算符用于將兩個(gè) SELECT 語(yǔ)句的結(jié)果組合在一起,重復(fù)行也包含在內(nèi)。 UNION ALL 運(yùn)算符所遵從的規(guī)則與 UNION 一致。
SQL INTERSECT 子句:用于組合兩個(gè) SELECT 語(yǔ)句,但是只返回兩個(gè) SELECT 語(yǔ)句的結(jié)果中都有的行。 SQL EXCEPT 子句:組合兩個(gè) SELECT 語(yǔ)句,并將第一個(gè) SELECT 語(yǔ)句的結(jié)果中存在,但是第二個(gè) SELECT 語(yǔ)句的結(jié)果中不存在的行返回。
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ǔ)句。
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 table_name.index_name; [注意]數(shù)據(jù)量大,不需要頻繁更新數(shù)據(jù)庫(kù)表,不含NULL、大數(shù),不需頻繁操作可創(chuàng)建索引。 [注意]索引工作需要消耗設(shè)備資源,額外工作消耗的查詢資源總和不超過(guò)簡(jiǎn)單查詢所需消耗資源。
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 column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
更多建議: