SQL語法

基礎語法

注意 本人的博客都遷移到本人自己搭建的博客地址,通過此處可查看。

1. SELECT

說明

SELECT語句用於從表中選取數據。結果被存儲在一個結果表中(稱爲結果集)。

語法
SELECT columnname1, columnname2,... FROM table_name
SELECT * FROM table_name

2. DISTINCT

說明

在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。關鍵詞DISTINCT用於返回唯一不同的值。

語法
SELECT DISTINCT column_name FROM table_name

3. WHERE 子句

說明

有條件地從表中選取數據,可將WHERE子句添加到SELECT語句。

語法
SELECT column_name FROM table_name WHERE condition(s)

condition(s): column_name operator value

操作符(operator) 描述
= 等於
<> 不等於
> 大於
< 小於
>= 大於等於
<= 小於等於
BETWEEN 在某個範圍內
LIKE 搜索某種模式

例如:

SELECT * FROM Persons WHERE City='Beijing'
SELECT * FROM Persons WHERE Year>1965

4. AND和OR

說明

ANDOR可在WHERE子語句中把兩個或多個條件結合起來。如果第一個條件和第二個條件都成立,則AND運算符顯示一條記錄。如果第一個條件和第二個條件中只要有一個成立,則OR運算符顯示一條記錄。

語法
SELECT * FROM table_name WHERE (column_name1='value1' OR column_name1='value2')
AND column_name3='value3'

5. ORDER BY語句

說明

ORDER BY語句用於根據指定的列對結果集進行排序。默認按照升序對記錄進行排序。如果希望按照降序對記錄進行排序,可以使用DESC關鍵字。

語法
SELECT column_name FROM table_name ORDER BY columnname1
SELECT column_name FROM table_name ORDER BY columnname1, columnname2
SELECT column_name FROM table_name ORDER BY columnname1 DESC, columnname2 DESC

6. INSERT INTO語句

說明

INSERT INTO語句用於向表格中插入新的行。

語法
INSERT INTO table_name VALUES (value1, value2, value3)
INSERT INTO table_name (column_name1, column_name2, column_name3) VALUES (value1, value2, value3)

7. UDPATE語句

說明

UDPATE語句用於修改表中的數據。

語法
UPDATE table_name SET column_name = new_value WHERE condition(s)
UPDATE table_name SET column_name1 = new_value1, columnname2 = new_value2 WHERE condition(s)

8. DELETE語句

說明

DELETE語句用於刪除表中的行。

語法
DELETE FROM table_name WHERE condition(s)
DELETE FROM table_name
DELETE * FROM table_name

高級語法

1. TOP子句

說明

TOP子句用於規定要返回的記錄的數目。

對於擁有數千條記錄的大型表來說,TOP子句是非常有用的。

註釋: 並非所有的數據庫系統都支持TOP子句。

語法
SELECT TOP number|percent column_name(s)
FROM table_name
--Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

2. LIKE操作符

說明

LIKE操作符用於在WHERE子句中搜索列中的指定模式。

語法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
-- 不包含
SELECT column_name(s)
FROM table_name
WHERE column_name NOT LIKE pattern

patter:

格式 說明
N% 以N開頭
%N 以N結尾
%N% 中間包含N

3. 通配符

說明

在搜索數據庫中的數據時,SQL通配符可以替代一個或多個字符。

SQL通配符必須與LIKE運算符一起使用。

在SQL中,可使用以下通配符:

通配符 說明
% 代替一個或多個字符
_ 僅代替一個字符
[charlist] 字符列表中的任何字符
[^charlist] 不在字符列中的任何單一字符
[!charlist] 不在字符列中的任何單一字符
語法

同LIKE

說明

SELECT * FROM table_name
WHERE column_name LIKE '[ALN]%' -- 從表中選取出列名以 "A" 或 "L" 或 "N" 開頭的行
SELECT * FROM table_name
WHERE column_name LIKE '[!ALN]%' -- 從表中選取出列名不以 "A" 或 "L" 或 "N" 開頭的行

4. IN操作符

說明

IN操作符允許我們在WHERE子句中規定多個值。

語法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

5. BETWEEN操作符

說明

操作符BETWEEN ... AND會選取介於兩個值之間的數據範圍。這些值可以是數值、文本或者日期。

語法
--介於
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
--範圍之外的人
SELECT column_name(s)
FROM table_name
WHERE column_name
NOT BETWEEN value1 AND value2

6. Alias(別名)

說明

