1. 程式人生 > >【學習筆記】SQL易忘和易錯點

【學習筆記】SQL易忘和易錯點

TOP

返回前幾行資料

SELECT TOP number | percent column_name FROM table_name
//返回前5條資料
SELECT TOP 5 * FROM table_name
//藉助LIMIT實現
SELECT * FROM table_name LIMIT 5
//返回前50%資料
SELECT TOP 50 PERCENT * FROM table_name

IN

篩選條件範圍在(value1,value2,...,valuen)中

SELECT cloumn_name FROM table_name WHERE column_name in (value1,value2,...,valuen)

JOIN

表連線

SELECT column_name1,column_name2,... FROM table_name1 JOIN table_name2 ON table_name1.column_name1 = table_name2.column_name1

JOIN:如果表中至少一個匹配,則返回行

LEFT JOIN:即使右表中沒有匹配,也從左表返回行

RIGHT JOIN:即使左表中沒有匹配,也從右表中返回行

FULL JOIN:只要其中一表中存在匹配,就返回行

UNION

UNION操作符用於合併兩個或多個SELECT語句的結果集,UNION內部的SELECT語句必須用於相同數量的列,列也必須用於相似的資料型別,同時,每條 SELECT 語句中的列的順序必須相同。

SELECT column_name FROM table_name1 UNION SELECT column_name FROM table_name2;

預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL

SELECT column_name FROM table_name1 UNION ALL SELECT column_name FROM table_name2;

INTO

SELECT INTO 語句從一個表中選取資料,然後把資料插入另一個表中。

SELECT INTO 語句常用於建立表的備份復件或者用於對記錄進行存檔

SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

CONSTRAINTS(約束)

NOT NULL:要求有資料

UNIQUE:約束唯一表示資料庫表中的每一條記錄,與PRIMARY KEY約束均為列或列集合提供了唯一性的保證

PRIMARY KEY:實體完整性

FOREIGN KEY:引用完整性

CHECK:域約束,用於限制列中的值的範圍

DEFAULT:用於向列中插入預設值,如果沒有規定其他的值,那麼會將預設值新增到所有的新記錄

CREATE INDEX

建立索引,在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料

CREATE INDEX index_name ON table_name (column_name);
//建立一個位於所有,意味著兩個行不能用於相同的索引值
CREATE UNIQUE INDEX index_name ON table_name (column_name);

DROP

刪除索引、表和資料庫

//刪除索引
ALTER TABLE table_name DROP INDEX index_name
//刪除表
DROP TABLE table_name
//刪除資料庫
DROP DATABASE database_name

ALTER TABLE

用於在已有的表中新增、修改或刪除列

//新增列
ALTER TABLE table_name ADD column_name datatype
//刪除列
ALTER TABLE table_name DROP column_name
//改變表中列的資料型別
ALTER TABLE table_name ALTER COLUMN column_name datatype

AUTO INCREMENT

在新記錄插入表時生成一個唯一的數字

CREATE TABLE Persons(
p_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL
)

//從100開始
ALTER TABLE Persons AUTO_INCREMENT = 100

VIEW

檢視時視覺化的表

資料庫的設計和結構不會受到檢視中的函式、where 或join語句的影響

CREATE VIEW view_name AS SELECT column_name FROM table_name WHERE condition;
//更新檢視
CREATE OR REPLACE VIEW view_name AS SELECT column_name FROM table_name WHERE condition;
//刪除檢視
DROP VIEW view_name

DATE

NOW():返回當前的日期和時間

CURDATE():返回當前的日期

CURTIME():返回當前的時間

DATE():提取日期或日期/時間表達式的日期部分

EXTRACT():返回日期/時間按的單獨部分

DATE_ADD():給日期新增指定的時間間隔

DATE_SUB():從日期減去知道的時間間隔

DATEDIFF():返回兩個日期之間的天數

DATE_FORMAT():用不同的格式顯示日期/時間

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

NULL

NULL值是遺漏的未知資料,預設地,表的列可以存放NULL值

NULL 值的處理方式與其他值不同。

NULL 用作未知的或不適用的值的佔位符。

//IS NULL 操作
SELETC * FROM table_name WHERE column_name IS NULL
//IS NOT NULL 操作
SELECT * FROM table_name WHERE column_name IS NOT NULL

IFNULL()

用於處理NULL值

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products

FIRST()

返回指定欄位中第一個記錄的值

可使用ORDER BY 語句對記錄進行排序

SELECT FIRST(column_name) FROM table_name

LAST()

返回指定欄位中最後一個記錄的值

SELECT LAST(column_name) FROM table_name

UCASE()

把欄位的值轉換為大寫

SELECT UCASE(column_name) FROM table_name

LCASE()

把欄位的值轉換為小寫

SELECT LCASE(column_name) FROM table_name

MID()

從文字欄位中提取字元

SELECT MID(column_name,start[,length]) FROM table_name

LEN()

返回文字欄位中值的長度

SELECT LEN(column_name) FROM table_name

ROUND()

把數值欄位舍入為指定的小數位數

SELECT ROUND(column_name,decimals) FROM table_name

NOW()

返回當前的日期和時間

SELECT NOW() FROM table_name

FORMAT()

用於對欄位的顯示進行格式化

SELECT FORMAT (column_name,format) FROM table_name