SQL 基礎知識梳理(二) - 查詢基礎
【博主】反骨仔 【原文】http://www.cnblogs.com/liqingwen/p/5904824.html
序
這是《SQL 基礎知識梳理(一)- 數據庫與 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.對字符串使用不等號時的注意事項

-- DDL:創建表 CREATE TABLE Chars (chr CHAR(3) NOT NULL, PRIMARY KEY (chr)); -- DML:插入數據 INSERT INTO Chars VALUES ('1'); INSERT INTO Chars VALUES ('2'); INSERT INTO Chars VALUES ('3'); INSERT INTO Chars VALUES ('10'); INSERT INTO Chars VALUES ('11'); INSERT INTO Chars VALUES ('222');
原圖
--示例:選取出大於'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 (shohin_id CHAR(4) NOT NULL, shohin_mei VARCHAR(100) NOT NULL, shohin_bunrui VARCHAR(32) NOT NULL, hanbai_tanka INTEGER , shiire_tanka INTEGER , torokubi DATE , PRIMARY KEY (shohin_id)); INSERT INTO Shohin VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20'); INSERT INTO Shohin VALUES ('0002', '打孔器', '辦公用品', 500, 320, '2009-09-11'); INSERT INTO Shohin VALUES ('0003', '運動T恤', '衣服', 4000, 2800, NULL); INSERT INTO Shohin VALUES ('0004', '菜刀', '廚房用具', 3000, 2800, '2009-09-20'); INSERT INTO Shohin VALUES ('0005', '高壓鍋', '廚房用具', 6800, 5000, '2009-01-15'); INSERT INTO Shohin VALUES ('0006', '叉子', '廚房用具', 500, NULL, '2009-09-20'); INSERT INTO Shohin VALUES ('0007', '擦菜板', '廚房用具', 880, 790, '2008-04-28'); INSERT INTO Shohin VALUES ('0008', '圓珠筆', '辦公用品', 100, NULL, '2009-11-11');
【參考】《SQL ゼロからはじめるデータベース操作》