1. 程式人生 > 其它 ><轉載>SQL 基礎知識梳理(二) - 查詢基礎

<轉載>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.對字串使用不等號時的注意事項

 建立表

原圖

  

--示例:選取出大於'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 基礎知識梳理(一)- 資料庫與 SQL

 

備註

  這裡的語句採用 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');