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. suse 12 部署chrony时间同步服务器

    文章目录 1.ntp和chrony的区别 1.1.关于chrony 1.2.chronyd的优势 2.环境介绍 3.部署chrony 4.配置chrony 4.1.配置文件解析 4.2.查看chron ...

  2. Django视图与模板(6)

    前面记到数据库与模型(models)有联系,现在记录一下视图与模板,他们两个也有联系. 个人理解:视图就好像一个cpu,比较核心,就是用来处理问题的,又叫业务逻辑处理,他把处理完的结果插入到模板里面, ...

  3. uni-app tabBar中间按钮 之 midButton

    midButton 中间按钮 仅在 list 项为偶数时有效 , 需要App 2.3.4+.H5 3.0.0+以上版本 midButton 属性说明 属性 类型 必填 默认值 描述 width Str ...

  4. Linux系列——配置SSH免密登录

    ​ 在进行配置之前需要先关闭防火墙.配置hosts映射. 具体参见:Linux系列--常规基础操作 下面重点说明如何配置SSH: 1.编辑sshd服务配置文件,开启免密验证, vi /etc/ssh/ ...

  5. [Java]程序运行时的内存分配

    本文出处:<Thinking in JAVA> 寄存器这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制 ...

  6. 这款智能又高效的自助式BI工具,你应该了解一下

    如今,企业的经营面临越来越激烈的竞争,如何将数据的价值发挥到最大化,成为众多企业急需解决的问题.如果部署数据分析平台还像以前那样要经历漫长实施过程的话,那么数据化运营将成为空谈.在市场需求的催化下,& ...

  7. python基础之序列类型的方法——列表&元组

    Hello大家好,我是python学习者小杨同学,上次跟大家分享关于python的数值类型和序列类型,本次就承接上一节的内容,说一说序列类型的方法. 序列类型的方法,简单的来说就是四个字:增删改查.随 ...

  8. 【C# 练习】通过ZoomGame这个案例加强对 反射 插件 特性的认识

    游戏情景设定: 有一个游戏机,里面出现几种动物让儿童选择.选择完动物后,在输入数值让动物叫几次. 动物类型以插件的形势存在,可以外包给其他人开发,并提供了开发接口AnimalTool.SDK.dll. ...

  9. ASCII 文件编码格式

    文件编码格式 阶段一:ASCII 阶段二:ANSI(本地化) 如:GBK.GB2312 阶段三:UNICODE(国际化) 如:UTF-8 ASCII(American Standard Code fo ...

  10. maven-mvnd安装使用

    目录 安装使用 官方介绍 使用注意 安装使用 下载 https://github.com/apache/maven-mvnd/releases/tag/0.7.1 ,mvnd-0.7.1-darwin ...