基礎語法
注意 本人的博客都遷移到本人自己搭建的博客地址,通過此處可查看。
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
說明
AND
和OR
可在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 JOIN
與JOIN
是相同的。
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
約束唯一標識數據庫表中的每條記錄。
UNIQUE
和PRIMARY 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
用作未知的或不適用的值的佔位符。
注: 無法比較NULL
和0
;它們是不等價的。
語法
-- 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