SQL 基礎(chǔ)

SQL 是用于訪問和處理數(shù)據(jù)庫的標(biāo)準(zhǔn)的計算機語言。

什么是 SQL?

SQL 指結(jié)構(gòu)化查詢語言
SQL 使我們有能力訪問數(shù)據(jù)庫
SQL 是一種 ANSI 的標(biāo)準(zhǔn)計算機語言
編者注:ANSI,美國國家標(biāo)準(zhǔn)化組織

SQL 能做什么?

SQL 面向數(shù)據(jù)庫執(zhí)行查詢
SQL 可從數(shù)據(jù)庫取回數(shù)據(jù)
SQL 可在數(shù)據(jù)庫中插入新的記錄
SQL 可更新數(shù)據(jù)庫中的數(shù)據(jù)
SQL 可從數(shù)據(jù)庫刪除記錄
SQL 可創(chuàng)建新數(shù)據(jù)庫
SQL 可在數(shù)據(jù)庫中創(chuàng)建新表
SQL 可在數(shù)據(jù)庫中創(chuàng)建存儲過程
SQL 可在數(shù)據(jù)庫中創(chuàng)建視圖
SQL 可以設(shè)置表、存儲過程和視圖的權(quán)限

重要事項

一定要記住,SQL 對大小寫不敏感!



SQL DML 和 DDL

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

查詢和更新指令構(gòu)成了 SQL 的 DML 部分:
  • SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù)
  • UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)
  • DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)
  • INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)

SQL 的數(shù)據(jù)定義語言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以及施加表間的約束。

SQL 中最重要的 DDL 語句:
  • CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫
  • ALTER DATABASE - 修改數(shù)據(jù)庫
  • CREATE TABLE - 創(chuàng)建新表
  • ALTER TABLE - 變更(改變)數(shù)據(jù)庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創(chuàng)建索引(搜索鍵)
  • DROP INDEX - 刪除索引


SELECT 語句用于從表中選取數(shù)據(jù)。

語法:
SELECT 列名稱 FROM 表名稱以及:
SELECT * FROM 表名稱
提示:星號(*)是選取所有列的快捷方式。

SQL SELECT DISTINCT 語句

在表中,可能會包含重復(fù)值。這并不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。
關(guān)鍵詞 DISTINCT 用于返回唯一不同的值。
語法:
SELECT DISTINCT 列名稱 FROM 表名稱

WHERE 子句
操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某個范圍內(nèi)
LIKE 搜索某種模式

注釋:在某些版本的 SQL 中,操作符 <> 可以寫為 !=。

如需有條件地從表中選取數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句。
語法
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

引號的使用

請注意,我們在例子中的條件值周圍使用的是單引號。
SQL 使用單引號來環(huán)繞文本值(大部分?jǐn)?shù)據(jù)庫系統(tǒng)也接受雙引號)。如果是數(shù)值,請不要使用引號。

文本值:
  • 這是正確的:
    SELECT * FROM Persons WHERE FirstName='Bush'
  • 這是錯誤的:
    SELECT * FROM Persons WHERE FirstName=Bush
數(shù)值:
  • 這是正確的:
    SELECT * FROM Persons WHERE Year>1965
  • 這是錯誤的:
    SELECT * FROM Persons WHERE Year>'1965'


AND 和 OR 運算符

AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結(jié)合起來。
原始的表 (用在例子中的):

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' AND LastName='Carter'

使用 OR 來顯示所有姓為 "Carter" 或者名為 "Thomas" 的人:
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

我們也可以把 AND 和 OR 結(jié)合起來(使用圓括號來組成復(fù)雜的表達(dá)式):
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'



ORDER BY 語句

ORDER BY 語句用于根據(jù)指定的列對結(jié)果集進(jìn)行排序。
ORDER BY 語句默認(rèn)按照升序對記錄進(jìn)行排序。
如果您希望按照降序對記錄進(jìn)行排序,可以使用 DESC 關(guān)鍵字。
原始的表 (用在例子中的):
Orders 表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953

以字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company

以字母順序顯示公司名稱(Company),并以數(shù)字順序顯示順序號(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

以逆字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

以逆字母順序顯示公司名稱,并以數(shù)字順序顯示順序號:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC



INSERT INTO 語句

INSERT INTO 語句用于向表格中插入新的行。
語法
INSERT INTO 表名稱 VALUES (值1, 值2,....)

我們也可以指定所要插入數(shù)據(jù)的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

Update 語句用于修改表中的數(shù)據(jù)。

語法:
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
更新某一行中的一個列
我們?yōu)?lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

更新某一行中的若干列
我們會修改地址(address),并添加城市名稱(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

DELETE 語句

DELETE 語句用于刪除表中的行。
語法
DELETE FROM 表名稱 WHERE 列名稱 = 值

刪除所有行
可以在不刪除表的情況下刪除所有的行。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name



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

SQL IN 語法

SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
現(xiàn)在,我們希望從上表中選取姓氏為 Adams 和 Carter 的人:
我們可以使用下面的 SELECT 語句:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

BETWEEN 操作符
操作符 BETWEEN ... AND 會選取介于兩個值之間的數(shù)據(jù)范圍。這些值可以是數(shù)值、文本或者日期。

SQL BETWEEN 語法

SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2

如需以字母順序顯示介于 "Adams"(包括)和 "Carter"(不包括)之間的人,請使用下面的 SQL:
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

如需使用上面的例子顯示范圍之外的人,請使用 NOT 操作符:
SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'



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

SQL Alias

表的 SQL Alias 語法
SELECT column_name(s) FROM table_name AS alias_name
列的 SQL Alias 語法
SELECT column_name AS alias_name FROM table_name

Alias 實例: 使用表名稱別名

假設(shè)我們有兩個表分別是:"Persons" 和 "Product_Orders"。我們分別為它們指定別名 "p" 和 "po"。
現(xiàn)在,我們希望列出 "John Adams" 的所有定單。
我們可以使用下面的 SELECT 語句:
SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John'

不使用別名的 SELECT 語句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Product_Orders WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
從上面兩條 SELECT 語句您可以看到,別名使查詢程序更易閱讀和書寫。

Alias 實例: 使用一個列名別名

表 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

SQL:
SELECT LastName AS Family, FirstName AS Name FROM Persons
結(jié)果:

Family Name
Adams John
Bush George
Carter Thomas
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容