學習SQL【3】-查詢基礎

學習SQL【3】-查詢基礎

來自專欄 Python愛好者

一:SELECT 語句基礎

1:列的查詢

基本的SELECT語句

SELECT <列名>,..... FROM <表名>;

以下舉例均是對錶Product進行操作,表Product的結構內容如下圖:

從表中輸出三列:

SELECT product_id, product_name, purchase_price FROM Product;

執行結果

product_id | product_name | purchase_price------------+--------------+---------------- 0001 | T衫 | 500 0002 | 打孔器 | 320 0003 | 運動T衫 | 2800 0004 | 菜刀 | 2800 0005 | 高壓鍋 | 5000 0006 | 叉子 | 0007 | 擦菜板 | 790 0008 | 圓珠筆 |(8 行記錄)

查詢結果中列的順序與SELECT字句中的順序相同。

2:查詢出表中的所有列

想要查詢全部列,可使用代表所有列的星號(*)

SELECT * FROM Product;

查詢結果如下:

product_id | product_name | product_type | sale_price | purchase_price | regist_date------------+--------------+--------------+------------+----------------+------------- 0001 | T衫 | 衣服 | 1000 | 500 | 2017-09-20 0002 | 打孔器 | 辦公用品 | 500 | 320 | 2017-09-11 0003 | 運動T衫 | 衣服 | 4000 | 2800 | 0004 | 菜刀 | 廚房用具 | 3000 | 2800 | 2017-09-20 0005 | 高壓鍋 | 廚房用具 | 6800 | 5000 | 2017-01-15 0006 | 叉子 | 廚房用具 | 500 | | 2017-09-20 0007 | 擦菜板 | 廚房用具 | 880 | 790 | 2016-04-28 0008 | 圓珠筆 | 辦公用品 | 100 | | 2017-11-11(8 行記錄)

3:為列設定別名

SQL語句可以使用AS關鍵字為列指定別名,

SELECT product_id AS id, product_name AS name, purchase_price AS price FROM Product;

執行結果

id | name | price------+---------+------- 0001 | T衫 | 500 0002 | 打孔器 | 320 0003 | 運動T衫 | 2800 0004 | 菜刀 | 2800 0005 | 高壓鍋 | 5000 0006 | 叉子 | 0007 | 擦菜板 | 790 0008 | 圓珠筆 |(8 行記錄)

別名可以使用中文,使用中文時需要用雙引號(」)括起來:

SELECT product_id AS "商品編號", product_name AS "商品名稱", purchase_price AS "進貨單價" FROM Product;

執行結果如下:

商品編號 | 商品名稱 | 進貨單價----------+----------+---------- 0001 | T衫 | 500 0002 | 打孔器 | 320 0003 | 運動T衫 | 2800 0004 | 菜刀 | 2800 0005 | 高壓鍋 | 5000 0006 | 叉子 | 0007 | 擦菜板 | 790 0008 | 圓珠筆 |(8 行記錄)

4:常數的查詢

SELECT 子句中不僅可以書寫列名,還可以書寫常數

在SQL語句中使用字元串或者日期常數時,必須使用單引號(』)將其括起來:

SELECT 商品 AS string, 38 AS number, 2017-12-01 AS date, product_id, product_name FROM Product;

執行結果如下:

string | number | date | product_id | product_name--------+--------+------------+------------+-------------- 商品 | 38 | 2017-12-01 | 0001 | T衫 商品 | 38 | 2017-12-01 | 0002 | 打孔器 商品 | 38 | 2017-12-01 | 0003 | 運動T衫 商品 | 38 | 2017-12-01 | 0004 | 菜刀 商品 | 38 | 2017-12-01 | 0005 | 高壓鍋 商品 | 38 | 2017-12-01 | 0006 | 叉子 商品 | 38 | 2017-12-01 | 0007 | 擦菜板 商品 | 38 | 2017-12-01 | 0008 | 圓珠筆(8 行記錄)

5:從結果中刪除重複行

若想要刪除重複行,可以通過在SELECT 子句中使用DISTINCT關鍵字來實現:

