首页 > 编程笔记 > MySQL笔记 阅读:2

MySQL中的SELECT查询语句(附带实例)

SELECT 是 MySQL 最重要的查询语句之一,SELECT 语句可能返回一行记录,也可能返回一个结果集。SELECT 语句可以包含多个子句,从而构成复杂的查询语句。

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 个参数来过滤返回的记录行:
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 子句中指定的列的总大小。

相关文章