通過使用SQL,可以爲列名稱和表名稱指定別名(Alias)。

語法
--指定表別名
SELECT column_name(s)
FROM table_name
AS alias_name
--指定列別名
SELECT column_name AS alias_name
FROM table_name

7. JOIN

說明

用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據。

數據庫中的表可通過鍵將彼此聯繫起來。主鍵(Primary Key)是一個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重複每個表中的所有數據的情況下,把表間的數據交叉捆綁在一起。

語法
SELECT column_name(s)
FROM table_name1 as t1
INNER JOIN table_name2 as t2
ON t1.id = t2.id
ORDER BY column_name

例如:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

注:

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

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

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

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

8. INNER JOIN

說明

在表中存在至少一個匹配時,INNER JOIN關鍵字返回行。

語法

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

注:INNER JOINJOIN是相同的。

9. LEFT JOIN

說明

LEFT JOIN關鍵字會從左表(table_name1)那裏返回所有的行,即使在右表 (table_name2)中沒有匹配的行。

語法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

10. RIGHT JOIN

說明

RIGHT JOIN關鍵字會右表(table_name2)那裏返回所有的行,即使在左表 (table_name1)中沒有匹配的行。

語法

SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

11. FULL JOIN

說明

只要其中某個表存在匹配,FULL JOIN關鍵字就會返回行。

語法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name

12.UNION和UNION ALL

說明

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。

請注意,UNION內部的SELECT語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條SELECT語句中的列的順序必須相同。

語法
-- UNION
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
-- UNION ALL
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

注: 默認地,UNION操作符選取不同的值。如果允許重複的值,請使用UNION ALL

13. SELECT INTO

說明

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

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

語法
-- INSERT ALL
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
-- INSERT PATR
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

SQL語法

1. CREATE DATABASE

說明

用於創建數據庫。

語法
CREATE DATABASE database_name

2. CREATE TABLE

說明

用於創建數據庫中的表。

語法
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)

數據類型(data_type)說明:

數據類型(data_type) 描述
integer(size) int(size) smallint(size) tinyint(size) 僅容納整數。在括號內規定數字的最大位數。
decimal(size,d) numeric(size,d) 容納帶有小數的數字。“size” 規定數字的最大位數。“d” 規定小數點右側的最大位數。
char(size) 容納固定長度的字符串(可容納字母、數字以及特殊字符)。在括號中規定字符串的長度
varchar(size) 容納可變長度的字符串(可容納字母、數字以及特殊的字符)。在括號中規定字符串的最大長度。
date(yyyymmdd) 容納日期。

3. Constraints

說明

約束用於限制加入表的數據的類型。

可以在創建表時規定約束(通過CREATE TABLE語句),或者在表創建之後也可以(通過ALTER TABLE語句)。

主要探討以下幾種約束:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT

4. NOT NULL

說明

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

NOT NULL約束強制字段始終包含值。這意味着,如果不向字段添加值,就無法插入新記錄或者更新記錄。

語法
-- NOT NULL
CREATE TABLE table_name
(
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
);
-- NOT NULL
CREATE TABLE table_name
(
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
);
-- UNIQUE
CREATE TABLE table_name (
    column_name1 data_type NOT NULL UNIQUE,
    column_name2 data_type,
    column_name3 data_type,
);

5. UNIQUE

說明

UNIQUE約束唯一標識數據庫表中的每條記錄。

UNIQUEPRIMARY KEY約束均爲列或列集合提供了唯一性的保證。

PRIMARY KEY擁有自動定義的UNIQUE約束。

注:,每個表可以有多個UNIQUE約束,但是每個表只能有一個PRIMARY KEY約束。

語法
-- Create UNIQUE To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL UNIQUE,
    column_name2 data_type,
    column_name3 data_type,
);

-- Create UNIQUES To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
    CONSTRAINT uc_name UNIQUE (column_name1,column_name2)
);

-- Create UNIQUE To old Table
ALTER TABLE table_name
ADD UNIQUE (columnname)

-- Create UNIQUES To old Table
ALTER TABLE table_name
ADD CONSTRAINT uc_name UNIQUE (columnname1,columnname2)

-- Drop UNIQUES To Table
ALTER TABLE table_name
DROP INDEX uc_name

ALTER TABLE table_name
DROP CONSTRAINT uc_name

6. PRIMARY KEY

說明

PRIMARY KEY約束唯一標識數據庫表中的每條記錄。

主鍵必須包含唯一的值。

主鍵列不能包含 NULL 值。