SELECT DISTINCT product_type FROM Product;

執行結果如下:

product_type-------------- 衣服 辦公用品 廚房用具(3 行記錄)

在使用DISTINCT關鍵字時,NULL也被視為一類數據,如對含有NULL數據的purchase_price(進貨單價)列使用DISTINCT關鍵字:

SELECT DISTINCT purchase_price FROM Product;

執行結果如下:

purchase_price---------------- 320 500 5000 2800 790(6 行記錄)

注釋:

DISTINCT關鍵字只能用於第一個列名之前。

6:根據WHERE語句來選擇記錄

SELECT語句通過WHERE子句來指定查詢數據的條件

WHERE子句的語法:

SELECT <列名>,... FROM <表名> WHERE <條件表達式>;

例如,選取商品種類為「衣服」的記錄

SELECT product_name, product_type FROM Product WHERE product_type = 衣服;

執行結果如下:

product_name | product_type--------------+-------------- T衫 | 衣服 運動T衫 | 衣服(2 行記錄)

注釋:

● WHERE子句要緊跟在FROM子句後面。

● SQL中子句的書寫順序是固定的,不能隨意更改。

7:注釋的書寫方法

注釋是SQL語句中用來標誌說明或注意事項的部分,分為1行注釋和多行注釋。

● 1行注釋:

書寫在」—「之後,只能寫在同一行,在MySQL中,需要在」—「後加一個空格。

● 多行注釋:

書寫在」/「和」/「之間,可以跨多行。

二:算術運算符和比較運算符

1:算術運算符

SQL語句中使用算術運算符

SELECT product_name, sale_price, sale_price * 2 AS "sale_price_*2" FROM Product;

執行結果如下:

product_name | sale_price | sale_price_*2--------------+------------+--------------- T衫 | 1000 | 2000 打孔器 | 500 | 1000 運動T衫 | 4000 | 8000 菜刀 | 3000 | 6000 高壓鍋 | 6800 | 13600 叉子 | 500 | 1000 擦菜板 | 880 | 1760 圓珠筆 | 100 | 200(8 行記錄)

四則運算所使用的運算符(+、-、*、/)稱為算術運算符。

SELECT 子句中可以使用常數或者算術表達式。

2:需要注意NULL

所有包含NULL的算術計算,結果都是NULL

如:

● 5 + NULL● 1 * NULL● NULL / 0

注釋:

只有NULL除以0 時不會發生錯誤,並且結果仍然為NULL。

3:比較運算符

SQL中主要有六種比較運算符:

● = :相等● <>:不相等● >=:大於等於● <= :小於等於● > :大於● < : 小於

例如,選取sale_price列為500的記錄:

SELECT product_name, product_type FROM Product WHERE sale_price = 500;

執行結果:

product_name | product_type--------------+-------------- 打孔器 | 辦公用品 叉子 | 廚房用具(2 行記錄)

選取sale_price列的值不為500的記錄:

SELECT product_name, product_type FROM Product WHERE sale_price <> 500;

執行結果:

product_name | product_type--------------+-------------- T衫 | 衣服 運動T衫 | 衣服 菜刀 | 廚房用具 高壓鍋 | 廚房用具 擦菜板 | 廚房用具 圓珠筆 | 辦公用品(6 行記錄)

日期也可以用來比較

SELECT product_name, product_type, regist_date FROM Product WHERE regist_date < 2017-09-27;

執行結果:

product_name | product_type | regist_date--------------+--------------+------------- T衫 | 衣服 | 2017-09-20 打孔器 | 辦公用品 | 2017-09-11 菜刀 | 廚房用具 | 2017-09-20 高壓鍋 | 廚房用具 | 2017-01-15 叉子 | 廚房用具 | 2017-09-20 擦菜板 | 廚房用具 | 2016-04-28(6 行記錄)

WHERE字句中的條件表達式也可以使用計算表達式

SELECT product_name, sale_price, purchase_price FROM Product WHERE sale_price - purchase_price >= 500;

執行結果:

