select的語法
SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr, ... [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name'] [FROM table_references [WHERE where_definition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_definition] [ORDER BY {col_name | expr | position} [ASC | DESC] , ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [FOR UPDATE | LOCK IN SHARE MODE]]
SELECT用於恢復從一個或多個表中選擇的行,並可以加入UNION語句和子查詢。
每個select_expr都指示一個您想要恢復的列, table_references指示行從哪個表或哪些表中被恢復。
簡單查詢
SELECT columna columnb FROM mytable;
ORDER BY查詢
SELECT college, region, seed FROM tournament ORDER BY region, seed; SELECT college, region AS r, seed AS s FROM tournament ORDER BY r, s; SELECT college, region, seed FROM tournament ORDER BY 2, 3; --要以相反的順序進行分類,應把DESC(降序)關鍵字添加到ORDER BY子句中的列名稱中。默認值為升序;該值可以使用ASC關鍵詞明確地指定。 SELECT a, COUNT(b) FROM test_table ORDER BY a DESC;
GROUP BY查詢
SELECT a, COUNT(b) FROM test_table GROUP BY a DESC; SELECT COUNT(col1) AS col2 FROM t GROUP BY col2 HAVING col2 = 2; -- HAVING不能用於應被用於WHERE子句的條目,不能編寫如下語句: SELECT col_name FROM tbl_name HAVING col_name > 0; --而應該這么編寫 SELECT col_name FROM tbl_name WHERE col_name > 0; --HAVING子句可以引用總計函數,而WHERE子句不能引用: SELECT user, MAX(salary) FROM users GROUP BY user HAVING MAX(salary)>10;
LIMIT查詢
SELECT * FROM tbl LIMIT 10; # Retrieve rows 0-9; SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15; --如果要恢復從某個偏移量到結果集合的末端之間的所有的行,您可以對第二個參數是使用比較大的數。 --以下語句可以恢復從第96行到最后的所有行: SELECT * FROM tbl LIMIT 95,18446744073709551615;
SELECT...INTO OUTFILE
SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被選擇的行寫入一個文件中。該文件被創建到服務器主機上,因此您必須擁有FILE權限,才能使用此語法。file_name不能是一個原有的文件。
SELECT...INTO OUTFILE語句的主要作用是讓您可以非常快速地把一個表轉儲到服務器機器上。如果您想要在服務器主機之外的部分客戶主機上創建結果文件,您不能使用SELECT...INTO OUTFILE。在這種情況下,您應該在客戶主機上使用比如“mysql –e "SELECT ..." > file_name”的命令,來生成文件。
SELECT...INTO OUTFILE是LOAD DATA INFILE的補語;用於語句的exort_options部分的語法包括部分FIELDS和LINES子句,這些子句與LOAD DATA INFILE語句同時使用。
在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用
SELECT a,b,a+b INTO OUTFILE '/tmp/result.text' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;
如果您使用INTO DUMPFILE代替INTO OUTFILE,則MySQL只把一行寫入到文件中,不對任何列或行進行終止,也不執行任何轉義處理。如果您想要把一個BLOB值存儲到文件中,則這個語句是有用的。
UNION
UNION用於把來自許多SELECT語句的結果組合到一個結果集合中,語法如下:
SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]
列於每個SELECT語句的對應位置的被選擇的列應具有相同的類型。(例如,被第一個語句選擇的第一列應和被其它語句選擇的第一列具有相同的類型。)在第一個SELECT語句中被使用的列名稱也被用於結果的列名稱。
如果您對UNION不使用關鍵詞ALL,則所有返回的行都是唯一的,如同您已經對整個結果集合使用了DISTINCT。如果您指定了ALL,您會從所有用過的SELECT語句中得到所有匹配的行。
您可以在同一查詢中混合UNION ALL和UNION DISTINCT。被混合的UNION類型按照這樣的方式對待,即DISTICT共用體覆蓋位於其左邊的所有ALL共用體。DISTINCT共用體可以使用UNION DISTINCT明確地生成,或使用UNION(后面不加DISTINCT或ALL關鍵詞)隱含地生成。
簡單例子
(SELECT a FROM tbl_name WHERE a=10 AND B=1) UNION (SELECT a FROM tbl_name WHERE a=11 AND B=2) ORDER BY a LIMIT 10;
ALL, DISTINCT和DISTINCTROW
ALL, DISTINCT和DISTINCTROW選項指定是否重復行應被返回。如果這些選項沒有被給定,則默認值為ALL(所有的匹配行被返回)。DISTINCT和DISTINCTROW是同義詞,用於指定結果集合中的重復行應被刪除。
SELECT DISTINCT a FROM table_name; SELECT COUNT(DISTINCT a) FROM table_name;
轉自http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select