SQL基礎 關鍵字

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

sql 不區分大小寫

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容