SQL語句

1.SQL語句

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

您需要在數據庫上執行的大部分工作都是由SQL語句完成的。
下面的語句從表中選取LastName列的數據:

SELECT LastName from Persons

結果集類似這樣:

LastName
Adams
Bush
Carter

注意事項:SQL對大小寫不敏感

2. SQL DML和DDL

可以把 SQL 分為兩個部分:數據操作語言 (DML) 和 數據定義語言 (DDL)。
SQL (結構化查詢語言)是用于執行查詢的語法。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法。

查詢和更新指令構成了 SQL 的 DML 部分:

  • SELECT - 從數據庫表中獲取數據
  • UPDATE - 更新數據庫表中的數據
  • DELETE - 從數據庫表中刪除數據
  • INSERT INTO - 向數據庫表中插入數據
    SQL 的數據定義語言 (DDL) 部分使我們有能力創建或刪除表格。我們也可以定義索引(鍵),規定表之間的鏈接,以及施加表間的約束。

SQL 中最重要的 DDL 語句:

  • CREATE DATABASE - 創建新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 創建新表
  • ALTER TABLE - 變更(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創建索引(搜索鍵)
  • DROP INDEX - 刪除索引

3. SQL SELECT 語句

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

3.1 SQL SELECT 語法

SELECT 列名稱 FROM 表名稱

以及

SELECT * FROM 表名稱

星號(*)是選取所有列的快捷方式。
注釋:SQL語句對大小寫不敏感。SELECT等效于select。

3.2 SQL SELECT 實例

如需要取名為"LastName"和"FirstName"的列的內容(從名為"Persons"的數據庫表),請使用類似這樣的SELECT語句:

SELECT LastName,FirstName FROM Persons

"Persons"表:
Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
結果:
LastName FirstName
Adams John
Bush George
Carter Thomas

3.3 SELECT DISTINCT

在表中,可能會包含重復值。這并不成問題,不過,有時您希望僅僅列出不同(distinct)的值。
關鍵字 DISTINCT 用于返回唯一不同的值。

語法:

SELECT DISTINCT 列名稱 FROM 表名稱

4.SQL WHERE 子句

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

SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

下面的運算符可在WHERE子句中使用:

操作符 描述
= 等于
<> 或者 != 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN .. AND .. 在某個范圍內
LIKE 搜索某種模式
4.1 使用WHERE子句

如果只希望選取居住在城市"Beijing"中的人,我們需要向SELECT語句添加WHERE子句:

SELECT * FROM Persons WHERE City='Beijing'

"Persons"表

LastName FirstName Address City Year
Adams John Oxford Street London 1970
Bush George Fifth Avenue New York 1975
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

結果:

LastName FirstName Address City Year
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

注: SQL使用單引號來環繞文本值。如果是數值,請不要使用引號.

5. AND 和 OR 運算符

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

5.1 AND 運算符實例

假設原始的表:

LastName FirstName Address City
Adams John Oxford Street London
Bush George Fifth Avenue New York
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

使用 AND 來顯示所有姓為"Carter"并且名為"Thomas"的人:

SELECT * FROM Persons WHERE FirstName='Thomas' ANDLastName='Carter'

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
5.2 OR 運算符實例

使用 OR 來顯示所有姓名為"Carter" 或者名為 "Thomas" 的人:

SELECT * FROM Persons WHERE firstname='Thomas' ORlastname='Carter'

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

6. ORDER BY 語句

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

原始Orders表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953
6.1 以字母順序顯示公司名稱:

SELECT Company,OrderNumber FROM Orders ORDER BY Company

結果:

Company OrderNumber
Apple 4698
IBM 3532
W3School 6953
W3School 2356
6.2 以字母順序顯示公司名稱(Company),并以數字順序顯示順序號(OrderNumber):

SELECT Company,OrderNumber FROM Orders ORDER BY Company,OrderNumber

Company OrderNumber
Apple 4698
IBM 3532
W3School 2356
W3School 6953
6.3 以逆字母順序顯示公司名稱:

SELECT Company,OrderNumber FROM Orders ORDER BY Company DESC

Company OrderNumber
W3School 6953
W3School 2356
IBM 3532
Apple 4698

7. INSERT INTO 語句

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

INSERT INTO 表名稱 VALUES (值1,值2,....)

我們也可以指定所要插入數據的列:

INSERT INTO table_name (列1,列2 , ...) VALUES (值1,值2,....)

插入新的行:

"Persons"表:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
SQL 語句:

INSERT INTO Persons VALUES ('Gates','Bill','Xuanwumen 10','Beijing')

結果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing

8. SQL UPDATE 語句

Update 語句用于修改表中的數據。

語法:

UPDATE 表名稱 SET 列名稱= 新值 WHERE 列名稱= 某值

9. DELETE 語句

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

DELETE FROM 表名稱 WHERE 列名稱=值

刪除所有行:

可以在不刪除表的情況下刪除所有行。這意味著表的結構,屬性和索引都是完整的:

DELETE FROM table_name

或者:

DELETE * FROM table_name

10. SQL 通配符

在搜索數據庫中的數據時,SQL通配符可以替代一個或多個字符。
SQL通配符必須與LIKE 運算符一起使用。

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

通配符 描述
% 替代一個或多個字符
_ 僅替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]或者[!charlist] 不在字符列中的任何單一字符

