SQL語言類型
數據定義:create/alter/drop table/trigger/index/function/存儲過程/約束/…
數據操縱:select/update/insert/delete
數據控制:grant/revoke
增刪改查
增
INSERT INTO 表名稱 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
例子
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
刪
DELETE FROM 表名稱 WHERE 列名稱 = 值
例子
DELETE FROM Person WHERE LastName = 'Wilson'
改
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
例子
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
查
SELECT 列名稱 FROM 表名稱
SELECT * FROM 表名稱
查select
distinct 去除重復項
SELECT DISTINCT 列名稱 FROM 表名稱
例子
如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語句:
SELECT Company FROM Orders
"Orders"表:
Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953
結果:
Company
IBM
W3School
Apple
W3School
請注意,在結果集中,W3School 被列出了兩次。
如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:
SELECT DISTINCT Company FROM Orders
結果:
Company
IBM
W3School
Apple
現在,在結果集中,"W3School" 僅被列出了一次。
參考:http://www.w3school.com.cn/sql/sql_distinct.asp
where
SQL 使用單引號來環繞文本值(大部分數據庫系統也接受雙引號)。如果是數值,請不要使用引號。
eg.
數值:
SELECT * FROM Persons WHERE Year>1965
文本值:
SELECT * FROM Persons WHERE FirstName='Bush'
and/or
AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。
如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。
如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。
order by + desc,asc + top,percent
eg.
SELECT TOP 2 * FROM Persons --查詢前2個
SELECT TOP 50 PERCENT * FROM Persons --查詢前百分之五十
like/not like+通配符
in+()
eg.
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
between and
模板
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
eg.
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
Alias =as 別名,查詢列名或者搜索表名的別名 可省略
eg.
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
SELECT LastName AS Family, FirstName AS Name
FROM Persons
join on
join=inner join
在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。
left join
從左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。
eg.
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
right join
從右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。
full join
只要其中某個表存在匹配(左右表匹配全部返回),FULL JOIN 關鍵字就會返回行。
eg.我們希望列出所有的人,以及他們的訂單,以及所有的訂單,以及定購它們的人。(人一張表,訂單一張表)
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George
34764
FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那里返回所有的行
如果 "Persons" 中的行在表 "Orders" 中沒有匹配,或者如果 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行同樣會列出。
轉載自:http://www.w3school.com.cn/sql/sql_join_full.asp
表連接 join
1)內連接:只連接匹配的行
select A.c1,B.c2 from A join B on A.c3 = B.c3;
2)左外連接:包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行
select A.c1,B.c2 from A left join B on A.c3 = B.c3;
3)右外連接:包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行
select A.c1,B.c2 from A right join B on A.c3 = B.c3;
4)全外連接:包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行
select A.c1,B.c2 from A full join B on A.c3 = B.c3;
5)非等連接:使用等值以外的條件來匹配左、右兩個表中的行
select A.c1,B.c2 from A join B on A.c3 != B.c3;
6)交叉連接:生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的每個行一一匹配
select A.c1,B.c2 from A,B;
union/union all
用于合并兩個或多個 SELECT 語句的結果集
Union和Union All的區別之一在于對重復結果的處理,Union All會保留重復結果
轉載自:http://www.w3school.com.cn/sql/sql_union.asp
select into
從一個表中選取數據,然后把數據插入另一個表中
常用于創建表的備份復件或者用于對記錄進行存檔
轉載自:http://www.w3school.com.cn/sql/sql_select_into.asp
(auto) increment 自增長
null
NULL 值是遺漏的未知數據。
默認地,表的列可以存放 NULL 值。
eg.
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL
having
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
eg.
我們擁有下面這個 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找訂單總金額少于 2000 的客戶。
我們使用如下 SQL 語句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
結果集類似:
Customer SUM(OrderPrice)
Carter 1700
現在我們希望查找客戶 "Bush" 或 "Adams" 擁有超過 1500 的訂單總金額。
轉載自:http://www.w3school.com.cn/sql/sql_having.asp