《sql必知必會》系列1基礎檢索相關

數據庫基礎

數據庫:保存有組織的數據的容器
表:某種特定類型數據的結構化清單
模式:關於數據庫和表的佈局及特性的信息
行:表中的一個記錄
主鍵:唯一標識表中的一行 總是應該設立主鍵

檢索數據

檢索單個列:

SELECT prod_name
FROM Products;

如果沒有明確查詢的順序,返回的數據沒有特定的順序。而且通常需要應用程序自己格式化數據格式;
SQL語句不區分大小寫,經常以大寫表示關鍵字,所有空格都被忽略,換不換行都行;必須以‘;’結尾
多個列之間用,隔開,檢索所有列用*

SELECT prod_name,prod_id
FROM Products;

Distinct

不重複數據.distict關鍵字必須放在列名的前面

SELECT DISTINCT vend_id
FROM Products;

限制返回行數

SQL server 和access用 TOP 關鍵字 只檢索前5行

SELECT TOP 5 prod_name
FROM Products;

Mysql、 Maria DB、SQLite用 LIMIT關鍵字,比如不超過5行

SELECT prod_name
FROM Products
LIMIT 5;

要得到後面5行的,需要指定從哪裏開始以及檢索的行數

SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;

從第5行氣的5行數據(第一個被檢索的行是第0行,從0開始)

註釋

行內註釋 –

SELECT TOP 5 prod_name -- 這是條註釋
FROM Products;

多行:/**/

排序檢索 order by

按列名

SELECT prod_name
FROM Products
ORDER BY prod_name;

以prod_name字母順序排序
ORDER BY 子句要保證是select語句中最後一條語句
用非檢索列排序也是合法的

按多個列排序,指定列名,用,分開。 先按第一個,然後第一個相同時按第二個等

按列位置

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

2,3指的是select後的第二個第三個列。不在select清單裏的列不能用,而且很容易發生修改了select清單但沒有修改order by子句的問題

降序 DESC

SELECT prod_name
FROM Products
ORDER BY prod_name DESC;

DESC只應用到直接位於它前面的列,要是想多個列上降序,每個列名後面都得加DESC
一般認爲A a在字母順序中一樣,要是修改的話可能需要聯繫數據庫管理員

過濾數據 where

SELECT prod_name,prod_price
FROM Products
WHERE prod_price = 3.49;

後面有多少個0是DBMS默認的,3.49和3.4900是一樣的

order by要位於where之後

<> 不等於 !<不小於 !>不大於 Between 兩者之間 is null 爲null值

SELECT prod_name,prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;

BETWEEN必須指定低和高兩個,由AND連接,閉區間

檢查是否爲空要用is null

SELECT prod_name,prod_price
FROM Products
WHERE prod_price IS NULL;

在過濾數據時,不滿足某條件的返回結果裏並不會包含null,null必須單獨判斷

組合where 子句 邏輯操作符

and, or, in, NOT

SELECT prod_name,prod_price
FROM Products
WHERE prod_price <=4 AND vend_id = 'DLL01';

or的話,許多DBMS只看第一個滿足,後面就不看了,一併檢索出來
可以用括號()來明確多個and or之間的優先級

SELECT prod_name,prod_price
FROM Products
WHERE  vend_id IN ( 'DLL01','BRS01');

IN後的選項必須在()裏,逗號隔開,其實就是完成了OR的操作。合法選項很多時,用IN更清楚,求值順序更容易管理,而且一般比or執行的快。IN的最大優點是可以包含其他select子句

通配符

用來匹配值的一部分的特殊字符

%

%表示任意字符出現任意次數

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

通配符可以在任意位置,使用任意多個
但是要注意,許多DBMS會用空格在後面填充,有時候’f%y’這樣可能匹配不到,最好是’f%y%’
另外,通配符匹配不到nuLL

WHERE prod_name LIKE '%';

是匹配不到NULL的

_

_只匹配單個字符
不能多也不能少

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';

只匹配10-99 inch的

[]

[]用來指定一個字符集,必須匹配指定位置的一個字符。只有Access和Sql server支持

創建計算字段

存儲在表中的數據一般不是應用程序要用的,有時候需要從數據庫中檢索出轉換、計算或格式化後的數據。
只有數據庫知道select中哪些列是實際的表列,哪些是計算字段。客戶端看不出區別來。

拼接字段

多數DBMS使用+號

SELECT vend_name + '('+vend_country +')'
FROM Vendors
Order by vend_name;

Mysql 和mariaDB中使用的是concat

SELECT Concat(vend_name + '('+vend_country +')')
FROM Vendors
Order by vend_name;

可以用RTRIM(列名)來去掉多餘的空格

使用別名

一個字段或值的替換名

SELECT RTRIM(vend_name) + '('+RTRIM(vend_country) +')'
AS vend_title
FROM Vendors
Order by vend_name;

算術計算

可以在計算字段中+ -* /

SELECT prod_id, quantity, item_price,quantity*item_price as expanded_price
FROM OrderItems
where order_num = 20008;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章