11. SQL BETWEEN 操作符

BETWEEN 操作符在 WHERE 子句中使用,作用是選取介于兩個值之間的數據范圍。

SELECT colume_name FROM table_name WHERE colume_name BETWEEN values1 AND value2

11.1 BETWEEN 操作符實例

如需以字母順序顯示介于"Adams"(包括) 和"Carter"(不包括)之間的人,請使用下面的SQL:

SELECT * FROM Persons WHERE LastName BETWEEN'Adams' AND 'Carter'

注意事項:不同的數據庫對 BETWEEN...AND 操作符的處理方式是有差異的。某些數據庫會列出介于 "Adams" 和 "Carter" 之間的人,但不包括 "Adams" 和 "Carter" ;某些數據庫會列出介于 "Adams" 和 "Carter" 之間并包括 "Adams" 和 "Carter" 的人;而另一些數據庫會列出介于 "Adams" 和 "Carter" 之間的人,包括 "Adams" ,但不包括 "Carter" 。

11.2 如需使用上面的列子顯示范圍之外的人,請使用NOT 操作符:

SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

12. SQL INNER JOIN 關鍵字

在表中存在至少一個匹配時,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 是相同的。

原始表:"Persons"表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders"表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
內連接(INNER JOIN) 實例

現在,我們希望列出所有人的訂購。您可以使用下面的SELECT語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER 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

13. SQL LEFT JOIN 關鍵字

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

LEFT JOIN 關鍵字語法

SELECT column_name FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

”Persons"表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders"表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
左連接(LEFT JOIN) 實例

我們列出所有人,以及它們的訂購,如果有的話。
可以使用下面的SELECT 語句:

SELECT Persons.LastName,Persons.FirstName,Orders.OrderNo FROM Persons LEFT 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

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

14.SQL RIGHT JOIN 關鍵字

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

RIGHT JOIN 關鍵字語法

SELECT column_name FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

原始的表:
"Persons"表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders"表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
右連接(RIGHT JOIN) 實例

我們希望列出所有的訂單,以及訂購它們的人-如果有的話。
可以使用下面的SELECT 語句:

SELECT Persons.LastName,Persons.FirstName,Orders.OrderNo
FROM Persons RIGHT JOIN Orders ONPersons.Id_P=Orders.ID_P ORDER BY Persons.LastName

結果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
34764

RIGHT JOIN 關鍵字會從右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中沒有匹配的行。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • ★查詢數據表中的部分數據------TOP子句(從某行到某行): 1.SQL Server 的語法: SELECT...
    Sammie77閱讀 296評論 1 0
  • 前言 自己在工作中經常會寫sql語句,用的多了就想總結一下以便以后需要用到時候查看。同時也希望對大家有用~ // ...
    小新哥的大夢想閱讀 1,237評論 1 3
  • IN 操作符 http://www.w3school.com.cn/sql/sql_in.asp SELECT c...
    avery1閱讀 397評論 0 0
  • ★SQL SELECT 語句-----用于從表中選取數據,結果被存儲在一個結果表中(稱為結果集)。 語法: 1.S...
    Sammie77閱讀 250評論 0 0
  • 今天感恩節哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    迷月閃星情閱讀 10,592評論 0 11