博客
关于我
MySQL复习day03:DQL数据查询语言完结
阅读量:571 次
发布时间:2019-03-10

本文共 2385 字,大约阅读时间需要 7 分钟。

DQL数据查询语言完结

DQL(Data Query Language,数据查询语言)是用于数据库管理系统中进行数据查询的语言,主要用于从数据库中检索数据。DQL的主要目的是通过SQL语句进行数据的查询操作,返回符合条件的数据。以下将从多个方面详细介绍DQL的相关知识。

SQL99 连接查询语法

SQL99是数据库管理系统中常用的查询语言,支持复杂的连接操作。以下是SQL99中的连接查询语法:

`select 查询列表`
`from 表1 别名`
`【连接类型】join 表2 别名`
`on 连接条件`
`【连接类型】join 表3 别名`
`on 连接条件`
`…`
`【where 筛选条件】`
`【group by 分组】`
`having 筛选条件`
`order by 排序列表`
`limit offset, size`
连接类型:
1. 内连接:`inner`
2. 外连接:`left [outer]`、`right [outer]`、`full [outer]`(MySQL 不支持)
3. 交叉连接:`cross`

外连接

外连接用于查询一个表中存在但另一个表中不存在的数据,其结果相当于两个表的差集和交集。

特点:
1. 外连接的查询结果为主表中的所有记录。如果从表中有匹配的记录,则显示匹配项;否则显示 `null`。
2. 外连接的查询结果 = 内连接结果 + 主表中存在但从表中不存在的记录。
3. 左外连接和右外连接的顺序可实现同样的效果:左外连接中,左边是主表;右外连接中,右边是主表。

交叉连接

交叉连接在数据库管理系统中非常常用,类似于笛卡尔乘积。例如,两个表之间执行交叉连接操作,会生成所有可能的组合结果。

子查询

子查询是一种常见的操作,在其他语句中作为子句使用,称为内查询或子查询。子查询可以多种多样,具体使用场景如下:

  • 标量子查询(单行子查询)
  • 列子查询(多行子查询)
  • 相关子查询(在 `Exists` 关键字后面使用)

子查询的特点:

1. 子查询放在圆括号内,括号内不用添加分号。
2. 子查询一般位于条件的右侧。
3. 标量子查询通常与单行操作符(如 `>`, `<`, `>=`, `<=`, `<>`) 结合使用。
4. 列子查询通常与多行操作符(如 `IN`, `ANY`, `SOME`, `ALL`) 结合使用。
5. 子查询的执行顺序优先于主查询执行。

示例:

select * from family.zhutong where budget > ( # 子查询语句 select budget from family.zhutong where name = 'frog' ) and bonus is not null and variety > 'a';

分页查询

分页查询是一种常用的场景,当需要分批次返回数据时,可以使用分页查询来限制结果的数量。分页的实现方法因数据库而异,但常见的方式是使用 `LIMIT` 关键字。

注意:`LIMIT` 语句必须放在查询语句的最后。

分页查询的具体语法:

select 查询列表 from 表 【join 列别名】 on 条件 【where筛选条件】 【group by分组条件】 【having筛选条件】 【order by排序字段】 limit offset, size;

其中 `offset` 表示从哪一条记录开始返回数据,`size` 表示每页返回的记录数量。例如,以下代码将返回倒数五条记录:

select emp.* from emp order by empno desc limit 5;

联合查询

联合查询(Union)是一种将多个查询结果合并的操作。在执行多个 `SELECT` 语句时,可以使用 `UNION` 将它们的结果合并为一个。需要注意的是,使用 `UNION` 时,查询中的字段必须一致,否则会导致错误。例如,以下等价于两个独立的查询:

select * from emp where year(hiredate) > 1980 or comm is not null;

此外,还需要注意以下内容:

1. 查询列数和数据类型必须一致。
2. 如果希望保留重复的记录,可以使用 `UNION ALL`。

执行顺序

数据库查询的执行顺序通常遵循以下规则:

1. 子查询优先于 `From` 子句内的操作执行。
2. `From` 子句中的表的连接操作优先于 `Where` 和 `Having` 子句中的筛选操作执行。
3. `Where` 子句中的筛选操作优先于 `Group by` 子句中的分组操作执行。
4. `Group by` 子句中的分组操作优先于 `Having` 子句中的筛选操作执行。
5. 最后,`Order by` 子句中的排序操作执行。

MySQL 学习列表

以下是一个基础的MySQL学习列表,您可以逐步完成:

  • 学习基本的 `SELECT` 语句
  • 熟悉 `INSERT`, `UPDATE`, `DELETE` 语句
  • 了解 `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE` 等表操作
  • 掌握 `WHERE` 子句中的逻辑运算符和条件语句
  • 学习 `GROUP BY`, `HAVING`, `ORDER BY` 等聚函数和排序
  • 掌握 `JOIN` 语法(内连接、外连接)
  • 学习 `SUBQUERY`, `IN`, `EXISTS` 等子查询操作
  • 理解 `UNION` 和 `UNION ALL` 的操作
  • 学习 `LIMIT` 语法实现分页
  • 了解 ` transactions` 和 `locks` 概念

致谢

感谢各位朋友的观看。如果觉得内容有用欢迎点赞!😊

转载地址:http://ibcvz.baihongyu.com/

你可能感兴趣的文章
PHP8.1 + ThinkPHP实战指南:高效构建现代化网站的六大技巧
查看>>
PHP8中match新语句的操作方法
查看>>
PHP:第一章——PHP中常量和预定义常量
查看>>
PHP:第一章——PHP中的位运算
查看>>
phpcms
查看>>
phpcms 2008 product.php pagesize参数代码注射漏洞
查看>>
phpcms V9 自定义添加 全局变量{DIY_PATH}方法
查看>>
Redis五种核心数据结构的基本使用与应用场景
查看>>
Redis五种数据结构简介
查看>>
PHPCMS多文件上传和上传数量限制
查看>>
phpEnv的PHP集成环境
查看>>
PHPExcel一些基本设置总结
查看>>
phpexcel中文手册
查看>>
PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
查看>>
phpize及其用法
查看>>
phpMailer发送邮件
查看>>
PHPMailer发送邮件
查看>>
phpmailer发送邮件,可以带附件
查看>>
phpmailer的用法
查看>>
phpMQTT
查看>>