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数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
随机推荐
- 大地坐标BLH转平面坐标xyh(高斯投影坐标正算) Java版
技术背景 做过位置数据处理的小伙伴基本上都会遇到坐标转换,而基于高斯投影原理的大地坐标转平面坐标就是其中一种坐标转换,坐标转换的目的就是方便后面数据的处理工作,大地坐标转高斯平面坐标常用的有两种,即3 ...
- netty系列之:不用怀疑,netty中的ByteBuf就是比JAVA中的好用
目录 简介 ByteBuf和ByteBuffer的可扩展性 不同的使用方法 性能上的不同 总结 简介 netty作为一个优秀的的NIO框架,被广泛应用于各种服务器和框架中.同样是NIO,netty所依 ...
- 我是如何破解你的WINDOWS密码的 ?(2)
介绍 在这个系类的第一部分中,我们揭示了windows创建和储存密码的机制.我们也涉猎了一点两种加密方法的弱点和破解的方法.在这系列的第二篇也是最后一篇文章中,我会实战用网上免费的工具一步一步的来破解 ...
- 五分钟,手撸一个Spring容器!
大家好,我是老三,Spring是我们最常用的开源框架,经过多年发展,Spring已经发展成枝繁叶茂的大树,让我们难以窥其全貌. 这节,我们回归Spring的本质,五分钟手撸一个Spring容器,揭开S ...
- 打印报表工具,web报表工具对比
1.jasperreport报表 有批量报表打印功能,但一般需要通过专门的编程实现批量报表打印:一些较简单的分片式打印能通过主子表实现:不能自动适应纸张大小:不支持分栏打印:不支持一纸多页打印:不支 ...
- 今儿直白的用盖房子为例,给你讲讲Java建造者模式
摘要:建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 本 ...
- 程序与CPU,内核,寄存器,缓存,RAM,ROM、总线、Cache line缓存行的作用和他们之间的联系?
目录 缓存 什么是缓存 L1.L2.L3 为什么要设置那么多缓存.缓存在cup内还是cup外 MESI协议----主流的处理缓存和主存数据不一样问题 Cache line是什么已经 对编程中数组的影响 ...
- docker:打包node+npm+pm2运行环境镜像
最近公司有一个外包项目需要在不能连外网的情况下部署node项目到甲方公司内部.直接使用node官网的安装包可以获得node运行环境,但像pm2这种工具要离线装就会比较费劲,所以最终选择了使用docke ...
- mapreduce类型对应
public class OrderBean implements WritableComparable<OrderBean> { private Integer order_id; // ...
- Centos6.x安装之后的9件事
Centos6.x安装之后的9件事 这些不是必须都做的,只不过是我个人的习惯,在此记录一下. 1.修改yum源到国内 CentOS系统更换软件安装源 备份你的原镜像文件,以免出错后可以恢复. mv / ...