SQL的複習與總結

檢索數據

關鍵字:

  SELECT  DISTINCT  LIMIT  OFFSET  FROM

  SELECT與FROM用於基礎的檢索,基本語法爲:sql

    SELECT  column_name,column_name,column_name...column_name FROM  table_name;

  注:默認不排序;sql不區分大小寫,可是建議SQL關鍵字使用大寫,本文遵照此規則;建議每一個SQL寫完後跟上「;」,本文遵照此規則。數據庫

  檢索全部列:函數

SELECT * FROM table_name;

  注:*會默認返回全部列的內容,不建議使用*,由於會檢索全部內容形成沒必要要的性能浪費。性能

  檢索不一樣值:spa

SELECT DISTINCT column_name,column_name...column_name FROM table_name;

  注:DISTINCT關鍵字做用於全部列,既對全部檢索的列名都進行排它。code

  限制結果:blog

SELECT column_name FROM table_name LIMIT x;

SELECT column_name FROM table_name LIMIT x OFFSET y;

  注:LIMIT表示檢索多少行,OFFSET表示從第幾行數據開始(第一行數據的下標爲0),x與y都是數字(int)排序


排序檢索數據

關鍵字:

  ORDER BY

  ORDER BY的基本用法:ci

SELECT column_name FROM table_name ORDER BY column_name;

  注:數據庫自己的查詢順序是無心義的(雖然大部分會按照默認順序排列,可是隨着數據的刪除等操做,會致使順序最終無心義,因此就默認爲無心義的)字符串

    子句:由SQL的關鍵字與對應的數據組成。例如SELECT子句與FROM子句。

    ORDER BY子句的位置應該爲SELECT的最後(除正序、倒序關鍵字外)

    ORDER BY也能夠對非選擇列(不是SELECT子句檢索的列)進行排序。

  進行多個列檢索時:

SELECT column_name FROM table_name ORDER BY column1_name, column2_name;

  注:僅當column1_name一致時纔會對column2_name進行排序,若是column1_name都是惟一的至關於僅對column1_name排序。

  升降序檢索:

SELECT column_name FROM table_name ORDER BY column_name DESC/ASC, column2_name;

  注:降序:DESC  升序:ASC  默認就是升序的。

    升降序關鍵字僅影響其前面的列。


 

過濾數據

關鍵字:

  where

  操做符:=   !=  >=  <=  >  <  BETWEEN(AND)  IS NULL

  僅對單個值過濾

SELECT column_name FROM table_name WHERE column_name OPERATION condition;

  注:condition什麼時候使用引號呢?  僅限限定字符串時才須要使用引號,通常使用單引號便可。

    BETWEEN  condition1  AND condition2  在限定範圍時,該關鍵字包含限定的兩個條件。


 

高級數據過濾

關鍵字:

  WHERE  AND  OR  IN  NOT

  多個限定條件的過濾:

SELECT column_name FROM table_name WHERE () AND/OR ();

  注:()表示限定的條件。

    AND要求兩個條件都符合。

    OR要求二者符合其一便可,多數DBMS在OR知足條件1時就不在計算第二個條件了。

    AND與OR會有默認的求值順序,即AND操做符優於OR操做符,當過濾條件>=3個的時候就要注意操做符順序了,可使用()來強制要求順序,好習慣就是忽略默認順序,優先使用()。

  IN操做符的用法:

SELECT column_name FROM table_name WHERE column_name IN (condition1, confition2, ..., conditionN);

  IN操做符與OR的做用是相同的,可是具備如下優勢:

    1.語法更加直觀清晰。

    2.求值順序更加容易管理。

    3.IN操做符比一組OR操做順序快。

    4.IN能夠包含其餘SELECT語句(後面同步)。

  NOT操做符的用法:

SELECT column_name FROM table_name WHERE NOT ();

  NOT僅否認跟在其後的條件。NOT與IN聯合使用時會更有優點。


 

用通配符進行過濾

關鍵字:

  LIKE  %

概念:

  通配符:用來匹配值得一部分的特殊字符。

  搜索模式:由字面值和通配符或二者組合構成的搜索條件。

  注:使用通配符必須配合LIKE操做符。

  百分號(%)通配符:

SELECT column_name FROM table_name WHERE column_name LIKE 'String%'

  注:上面的語句將檢索column_name以String內容開頭的數據。

    ‘%String’:  匹配以String內容結尾的數據

    '%String%':  匹配包含String內容的數據

    'String%String'  匹配以String內容開始,以String結尾內容的數據

    %匹配0、1和多個字符。且不能匹配到NULL。

  下劃線(_)通配符:

  注:下劃線與%的做用相同,可是僅匹配單個字符。

  通配符使用注意事項:

    1.通配符使用要適度。

    2.儘可能不要在搜索的開頭使用通配符。

    3.注意通配符的位置。


 拼接字段與計算字段

拼接字段與計算字段都是將多個列的數據進行組合查詢。

關鍵字:

  Concat(col, ...)  AS  + -  * /

SELECT Concat(city_name, '(', country_name, ')') AS city_country FROM area ORDER BY city_name

  注:由於拼接字段拼接後沒法被客戶端直接引用,因此使用AS關鍵字(別名,別名儘可能與列名不一樣),方便客戶端引用。

SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderItems WHERE order_num = 100

  注:計算字段有四個:+  -  *  /


 

函數的使用

  因爲不一樣的數據庫中對函數的支持不一樣,因此具體的函數能夠再使用的時候去查詢,如下以MySQL爲準

函數:

  提取字符串的組成:SUBSTRING()

  類型轉換:CONVERT()

  當前日期:CURDATE()

  如下爲統計函數

  獲取某列的平均值:AVG()

  獲取某列的行數:COUNT()

  獲取某列最大值:MAX()

  獲取某列最小值:MIN()

  獲取某列值之和:SUM()

注:COUNT(ROW)與COUNT(*) *是會計算庫中全部的數據,ROW只會計算有值的數據(會忽略爲null)

使用統計時,使用DISTINCT時,會排除不一樣的值,COUNT(DISTINCT ROW)排除ROW中有相同的值。


 

分組數據

關鍵字:

  GROUP BY  HAVING

相關文章
相關標籤/搜索