MySQL中的SELECT查询语句(附带实例)
SELECT 是 MySQL 最重要的查询语句之一,SELECT 语句可能返回一行记录,也可能返回一个结果集。SELECT 语句可以包含多个子句,从而构成复杂的查询语句。
SELECT常用的基本子句有以下几个。
TOP 用于指定从查询结果集返回指定数目的行,示例如下:
表源在 FROM 子句中的顺序不影响返回的结果集。
例如,FROM 子句中出现两个相同的表名 student,这时候就需要使用相关别名来区分它们。此时,可以为表源使用别名,示例如下:
示例如下:
示例如下:
示例如下:
由于 HAVING 子句是在行分组后被处理,所以可以在 HAVING 子句的表达式中使用聚合函数等。
HAVING 通常在 GROUP BY 子句中使用,在 HAVING 子句中不能使用 text、image 和 ntext 数据类型。
执行任何分组操作之前,不满足 WHERE 子句中条件的行将被删除。执行分组之后,不满足 HAVING 子句中条件的行将被删除。如果组合列包含 NULL 值,则所有的 NULL 值都将被视为相等,并会置入一个组中。
ORDER BY 有两组参数,ASC 参数指定按升序,从最低值到最高值对指定列中的值进行排序;DESC 参数指定按降序,从最高值到最低值对指定列中的值进行排序,示例如下:
ORDER BY 子句中的列数没有限制,但是排序操作所需的中间工作表的行大小被限制为 8060 个字节,这限制了在 ORDER BY 子句中指定的列的总大小。
SELECT常用的基本子句有以下几个。
SELECT子句
SELECT 子句与其他子句(至少包含 FROM 子句)组成一个查询语句,用于筛选需要输出的列或者表达式,最多可以返回 4096列,列名(或表达式)之间用逗号分隔。1) 返回指定的列
例如,从 student 表中仅返回 stu_no、stu_name 列的结果,代码如下:SELECT stu_no, stu_name FROM student
2) 使用通配符返回所有的列
例如,从 student 表中返回所有的列,代码如下:SELECT * FROM student
3) 使用别名
返回的列可以使用别名,代码如下:SELECT stu_no AS 学号,stu_name AS学生姓名 FROM student
4) 参数
可以选用以下 3 个参数来过滤返回的记录行:- ALL 用于指定在结果集中返回所有行,因此可以包含重复行。
- DISTINCT 用于指定在结果集中删除重复的数据,对于重复的记录行,返回的结果只能包含唯一行。注意,由于 NULL 不能进行相互比较,所以对 DISTINCT 来说,NULL 是相等的。ALL 和 DISTINCT 只能任选其一,ALL 是默认值。
TOP 用于指定从查询结果集返回指定数目的行,示例如下:
SELECT TOP 10 FROM student
FROM子句
FROM 子句用于指定 SELECT 语句中使用的表源。1) 表源
表源可以是一个或多个表、视图、表变量、派生表、链接表等,一个 SELECT 语句中最多可以使用 256 个表源。如果引用了太多的表源,查询性能会受到影响。表源在 FROM 子句中的顺序不影响返回的结果集。
2) 别名
如果多次引用同一个表源,此时将出现重复的名称,MySQL 会报错。例如,FROM 子句中出现两个相同的表名 student,这时候就需要使用相关别名来区分它们。此时,可以为表源使用别名,示例如下:
SELECT * FROM student,student AS stu
WHERE子句
WHERE 子句用于指定行的搜索条件,从而限制 SELECT 语句返回的行数。搜索条件可以是 AND、OR 和 NOT 的一个或多个谓词的组合,可以使用括号来指定其组合的顺序。示例如下:
SELECT * FROM student WHERE (stu_sex= '男'OR stu_politicalstatus ='预备党员') AND stu_speciality='软件技术'其中,AND 用于组合两个条件,并在两个条件都为 TRUE 时取值为 TRUE;OR 用于组合两个条件,并在任何一个条件为 TRUE 时取值为 TRUE;NOT 对谓词指定的布尔表达式求反;谓词是指返回 TRUE、FALSE 或 UNKNOWN 的表达式。
GROUP BY子句
GROUP BY 子句用于将一个或多个列(或表达式)按照某一组选定行进行组合,然后针对每一组返回一行。示例如下:
SELECT stu_no,stu_name,stu_sex,stu_politicalstatus FROM student GROUP BY stu_politicalstatus
HAVING子句
HAVING 子句用于指定组或聚合的搜索条件,它只能与 SELECT 语句一起使用。示例如下:
SELECT stu_sex,stu_politicalstatus,stu_speciality,COUNT(*) AS人数 from student GROUP BY stu_speciality,stu_politicalstatus HAVING COUNT(*)>1从上例中可以看出,GROUP BY 子句对数据进行分组,最后 HAVING 子句再次对分组后的结果进行筛选(筛选条件为:COUNT(*)>1,即分组后的结果中行数大于 1 的组)。
由于 HAVING 子句是在行分组后被处理,所以可以在 HAVING 子句的表达式中使用聚合函数等。
HAVING 通常在 GROUP BY 子句中使用,在 HAVING 子句中不能使用 text、image 和 ntext 数据类型。
执行任何分组操作之前,不满足 WHERE 子句中条件的行将被删除。执行分组之后,不满足 HAVING 子句中条件的行将被删除。如果组合列包含 NULL 值,则所有的 NULL 值都将被视为相等,并会置入一个组中。
ORDER BY子句
ORDER BY 子句用于指定在 SELECT 语句返回的列中所使用的排序顺序。在处理 SELECT 语句时,ORDER BY 子句是被最后处理的子句,因此可以在 ORDER BY 子句中引用 SELECT 子句中的列别名。ORDER BY 有两组参数,ASC 参数指定按升序,从最低值到最高值对指定列中的值进行排序;DESC 参数指定按降序,从最高值到最低值对指定列中的值进行排序,示例如下:
SELECT * from student ORDER BY stu_birthday DESC对于每一个列的排序,ASC 与 DESC 两者只能任选其一。ASC 是默认值。空值(NULL)被视为最低的可能值。
ORDER BY 子句中的列数没有限制,但是排序操作所需的中间工作表的行大小被限制为 8060 个字节,这限制了在 ORDER BY 子句中指定的列的总大小。