DQL 全称 Data Query Language。数据查询语言,用来查询数据库中表的记录。

1、基础查询

语法:

select 查询列表(字段、常量、函数、表达式) from 表名;

字段别名:

select 字段1 as '字段1别名', 字段2 as '字段2别名', ... from 表名;

注意:别名可用单或双引号引起来,当别名是一个单词时可省略引号,当别名是多个单词组合且含空格或特殊符号时不能省略,as 可省略。

2、条件查询

语法:

select 字段列表 from 表名 [where 条件列表];

条件分类:

  1. 条件运算符:大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(=)、不等于(!= 或 <>);
  2. 逻辑运算符:并且(and)、或(or)、非(not);
  3. 模糊运算符:
    1. like 占位符:模糊匹配,_匹配单个字符,%匹配任意个字符;
    2. between ... and ...:在某个范围之内,包含最小最大值;
    3. not between ... and ...:不在某个范围之内,包含最小最大值;
    4. in(...):多选;
    5. is null:为空;
    6. is not null:非空。

3、分组查询

语法:

select 字段列表 from 表名 [where 条件列表] group by 分组字段列表 [having 分组后条件列表];

where 与 having 区别:

  1. 执行时机不同:where 是对分组前的原始表进行过滤,不满足 where 条件不参与分组,having 是对分组后对结果集进行过滤;
  2. 判断条件不同: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 的任意一个。

根据子查询结果分为:

  1. 标量子查询(子查询结果为单个值);
  2. 列子查询(子查询结果为一列);
  3. 行子查询(子查询结果为一行);
  4. 表子查询(子查询结果为多行多列)。

根据子查询位置分为: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 — 数据查询语言的更多相关文章

  1. mysql数据查询语言DQL

    DB(database)数据库:存储数据的'仓库',保存了一系列有组织的数据 DBMS(Database Management System)数据库管理系统:用于创建或管理DB SQL(Structu ...

  2. MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)

    五.数据查询语言(DQL) (重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...

  3. MySQL之数据查询语言(DQL)

    数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块: SELECT <字段> FROM <表名> WHERE <查询条件> - ...

  4. MySQL数据查询

    数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...

  5. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  6. Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

    概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...

  7. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  8. 使用Solr索引MySQL数据

    环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\s ...

  9. MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

随机推荐

  1. 聚类算法在 D2C 布局中的应用

    1.摘要 聚类是统计数据分析的一门技术,在许多领域受到广泛的应用,包括机器学习.数据挖掘.图像分析等等.聚类就是把相似的对象分成不同的组别或者更多的子集,从而让每个子集的成员对象都有相似的一些属性. ...

  2. Solution -「LGR-087」「洛谷 P6860」象棋与马

    \(\mathcal{Description}\)   Link.   在一个 \(\mathbb R^2\) 的 \((0,0)\) 处有一颗棋子,对于参数 \(a,b\),若它当前坐标为 \((x ...

  3. Elasticsearch 7.12 启用 x-pack 组件

    文章目录 修改配置文件 设置密码 使用密码 首先,你要有一套es,关于es的部署,可以看我的另一篇博客 ELK-EFK-v7.12.0日志平台部署 $ ./bin/elasticsearch-plug ...

  4. Spring Data JPA应用 之查询分析

    在Spring Data JPA应用之常规CRUD操作初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)尾附上了JpaRepository接口继承关系及方法,可以知道JpaRepos ...

  5. 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)

    1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...

  6. MacBook Pro 新手入门

    Mac从拆箱到入门   记录首次使用Mac的我的历程,不是专业的Mac使用教程,只是简单的记录.还有我在使用过程中一些用到的功能都一些小提示吧.  1.首次开机配置,对于一个完全的新手来说(也就是我) ...

  7. 一个含有多个flag的图片(Misc)

    图片是来自一个老阿姨,然后这个图片是属于一个杂项题目,一个图片中包含十几个flag,格式为#....#,第一个flag就是图片一开始就放在上面的,可以直接看到. 然后文件名字也是一个flag, 将图片 ...

  8. [旧][Android] LayoutInflater 工作流程

    备注 原发表于2016.06.20,资料已过时,仅作备份,谨慎参考 前言 感觉很长时间没写文章了,这个星期因为回家和处理项目问题,还是花了很多时间的.虽然知道很多东西如果只是看一下用一次,很快就会遗忘 ...

  9. Oracle RAC架构图和常用命令

    转至:https://www.cnblogs.com/yaoyangding/p/15596308.html Oracle RAC(实时应用集群)是Oracle数据库完全高可用体系解决方案中的一个关键 ...

  10. tput用法详解-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月28日 tput 命令将通过 terminfo 数据库对终端会话进行初始化和操作. 主要功能为:移动更改光标.更改文本属性颜色.清除屏幕特定区域. ...