数据库的查询
一、语法格式
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_reference [,table_reference]...] /*FROM 子句*/
[WHERE where_definition] /*WHERE 子句*/
[GROUP BY {col_name|expr|position} [ASC|DESC], ... [WITH ROLLUP]} /*GROUP BY 子句*/
[HAVING where_definition] /*HAVING 子句*/
[ORDER BY {col_name|expr|position} [ASC|DESC],...] /*ORDER BY子句*/
[LIMIT {[offset,] row_count|row_count OFFSET offset}] /*LIMIT 子句*/
说明:
可见,最简单的SELECT语句就是SELECT select_expr。可进行任何MySQL支持的运算,例如,SELECT 1+1,它将返回2
选项解释:
ALL|DISTINCT|DISTINCTROW:这几个选项指定是否重复行应该被返回。若没有给定,则默认值为ALL(所有匹配行被返回)。DISTINCT和DISTINCTROW是同义词,用于消除结果集合中的重复行。
HIGH_PRIORITY,STTAIGHT_JOIN和以SQL_为开头的选项都是MySQL相对于标准SQL的扩展,一般可不用.
1、 HIGH_PRIORITY:给予SELECT更高的优先权,使查询立刻执行,加快查询速度
2、 STRAIGHT_JOIN:用于促使MySQL优化器把表联合在一起,加快查询速度
3、SQL_SMALL_RESULT:可以于GROUP BY或DISTINCT同时使用,来告知MySQL优化器结果集合是较小的。在此情况下,MySQL使用快速临时表来存储生成的表,不使用分类。
4、SQL_BUFFER_RESULT:促使结果被放入一个临时表中。这可以帮助MySQL提前解开表锁定,在需要花费较长时间的情况下,也可以帮助把结果集合发送到客户端中。
5、SQL_BIG_RESULT:可以与GROUP BY 或 DISTINCT 同时使用,来告知MySQL优化器结果集合有很多行。在这种情况下,MySQL会优先进行分类,不优先使用临时表。
6、SQL_CACHE:告知MySQL把查询结果存储在查询缓存中。对于使用UNION的查询或子查询,本选项会影响查询中的所有SELECT。
7、SQL_NO_CACHE:告知MySQL不要把查询结果存储在查询缓存中。
8、SQL_CALC_FOUND_ROWS:告知MySQL计算有多少行应位于结果集合中,不考虑任何LIMIT子句。
9、SELECT...INTO OUTFILE ‘file_name':这个语句可以将表中的行导出到一个文件中。
注意:所有被使用的子句必须按语法说明中显示的顺序严格的排序。
二、选择列
SELECT语句中的select_expr用来指定需要查询的列
1、选择指定的列
用SELECT语句选择一个表中的某些列,各列名之间要以逗号分隔。
例:
USE XSCJ
SELECT 姓名,专业名,总学分
FROM XS;
2、定义列别名
当希望查询结果使用自己所选择的列标题时,可以在列名之后使用AS子句来更改查询结果的列别名
SELECT column_name [AS] column_alias
例:
SELECT 学号 AS number,姓名 AS name,总学分 AS mark
FROM XS
WHERE 专业名='计算机';
特别注意,当自定义的列标题中含有空格时,必须使用引号将标题括起来,例如:
SELECT 学号 AS 'Student Number',姓名 AS 'Student Name',总学分 AS mark
FROM XS
WHERE 专业名='计算机'
3、替换查询结果中的数据
需要使用查询中的CASE表达式
CASE
WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
。。。。。。
ELSE 表达式
END
例:
SELECT 学号,姓名
CASE
WHEN 总学分 IS NULL THEN ‘尚未选课'
WHEN 总学分 <50 THEN '不及格'
WHEN 总学分 >=50 and 总学分<=52 THEN '合格'
ELSE '优秀'
END AS 等级
FROM XS
WHERE 专业名='计算机';
4、计算列值