当前位置:网站首页>尚硅谷–MySQL–基础篇(P1~P95)
尚硅谷–MySQL–基础篇(P1~P95)
2022-07-31 12:17:00 【胡宇乔】
尚硅谷–MySQL–基础篇(P1~P95)
参考链接:https://www.bilibili.com/video/BV1iq4y1u7vj?p=199&spm_id_from=pageDriver
尚硅谷非常好的视频之一,由于时间原因先学的高级篇,建议结合前面《JavaGuider-数据库篇》进行查漏补缺,整个Mysql完整系统性学下来还是非常有收获的。
文章目录
1. Mysql基础篇
1.1.基本概念
1.1.1 数据库名词
DBMS:数据库管理系统(管理各个数据库)如:mysql Server,Oracle
DB:数据库
RDBMS:关系型数据库,即二维表格数据
非RDBMS:非关系型数据库,如键值数据库,文档型数据库
1.1.2 ER图与表关联关系
ER图:实体集(库表)、属性(字段)、联系集(库表之间关系)
表关联关系:一对一、一对多、多对多、自我引用
1.1.3 SQL名词
- DDL(data definition language):数据定义语言,操作库表, create, drop, alter
- DML(data manipulation language):数据操作语言, CRUD
- DCL(data control language):数据控制语言。commit ,rollback
- TCL(transaction control language): 单独抽取commit rollback
1.1.4 笛卡尔积
两张表的乘积个数。
(表一旦取了别名就不能再用表原名)
1.1.5 连接查询
Mysql不支持满外连接
union返回两个结果集并集并去重
union all 返回两个结果并集不去重(若明确知道重复数据,则使用union all 可以提高查询效率)
natural join
-- 目前都是mysql采用SQL99语法: 自动查询两张表中所有字段相同,实现select * from emp join dept where emp.did = dept.did and emp.name = dept.name这种 SELECT * FROM `emp` NATURAL join dept -- 等价于emp.did=dept.did中同名字段 select * from emp join dept using(did)
1.2 基本语法
1.2.0 基本语法
-- 算术运算符
select 100 + 17.6, 10 * 5, 100 / 2;
select * from user where id % 2 =0;
-- <=>安全的等于
select * from user where id <=> 1;
-- 不等于
select * from user where id <> 1;
1.2.1 基本函数
-- 数学:三角、进制函数
-- 字符串函数
/*日期函数:惭愧,以前还写了篇SQL高级用法博客,结果在尚硅谷这里也只是基本篇某个篇章,越是无知越自大啊。 https://www.cnblogs.com/meditation5201314/p/15143702.html */
-- 流程控制函数 if可以选择2种结果。 case when... else end类似于if else
select id, if(id >= 1, 'id大于等于1', 'id小于1'),
case when id = 1 then 'id等于1'
when id >1 and id <= 2 then 'id大于1小于2'
else '大于2' end 'details'
from emp
-- case ..when..else .. end 结合算术运算使用类似于switch..case
select case id when 1 then id * 100
else id *200 end '新id'
from emp
-- Mysql信息函数
select
VERSION() 'Mysql版本',
CONNECTION_ID() '连接id',
DATABASE() '数据库',
SCHEMA(),
USER() '用户',
CURRENT_USER() '当前用户',
CHARSET('尚硅谷') '字符集',
COLLATION('尚硅谷') '比较规则'
1.2.2 聚集函数
-- 可以单独使用sum, avg,count这些
select sum(id) from emp;
select avg(id) from emp
-- 分组后可以统计组内其他字段
SELECT name, sum(last_qr_user_id) FROM `user` group by name
-- 多个字段分组
-- varchar类型存储int数据,也是可以相加的
SELECT name, last_qr_user_id, sum(last_transfer_time) FROM `user` group by name, last_qr_user_id
-- select中非组函数字段必须申明在group by中
-- with rollup,在分组后取一条不分组、所有数据的条件来做个比较
SELECT name, sum(last_qr_user_id) FROM `user` group by name with ROLLUP
-- Having必须在group后面使用
SELECT name, sum(last_qr_user_id) FROM `user` group by name having max(last_qr_user_id) > 1
-- 总体顺序 SQL执行原理:先多表join弄出一张虚拟表,然后根据条件查询
select ....from ...join on
where ....
group ....
having ....
order by ....
limit ...
1.3 子查询
1.3.1 基本概念
一条SQL查询出来的值查询完后,供另一条SQL主查询使用。能用自连接尽量避免子查询,因为是对未知表先查询,mysql处理器对自连接做了优化。
1.3.2 子查询分类
1. 单行、多行子查询:看内查询返回的结果
1. **相关、不相关子查询**:子查询和主查询是否相关
1.3.3 单行子查询
单行子查询就是只返回一行结果
-- 成对,可以进行多字段子查询
select * from user where (last_transfer_time, last_qr_user_id) in (
select last_transfer_time, last_qr_user_id from user where id in(67, 69)
)
-- 子查询配合having使用
select name, min(last_qr_user_id) from
user group by name having min(last_qr_user_id) < (
select max(last_qr_user_id) from user
)
##单行子查询-针对某个不确定的字段
SELECT
id,
NAME,
(
CASE
name
WHEN ( SELECT name FROM USER WHERE NAME = 'a函数一' ) then '胡宇乔'
ELSE '其他' END ) new_Name
FROM
USER
-- 错误用法!:不能重复嵌套聚合函数
select sum(avg(last_qr_user_id)) from user group by name
1.3.4 多行子查询
多行子查询:返回多个子查询结果
操作符:
1. in: 列表任意一个
1. any: 和单行比较
-- NULL问题:无论是单行还是多行,对子查询的值小心NULL值,因为in 相当于or = ,in (1, null) 等价于 a = 1 or a = null,而=null在MYSQL中查询不到任何数据,只能用is null,记得剔除
##多行子查询-any,all,some。any,some类似找min,all类似找MAX
#any
SELECT
*
FROM
USER
where id > ANY (select id from user where id > 1)
#all
SELECT
*
FROM
USER
where id >= ALL (select id from user where id > 1)
#some
SELECT
*
FROM
USER
where id >= SOME (select id from user where id > 1)
1.3.5 相关子查询(*)
这个还是非常重要,比如查询一张用户-客户表中,所有用户最早添加客户的时间,就需要用到相关子查询
select * from a
where a.add_time = (select min(add_time) from a2 where a.clientid = a2.clientid)
/* 除了group by 和limit 后,其他地方都可以声明子查询 select .. from ... where ... group by ... having .. order by .. limit ... */
1.4 数据类型
1.4.1 时间类型
推荐datetime,会随着服务器地区变换而变化,但timestamp不会
1.4.2 文本字符串类型
char, varchar(不要超过5000), text, enum
blob: 存储图片,音频,视频
json
1.5 个人总结