product_name | sale_price | purchase_price--------------+------------+---------------- T衫 | 1000 | 500 運動T衫 | 4000 | 2800 高壓鍋 | 6800 | 5000(3 行記錄)

4:不能對NULL使用比較運算符

錯誤的SELECT語句

SELECT product_name, purchase_price FROM Product WHERE purchase_price = NULL;

執行結果:

product_name | purchase_price--------------+----------------(0 行記錄)

SQL提供了專門用來判斷是否為NULL的IS NULL運算符。

例如,選取NULL的語句:

SELECT product_name, purchase_price FROM Product WHERE purchase_price IS NULL;

執行結果:

product_name | purchase_price--------------+---------------- 叉子 | 圓珠筆 |(2 行記錄)

反之,如果選取不是NULL的記錄,需要使用IS NOT NULL運算符:

SELECT product_name, purchase_price FROM Product WHERE purchase_price IS NOT NULL;

執行結果:

product_name | purchase_price--------------+---------------- T衫 | 500 打孔器 | 320 運動T衫 | 2800 菜刀 | 2800 高壓鍋 | 5000 擦菜板 | 790(6 行記錄)

三:邏輯運算符

1:NOT運算符

NOT運算符表示否定,其不能單獨使用,必須結合其他查詢條件組合起來使用:

SELECT product_name, product_type, sale_price FROM Product WHERE NOT sale_price >= 1000;

執行結果:

product_name | product_type | sale_price--------------+--------------+------------ 打孔器 | 辦公用品 | 500 叉子 | 廚房用具 | 500 擦菜板 | 廚房用具 | 880 圓珠筆 | 辦公用品 | 100(4 行記錄)

注釋:

NOT運算符用來否定某一個條件,但是不能濫用。

2:AND運算符

AND運算符在其兩側的查詢條件都成立時整個查詢條件才成立。

例如,在WHERE子句中使用AND 運算符

SELECT product_name, purchase_price FROM Product WHERE product_type = 廚房用具 AND sale_price >= 3000;

執行結果:

product_name | purchase_price--------------+---------------- 菜刀 | 2800 高壓鍋 | 5000(2 行記錄)

3:OR 運算符

AND運算符在其兩側的查詢條件有一個成立時整個查詢條件都成立。

例如,在WHERE子句中使用OR 運算符:

SELECT product_name, purchase_price FROM Product WHERE product_type = 廚房用具 OR sale_price >= 3000;

執行結果:

product_name | purchase_price--------------+---------------- 運動T衫 | 2800 菜刀 | 2800 高壓鍋 | 5000 叉子 | 擦菜板 | 790(5 行記錄)

4:通過括弧強化處理

AND運算符的優先順序高於OR運算符,想要先執行OR 運算符是可以使用括弧。

SELECT product_name, product_type, regist_date FROM Product WHERE product_type = 辦公用品 AND ( regist_date = 2017-09-11 OR regist_date = 2017-09-20);

執行結果:

product_name | product_type | regist_date--------------+--------------+------------- 打孔器 | 辦公用品 | 2017-09-11(1 行記錄)

5:邏輯運算符和真值

● NOT、AND和OR稱為邏輯運算符。

● 使用AND 進行的邏輯運算稱為邏輯積, 使用OR運算符進行的邏輯運算稱為邏輯和。

SQL除了真假值外,還有第三種值—不確定(UNKNOW)。因此,只有SQL的邏輯運算稱為三值邏輯,其他的通常的邏輯運算稱為二值邏輯。

今天的學習到此結束。

滿頁的代碼,一般人是看不下去的,如果你能看到末尾,說明你是一個愛學習的孩子,那就留個贊再走吧

(重要的話要加重加粗)

每天學習一點點,每天進步一點點。


推薦閱讀:

mysql表中查找和小於某個數的所有最前面的記錄?
當計算欄位邂逅子查詢
Django中的資料庫訪問優化——預載入關聯數據
一張圖讓你詳細理解Group By的分組聚合過程
Python3 pandas如何加快SQL Server讀寫速度?

TAG:SQL | 資料庫 | 自學編程 |