多表查询
  1. 连表:

    1. 内连接:所有不在条件匹配内的数据们都会被剔除连表

      • select * from 表名1,表名2 where 条件;
      • select * from 表名1 inner join 表名2 on 条件;
    2. 外连接:
      1. 左外连接:left join

        • select * from 表名1 left join 表名2 on 条件;(显示表名1中的所有数据)
      2. 右外连接right join
        • select * from 表名1 right join 表名2 on 条件;(显示表名2中的所有数据)
      3. 全外连接 full join
        • select * from 表名1 left join 表名2 on 条件 union select * from 表名1 right join 表名2 on 条件;
    3. 子查询:建议分开做
表的存储引擎:
  1. show engines; 存储引擎

  2. 存储引擎:

    1. 表结构:存放在一个文件中(硬盘)
    2. 表数据:存放在另一个文件中(内存)
    3. 索引:为了方便查找设计的一个机制
  3. 种类:

    1. innodb:索引+数据 表结构,持久化存储

      1. 支持事务begin:一致性,n条语句的执行状态是一致的

        begin #开启事务
        select ......
        update/delete ......
        commit; #提交事务,解锁被锁住的数据
      2. 支持行级锁:只对涉及到修改的行加锁,利用并发的修改,但是对于一次性大量修改效率低下(表级锁:一次性加一把锁就锁住了整张表,不利用并发的修改,但是加锁速度比行锁的效率高)

      3. 支持外键约束:被约束表中的数据不能随意的修改,删除,约束字段要根据被约束表来使用数据

    2. myisam:索引,数据,表结构,支持持久化存储

      • 支持表级锁
    3. memory:表结构

      • 支持断电消失
表的约束
  1. 非空约束:not null,默认不写的时候自动插入
  2. unsigned :无符号的数字
  3. 唯一约束:unique
    1. 联合唯一约束:unique(需要联合的列)
  4. 外键约束:foreign key(字段名) references
    • 级联更新:on update cascade ,相关的数据会跟随变化
  5. 设置默认值:default xx
  6. 主键:primary key
    • 第一个被设置了非空+唯一约束的字段会被定义成主键 primary key
  7. 对某一字段 自增:auto_increment
    • (truncate table 表名; 清空表且重置auto_increment),
    • (delete from 表名;清空表数据但不能重置auto_increment)
    • alter table 表名 auto_increment=数值
表的修改 alter table
  1. 修改表明:alter table 表名 rename 表名;
  2. 修改编码:alter table 表名 charset 编码;
  3. 修改自增:alter table 表名 auto_increment 自增的位置;
  4. 添加字段约束:alter table 表名 add 约束条件;
  5. 修改约束:alter table 表名 add 字段名 类型(长度) 约束;
  6. 修改字段名:alter table 表名 drop 字段名;
  7. 修改字段名以及类型和约束条件:alter table 表名 change 字段名 新名字 类型(长度)约束
  8. 修改表中的字段:alter table 表名 modify 字段名 新类型(新长度)约束
  9. 修改字段名的位置:alter table 表名 add 字段名 类型(长度) 约束 first(备注:移动到第一个)/after 字段名(备注:移动到某个字段名之后)
  10. 修改原字段的类型:after table 表名 change 字段名1 字段名1 类型(长度) 约束;
表与表之间的关系
  1. 一对一:

    create table class(id int primary key,cname char(26));
    
    create table student(id int primary key,sname char(16),gid int unique,foreign key(gid) references guest(id));
  2. 一对多:foreign key

    create table class(id int primary key,cname char(16));
    
    create table student(id int primary key,sname char(16),cid int,foreign key(cid) references class(id));
  3. 多对多:

    create table class(id int primary key,cname char(16));
    
    create table teacher(id int primary key,tname char(16));
    
    create table teacher_cls(id int,cid int,tid int,foreign key(cid) references class(id),foreign key(tid) references teacher(id));
索引原理
  1. 磁盘预读性原理

    1. linux 中一个block块大小是4096个字节
  2. 树:根节点root,分支节点branch,叶子节点:leaf

    1. b树:balance 树

      1. 数据存储在分支节点和叶子节点上
      2. 导致了树的高度增加,找到一个数据的时间不稳定
      3. 在查找范围的时候不够便捷
    2. b+树:mysql中innodb存储引擎的所有的索引树都是b+树,是为了更好的处理范围问题在b树的基础上有所优化
      1. 数据不再存储在分支节点了,而是存储在叶子节点上(树的高度降低,找到所有数据的时间稳定)
      2. 在叶子节点与叶子节点之间添加的双向指针提高了再查找范围的效率
  3. 索引的两种存储方式:

    1. 聚集(簇)索引:叶子节点会存储整行数据--innodb的主键中才会有(主键只可以创建一个的原因)
    2. 非聚集索引(辅助索引):除了主键之外的普通索引都是辅助索引,一个索引没办法查询到整行数据,需要回聚集索引再查一次,俗称回表,数据不直接存储在索引的叶子节点
  4. 索引优缺点:

    1. 优点 :加快查询速度
    2. 缺点:降低写的效率,占用更多的磁盘空间
  5. 索引的创建:create index 索引名 on 表名(字段名);

  6. 索引的删除:drop index 索引名 on 表名;

  7. 正确的使用索引:

    1. 只有对创建了索引的列进行条件筛选的时候效率才可以提高
    2. 索引对应的列做条件不能参与运算,不能使用函数
    3. 当某一列的区分度非常小(重复率高),不适合创建索引
    4. 当范围作为条件的时候,查询结果的范围越大越慢,越小越快。
    5. like关键字:如果使用%/ _ 开头都无法命中索引
    6. 多个条件:如果只有一部分创建了索引,条件用and相连,那么可以提高查询效率,如果用or相连,不能提高效率
    7. 联合索引:
      1. 条件不能用or
      2. 要服从最左前缀原则
      3. 不能从使用了范围的条件开始之后的索引都失效
  8. 基础概念:

    1. explain :执行计划

      1. explain
    2. 覆盖索引 using index:在查询的过程中不需要回表

