SQL数据查询语言

基本的select 使用

select 可以从一个或多个表中选取一特定的行和列,并将结果存放到临时的表中。

SELECT
[ALL | DISTINCT ]
select_expr, ...
[FROM table1 [ , table2] …] /*FROM子句*/
[WHERE where_definition] /*WHERE子句*/
[GROUP BY {col_name | expr | position} [ASC | DESC], ...] /*GROUP BY子句*/
[HAVING where_definition] /*HAVING子句*/
[ORDER BY {col_name | expr | position}[ASC | DESC] , ...] /*ORDER BY子句*/
[LIMIT {[offset,] row_count}] /*LIMIT子句*/

许多子句以及它们的组合都可以用于select 语句中:

  • from :指定从哪些表中获取数据

    from 子句在select 语句中是可选项,它出现在语句的表达式之后,而表达式是在select 关键字后面出现。from 子句指定语句要处理的表。

    • 非限定表名

      from <table-name>

    • 限定的表名

      from <database-name>.<table-name>

    • 表的别名

      在SQL语句里,在from 子句里引用的表可以给定一个临时的名称,该名称叫做表的别名。

  • distinct :消除重复的记录行

    如果查询的结果里包含重复的记录,该重复记录要被删除以生成每行都是唯一结果集。为了达到这个目的,可在select 关键字后添加distinct 关键字。

    select distinct Hobby from Student_info;

    在指定的列里,distinct 将所有的NULL 值当作相同的值。

  • where :只返回满足特定条件(也叫过滤器)的记录行

    单关系查询SELECT SName FROM Student_Info;

    多关系查询

    SELECT SName, MName 
    FROM Student_Info S, Major_Info M(表的别名)
    where S.Major = M.MID;(查询条件)
  • order by :按照表达式列表排序记录

  • limit :返回特定部分的数据,而不是所有的结果集

附加基本运算

更名运算

为查询结果重新取属性名称

select old-name as new-name from ...

示例:从学生信息表中查询学生兴趣爱好,并将查询结果的属性命名为“兴趣”。

select Hobby as "兴趣" from Student_info;

字符串运算(查询通配符)

关键词like 可以看作谓词,用以进行字符串的匹配,格式如下:

[not]like '<匹配串>' [escape '<换码字符>' ]

表示查找指定属性列的值与匹配串相匹配的元组。匹配串可以是一个完整的字符串,也可以含有通配符“%”和“-”

匹配串设置方式是:

  • 通配字符百分号%:表示可以与任意长的字符匹配。

    例如a%b表示以a开头,以b 结尾的任意长度的字符串。像acb ,affrrd,ab等。

  • 通配字符下划线_:表示可以与单个的任意字符相配。

    例如a_b表示以a开头,以b 结尾的长度为3的任意字符串。像acb,afb ,abb等。

示例:从课程信息表中查询课程名含有“软件”的所有课程名称。

其他运算符

MySQL支持许多不同类型的运算符,这依赖于操作数的数据类型,或操作数与运算符处理的值的数据类型。运算、比较、逻辑

示例:从课程信息表中查询学时大于40,学分大于2学分的课程名称

示例:从学生信息表中查询出生日期在1990至2022年的所有学生信息

使用order by

如果有必要让输出记录按某一特定的顺序返回,可以使用order by 子句以显示如何排序结果集。

select CName from Course_Info order by CName;

可以在order by 表达式后使用ascdesc 来明确指定记录按升序或降序排列

还可以用多个表达式同时排序,每个表达式有自己的排列顺序。

使用limit

当一个查询返回许多记录行时,有必要通过增加limit 子句来限定只显示部分记录。

limit 子句可以采用下一个或两个参数:

  • limit row_count

  • limit skip_count, row_count

示例:查询课程信息表中前3个课程名称, 以及第3-5个课程名称

它常见的用处是获取包含某个特定列的最小或最大值的行

Last updated