MySQL第五讲
内容回顾
单表操作
"""
1.配置文件先统一设置成utf8
\s 2.无论你怎么改都没有生效
你的机器上不止一个mysql文件
C有一个
D有一个 3.百度搜索
show variables like '%character%' set ... = gbk
set ... = gbk show variables like '%character%'
还有问题找我
"""
select
from
where # where 对整个表的筛选条件
select * from emp where id > 3;
模糊查询
like
% 匹配任何个数的任意字符
_ 匹配单个个数的任意字符
select * from emp where name like '%o%';
select * from emp where name like '____';
针对字段是null的情况 只能用is不能用=
select * from emp where post_comment is NULL; # group by 分组
"""
分组之后默认只能直接拿到分组的依据,其他字段无法直接获取
select * from emp group by post; 针对分组需要设置严格模式
set global sql_mode="ONLY_FULL_GROUP_BY";
退出客户端重新进入即可
"""
什么时候需要分组
以集体为单位求相关的数据
每个部门、每个地区、每个国家...
平均年龄、薪资、身高、最大、最小、总数
"""
聚合函数 聚合函数是分组之后才能使用
min
max
avg
sum
count
select * from emp where max(salary) > 1000; 错
select max(salary) from emp; 对 不分组默认整体就是一组
"""
select post as '部门',max(salary) as '最高工资' from emp group by post; # 分组之后获取除分组依据以外的字段信息
select post,group_concat(name) from emp group by post;
select post,group_concat(name,':',salary) from emp group by post; # 分组之前也可以用拼接方法
select concat(name,salary) from emp; # having分组后的再次过滤
select post,avg(salary) from emp group by post having avg(salary) > 6000; # distinct去重
'''必须是完全一样的数据才能去重(主键存在肯定无法去重)'''
select distinct age from emp; # order by排序
select * from emp order by age; 默认是升序
select * from emp order by age asc; 升序
select * from emp order by age desc; 降序
select * from emp order by age asc,salary desc; # limit限制展示条数
select * from emp limit 5;
select * from emp limit 0,5; 第一个是起始位置、第二个是条数
'''
应用场景
1.为了节省资源
2.分页
''' # regexp正则
select * from emp where name regexp '^j.*(n|y)$';
多表操作
inner join 内连接
将两张表中有对应关系的数据拼接成一张表(只显示两张都有的)
select * from emp inner join dep on emp.dep_id = dep.id; left join
以左表为基础,没有对应的数据用NULL填充
select * from emp left join dep on emp.dep_id = dep.id; right join
以右表为基础,没有对应的数据用NULL填充
select * from emp right join dep on emp.dep_id = dep.id; union
将左连接和右连接生成的表再拼接一次(双方都有)
select * from emp left join dep on emp.dep_id = dep.id
union
select * from emp right join dep on emp.dep_id = dep.id;
今日内容概要
- 子查询的概念
- 数据库软件navicat的使用
- 数据库多表查询练习题(以前天作业的五张表来做)
- python模块操作mysql数据库(后续讲python的时候再来讲)
- 视图、触发器、存储过程、流程控制、索引(了解)
今日内容详细
子查询
# 就是将一条查询语句的结果用括号括起来当作另外一条查询语句的条件
# 1.查询部门是技术或者人力资源的员工信息
"""
1.先去部门表里面将技术和人力资源对应的id号拿到
2.再去员工表中依据步骤1查询出来的id号搜索对应的员工信息
"""
select id from dep where name in ('技术','人力资源');
select * from emp where dep_id in (200,201);
等价
select * from emp where dep_id in (select id from dep where name in ('技术','人力资源'));
记住一个规律,表的查询结果可以作为其他表的查询条件,也可以通过其别名的方式把它作为一张虚拟表去跟其他表做关联查询
补充知识点
# 我想将员工的姓名、年龄、性别用:连接起来
select concat(name,':',age,':',sex) from emp;
如果你多个字段的连接符号是一样的话,那么可以用下面的方法
select concat_ws(':',name,age,sex) from emp;
# 查询平均年龄在25岁以上的部门名
"""
1.子查询
分步解决问题
1.先操作emp表 按照dep_id分组求出平均年龄大于25岁的部门编号
2.根据获取到的编号去部门表里面查询出部门的名称
"""
1.select dep_id from emp group by dep_id having avg(age) > 25;
2.select name from dep where id in (201,202,666)
select name from dep where id in (select dep_id from emp group by dep_id having avg(age) > 25);
"""
2.连表操作
1.先把两张表连起来
2.之后直接操作连起来的一张表
连表操作的过程中所有的表字段最好都加上表的前缀
"""
1.select * from dep inner join emp on emp.dep_id = dep.id;
2.select dep.name from dep inner join emp on emp.dep_id = dep.id
group by dep.name
having avg(emp.age) > 25;
# exist(了解)
EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,
而是返回一个真假值,True或False。
当返回True时,外层查询语句将进行查询
当返回值为False时,外层查询语句不进行查询。
select * from emp
where exists
(select id from dep where id > 3);
select * from emp
where exists
(select id from dep where id > 250);
Navicat数据库软件
"""
百度直接搜索navicat破解版
点击本地下载 然后根据提示点next完成安装即可
桌面上会自动出现一个彩色的navicat图标
支持使用14天 过期之后卸载重新下
或者下载老版本的https://pan.baidu.com/s/1bpo5mqj
"""
Navicat的本质其实就是内部给你封装好了对应的操作MySQL数据的sql语句
#1. 测试+链接数据库
#2. 新建库
#3. 新建表,新增字段+类型+约束
用户表
用户名
密码
录入数据
介绍增删改查按钮
#4. 设计表:外键
部门表
部门名
#5.逆向数据库到模型
模型
#6.建立表模型
#7.转存数据库SQL文件
SQL文件一定要确保是utf8格式
#8.新建查询语句
批量加注释:ctrl+?键
批量去注释:ctrl+shift+?键(最新版可能还是ctrl+?键)
# 9.注释
# 和 --都是MySQL中的注释
MySQL第五讲的更多相关文章
- MySQL实战45讲学习笔记:索引(第五讲)
一.需要回表的案例 在下面表T中,执行下面语句,需要执行几次树的搜索操作?会扫描多少行? select * from T where k between 3 and 5 1.初始化语句 mysql&g ...
- MySQL实战45讲学习笔记:第四十五讲
一.本节概述 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长.虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限.比如,无符 ...
- MySQL实战45讲学习笔记:第十五讲
一.引子 在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇.在这些文章中,大家在评论区留下了很多高质量的留言.现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学 ...
- MySQL实战45讲学习笔记:第三十五讲
一.本节概述 在上一篇文章中,我和你介绍了 join 语句的两种算法,分别是 Index Nested-LoopJoin(NLJ) 和 Block Nested-Loop Join(BNL). 我们发 ...
- MySQL实战45讲学习笔记:第二十五讲
一.引子 在上一篇文章中,我和你介绍了 binlog 的基本内容,在一个主备关系中,每个备库接收主库的 binlog 并执行. 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被 ...
- mysql语句总结
mysql语句总结 -- 1,通过windows提供的服务管理来完成 -- services.msc -- 2,dos下的命令来完成 -- 停止 -- net stop mysql -- 启动 -- ...
- 深挖计算机基础:MySQL实战45讲学习笔记
参考极客时间专栏<MySQL实战45讲>学习笔记 一.基础篇(8讲) MySQL实战45讲学习笔记:第一讲 MySQL实战45讲学习笔记:第二讲 MySQL实战45讲学习笔记:第三讲 My ...
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
随机推荐
- HTML 基础3
表格 示例1: <h4>水平表头+普通边框</h4> <table border="1"> <caption>caption标签展示 ...
- JavaScripts之变量作用域提升问题(var、let、const)
变量提升(Hoisting) var: 使用var在函数或全局内任何地方声明变量相当于在其内部最顶上声明它,这种行为称为Hoisting(提升) 注意:变量赋值的位置不会改变 function fn( ...
- TensorFlow 机器学习秘籍中文第二版·翻译完成
原文:TensorFlow Machine Learning Cookbook 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3 ...
- java下载网络大文件之内存不够的解决办法(包含分片上传分片下载)
一.背景 2020年11月份的时候,我做过一个项目,涉及到网络文件,比如第三方接口提供一个文件的下载地址,使用java去下载,当时我全部加在到JVM内存里面,话说,单单是80M的下载单线程没问题,但是 ...
- kafka经验
1.kafka集群搭建 解压 配环境变量 修改配置文件 2.编写管理脚本去管理集群 3.kafka常用命令 4.kafka监控 5.分享kafka经验
- bom-offset
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Android珍藏】推荐10个炫酷的开源库【转】
感谢大佬:https://www.jianshu.com/p/d608f0228fd4 前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有 ...
- java getSource()和 getActionCommand()区别
感谢大佬:https://blog.csdn.net/LIU_YANZHAO/article/details/72740011?utm_source=blogxgwz1 比如说 按纽的事件,同一个JF ...
- redhat更改yum源及安装PHP环境
redhat更新yum源 删除同RHEL一同安装的yum源 rpm -qa|grep yum #查看本地yum yum list | wc -l #看个数 yum install pip #看现象 r ...
- Nodejs path对象
很快Node就会迎来4.0的时代,届时将并入现有的iojs,所以先前写过的iojs入门系列直接更名为NodeJS入门. 本篇开始将逐个介绍Node的各主要模块,依循API文档走一遍,但会给出比API文 ...