每個表都應該有一個主鍵,並且每個表只能有一個主鍵。

語法
-- Create UNIQUE To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL PRIMARY KEY,
    column_name2 data_type,
    column_name3 data_type,
);

-- Create UNIQUES To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
    CONSTRAINT pk_name PRIMARY KEY (column_name1,column_name2)
);

-- Create UNIQUE To old Table
ALTER TABLE table_name
ADD PRIMARY KEY (columnname)

-- Create UNIQUES To old Table
ALTER TABLE table_name
ADD CONSTRAINT pk_name PRIMARY KEY (columnname1,columnname2)

-- Drop UNIQUES To Table
ALTER TABLE table_name
DROP PRIMARY KEY

ALTER TABLE table_name
DROP CONSTRAINT pk_name

7. FOREIGN KEY

說明

一個表中的FOREIGN KEY指向另一個表中的PRIMARY KEY

FOREIGN KEY約束用於預防破壞表之間連接的動作。

FOREIGN KEY約束也能防止非法數據插入外鍵列,因爲它必須是它指向的那個表中的值之一。

語法
-- Create UNIQUE To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
    FOREIGN KEY (column_name3) REFERENCES table_name1(columnname)
);

-- Create UNIQUES To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
    CONSTRAINT fk_name FOREIGN KEY (column_name1)
    REFERENCES table_name1(columnname)
);

-- Create UNIQUE To old Table
ALTER TABLE table_name
ADD FOREIGN KEY (columnname)
REFERENCES table_name1(columnname1)

-- Create UNIQUES To old Table
ALTER TABLE table_name
ADD CONSTRAINT pk_name PRIMARY KEY (columnname1,columnname2)

-- Drop UNIQUES To Table
ALTER TABLE table_name
DROP FOREIGN KEY fk_name

ALTER TABLE table_name
DROP CONSTRAINT fk_name

8. CHECK

說明

CHECK約束用於限制列中的值的範圍。

如果對單個列定義CHECK約束,那麼該列只允許特定的值。

如果對一個表定義CHECK約束,那麼此約束會在特定的列中對值進行限制。

語法
-- Create
CREATE TABLE table_name (
    column_name1 data_type NOT NULL CHECK (column_name1>0),
    column_name2 data_type,
    column_name3 data_type,
);

-- Create
CREATE TABLE table_name (
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type,
    CONSTRAINT chk_name CHECK (column_name1>0 AND column_name2=value1)
);

-- Create To old Table
ALTER TABLE table_name
ADD CHECK (column_name1>0)

-- Create To old Table
ALTER TABLE table_name
ADD CONSTRAINT chk_name CHECK (column_name1>0 AND column_name2=value1)

-- Drop To Table
ALTER TABLE table_name
DROP CONSTRAINT chk_name

9. DEFAULT

說明

DEFAULT約束用於向列中插入默認值。

如果沒有規定其他的值,那麼會將默認值添加到所有的新記錄。

語法
-- Create DEFAULT To new Table
CREATE TABLE table_name (
    column_name1 data_type NOT NULL,
    column_name2 data_type,
    column_name3 data_type DEFAULT value
)

-- Create DEFAULT To old Table
ALTER TABLE table_name
ALTER column_name SET DEFAULT value

-- Drop DEFAULT To Table
ALTER TABLE table_name
ALTER column_name DROP DEFAULT

9. CREATE INDEX

說明

在表中創建索引,以便更加快速高效地查詢數據。

用戶無法看到索引,它們只能被用來加速搜索/查詢。

注: 更新一個包含索引的表需要比更新一個沒有索引的表更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常被搜索的列(以及表)上面創建索引。

語法
CREATE INDEX index_name
ON table_name (column_name)
-- UNIQUE INDEX
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
-- 對列創建索引
CREATE INDEX column_index
ON table_name (column_name)
-- 對列創建降序索引
CREATE INDEX column_index
ON table_name (column_name DESC)
-- 對多列創建索引
CREATE INDEX column_index
ON table_name (column_name1, column_name2)

10. 撤銷索引、表以及數據庫

說明

通過使用DROP語句,可以輕鬆地刪除索引、表和數據庫。

語法
-- Drop INDEX
ALTER TABLE table_name
DROP INDEX index_name
-- Drop TABLE
DROP TABLE table_name
-- Drop DATABASE
DROP DATABASE database_name
-- clear data
TRUNCATE TABLE table_name

11. ALTER TABLE

說明

用於在已有的表中添加、修改或刪除列。

