SQL必知必會(huì)(一)

整理自書籍《SQL必知必會(huì)》

1.1 數(shù)據(jù)庫基礎(chǔ)

數(shù)據(jù)庫

數(shù)據(jù)庫(database)是保存有組織的數(shù)據(jù)的容器(對(duì)于關(guān)系型數(shù)據(jù)庫而言)。
數(shù)據(jù)庫軟件又稱為數(shù)據(jù)庫管理系統(tǒng)(DBMS)。數(shù)據(jù)庫是通過DBMS創(chuàng)建和操作的容器。

是一種結(jié)構(gòu)化的文件,可用于存儲(chǔ)某種特定類型的數(shù)據(jù)。數(shù)據(jù)庫中的每個(gè)表都有一個(gè)唯一的名字。表的特性定義在模式(schema)中,模式可以用來描述庫中特定的表,也可以用來描述整個(gè)數(shù)據(jù)庫(和其中表的關(guān)系)。

列和數(shù)據(jù)類型

列(column):表中的一個(gè)字段。所有表都是由一個(gè)或多個(gè)列組成的。每個(gè)列都有相應(yīng)的數(shù)據(jù)類型。

數(shù)據(jù)類型(datatype):定義了列可以存儲(chǔ)哪些數(shù)據(jù)種類。

表中的數(shù)據(jù)是按行存儲(chǔ)的,所保存的每個(gè)記錄存儲(chǔ)在自己的行內(nèi)。

主鍵

表中每一行都應(yīng)該有一行或者多行可以唯一標(biāo)識(shí)自己,方便操作特定的行。應(yīng)該總是定義主鍵。

主鍵的特性:

  1. 任意兩行都不具有相同的主鍵
  2. 每一行都必須具有一個(gè)主鍵值(主鍵值不可為NULL)
  3. 主鍵的值不允許修改或更新
  4. 主鍵不能重用(如果某行從表中刪除,它的主鍵不能賦給其他的行)

主鍵通常定義在表的一列上,但是也可以使用多個(gè)列作為主鍵。在使用多個(gè)列作為主鍵時(shí),所有列必須滿足上述條件,所有列值的組合必須是唯一的。

2 檢索數(shù)據(jù)

2.1 SELECT語句

例:

SELECT prod_name
FROM Products;

SQL語句不區(qū)分大小寫,但是我們通常把關(guān)鍵字大寫,把列名和表名小寫,使代碼便于閱讀和調(diào)試。
檢索多個(gè)列時(shí)用逗號(hào)分隔。檢索所有列時(shí)使用通配符*,但是最好不要這么做,除非你確實(shí)是要檢索所有列。使用通配符的優(yōu)點(diǎn)是可以檢索出名字未知的列。

2.2 檢索不同的值

使用DISTINCT關(guān)鍵字檢索,只返回不同的值。DISTINCT關(guān)鍵字作用于所有檢索的列,不僅僅是跟在它后面的那一列。

2.3 限制結(jié)果

SQL Server / Access:

SELECT TOP 5 prod_name
FROM Products;

DB2:

SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;

Oracle:

SELECT prod_name
FROM Products
WHERE ROWNUM <= 5;

MySQL / MariaDB / PostgreSQL / SQLite:

SELECT prod_name
FROM Products
LIMIT 5;

上面的代碼都用于返回前5行數(shù)據(jù)。

OFFSET指定從哪兒開始檢索:

SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;

LIMIT 5 OFFSET 5 指示MySQL返回從第5行開始(包含)的5行數(shù)據(jù)。LIMIT 5 OFFSET 5 也可以簡(jiǎn)寫為LIMIT 5,5。

2.4 注釋

行內(nèi)注釋

SELECT prod_name -- this is a comment 
FROM Products;

另一種支持較少的行內(nèi)注釋,整行都將作為注釋:

# this is a comment 
SELECT prod_name 
FROM Products;

多行注釋

使用 /* */

3 排序檢索數(shù)據(jù)

3.1 排序數(shù)據(jù)

SELECT prod_name 
FROM Products
ORDER BY prod_name;

使用ORDER BY子句對(duì)檢索的數(shù)據(jù)進(jìn)行排序。ORDER BY子句應(yīng)處于SELECT語句的最后。不一定要用檢索的列排序,用非檢索的列排序數(shù)據(jù)也是合法的。

3.2 按多個(gè)列排序

使用逗號(hào)分隔,先按位置在前的排序。

3.3 按列位置排序

SELECT prod_id, prod_name, prod_price
FROM Products
ORDER BY 1, 2;

使用簡(jiǎn)便,但是可能造成錯(cuò)用列名進(jìn)行排序。

3.4 指定排序方向

不指定則默認(rèn)升序,要按降序排序,則需指定DESC關(guān)鍵字。

4 過濾數(shù)據(jù)

4.1 使用WHERE子句

指定搜索條件(過濾條件)來提取所需的數(shù)據(jù)。WHERE子句寫在FROM子句之后。

4.2 WHERE子句操作符

  • 等于 =
  • 不等于 <> !=
  • 小于 <
  • 小于等于 <=
  • 不小于 !<
  • 大于 >
  • 大于等于 >=
  • 不大于 !>
  • 在兩個(gè)值之間(包含邊界) BETWEEN ... AND ...
  • 為NULL值 IS NULL
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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