执行顺序

⑤SELECT 查询列表
①FROM 表名
②WHERE 条件(> < = <> >= <= and or not like `between and` in `not in’ `is null` ‘is not null’)
③GROUPY BY 字段(为了表结构完整,在select子句的表达式中只能使用group by表达式中的一列或多列以及SQL内置函数)
④HAVING 条件 (限制结果中显示的组)
⑥ORDER BY 字段 ASC/DESC ( 除limit,一般位于最后)
⑦LIMIT 索引,条目; 分页查询

基础操作及关键字

①可以查询字段、常量值:输出常量值、表达式:输出结果、函数:输出返回值
②查询结果是一个虚拟的表
③对于字段和关键字相同的情况,用着重号(`)将字段括起来

“+”:①只能做加法运算,无法进行连接,
②字符+数值时,会尝试转换,转换失败字符为0
③null+值 = null

AS:可以对查询目标起别名(AS,可省略),提高可读性,避免多表查询重名,别名为多个字符时,需使用单/双引号
一般GROUP BY和HAVING语句中不使用别名

DISTINCT:去重 (在SELECT之后)

LIKE:使用通配符 %(任意多个字符)、_(任意单个字符),使用通配符无法查询NULL值,只能查询 “”
若通配符包含在查询目标中,可使用转义 \_,也可自己定义转义符:在结尾使用 ESCAPE ‘$’,即将$命为转义符

BETWEEN AND:包含临界值,且前后数值有序

IN:IN( , , ),相当于 '=‘与‘or’ 结合 ,是精确查询,不支持通配符

<=>:安全等于,可以判断普通数值,也可以查询null条件,可读性较差,is只能判断null

ASC(升序)/DESC(降序): 默认升序,也可对表达式(可起别名)进行排序,支持多个字段为标准排序

HAVING:对分组之后数据进行筛选,可以在HAVING子句中使用SQL内置函数。
包含WHERE(效率较高)和HAVING子句的语句中存在歧义,结果取决于分组之前或之后。为了消除这种歧义,WHERE子句总是在HAVING子句之前应用。

多表查询(相当于建立一个交叉表)

笛卡尔乘积现象:无有效的连接条件,结果=m*n行

分类:①按年代: sql192标准(MySQL仅仅支持内连接) sql199标准(支持内连接+外连接(左、右)+交叉连接)
②按功能:内连接(等值连接、非等值连接、自连接)
外连接(左外连接、右外连接、全外连接(MySQL不支持))
交叉连接

1)sql92
等值连接 : WHERE条件使用 表名.字段=表名.字段 进行判定,和表名顺序无关
ps:通常为表起别名,用别名限定字段,起别名后原表名会无效(包含select语句)
非等值连接: WHERE条件使用 BETWEEN AND 非等值条件(一般用于数据分级)
自连接:自己表中的一行数据与另一行数据相关联,自己连接自己,必须给表起别名

2)sql99:使用FROM … JOIN ON … 可以将连接条件和筛选条件分离,提高可读性
内连接: … INNER JOIN … ON … INNER可省略
外连接: … OUTER JOIN … ON … 分为主次表,主表中的记录都会保留(次表无匹配,为null)
左外连接 LEFT OUTER JOIN … ON … 左表为主表(OUTER可省略)
一般都使用左外连接,可以防止表间关系混乱
右外连接 RIGHT OUTER JOIN … ON … 右表为主表
ps:在连接后的表中判断主表中为null属性的数量,一般选择次表中的主键(主键一般不能为null)
全外连接(MySQL不支持) FULL OUTER JOIN … ON … 内连接+两表互相不匹配的数据
交叉连接 … CROSS JOIN … 笛卡尔乘积,相当于sql92中,将两表隔开

一般使用sql99语法,支持较多,可读性高

用集合的形式表示外连接

A∩B = A JOIN B ON A. = B.

A∪(A∩B) = A RIGHT JOIN B ON A. = B.

B∪(A∩B) = A LEFT JOIN B ON A. = B.

A - (A∩B)= A RIGHT JOIN B ON A. = B. WHERE B.key IS NULL

B - (A∩B)= A LEFT JOIN B ON A. = B. WHERE A.key IS NULL

A∪B = A FULL JOIN B ON A. = B.

A∪B - A∩B = A FULL JOIN B ON A. = B. WHERE A.key IS NULL OR B.key IS NULL

由于mysql无全外连接,通常使用UNION将(A-(A∩B))和(B-(A∩B))联合起来

子查询

分类
按结果集行列数:
①标量子查询(一行一列)、②列子查询(一列多行)、
③行子查询(一行多列)、④表子查询(一般多行多列)
按位置:SELCT 后①、FROM后④、WHERE或HAVING后①②③、EXISTS后①②③④(相关子查询)

WHERE或HAVING后:位于小括号内部
①一般搭配单行操作符(> < = >= <= <>)
②一般搭配多行操作符 (IN/NOT IN (是否相等)、
ANY/SOME (与某一个值比较)、ALL(与所有的值比较))
③将多个字段作为虚拟的一个字段(用括号括起来)进行比较

