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硬盘) 但这东西感 ...
随机推荐
- java 多线程 start方法 run方法 简单介绍。
一 start开启一个多线程, run 只是一个内部的方法. package com.aaa.threaddemo; /* * start方法的作用? * 在 Java中启动多线程调用的是start方 ...
- 解决mybatis拦截器无法注入spring bean的问题
公司要整合rabbitmq与mybatis拦截器做一个数据同步功能. 整合过程中大部分环节都没什么问题,就是遇到了mybatis拦截器 @Intercepts(@Signature(type = Ex ...
- 洛谷P2240 【深基12.例1】部分背包问题(经典模板)
首先应该注意几个关键信息:装走尽多的金币.所有金币可以随意分割并且分割后金币的价值比不变; 我们可以抽象成一个买东西的场景,给你一定数目的钱,让你在这些钱内尽量在超市买更多的小零食,这就牵扯到了一个性 ...
- 在java中静态方法与非静态方法
在java中public void与public static void有什么区别 ? public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用 ...
- 使用Maven导入MySQL驱动包遇到的问题
问题描述 今天在使用Maven导入MySQL数据库驱动包依赖后,直接运行项目,出现错误. java.sql.SQLException: No suitable driver found for jdb ...
- 跨域 CORS 详解 (转)
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从 ...
- Jmeter测试dubbo接口填坑
通过jmeter测试dubbo的方法网上有很多帖子,需要的自己度娘去就可以. 使用的时候有个问题需要提示一下,因为我碰到了,还耽误了一些时间,不说中间的过程.直接说处理方式: 问题是这样的: 将dub ...
- Java和Js编码(encodeUrl)解码(decodeUrl)对空格的差异问题
今天解决一个问题的时候遇到了一个编码解码问题,记录一下. 1. Js用的是encodeURIComponent()方法编码,后面的都以该编码方式处理出来的数据为准. 2. Java用的是URLDeco ...
- IE,FF等浏览器兼容性问题
_1:改变选中时候的背景色处理: ::selection { color:#fff; background-color: #5CB85C ;} ::-moz-selection { color:#ff ...
- Java 位运算总结
一.Java中支持的位运算 位与(&):二元运算符,两个为1时结果为1,否则为0 位或(|):二元运算符,两个其中有一个为1时结果就为1,否则为0 位异或(^):二元运算符,两个数同时为1或0 ...