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子句之后。使用子句的顺序不对将产生错误信息。



你可能感兴趣的:(MySQL)