数据库系统原理
  • 数据库系统原理
  • 引言
    • 数据库系统概述
  • 关系模型介绍
    • 关系数据库结构
    • 数据库模式
    • 关系代数
      • 选择运算
      • 投影运算
      • 笛卡尔运算
      • 连接运算
      • 集合运算
      • 其他运算
  • SQL介绍
    • SQL语言分类
    • SQL数据类型
    • SQL数据库操作
    • SQL数据表操作
    • SQL数据操纵语言
    • SQL数据查询语言
    • 集合运算
    • 聚集函数
  • 中级SQL
    • 连接查询
    • 内连接
    • 外连接
    • 交叉连接和自连接
    • 视图
    • 完整性约束
    • SQL用户和授权
  • 高级SQL
    • 函数
    • 存储过程
    • 触发器
  • ER模式数据库设计
    • 数据库设计过程概览
    • 需求分析
    • 实体-联系模型
      • 复杂属性
      • 映射基数和弱实体集
    • 将E-R图转换为关系模式
    • E-R模型设计
  • 关系数据库设计
    • 数据库设计规范化
    • 函数依赖理论
    • 关系范式
  • 半结构化数据
    • 半结构化数据
  • 应用程序开发
    • ADO.NET访问数据库技术
    • 断开模式数据查询
    • 连接模式数据更新
  • 数据存储结构
    • 磁盘
    • 文件的存储
    • 文件的逻辑结构
    • 文件组织
  • 索引
    • 索引基本概念
    • B树索引
    • B+树索引
    • MySQL索引的基本语法
    • 联合索引
  • 查询处理
    • 查询处理概述
  • 查询优化
    • 查询优化概述
    • 查询树的启发式优化(代数优化算法)
  • 事务
    • 事务的概念
    • 事务的特性
    • MySQL事务处理
    • 可串行化
  • 并发控制
    • 并发控制概述
    • 封锁
    • 两阶段封锁协议封锁
    • 多粒度封锁
    • 活锁和死锁
    • 基于时间戳排序的并发控制
    • 乐观控制法
  • 恢复系统
    • 数据库恢复概述
    • 数据库恢复的实现技术
    • 基于检查点的数据库恢复
Powered by GitBook
On this page
  • 基本的select 使用
  • 附加基本运算
  • 更名运算
  • 字符串运算(查询通配符)
  • 其他运算符
  • 使用order by
  • 使用limit
  1. SQL介绍

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等。

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

select CName from Course_info 
where CName like '%软件%'

其他运算符

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

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

SELECT CName
FROM Course_Info
WHERE CTime> 40 AND CScore > 2

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

SELECT * FROM Student_Info
WHERE Birthday between '1990-01-01' AND '2022-12-31'

使用order by

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

select CName from Course_Info order by CName;

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

SELECT CName
FROM Course_Info
ORDER BY CName DESC;

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

SELECT CName, CScore
FROM Course_Info
ORDER BY CName DESC, CScore ASC;

使用limit

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

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

  • limit row_count

  • limit skip_count, row_count

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

SELECT CName FROM Course_Info ORDER BY CName LIMIT 3;
SELECT CName FROM Course_Info ORDER BY CName LIMIT 2,3;(第一第二行被skip)

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

PreviousSQL数据操纵语言Next集合运算

Last updated 4 months ago