SQL 基礎知識梳理(二) - 查詢基礎
目錄
一、SELECT 語句基礎
1.查詢指定列:SELECT 關鍵字
--語法: --SELECT <列名>, ... -- 希望查詢列的名稱 --FROM <表名> -- 指定選取資料的表
-- 從 Shohin 中取 3 列 SELECT shohin_id, shohin_mei, hanbai_tanka -- 列的順序可以任意指定,逗號(“,”)分隔,查詢結果的順序和 SELECT 子句中的順序相同 FROM Shohin;
2.查詢表的所有列:星號(*)
--語法 --SELECT * -- 星號(*)代表所有列 --FROM <表名>;
【備註】使用星號(*)的話就無法設定列的顯示順序
3.為列設定別名:AS 關鍵字
SELECT shohin_id AS Id, shohin_mei AS Name, shiire_tanka Price FROM Shohin; -- 不用 AS 關鍵字也可以
SELECT shohin_id AS "編號", shohin_mei AS '名稱', shiire_tanka '價格' FROM Shohin; -- 設定漢語別名:加上雙引號(")或單引號(')
4.常數的查詢
SELECT '產品' AS Product, -- '產品':字串常數 38 AS Price, -- 38:數字常數 '2016-09-30' AS '生產日期' -- '2009-02-24':日期常數
【備註】字串和日期使用單引號(')。
5.從結果中刪除重複行:DISTINCT
原圖
(1)
SELECT DISTINCT shohin_bunrui FROM dbo.Shohin; -
使用 DISTINCT 移除shohin_bunrui 列中的重複資料
(2)DISTINCT對 NULL 型別的處理:存在多條 NULL 值的行時,會結合為一條 NULL 資料。
SELECT DISTINCT shiire_tanka FROM dbo.Shohin;
(3)多列之前使用 DISTINCT
SELECT DISTINCT shohin_bunrui, torokubi FROM dbo.Shohin
DISTINCT 會將多個列的資料進行組合,將重複的資料結合為一條。
【注意】DISTINCT 關鍵字只能用在第一個列名之前。
6.篩選記錄:WHERE
WHERE 子句中可以指定“某一列的值和這個字串相等”或者“某一列的值大於這個數字”等條件,找出只符合該條件的記錄。
--語法: --SELECT <列名>, ... --FROM <表名> --WHERE <條件表示式>;
SELECT shohin_id, shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE shohin_bunrui = '衣服'; -- shohin_bunrui = '衣服':為條件表示式
選取行之後,再輸出列
【備註】WHERE 子句:首先通過該子句查詢出符合指定條件的記錄,再選取出 SELECT 語句指定的列。
【注意】SQL 子句的書寫格式是固定的,不能隨意更改。如 WHERE 子句必須緊跟在 FROM 子句後。
7.註釋的寫法
註釋對於 SQL 的執行沒有任何影響。
-- 單行註釋 /* 多行註釋 */
二、算術運算子和比較運算子
1.算術運算子
SELECT shohin_mei, hanbai_tanka, hanbai_tanka * 2 AS 'hanbai_tanka_x2' FROM dbo.Shohin;
圖 商品單價的兩倍
含義 | 運算子 |
加法 | + |
減法 | - |
乘法 | * |
除法 | / |
括號(“(”“)”)可以提高表示式的優先順序。
2.需要注意 NULL
SELECT 5 + NULL, 10 - NULL, 1 * NULL, 4 / NULL, NULL / 9;
【備註】所有包含 NULL 的計算,結果肯定為 NULL。
3.比較運算子
運算子 | 含義 |
= | 相等 |
<> | 不等 |
>= | 大於等於 |
> | 大於 |
<= | 小於等於 |
< | 小於 |
--示例1:
SELECT shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE hanbai_tanka = 500;
選取hanbai_tanka 列為 500 的記錄
--示例2
SELECT shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE hanbai_tanka <> 500;
--示例3
SELECT shohin_mei, shohin_bunrui FROM dbo.Shohin WHERE hanbai_tanka != 500;
選取hanbai_tanka 列的值不是 500 的記錄
--示例4
SELECT * FROM dbo.Shohin WHERE hanbai_tanka - shiire_tanka >= 500;
3.對字串使用不等號時的注意事項
建立表原圖
--示例:選取出大於'2'的資料的 SELECT 語句 SELECT * FROM dbo.Chars WHERE chr > '2';
【注意】chr 為字串型別,對字串型別的資料進行大小比較時,跟數字不一樣。
4.不能對 NULL 使用比較運算子
--示例1: SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shiire_tanka = NULL; --錯誤的 SELECT 語句 --示例2 SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shiire_tanka IS NULL; --選取 NULL 的記錄 --示例3 SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shiire_tanka IS NOT NULL; --選取不為 NULL 的記錄
【注意】希望選取 NULL 記錄時,使用 IS NULL;希望選取不是 NULL 的記錄時,使用 IS NOT NULL。
三、邏輯運算子
1.NOT 運算子:取反
--示例:
SELECT * FROM dbo.Shohin WHERE NOT hanbai_tanka >= 1000; --等價於 hanbai_tanka < 1000
取hanbai_tanka 列不大於 1000 的記錄(hanbai_tanka < 1000)
2.AND 運算子和 OR 運算子
AND 運算子:並且,在兩側的查詢條件都成立時整個查詢條件才成立。
OR 運算子:在兩側的查詢條件就算只有一個成立時整個查詢條件都成立。
--示例
SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shohin_bunrui = '廚房用具' AND hanbai_tanka >= 3000;
SELECT shohin_mei, shiire_tanka FROM dbo.Shohin WHERE shohin_bunrui = '廚房用具' OR hanbai_tanka >= 3000;
【備註】多個查詢條件進行組合時,需要使用 AND 運算子或者 OR 運算子。
2.通過括號進行強化
--示例1
SELECT shohin_mei, shohin_bunrui, torokubi FROM dbo.Shohin WHERE shohin_bunrui = '辦公用品' AND torokubi = '2009-09-11' OR torokubi = '2009-09-20';
--示例2 SELECT shohin_mei, shohin_bunrui, torokubi FROM dbo.Shohin WHERE shohin_bunrui = '辦公用品' AND (torokubi = '2009-09-11' OR torokubi = '2009-09-20');
【備註】AND 運算優先於 OR 運算,想要優先執行 OR 運算時可以使用括號。
傳送門
備註
這裡的語句採用 SQL Server 進行驗證。
建表語句:CREATE TABLE Shohin