MySQL — 数据查询语言
DQL 全称 Data Query Language。数据查询语言,用来查询数据库中表的记录。
1、基础查询
语法:
select 查询列表(字段、常量、函数、表达式) from 表名;
字段别名:
select 字段1 as '字段1别名', 字段2 as '字段2别名', ... from 表名;
注意:别名可用单或双引号引起来,当别名是一个单词时可省略引号,当别名是多个单词组合且含空格或特殊符号时不能省略,as 可省略。
2、条件查询
语法:
select 字段列表 from 表名 [where 条件列表];
条件分类:
- 条件运算符:大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(=)、不等于(!= 或 <>);
- 逻辑运算符:并且(and)、或(or)、非(not);
- 模糊运算符:
- like 占位符:模糊匹配,_匹配单个字符,%匹配任意个字符;
- between ... and ...:在某个范围之内,包含最小最大值;
- not between ... and ...:不在某个范围之内,包含最小最大值;
- in(...):多选;
- is null:为空;
- is not null:非空。
3、分组查询
语法:
select 字段列表 from 表名 [where 条件列表] group by 分组字段列表 [having 分组后条件列表];
where 与 having 区别:
- 执行时机不同:where 是对分组前的原始表进行过滤,不满足 where 条件不参与分组,having 是对分组后对结果集进行过滤;
- 判断条件不同:where 不能对聚合函数进行判断,having 可以。
注意事项:分组之后,查询的字段一般为聚合函数与分组字段。
4、排序查询
语法:
select 字段列表 from 表名 [order by 字段名1 排序方式, 字段名2 排序方式, ...];
排序方式:升序:asc(默认值,可以不写)、降序:desc。
注意事项:如果是多个字段排序,当第一个字段值相同时,才会根据第二个字段排序。
5、分页查询
语法:
select 字段列表 from 表名 [limit 起始索引, 查询记录数];
注意事项:起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数,若查询第一页,起始索引可省略,简写为 limit 查询记录数。
6、多表查询
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)、多对多、一对一。
一对多
案例:部门与员工的关系。
关系:一个部门对应多个员工,一个员工对应一个部门。
实现:在多的一方建立外键,指向一的一方的主键。多对多
案例:学生与课程的关系。
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择。
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。一对一
案例:用户与用户详情的关系。
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的。
多表查询时需要消除无效的笛卡尔积。笛卡尔积是指在数学中,两个集合:A集合与B集合的所有组合情况。
6.1、连接查询
6.1.1、内连接
查询两表交集部分的数据。
隐式内连接:
select 字段列表 from 表1, 表2 [where 条件列表...];
显示内连接:
select 字段列表 from 表1 [inner] join 表2 on 连接条件 ...;
6.1.2、外连接
左外连接:查询左表(表1)所有数据,以及两表交集部分的数据。
select 字段列表 from 表1 left [outer] join 表2 on 连接条件 ...;
右外连接:查询右表(表2)所有数据,以及两表交集部分的数据。
select 字段列表 from 表1 right [outer] join 表2 on 连接条件 ...;
6.1.3、自连接
当前表与自身的连接查询,自连接必须使用别名。自连接可以是内连接,也可以是外连接。
select 字段列表 from 表1 别名1 [inner|left|right] join 表1 别名2 on 连接条件 ...;
6.1.4、联合查询
将多张表查询的结果合并成一个新的结果集,同时多张表的查询列数及数据类型需保持一致。
union all 直接将全部数据合并在一起,union 会对合并之后的数据去重。
select 字段列表 from 表1 ...
union [all]
select 字段列表 from 表2 ...;
6.2、子查询
SQL 语句中嵌套 select 语句,称为嵌套查询,又称子查询。子查询外部的语句可以是 insert / delete / update / select 的任意一个。
根据子查询结果分为:
- 标量子查询(子查询结果为单个值);
- 列子查询(子查询结果为一列);
- 行子查询(子查询结果为一行);
- 表子查询(子查询结果为多行多列)。
根据子查询位置分为:select 之后、from 之后、where 之后。
select 之后:
select (select B.字段 from 表2 B where B.字段 = A.字段) from 表1 A;
from 之后:
select A.* from (select * from 表名 where 条件列表 ...) A;
where 之后:
select A.* from 表1 A where A.字段 in (select B.字段 from 表2 B);
7、执行顺序
5 select 字段列表
1 from 表名列表
2 where 条件列表
3 group by 分组字段列表
4 having 分组后条件列表
6 order by 排序字段列表
7 limit 分页参数
MySQL — 数据查询语言的更多相关文章
- mysql数据查询语言DQL
DB(database)数据库:存储数据的'仓库',保存了一系列有组织的数据 DBMS(Database Management System)数据库管理系统:用于创建或管理DB SQL(Structu ...
- MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)
五.数据查询语言(DQL) (重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...
- MySQL之数据查询语言(DQL)
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块: SELECT <字段> FROM <表名> WHERE <查询条件> - ...
- MySQL数据查询
数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...
- 两种适用于中小量数据的mysql数据备份
近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...
- 使用Solr索引MySQL数据
环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\s ...
- MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
随机推荐
- 降维处理PCA
要理解什么是降维,书上给出了一个很好但是有点抽象的例子. 说,看电视的时候屏幕上有成百上千万的像素点,那么其实每个画面都是一个上千万维度的数据:但是我们在观看的时候大脑自动把电视里面的场景放在我们所能 ...
- 「Python实用秘技05」在Python中妙用短路机制
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第5期 ...
- Solution -「NOI.AC 省选膜你赛」array
题目 题意简述 维护一个长度为 \(n\) 的序列 \(\{a_n\}\),并给出 \(q\) 个操作: 将下标为 \(x\) 的数修改为 \(y\). 给定 \(l,r,k\),求最大的 \(m ...
- Solution -「SV 2020 Round I」SA
\(\mathcal{Description}\) 求出处 owo. 给定一个长度为 \(n\),仅包含小写字母的字符串 \(s\),问是否存在长度为 \(n\),仅包含小写字母的字符串 \( ...
- 图解AI数学基础 | 概率与统计
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...
- jmeter压测tcp协议接口:java.net.SocketException: Software caused connection abort: socket write error
tcp接口,试压过程中,部分请求报如下错误: java.net.SocketException: Software caused connection abort: socket write erro ...
- [数分笔记]Dedekind切割定理的证明
1.定理内容 Dedekind切割定理:设是实数集的一个切割,则或者有最大数,或者有最小数. 2.证明过程 设是中所有有理数所构成的集合,是中所有有理数所构成的集合 从而构成一个有理数集的切割 有三种 ...
- Spring Boot+RabbitMQ 通过fanout模式实现消息接收(支持消费者多实例部署)
本文章适用的场景:同一条消息可以被多个消费者同时消费.注意:当消费者多实例部署时,会轮询消费消息.网上有大量的的案例展示:P生产一条消息,消费者服务C中建立Q1和Q2两个队列共同消费.但极少的材料展示 ...
- 企业必读:BI数据可视化工具选型
伴随着大数据时代的到来,企业对数据的需求从"IT主导的报表模式"转向"业务主导的自助分析模式",可视化BI工具也随之应运而生.面对如此众多的可视化BI工具,我们 ...
- 【C# 线程】WaitHandle类
理论 Windows的线程同步方式可分为2种,用户模式构造和内核模式构造.内核模式构造:是由Windows系统本身使用,内核对象进行调度协助的.内核对象是系统地址空间中的一个内存块,由系统创建维护. ...