SELECT后:①将子查询的结果放在每一行结果后,将表规格化
FROM 后:将生成的新表中加入查询(需起别名)
[NOT] EXIST后:用于判断子查询结果是否存在,对主查询的字段进行过滤(例:在WHERE后,用于判断部门是否有员工)

分页查询

LIMIT:要显示条目的起始索引(索引从0开始),要显示的条目个数,可用于排序后对数据进行筛选
ps:省略起始索引,默认从第一条(索引为0)开始,分页查询一般为LIMIT (page-1)*size,size

联合查询

UNION [ALL]:将多条查询语句的结果合并成一个结果,在多条sql查询语句之间进行使用,会主动去重 (可使用关键字ALL避免去重)
适用场景:所需要的结果来自于多个表,并且这些表并无直接关系,但查询信息一致(列数,和参数类型一致)

MySQL之DQL(查询)语句相关推荐

  1. mysql dql_Mysql中的DQL查询语句

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 Mysql中的DQL查询语句 1.查询所有列 --查询 学生 表所有记录(行) select *from 学生 --带条件 ...

  2. DQL查询语句约束数据库设计备份和还原

    DQL:查询语句 1. 排序查询* 语法:order by 子句* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...* 排序方式:* ASC:升序,默认的.* DESC:降序 ...

  3. java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...

    第一章  DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... * 排序方式: * ASC:升序,默认的. ...

  4. JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7

    JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7 DQL查询语句 DQL - Data Query Language:数据查询语言 指定查询字段 1.全查 2.指定字段 ...

  5. Oracle01-课程背景-基本概念-DQL查询语句

    目录 一.课程背景 1.1.为什么要有数据库? 1.2.数据库的简单介绍 1.3.数据库的优点 1.4.数据库的分类 1.4.1.关系型数据库 1.4.2.非关系型数据库 1.4.3.关系型数据库与关 ...

  6. MySQL中DQL查询数据——(四)

    MySQL中DQL查询数据--(四) 本篇博客,是个人根据 西部开源-秦疆老师的教学视频整理出的笔记,想看最详细的教学笔记和提供的SQL语句素材,请点击如下链接: https://www.cnblog ...

  7. MySQL的基本查询语句

    MySQL的基本查询语句 一.数据准备 CREATE TABLE `customers` (`cust_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '顾客I ...

  8. mysql 数据库里查询语句中不等于的两种写法

    mysql 数据库里查询语句中不等于的两种写法 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 1.my ...

  9. mysql联表查询语句示例

    mysql联表查询语句示例 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 示例: "sele ...

  10. MySQL多表查询语句

    MySQL多表查询语句 1.内连接查询 1.隐式内连接:使用where条件消除无用数据例子: --查询所有员工信息和对应的部门信息SELECT * FROM emp,dept WHERE emp.de ...

最新文章

  1. Vue会了吗?来认识一下React吧(上)
  2. 数据库元数据数据字典查询_11_列出数据库里含有自增的字段
  3. AWS Elemental推出新一代基于云的直播视频服务
  4. List中toArray()的使用方法
  5. 在JVM之下–类加载器
  6. oracle 增加一个新分区,oracle 11g 新增分区
  7. 谷歌的量子计算机速度,谷歌称其量子计算机速度比传统计算机快1亿倍
  8. cosmos db_开放电影项目Cosmos Laundromat如何使Blender更好
  9. Robust line matching through line–point invariants
  10. 博客园设置访问统计功能-by beanmoon
  11. Atitit v3项目快速推进的推荐技术标准化 规范 流程
  12. 【Mac使用技巧】Mac的VMware虚拟机系统时间如何调成不同步
  13. 关于Jetson TX2刷机各种问题(刷机后键盘等等奇葩错误)
  14. Lagrange乘子法与KTT条件
  15. 前端重要的H标签详解(干货!)最新版
  16. 科学探索奖名单揭晓:北大数学「黄金一代」袁新意上榜,首现90后获奖人
  17. HDU 2019 Multi-University Training Contest 1 杭电2019多校联合训练赛 第一场 1001 Blank (6578)
  18. 工作中常见的开会问题
  19. 计算机无法使用打印机预览,电脑中excel打印预览无法查看的处理方法
  20. markdown语法教学(for萌新版)

热门文章

  1. Spring Batch示例教程
  2. BGP——路由汇总造成次优选路问题
  3. 【.NET框架】—— ASP.NET MVC5路由基础(五)
  4. Matlab策略模式
  5. c语言 指正判断字符串大小
  6. AlgorithmMan,一套免费的算法演示神器
  7. 【mysql】显式加锁
  8. javascript核心_只需几分钟即可学习这些核心JavaScript概念
  9. 链栈的入栈和出栈代码_代码简介:全栈开发仍然有效
  10. shell 文件 开头的格式