MySQL学习笔记5||数据查询select
备注:该博客内容根据技术教学视频整理与总结而成,原视频来自于尚硅谷MySQL教程。
一、基础查询 select from
语法: SELECT 要查询的东西【FROM 表名】;
特点: ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
要点:
- 去重 select distinct 字段名 from 表名;
- 运算符”+“做加法运算
select 数值+数值:直接运算
select 字符+数值:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值:结果都为null (★)
二、条件查询 where
语法: select 要查询的字段|表达式|常量值|函数 from 表 where 条件 ;
条件分类: 条件表达式、逻辑表达式、模糊查询
- 条件表达式:示例:salary>10000
条件运算符:> < >= <= = !=(不等于) <>(不等于) - 逻辑表达式:示例:salary>10000 && salary<20000
逻辑运算符:and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true - 模糊查询:like 特点:一般和通配符搭配使用
between and 特点: a.使用between and 可以提高语句的简洁度
b.包含临界值
c.两个临界值不要调换顺序
in 含义:判断某字段的值是否属于in列表中的某一项
特点:a.使用in提高语句简洁度
b.in列表的值类型必须一致或兼容
c.不支持通配符的使用
is null|is not null 注意:=或<>不能用于判断null值
is null或is not null可以判断null值
通配符:% 任意多个字符,包含0个字符
_ 任意单个字符
三、排序查询 order by
语法: select 查询列表 from 表 where 筛选条件 order by 排序列表 【asc|desc】
特点: 1、asc :升序,如果不写默认升序 desc:降序
2、排序列表 支持 单个字段、多个字段、函数、表达式、别名
3、order by的位置一般放在查询语句的最后(除limit语句之外)
四、分组查询 group by、having
语法: select 查询的字段,分组函数 from 表 group by 分组的字段
特点: 1、可以按单个字段分组;可以按多个字段分组,字段之间用逗号隔开;
2、可以支持排序;having后可以支持别名
3、和分组函数一同查询的字段最好是分组后的字段
4、分组筛选
针对的表 | 位置 | 关键字 | |
---|---|---|---|
分组前筛选: | 原始表 | group by的前面 | where |
分组后筛选: | 分组后的结果集 | group by的后面 | have |
五、连接查询 join
笛卡尔乘积:如果连接条件省略或无效则会出现,即表1 有m行,表2 有n行,结果=m*n行
解决办法:添加上连接条件
- SQL92语法:
分类:内连接(等值连接、非等值连接、自连接),也支持一部分外连接(用于Oracle、SQL server,但MySQL不支持
语法:select 查询列表
from 表 别名1,表 别名2
where 等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:① 等值连接的结果 = 多个表的交集
② n表连接,至少需要n-1个连接条件
③ 多个表不分主次,没有顺序要求
④一般为表起别名,提高阅读性和性能 - SQL99语法:通过join关键字实现连接
分类:内连接(等值连接、非等值连接、自连接)、外连接(左外、右外)、交叉连接
语法:select 字段,...
from 表1
【inner|left outer|right outer|cross】join 表2 on 连接条件
【inner|left outer|right outer|cross】join 表3 on 连接条件
【where 筛选条件】
【group by 分组字段】
【having 分组后的筛选条件】
【order by 排序的字段或表达式】
特点:①表的顺序可以调换
②n表连接至少需要n-1个连接条件内连接的结果=多表的交集
③内连接的结果=多表的交集
④外连接查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
⑤left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
⑥外连接一般用于查询除了交集部分的剩余的不匹配的行
⑦交叉连接类似于笛卡尔乘积 - 自连接典型案例:查询员工名和直接上级的名称
SQL99写法:SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m ON e.`manager_id`=m.`employee_id`;
SQL92写法: SELECT e.last_name,m.last_name
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`; - 以下图示来自于尚硅谷MySQL教程课件,红色部分为连接查询后的结果:
六、子查询
含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询。在外面的查询语句,称为主查询或外查询
特点:1、子查询都放在小括号内
2、子查询可以放在from、select、where、having、exists后面,但一般放在条件的右侧
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询:结果集只有一行,一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:a、子查询的结果为一组值b、子查询的结果为空
② 多行子查询:结果集有多行,一般搭配多行操作符使用:any、all、in、not in
IN 可用 =ANY替代; NOT IN 可用<>ALL替代
操作符 | 含义 |
IN/NOT IN | 等于/不等于列表中的任意一个 |
ANY|SOME | 和子查询返回的某一个值比较,大于最小值,小于最大值即可 |
ALL | 和子查询返回的所有值比较,大于最大值,小于最小值即可 |
七、分页查询 limit
语法: select 字段|表达式,...
from 表
【where 条件】
【group by 分组字段】
【having 条件】
【order by 排序的字段】
limit 【offset 起始的条目索引,】size 条目数;
特点:1.起始条目索引从0开始
2.limit子句放在查询语句的最后
3.公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage,其中:每页显示条目数sizePerPage,要显示的页数 page
公式来源:首先假设条件为每页显示10条数据,那么可得下表规律:
页数 | 起始条目索引 |
---|---|
1 | 0 |
2 | 10 |
3 | 20 |
总结规律可得:10 = ( 2 - 1 ) × 10
20 = ( 3 - 1 ) × 10
offset =(page-1)*sizePerPage
八、联合查询 union
语法:select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
.....
select 字段|常量|表达式|函数 【from 表】 【where 条件】;
特点:1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
九、查询总结
查询优先级 | |
---|---|
select 查询列表 | ⑦ |
from 表1 别名 | ① |
连接类型 join 表2 | ② |
on 连接条件 | ③ |
where 筛选 | ④ |
group by 分组列表 | ⑤ |
having 筛选 | ⑥ |
order by排序列表 | ⑧ |
limit 起始条目索引,条目数; | ⑨ |
MySQL学习笔记5||数据查询select相关推荐
- MySQL学习笔记(三)查询
写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...
- mysql学习笔记之连接查询与子查询
mysql连接查询与子查询 1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t ...
- MySQL学习笔记-03高级查询、多表联合查询、聚合函数、子查询、视图、存储过程、权限、
关于作者 金山老师:从事Java.大数据.Python职业化培训6年,项目管理.软件开发14年.欢迎添加我的微信号[jshand],最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群 文章目 ...
- mysql 学习笔记 多表查询02
把一张表 想象成两张表,进行多表查询 举例: 查询 所有员工的 姓名 以及 其 上级姓名 select s1.stname, s2.stname from staff as s1, staff as ...
- MySQL学习笔记——多表查询
目录 一.多表查询 1.多表查询的实现 1.1 出现笛卡尔积的错误 1.2 多表查询的正确方式,需要有连接条件 2.多表查询的分类 2.1 等值连接vs非等值连接 2.2 自连接vs非自连接 2.3 ...
- MySQL学习笔记:等值查询、范围查询、死锁、间隙锁的本质
环境 MySQL:5.7.26-log 前言 答疑文章(二):用动态的观点看加锁 原则 1:加锁的基本单位是 next-key lock.希望你还记得,next-key lock 是前开后闭区间. 原 ...
- MySQL学习笔记 | 模式匹配 模糊查询
目录 LIKE运算符:模式匹配 模糊查询 作业练习 1.查看XSCJ数据库中学生基本情况表(XS)的全部数据信息.(确保数据和教材第105页表5-13一致.) 2.完成教材第106页以下操作: (1) ...
- mysql学习笔记之排序查询和函数(进阶四)
USE myemployees; #进阶四:排序查询() /* 语法: select 查询列表 from 表 order by 排序列表[asc|desc]asc升序desc降序,可不写,默认升序 / ...
- mysql 学习笔记15 子查询
子查询定义: 单上子查询举例: 显示与 员工 关平 同一部门的员工, 但不包括关平 select * from staff where staff.stdepno = (select staff.st ...
最新文章
- java point_java中point是什么意思
- python在日常工作处理中的应用-python在工作中的应用场景介绍
- boost::hana::chain用法的测试程序
- IO概述、异常、File文件类_DAY19
- 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)
- C/C++对象的序列化
- UVa 1642 (综合) Magical GCD
- Spring4.x(9)--Spring的Hibernate事务-XML
- 深入理解并行编程pdf
- VMware克隆CentOS6.4后 eth0无法初始化
- Reproxy:边缘服务器反向代理工具
- 进销存excel_Excel进销存管理套表,自动库存显示应收应付,全函数快捷轻松
- Unity粒子特效出现慢
- 使用 Nginx 服务器配置 flv、mp4,可以直接浏览器播放
- scikit-learn初级
- 痛失阵地,又一家热门BT种子观影网站关停
- python输入一个浮点数、输出其整数部分和小数部分_输入一个浮点数,并输出该数的整数部分和小数部分...
- Python图像增强(翻转和旋转)
- 李嘉璇:技术人如何深入人工智能
- 打开对方CMD的三种方法
热门文章
- 【NKOJ-昨天今天和明天】考试游记
- c语言乘法超过长整数,C语言中超大整数乘法运算
- SCI投稿时如何选择推荐审稿人?
- 3种CSS实现渐变色边框(Gradient borders方法的汇总
- 小爱音箱mini接入HA,并且通过Node-RED来控制小爱说话
- 客制化键盘编程_客制化机械键盘入门指南
- 冰河连夜复现了Log4j最新史诗级重大漏洞,含视频和完整案例代码,全网最全,赶快收藏吧
- 国网GIM设备三维模型要求细则 - 避雷器
- Tesseract中文语言包 chi_sim.traineddata,免费下载 而且还是最新的
- 进度压缩: 赶工与快速跟进