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. 框架5--nginx安装部署 下(web服务)

    目录 1.提纲 2.Nginx虚拟主机 3.Nginx日志 4.Nginx访问控制模块 5.Nginx状态监控模块 6.访问连接控制模块 框架5--nginx安装部署 下(web服务) 1.提纲 1. ...

  2. vc++调试总结

    .在debug->windows下,有以下调试窗口 1)Breakpoints管理断点信息 可以新建条件断点,函数断点,以及特定地址改变断点(用于检测数据发生改变时机点) 在断点处,可以进入汇编 ...

  3. Solution Set - 《赏竹而格之》

    1.「GXOI / GZOI 2019」「洛谷 P5304」旅行者   Link & Submission.   经典二进制分组,没啥好说的. 2. 「SDOI 2019」「洛谷 P5361」 ...

  4. Solution -「ABC 213H」Stroll

    \(\mathcal{Description}\)   Link.   给定一个含 \(n\) 个结点 \(m\) 条边的简单无向图,每条边的边权是一个常数项为 \(0\) 的 \(T\) 次多项式, ...

  5. Solution -「AT 3913」XOR Tree

    \(\mathcal{Description}\)   Link.   给定一棵树,边 \((u,v)\) 有边权 \(w(u,v)\).每次操作可以使一条简单路径上的边权异或任意非负整数.求最少的操 ...

  6. 前端提交数据到node的N种方式

    写在前面 本篇介绍了前端提交数据给node的几种处理方式,从最基本的get和post请求,到图片上传,再到分块上传,由浅入深. GET请求 经典的get提交数据,参数通过URL传递给node,node ...

  7. [LeetCode]21.合并两个有序链表(Java)

    原题地址: merge-two-sorted-lists 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 1: 输入:l1 = [1 ...

  8. CentOS7搭建ntp时钟服务器

    文章目录 服务器配置 远程客户端配置 服务器配置 # 关闭防火墙,selinux=disabled 1.# 服务器部署 [root@localhost ~]# yum -y install ntp n ...

  9. Kali Linux解压包命令:

    Kali Linux解压包命令: tar.gz格式压缩包: root@kali:~# tar -xzvf 压缩包.tar.gz -C /root/home/Desktop root@kali:~# c ...

  10. 图片隐写之Image Steganography软件的使用

    CTF_论剑场 MISC 坏掉的图像 writeup 把图片丢进winhex里,发现头部的 0D 1A 0A 1A是不正确的,正确的应该为 0D 0A 1A 0A,所以需要更改. 更改完成后打开图片可 ...