1. 程式人生 > 實用技巧 >SQL:二 查詢基礎

SQL:二 查詢基礎

SELECT語句基礎

列的查詢

  • 通過 SELECT 語句查詢並選取出必要資料 的過程稱為匹配查詢或查詢(query)。
  • 查詢結果中列的順序和 SELECT 子句中的順序相同
SELECT <列名 1>,<列名 2>……  
FROM <表名>;

查詢出表中所有的列

  • 想要查詢出全部列時,可以使用代表所有列的星號(*)
  • 如果使用星號的話,就無法設定列的顯示順序了 。這時就會按 照CREATE TABLE 語句的定義對列進行排序。
SELECT * FROM <表名>;

隨意使用換行符

SQL 語句使用換行符或者半形空格來分隔單詞,在任何位置進行分隔都可以, 即使像下面這樣通篇都是換行符也不會影響SELECT語句的執行。但是這樣可能會 由於看不清楚而出錯。原則上希望大家能夠以子句為單位進行換行 (子句過長時, 為方便起見可以換行)。

為列設定別名

  • SQL 語句可以使用 AS關鍵字為列設定別名
  • 別名可以使用中文,使用中文時需要用雙引號(")括起來
  • 查詢出來的結果,列名以別名顯示
SELECT  product_id      AS id,
        product_name    AS name, 
        purchase_price  AS "進貨單價"
FROM Product;                                 

常數的查詢

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

  • SELECT '商品' AS string FROM Product;

    • 查詢結果:列名為string,下面所有行中顯示常數,即“商品”

從結果中刪除重複行

  • 在SELECT 子句中使用 DISTINCT 來實現刪除重複行
  • 在使用DISTINCT 時,NULL 也被視為一類資料。NULL 存在於多 行中時,也會被合併為一條 NULL 資料
  • DISTINCT 關鍵字只能用在第一個列名之前
SELECT DISTINCT product_type  
FROM Product;

根據WHERE語句來選擇記錄

  • SELECT 語句通過WHERE 子句來指定查詢資料的條件
  • 在 WHERE 子句中可以指定“某一列的值和這個字串相等”或者“某一列的值大於 這個數字”等條件
  • 首先通過 WHERE 子句查詢出符合指定條件的記錄,然後再選取出SELECT 語句指定的列
  • SQL中子句的書寫順序是固定的,不能隨意更改。WHERE 子句必須 緊跟在FROM 子句之後,書寫順序發生改變的話會造成執行錯誤
SELECT <列名>, …… 
FROM <表名> 
WHERE <條件表示式>;

註釋的書寫方法

  • 1行註釋

    • 書寫在“--”之後,只能寫在同一行
  • 多行註釋

    • 書寫在 “ /*” 和 “ */ ” 之間,可以跨多行

算術運算子和比較運算子

算術運算子

  • 四則運算所使用的運算子(+、-、*、/)稱為算術運算子。
  • 運算子就是使用其兩邊的值進行四則運算或者字串拼接、數值大小比較等運算,並返回結果的符號
  • 括號中 運算表示式的優先順序會得到提升,優先進行運算
  • 運算是以行為單位執行的
SELECT product_name, sale_price, 
            sale_price * 2 AS "sale_price_x2" 
FROM Product;

需要注意NULL

  • 所有包含 NULL 的計算,結果肯定是 NULL

比較運算子

  • 符號 = 這樣用來比較其兩邊的列或者值的符號稱為比較運算子
  • 一定要讓不等 號在左,等號在右
SELECT product_name, product_type  
FROM Product 
WHERE sale_price = 500;

對字串使用不等號時的注意事項

  • 字串型別的資料原則上按照字典順序進行排序,不能與數字的大小順序混淆。

不能對NULL使用比較運算子

  • SQL 提供了專門用來判斷是否為 NULL 的IS NULL 運算子
  • 希望選取不是NULL 的記錄時,需要使用 IS NOT NULL 運 算符

邏輯運算子

NOT運算子

  • NOT運算子用來否定某一條件
SELECT product_name, product_type, sale_price 
FROM Product 
WHERE NOT sale_price >= 1000;

AND運算子和OR運算子

  • 在 WHERE 子句中使用 AND 運算子或者OR 運算子,可以對多個查 詢條件進行組合。
  • AND 運算子在其兩側的查詢條件都成立時整個查詢條件才成立,其 意思相當於“並且”。
  • OR 運算子在其兩側的查詢條件有一個成立時整個查詢條件都成立, 其意思相當於“或者” 。
SELECT  product_name, purchase_price  
FROM Product 
WHERE  product_type = '廚房用具' AND sale_price >= 3000;

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

通過括號強化處理

  • AND 運算子優先於 OR 運算子
SELECT product_name, product_type, regist_date  
FROM Product 
WHERE product_type = '辦公用品'   
AND (   regist_date = '2009-09-11'        
     OR regist_date = '2009-09-20');

邏輯運算子和真值

  • NOT、AND 和 OR 稱為邏輯運算子
  • 邏輯就是對真值進行操作的意思。真值就是值為真(TRUE)或假 (FALSE)其中之一的值

含有NULL時的真值

  • 真值是除真假之外的第三種值——不確定(UNKNOWN)
  • SQL 之外的語言也基本上只使用真 和假這兩種真值。與通常的邏輯運算被稱為二值邏輯相對,只有 SQL 中 的邏輯運算被稱為三值邏輯。