内容回顾

  • 单表操作

    """
    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. ES入门三部曲:索引操作,映射操作,文档操作

    ES入门三部曲:索引操作,映射操作,文档操作 一.索引操作 1.创建索引库 #语法 PUT /索引名称 { "settings": { "属性名": " ...

  2. JavaScript数据结构之链表

    链表相较于数组的优缺点 1. 链表在 插入.删除.移动数据效率比数组要高,数组插入.移动.删除数据需要改变没有数据的索引,而链表则只需要更改指针即可 2. 在查询方面,数组要优于链表,数组存储的数据是 ...

  3. Vue.js之计算属性(computed)、属性监听(watch)与方法选项(methods)

    vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.计算属性-computed 1. 作用:能够避免数据冗余,通 ...

  4. CSS Modules 的六种用法

    一.局部作用域 二.全局作用域 三.定制哈希类名 四. Class 的组合 五.输入其他模块 六.输入变量

  5. SpringBoot的.gitignore文件使用

    简介 临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交.git提供了一个.gitignore,来自动忽略这些配置文件 配置规则 # 表示此为注释,将被Gi ...

  6. Swift循环的介绍

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...

  7. 自定义CALayer

    1.如何自定义Layer.     自定义CALayer的方式创建UIView的方式非常相似.      CALayer *layer = [CALayer layer];      layer.fr ...

  8. 使用C++开发PHP扩展

    目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案.当然"如何开发PHP扩展"的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的 ...

  9. bash_profile和bashsrc的区别

    感谢大佬:http://unclealan.cn/index.php/system/128.html 描述 在类Linux或者MACOS系统中,家目录(用户目录)中我们会看到,.bash_profil ...

  10. FidBugs的使用学习

    是什么? 静态代码分析器,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness, ...