内容回顾

  • 单表操作

    """
    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第五讲的更多相关文章

  1. MySQL实战45讲学习笔记:索引(第五讲)

    一.需要回表的案例 在下面表T中,执行下面语句,需要执行几次树的搜索操作?会扫描多少行? select * from T where k between 3 and 5 1.初始化语句 mysql&g ...

  2. MySQL实战45讲学习笔记:第四十五讲

    一.本节概述 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长.虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限.比如,无符 ...

  3. MySQL实战45讲学习笔记:第十五讲

    一.引子 在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇.在这些文章中,大家在评论区留下了很多高质量的留言.现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学 ...

  4. MySQL实战45讲学习笔记:第三十五讲

    一.本节概述 在上一篇文章中,我和你介绍了 join 语句的两种算法,分别是 Index Nested-LoopJoin(NLJ) 和 Block Nested-Loop Join(BNL). 我们发 ...

  5. MySQL实战45讲学习笔记:第二十五讲

    一.引子 在上一篇文章中,我和你介绍了 binlog 的基本内容,在一个主备关系中,每个备库接收主库的 binlog 并执行. 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被 ...

  6. mysql语句总结

    mysql语句总结 -- 1,通过windows提供的服务管理来完成 -- services.msc -- 2,dos下的命令来完成 -- 停止 -- net stop mysql -- 启动 -- ...

  7. 深挖计算机基础:MySQL实战45讲学习笔记

    参考极客时间专栏<MySQL实战45讲>学习笔记 一.基础篇(8讲) MySQL实战45讲学习笔记:第一讲 MySQL实战45讲学习笔记:第二讲 MySQL实战45讲学习笔记:第三讲 My ...

  8. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  9. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

随机推荐

  1. 右键没有word?excel?ppt?注解表该改改啦

    ✿[office 2019]office2010版本以上的都可以(例如:office 2010.office 2016.office 2019) 一.快速方法解决右键没有word: 在电脑桌面右键一个 ...

  2. Java项目开发中实现分页的三种方式一篇包会

    前言   Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...

  3. kafka经验

    1.kafka集群搭建 解压 配环境变量 修改配置文件 2.编写管理脚本去管理集群 3.kafka常用命令 4.kafka监控 5.分享kafka经验

  4. Linux中Swap与Memory内存简单介绍 (转)

    https://blog.csdn.net/zwan0518/article/details/12059213 一.背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇 ...

  5. rabbitMq使用guest登录不上的问题总结

    自己mac电脑上的mq在电脑关机(直接按电源键关机),在开机后,rabbitMq连不上了,报500错误. 1.在使用brew uninstall rabbitmq --force后; 2.我手动安装了 ...

  6. Python编程知识

    继承->重写 class A(object): def __init__(self): print("super(B,self).__init__():运行A:init") ...

  7. python使用泛型

    所谓的泛型, 就是将数据类型作为参数进行传递, 即在我们用的时候确定数据类型, 这是一种在面向对象语言中经常使用的特性 一般类使用 以SQLAlchemy举例 比如: 我们统一写个将数据保存到数据库的 ...

  8. C#操作读写INI配置文件

    一个完整的INI文件格式由节(section).键(key).值(value)组成.示例如:[section]key1=value1key2=value2; 备注:value的值不要太长,理论上最多不 ...

  9. php发送邮件 (phpmailer)

    1.首先下载phpMailer文件官方文件https://sourceforge.net/projects/phpmailer/: 还有class.smtp.php. 2.去配置一下发送邮件的服务器, ...

  10. linux可以这样玩 之 杂乱无章的随笔(不定期更新)

    文章目录 快速重命名 vim的进化 vim高亮当前行 vim列编辑 vim块编辑 vim行编辑 vim 中替换内容 vim保留当前已经编辑的内容,切换到其他用户继续编辑 修改服务的进程限制 CentO ...