1. 程式人生 > >MySQL必知必會-5去重,擷取和排序

MySQL必知必會-5去重,擷取和排序

去重

使用DISTINCT,DISTINCT告訴MySQL只返回不同(唯一)的列的行。

如果使用DISTINCT關鍵字,它必須放在列的前面。 不能部分使用DISTINCT,DISTINCT關鍵字應用於所有列而不僅是前置它的列,如果給出兩個列,除非指定的兩個列都不同,否則所有行都將被檢索出來。(如果指定兩個列,那麼這兩個列必須同時不同,約束兩個列唯一)
  1. SELECT DISTINCT vend_id FROM products;
  2. SELECT DISTINCT vend_id, prod_id FROM products; //約束兩個列唯一

擷取

使用LIMIT擷取

LIMIT 3,5 含義從行4開始的5行,也可使用LIMIT 5 OFFSET 3意為從行4開始取5行,就像LIMIT 3,5一樣。

注意MySQL的行序號是從0開始,所以1是指第2行。

  1. SELECT * FROM products LIMIT 3,4;
  2. SELECT * FROM products LIMIT 4 OFFSET 3; //和上面的SQL一樣,注意3和4出現的位置不同。
LIMIT中指定要檢索的行數為檢索的最大行數,如果沒有足夠的行,MySQL將只返回它能返回的那麼多行。

排序檢索資料

使用order by子句,order by子句取一個或多個的名字,據此對輸出進行排序。

  1. SELECT prod_name FROM products ORDER BY prod_name;
通常,ORDER BY子句中使用的列將是顯示所選擇列,實際上並不一定要這樣,用非檢索的列排序資料是完全合法的。例如:
  1. SELECT prod_id FROM products ORDER BY prod_name
    ;
按多個列排序
  1. SELECT prod_name FROM products ORDER BY prod_name, prod_price;
上面的例子,僅在多個行具有相同的prod_name值時才對prod_name進行排序,如果prod_name的所有值都是唯一的,則不會按prod_name排序。 指定排序方向 資料排序不限於升序(A到Z),這只是預設的排序,還可以降序(Z到A),降序必須制定DESC關鍵字。
  1. SELECT
  2. prod_id,
  3. prod_price,
  4. prod_name
  5. FROM
  6. products
  7. ORDER BY
  8. prod_price DESC;
如果需要對多個列,分別使用降序和升序,只需在列的後面使用DESC或ASC(升序)
  1. SELECT
  2. prod_id,
  3. prod_price,
  4. prod_name
  5. FROM
  6. products
  7. ORDER BY
  8. prod_price DESC,
  9. prod_name ASC;
特別注意:在對文字性資料排序,在字典排序中,A與a相同,如果要改變這種排序,用簡單的ORDER BY子句是做不到的。 使用ORDER BY和LIMIT組合,找出列中最高或最低值。
  1. SELECT
  2. prod_price
  3. FROM
  4. products
  5. ORDER BY
  6. prod_price DESC
  7. LIMIT 1;
DESC告訴由貴到便宜檢索,LIMIT 1則告訴只返回一行。 ORDER BY應該保證在FROM子句之後,如果使用LIMIT,必須保證在ORDER BY子句之後。使用子句的順序不對將產生錯誤資訊。