語法
-- add column
ALTER TABLE table_name
ADD column_name datatype
-- delete column
ALTER TABLE table_name
DROP COLUMN column_name
-- modify column
ALTER TABLE table_name
ALTER COLUMN column_name datatype

12. AUTO INCREMENT字段

說明

我們通常希望在每次插入新記錄時,自動地創建主鍵字段的值。

我們可以在表中創建一個auto-increment字段。

語法
-- CREATE
CREATE TABLE table_name
(
    columnname1 data_type NOT NULL AUTO_INCREMENT,
    column_name2 data_type NOT NULL,
    PRIMARY KEY (columnname1)
)
-- 以100開始
ALTER TABLE table_name AUTO_INCREMENT=100

13. VIEW

說明

在SQL中,視圖是基於SQL語句的結果集的可視化的表。

視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。我們可以向視圖添加SQL函數、WHERE以及JOIN語句,我們也可以提交數據,就像這些來自於某個單一的表。

注: 數據庫的設計和結構不會受到視圖中的函數、where或join語句的影響。

語法
-- CREATE
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
-- UPDATE
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
-- Drop
DROP VIEW view_name

14. NULL

說明

如果表中的某個列是可選的,那麼我們可以在不向該列添加值的情況下插入新記錄或更新已有的記錄。這意味着該字段將以NULL值保存。

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

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

注: 無法比較NULL0;它們是不等價的。

語法
-- IS NULL
SELECT * FROM table_name
WHERE column_name IS NULL
-- IS NOT NULL
SELECT * FROM table_name
WHERE column_name IS NOT NULL

SQL函數

1. AVG

說明

AVG函數返回數值列的平均值。NULL值不包括在計算中。

語法
SELECT AVG(column_name) FROM table_name

2. COUNT

說明

返回匹配指定條件的行數。

語法
SELECT AVG(column_name) FROM table_name

2. AVG

說明

AVG函數返回數值列的平均值。NULL值不包括在計算中。

語法
-- 指定某列
SELECT COUNT(column_name) FROM table_name
-- 所有
SELECT COUNT(*) FROM table_name
-- 唯一值
SELECT COUNT(DISTINCT column_name) FROM table_name

3. FIRST

說明

FIRST()函數返回指定的字段中第一個記錄的值。

語法
SELECT FIRST(column_name) FROM table_name

3. FIRST

說明

FIRST()函數返回指定的字段中第一個記錄的值。

語法
SELECT FIRST(column_name) FROM table_name

4. LAST

說明

LAST()函數返回指定的字段中最後一個記錄的值。

語法
SELECT LAST(column_name) FROM table_name

5. MAX

說明

MAX()函數返回指定的字段中最大的值。NULL值不包括在計算中。

語法
SELECT MAX(column_name) FROM table_name

6. MIN

說明

MIN()函數返回指定的字段胡最小值。NULL值不包括在計算中。

語法
SELECT MIN(column_name) FROM table_name

7. SUM

說明

SUM()函數返回數值列的總和。

語法
SELECT SUM(column_name) FROM table_name

8. GROUP BY

說明

GROUP BY用於結合合計函數,根據一個或多個列對結果集進行分組。

語法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

9. HAVING

說明

在SQL中增加HAVING子句原因是,WHERE關鍵字無法與合計函數一起使用。

語法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

10. UCASE

說明

UCASE函數把字段的值轉換爲大寫。

語法
SELECT UCASE(column_name) FROM table_name

11. LCASE

說明

LCASE函數把字段的值轉換爲小寫。

語法
SELECT LCASE(column_name) FROM table_name

10. MID

說明

MID函數用於從文本字段中提取字符。

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

解釋:

參數 描述
column_name 必需。要提取字符的字段。
start 必需。規定開始位置(起始值是 1)。
length 可選。要返回的字符數。如果省略,則 MID() 函數返回剩餘文本。

11. LEN

說明

LEN函數返回文本字段中值的長度。

語法
SELECT LEN(column_name) FROM table_name

12. ROUND

說明

ROUND函數用於把數值字段舍入爲指定的小數位數。

語法
SELECT ROUND(column_name,decimals) FROM table_name

13. NOW

說明

NOW函數返回當前的日期和時間。

語法
SELECT NOW() FROM table_name

11. FORMAT

說明

FORMAT函數用於對字段的顯示進行格式化。

語法
SELECT FORMAT(column_name,format) FROM table_name
發佈了53 篇原創文章 · 獲贊 29 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章