去重
使用DISTINCT,DISTINCT告诉MySQL只返回不同(唯一)的列的行。
如果使用DISTINCT关键字,它必须放在列的前面。
不能部分使用DISTINCT,DISTINCT关键字应用于所有列而不仅是前置它的列,如果给出两个列,除非指定的两个列都不同,否则所有行都将被检索出来。(如果指定两个列,那么这两个列必须同时不同,约束两个列唯一)
SELECT DISTINCT vend_id FROM products;
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行。
SELECT * FROM products LIMIT 3, 4;
SELECT * FROM products LIMIT 4 OFFSET 3; //和上面的SQL一样,注意3和4出现的位置不同。
排序检索数据
使用order by子句,order by子句取一个或多个的名字,据此对输出进行排序。
SELECT prod_name FROM products ORDER BY prod_name;
通常,ORDER BY子句中使用的列将是显示所选择列,实际上并不一定要这样,用非检索的列排序数据是完全合法的。例如:
SELECT prod_id FROM products ORDER BY prod_name;
按多个列排序
SELECT prod_name FROM products ORDER BY prod_name, prod_price;
上面的例子,仅在多个行具有相同的prod_name值时才对prod_name进行排序,如果prod_name的所有值都是唯一的,则不会按prod_name排序。
指定排序方向
数据排序不限于升序(A到Z),这只是默认的排序,还可以降序(Z到A),降序必须制定DESC关键字。
SELECT
prod_id,
prod_price,
prod_name
FROM
products
ORDER BY
prod_price DESC;
如果需要对多个列,分别使用降序和升序,只需在列的后面使用DESC或ASC(升序)
SELECT
prod_id,
prod_price,
prod_name
FROM
products
ORDER BY
prod_price DESC,
prod_name ASC;
特别注意:在对文本性数据排序,在字典排序中,A与a相同,如果要改变这种排序,用简单的ORDER BY子句是做不到的。
使用ORDER BY和LIMIT组合,找出列中最高或最低值。
SELECT
prod_price
FROM
products
ORDER BY
prod_price DESC
LIMIT 1;
DESC告诉由贵到便宜检索,LIMIT 1则告诉只返回一行。
ORDER BY应该保证在FROM子句之后,如果使用LIMIT,必须保证在ORDER BY子句之后。使用子句的顺序不对将产生错误信息。