实验5 数据查询

更新于 2026年10月10日 版权声明
实验5 数据查询 图示

数据查询是数据库的核心操作,SQL语言提供了SELECT语句,让其对数据库中的数据进行查询。SELECT语句的主要功能是从数据库中检索行,并将查询结果以表格的形式返回。

【实验目的】

①掌握用SELECT语句进行简单查询。

②掌握用SELECT语句进行集合查询。

③掌握用SELECT语句进行连接查询。

④掌握用SELECT语句进行嵌套查询。

【知识要点】

(1)查询数据的语法格式

SELECT

    [ALL | DISTINCT | DISTINCTROW]

    [HIGH_PRIORITY]

    [STRAIGHT_JOIN]

    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

    [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

    select_expr [, select_expr] ...

    [into_option]

    [FROM table_references

      [PARTITION partition_list]]

    [WHERE where_condition]

    [GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]

    [HAVING where_condition]

    [WINDOW window_name AS (window_spec)

        [, window_name AS (window_spec)] ...]

    [ORDER BY {col_name | expr | position}

      [ASC | DESC], ... [WITH ROLLUP]]

    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

    [into_option]

    [FOR {UPDATE | SHARE}

        [OF tbl_name [, tbl_name] ...]

        [NOWAIT | SKIP LOCKED]

      | LOCK IN SHARE MODE]

    [into_option]

into_option: {

    INTO OUTFILE 'file_name'

        [CHARACTER SET charset_name]

        export_options

  | INTO DUMPFILE 'file_name'

  | INTO var_name [, var_name] ...

    }

table_references:

    escaped_table_reference [, escaped_table_reference] ...

escaped_table_reference: {

    table_reference

  | {OJ table_reference}

}

table_reference: {

    table_factor

  | joined_table

}

table_factor: {

    tbl_name [PARTITION (partition_names)]

        [[AS] alias] [index_hint_list]

  | [LATERAL] table_subquery [AS] alias [(col_list)]

  | (table_references)

}

joined_table: {

    table_reference {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_factor [join_specification]

  | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification

  | table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor

}

join_specification: {

    ON search_condition

  | USING (join_column_list)(https://www.daowen.com)

}

join_column_list:

    column_name [, column_name] ...

index_hint_list:

    index_hint [, index_hint] ...

index_hint: {

    USE {INDEX|KEY}

      [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])

  | {IGNORE|FORCE} {INDEX|KEY}

      [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)

}

index_list:

    index_name [, index_name] ...

说明:

SELECT用于检索从一个或多个表中选择的行,可以包括UNION语句和子查询。

SELECT语句中常用的子句:

①每个select_expr表示要检索的列,必须至少有一个select_expr。

②table_references表示要从中检索行的一个或多个表。

一些常用连接示例如下:

◇ SELECT * FROM table1, table2;

其中table1和table2做乘法运算。

◇ SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;

其中table1和table2做内连接,也称为自然连接。

◇ SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;

其中table1和table2做左外连接。

◇ SELECT * FROM table1 LEFT JOIN table2 USING (id);

其中table1和table2做左外连接。

◇ SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id LEFT JOIN table3 ON table2.id = table3.id;

其中table1和table2做左外连接后,再与table3做左外连接。

◇ SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;

其中table1和table2做右外连接。

◇ SELECT * FROM table1 CROSS JOIN table2;

其中table1和table2做交叉连接,即乘法运算。

③where_condition是一个表达式,对于要选择的每行,其计算结果为true。如果没有该子句,则选择所有行。在where_condition表达式中,可以使用MySQL支持的任何函数和运算符,但聚合函数除外。

④SELECT 还可用于检索在不引用任何表的情况下计算行。

⑤如果有GROUP BY子句,则将查询结果按group_by_expression的值进行分组,属性列值相等的元组为一组,每个组产生的结果为表中的一条记录。通常在每组中使用聚合函数,分组的附加条件用HAVING短语给出,只有满足指定条件的组才予以输出。

⑥如果有ORDER BY子句,查询结果则要按order_expression的值的升序或降序排序。

⑦LIMIT子句限制查询结果的行数。

语法格式为:[LIMIT {[offset,] row_count | row_count OFFSET offset}]

offset指定查询结果的第一行的偏移量,默认为0,表示查询结果的第1行,row_count指定查询结果的行数。

⑧into_option:允许将查询结果存储在变量中或写入文件。

SELECT ... INTO var_name 选择列值并将其存储到变量中。

SELECT ... INTO OUTFILE将选定的行写入文件,可以指定列和行终止符以生成特定的输出格式,也可用LOAD DATA …INFILE语句恢复数据。

SELECT ... INTO DUMPFILE将单行写入文件而不设置任何格式。

⑨聚合函数对一组值进行计算,并返回单个值。为了进一步方便用户,增强检索功能,SQL提供了许多聚合函数,常用的聚合函数功能如下:

• COUNT([ALL | DISTINCT]*|〈列名〉):统计元组个数或一列中值的个数。

• SUM([ALL | DISTINCT]〈列名〉):计算一列值的总和(此列必须是数值型),空值将被忽略。

• AVG([ALL | DISTINCT]〈列名〉):计算一列值的平均值(此列必须是数值型),空值将被忽略。

• MAX([ALL | DISTINCT]〈列名〉):求一列值中的最大值,空值将被忽略。

• MIN([ALL | DISTINCT]〈列名〉):求一列值中的最小值,空值将被忽略。

聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。聚合函数只能在以下位置作为表达式使用:

• SELECT 语句的选择列表(子查询或外部查询)。

• HAVING 子句。

⑩常用的查询条件,使用SELECT语句中的WHERE子句,可以选择满足条件的全部或部分元组。WHERE子句可以使用的条件表达式见表5.1。

表5.1 常用的查询条件

图示

(2)查询分类

查询可以分为简单查询、集合查询、连接查询和嵌套查询。

①简单查询是指在数据库中仅涉及一个表的查询。

②集合查询是指多个SELECT语句的结果可进行集合操作。MySQL中只支持集合并(UNION)操作,不支持集合交(INTERSECT)和差(EXCEPT)操作。

集合并语句格式:

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]

③连接查询是指一个查询同时涉及两个以上的表,是关系数据库中最主要的查询。主要包括等值连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。

连接查询可由WHERE子句中的连接条件实现,其格式通常为:

SELECT select_expr1,select_expr2 …
FROM table1,table2…
WHERE where_condition1 AND where_condition2 …;

④在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。SQL语言允许多层嵌套查询,通常可以使用谓词IN或NOT IN、量化比较谓词θ ANY或θ ALL以及EXISTS或NOT EXISTS进行嵌套查询。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)