从入门到自闭之Python--MySQL数据库的多表查询的更多相关文章

  1. MySQL数据库语法-多表查询练习一

    MySQL数据库语法-多表查询练习一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的多表查询的外键约束,以及如何使用外链接和内连接查询数据信息. 一.数据表和测试 ...

  2. MySQL数据库之单表查询中关键字的执行顺序

    目录 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 2 执行顺序 3 关键字使用语法 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from ...

  3. MySQL数据库语法-单表查询练习

    MySQL数据库语法-单表查询练习 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要是对聚合函数和分组的练习. 一.数据表和测试数据准备 /* @author :yinz ...

  4. mysql数据库之单表查询多表查询

    单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex e ...

  5. mysql数据库之单表查询

    单标查询 单表查询语句 关键字执行的优先级 简单查询 where约束 group by 聚合函数 HAVING过滤 order by 查询排序 LIMIT限制查询的记录数 使用正则表达式查询 单表查询 ...

  6. nodejs MYSQL数据库执行多表查询

    1.设计数据库 2.设计数据库表 genres表: books表: 3.安装MySQL模块 4. 代码编写 (1) 第一种方法: 在query中使用nextTables属性,将属性值设置为ture d ...

  7. mysql数据库之多表查询

                                                                            准备                          ...

  8. 关于Mysql数据库进行多表查询时设计编程思想

    SQL代码:

  9. python 之 数据库(多表查询之连接查询、子查询、pymysql模块的使用)

    10.10 多表连接查询 10.101 内连接 把两张表有对应关系的记录连接成一张虚拟表 select * from emp,dep: #连接两张表的笛卡尔积 select * from emp,de ...

  10. mysql数据库之联表查询

    表准备: 这次我们用到5张表: class表: student表: score表: course表: teacher表: 表结构模型: 我们针对以下需求分析联表查询: 1.查询所有的课程的名称以及对应 ...

随机推荐

  1. AGC032E modulo pairing

    题意 原题 给出\(2n\)个\(\leq m\)的数,求最优的两两配对方案 使\(n\)组\((x,y)\)的\((x+y)mod \space m\)最大值最小 \(n\leq 10^5,m \l ...

  2. 基于DAT的中文分词方法的研究与实现

    一.从Trie说起 DAT是Double Array Trie的缩写,说到DAT就必须先说一下trie是什么.Trie树是哈希树的一种,来自英文单词"Retrieval"的简写,可 ...

  3. 2017-12-3 Crontab(字符串处理)

    Crontab 哈哈本人的不及格代码(暂留): #include<iostream> #include<queue> #include<cmath> #includ ...

  4. Linux CentOS 7修改内核启动默认顺序

    1.查看系统有几个内核 a.进入grub2.cfg文件中进行查看 b.通过grub界面查看 3.设置默认启动内核 grub2-set-default "内核版本" 配置默认内核4. ...

  5. 批量执行(Linux命令,上传/下载文件)

    前言: 每个公司的网络环境大都划分 办公网络.线上网络,之所以划分的主要原因是为了保证线上操作安全: 对于外部用户而言也只能访问线上网络的特定开放端口,那么是什么控制了用户访问线上网络的呢? 防火墙过 ...

  6. baidu echats简介

    http://note.youdao.com/noteshare?id=ef467acdbe5b84005a1315d77a4475d1

  7. java数据结构之ConcurrentHashMap

    大神博客:https://www.cnblogs.com/study-everyday/p/6430462.html https://baijiahao.baidu.com/s?id=16170899 ...

  8. SpringBoot + Swagger2 自动生成API接口文档

    spring-boot作为当前最为流行的Java web开发脚手架,相信越来越多的开发者会使用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端 ...

  9. vue定义global.js,挂载在vue原型上面使用

    首先在src目录下创建global目录,在global目录下创建index.js. export default { install(Vue) { var that = this // 1. 添加全局 ...

  10. mysql 数据库的基本操作

    day 41 MySql 一. 为啥使用数据库? 因为之前使用文件(Excel)管理数据, 但是数据量特别大的时候,使用Excel管理 的话, 就比较的麻烦了因此引入一个新的数据管理软件 : 数据库软 ...