1. 程式人生 > >PostgreSQL基礎知識(五)

PostgreSQL基礎知識(五)

38、謂詞的使用

LIKE 關鍵字進行前方一致查詢。查詢以 ddd 開頭的內容
SELECT * FROM 表名 WHERE XXX LIKE 'ddd%' ; 

LIKE 關鍵字進行中間一致查詢。查詢包含 ddd 的內容
SELECT * FROM 表名 WHERE XXX LIKE '%ddd%' ; 

LIKE 關鍵字進行後方一致查詢。查詢以 ddd 結尾的內容
SELECT * FROM 表名 WHERE XXX LIKE '%ddd' ; 

BETWEEN關鍵字 —— 範圍查詢
例如: SELECT price FROM 表名 WHERE price BETWEEN 100 AND 1000 ;

IS NULL 和IS NOT NULL  選取出某些值為NULL的列的資料 不能用= ,只能用IS NULL,要查NULL 以外的資料,則使用IS NOT NULL。

IN 和OR 的簡便實用。 例如我們要查詢價格為300,500,600商品。可以這麼寫。
SELECT price FROM 表名 WHERE price = 300 OR price =500 OR price=600  ;   這麼寫語法沒問題,但是這樣隨著條件的變多,SQL語句會變得很長,我們就可以使用IN 來寫。 SELECT price FROM 表名 WHERE price IN (300,500,600); 會方便很多。當然選取這3個值之外的商品只要將IN 改成NOT IN 就可以。
 

39、CASE表示式 。簡單來說CASE表示式就是我們程式語言裡的 條件分支。  CASE表示式就是(Java裡的case)SQL版本。分為簡單CASE表示式和搜尋CASE表示式。後者包括前者的全部功能,所以我們看後者。搜尋CASE表示式如下:
CASE  WHEN  求職表示式  THEN  表示式
            WHEN  求職表示式  THEN  表示式
            WHEN  求職表示式  THEN  表示式
            ELSE  表示式
END   
  /*ELSE子句是可以省略的,但是為了更好的理解,最好不要省略,END 不能省略*/

40、集合運算,集合運算就是對滿足同一規則的記錄進行的加減等四則運算。(通過集合運算,可以得到兩張表中記錄的集合或者公共記錄的集合,又或者其中某張表的記錄的集合)

41、表的加法 —— UNION(並集)
SQL語句格式 : SELECT 列1  ,列 2  FROM 表1   UNION  SELECT 列1,列2 FROM 表2 ;  如果查詢出來的資料行2個表都有,則只顯示1次。意思就是  集合運算子會除去重複的記錄。
UNION 的注意事項:   1、作為運算物件的記錄的列數必須相同 2、作為運算物件的記錄中列的型別必須一致(因為要對2張表進行求並集,意思就是對應的列數量和型別上必須匹配) 3、可以使用任何SELECT語句,都是ORDER BY 子句只能在最後使用一次。


42、包含重複行的集合運算 —— ALL選項
在UNION後面 加上ALL 就可以保留重複行。
SQL語句格式 : SELECT 列1  ,列 2  FROM 表1   UNION  ALL SELECT 列1,列2 FROM 表2 ;

43、選取表中的公共部分 —— INTERSECT 
INTERSECT是作用於兩張表, 選取出他們的公共記錄。 (交集)
SQL語句格式 : SELECT 列1  ,列 2  FROM 表1   INTERSECT SELECT 列1,列2 FROM 表2 ;

44、記錄的減法 ——EXCEPT
SQL語句格式:SQL語句格式 : SELECT 列1  ,列 2  FROM 表1   EXCEPT  SELECT 列1,列2 FROM 表2 ;
表1-表2,意思就是查詢表1裡面,除去2個表交集的部分。

 45、聯結 (以列為單位對錶進行聯結)簡單來說就是有2個表或者多個表,每個表裡面都有我們所需的資訊,都是都不完整,需要從每個表取出點東西進行聯結就可以得到我們想要的完整資訊。 聯結分為內聯結和外聯結。

內聯結:SQL語句: SELECT 表1別名.列1 , 表1別名.列2 ,表2別名.列1,  表2別名.列2  FROM 表1 AS 表1別名 INNER JOIN 表2 AS 表2別名  ON  表1別名.列名 = 表2別名.列名 ;
注意要點:1、 FROM子句裡需要在2張表之間加INNER JOIN  ,不用別名也可以,但是會造成SQL語句太長不利於可讀性。
2、 ON 子句  , ON語句就是指定2張表之間的聯結所需使用的列。(聯結鍵)
3、SELECT子句中指定的列,最好是表的別名和 點的方式 ,來避免混亂。

外聯結 :外聯結和內聯結其實用法並沒什麼不同,只不過是將INNER JOIN改成了OUTER JOIN,但是結果會有不同。與內聯結結果相比,外聯結的結果應該是會多一點。 內聯結只能選取出同時存在於兩張表中的資料,而外聯結則不是,只要有資料存在某一個表當中,不管另一個表有沒有對應的資料,它都會讀取出來。
外聯結中還可以使用LEFT 和 RIGHT 來指定哪張表是主表。 使用LEFT則左邊的是主表,RIGHT則右邊的是主表。結果完全相同。
例如:SELECT 表1別名.列1 , 表1別名.列2 ,表2別名.列1,  表2別名.列2  FROM 表1 AS 表1別名 LEFT OUTER JOIN 表2 AS 表2別名  ON  表1別名.列名 = 表2別名.列名 ;

交叉聯結:交叉連線不帶WHERE子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。 例如表1有13條記錄,表2有8條,則它們交叉聯結返回記錄有13*8=104條。