MySQL之DQL(查询)语句
执行顺序
⑤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(查询)语句相关推荐
- mysql dql_Mysql中的DQL查询语句
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 Mysql中的DQL查询语句 1.查询所有列 --查询 学生 表所有记录(行) select *from 学生 --带条件 ...
- DQL查询语句约束数据库设计备份和还原
DQL:查询语句 1. 排序查询* 语法:order by 子句* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...* 排序方式:* ASC:升序,默认的.* DESC:降序 ...
- java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...
第一章 DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... * 排序方式: * ASC:升序,默认的. ...
- JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7
JAVA-MySQL四{MySQL重点DQL查询数据}JAVA从基础开始 --7 DQL查询语句 DQL - Data Query Language:数据查询语言 指定查询字段 1.全查 2.指定字段 ...
- Oracle01-课程背景-基本概念-DQL查询语句
目录 一.课程背景 1.1.为什么要有数据库? 1.2.数据库的简单介绍 1.3.数据库的优点 1.4.数据库的分类 1.4.1.关系型数据库 1.4.2.非关系型数据库 1.4.3.关系型数据库与关 ...
- MySQL中DQL查询数据——(四)
MySQL中DQL查询数据--(四) 本篇博客,是个人根据 西部开源-秦疆老师的教学视频整理出的笔记,想看最详细的教学笔记和提供的SQL语句素材,请点击如下链接: https://www.cnblog ...
- MySQL的基本查询语句
MySQL的基本查询语句 一.数据准备 CREATE TABLE `customers` (`cust_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '顾客I ...
- mysql 数据库里查询语句中不等于的两种写法
mysql 数据库里查询语句中不等于的两种写法 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 1.my ...
- mysql联表查询语句示例
mysql联表查询语句示例 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 示例: "sele ...
- MySQL多表查询语句
MySQL多表查询语句 1.内连接查询 1.隐式内连接:使用where条件消除无用数据例子: --查询所有员工信息和对应的部门信息SELECT * FROM emp,dept WHERE emp.de ...
最新文章
- Vue会了吗?来认识一下React吧(上)
- 数据库元数据数据字典查询_11_列出数据库里含有自增的字段
- AWS Elemental推出新一代基于云的直播视频服务
- List中toArray()的使用方法
- 在JVM之下–类加载器
- oracle 增加一个新分区,oracle 11g 新增分区
- 谷歌的量子计算机速度,谷歌称其量子计算机速度比传统计算机快1亿倍
- cosmos db_开放电影项目Cosmos Laundromat如何使Blender更好
- Robust line matching through line–point invariants
- 博客园设置访问统计功能-by beanmoon
- Atitit v3项目快速推进的推荐技术标准化 规范 流程
- 【Mac使用技巧】Mac的VMware虚拟机系统时间如何调成不同步
- 关于Jetson TX2刷机各种问题(刷机后键盘等等奇葩错误)
- Lagrange乘子法与KTT条件
- 前端重要的H标签详解(干货!)最新版
- 科学探索奖名单揭晓:北大数学「黄金一代」袁新意上榜,首现90后获奖人
- HDU 2019 Multi-University Training Contest 1 杭电2019多校联合训练赛 第一场 1001 Blank (6578)
- 工作中常见的开会问题
- 计算机无法使用打印机预览,电脑中excel打印预览无法查看的处理方法
- markdown语法教学(for萌新版)