【MySQL上篇:基础篇】
【第1子篇:数据库概述与MySQL安装篇】
p01-p11
学习建议:零基础同学必看,涉及理解和Windows系统下MySQL安装
【第2子篇:SQL之SELECT使用篇】
p12-p48
学习建议:学习SQL的重点,必须重点掌握,建议课后练习多写
【第3子篇:SQL之DDL、DML、DCL使用篇】
p49-p73
学习建议:学习SQL的重点,难度较SELECT低,练习写写就能掌握
【第4子篇:其它数据库对象篇】
p74-p93
学习建议:对于希望早点学完MySQL基础,开始后续内容的同学,这个子篇可以略过。
在工作中,根据公司需要进行学习即可。
【第5子篇:MySQL8新特性篇】
p94-p95
学习建议:对于希望早点学完MySQL基础,开始后续内容的同学,这个子篇可以略过。
在工作中,根据公司需要进行学习即可。
边栏推荐
- Data Lake (19): SQL API reads Kafka data and writes it to Iceberg table in real time
- 生信周刊第38期
- 基于生物激励神经网络的室内实时激光SLAM控制方法
- 带有对称约束切换线性系统的结构可控性
- 一周精彩内容分享(第14期)
- Spark GC日志分析
- The function of SQL GROUP BY dependence
- Exploring Plain Vision Transformer Backbones for Object Detection Paper Reading Notes
- AMBA APB学习记录(AMBA 3/4)
- 荣耀手机参数写错,客服认为没错
猜你喜欢
随机推荐
Acwing第 62 场周赛【未完结】
Docker practical experience: Deploy mysql8 master-slave replication on Docker
科学论文和学术论文写作
关于==和equals的区别和联系,面试这么回答就可以
认知—运动康复医疗机器人应用设计
dosbox基础使用[通俗易懂]
函数递归1.0
生信周刊第38期
The most complete phpmyadmin vulnerability summary
kubernetes之服务发现
Power BI----几个常用的分析方法和相适应的视觉对象
初识QEMU
Docker build Mysql master-slave replication
DCM middleware family welcomes a new member
使用docker搭建mysql主从
AMBA APB学习记录(AMBA 3/4)
Getting started with jmeter performance testing steps (performance testing tool jmeter)
R语言做面板panelvar例子
Addition logic for SAP Commerce Cloud Product Review
Use ODBC in Excel to read data from CDS view on SAP BTP platform









