• day55


    内容回顾:
    1.数据类型
    -整型
    tinyint
    int
    bigint
    -浮动型
    float
    double
    decimal
    -字符
    定长:char char()
    变长:varchar
    text
    -datetime
    YYYY-MM-DD HH:mm:ss
    -enum
    多选一
    -set集合
    多选一或多选多
    2.约束
    作用:保证数据的完整性和一致性
    -not null 和 default
    不能为空值 设置默认值
    -unique 不同的 唯一的
    -primary key 主键 化学反应===not null + unique
    -auto_increment 自增长 主要应用在主键字段上
    -foreign key 外键
    作用:让两张表产生关系

    今日内容:
    1.外键

    (1)创建被关联(主表)
    create table dep(
    id int primary key auto_increment,
    name varchar(20) not null,
    descripe char(40) not null
    );
    create table emp(
    id int primary key auto_increment,
    name varchar(20) not null,
    age int not null,
    dep_id int,
    constraint fk_dep foreign key(dep_id) references dep(id)
    on delete cascade
    on update cascade
    );

    2.外键的变种
    -一对多或多对一
    书和出版社

       一对多(或多对一):一个出版社可以出版多本书。看图说话。

       关联方式:foreign key

    create table press(
    id int primary key auto_increment,
    name varchar(20)
    );

    create table book(
    id int primary key auto_increment,
    name varchar(20),
    press_id int not null,
    constraint fk_book_press foreign key(press_id) references press(id)
    on delete cascade
    on update cascade
    );
    -多对多
    作者和书籍的关系

    多对多:一个作者可以写多本书,比本书也可以有很多作者

    关联方式:foreign key+一张新的表

    # 创建被关联表author表,之前的book表在讲多对一的关系已创建
    create table author(
    id int primary key auto_increment,
    name varchar(20)
    );
    #这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了
    create table author2book(
    id int not null unique auto_increment,
    author_id int not null,
    book_id int not null,
    constraint fk_author foreign key(author_id) references author(id)
    on delete cascade
    on update cascade,
    constraint fk_book foreign key(book_id) references book(id)
    on delete cascade
    on update cascade,
    primary key(author_id,book_id)
    );

    一对一

    用户和博客

    一对一:一个用户只能注册一个博客

    关联方式:foreign key+unique
    #两张表: 用户表 (user)和 博客表(blog)
    # 创建用户表
    create table user(
    id int primary key auto_increment,
    name varchar(20)
    );
    # 创建博客表
    create table blog(
    id int primary key auto_increment,
    url varchar(100),
    user_id int unique,
    constraint fk_user foreign key(user_id) references user(id)
    on delete cascade
    on update cascade
    );

    3.单表查询
    select 字段1,字段2... FROM 表名
    WHERE 条件
    GROUP BY field
    HAVING 筛选
    ORDER BY field
    LIMIT 限制条数
    重点中的重点:关键字的执行优先级
    from
    where
    where子句中可以使用
    1.比较运算符:>、<、>=、<=、<>、!=
    2.between 80 and 100 :值在80到100之间
    3.in(80,90,100)值是10或20或30
    4.like 'xiaomagepattern': pattern可以是%或者_。%小时任意多字符,_表示一个字符
    5.逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
    group by
    #1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的

    #2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等

    #3、为何要分组呢?
    取每个部门的最高工资
    取每个部门的员工数
    取男人数和女人数

    小窍门:‘每’这个字后面的字段,就是我们分组的依据

    #4、大前提:
    可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数
    聚合函数
    max()求最大值
    min()求最小值
    avg()求平均值
    sum() 求和
    count() 求总个数
    having
    HAVING与WHERE不一样的地方在于

    #!!!执行优先级从高到低:where > group by > having
    #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。

    #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
    select
    distinct
    order by
    按单列排序
    SELECT * FROM employee ORDER BY age;
    SELECT * FROM employee ORDER BY age ASC;
    SELECT * FROM employee ORDER BY age DESC;
    按多列排序:先按照age升序排序,如果年纪相同,则按照id降序
    SELECT * from employee
    ORDER BY age ASC,
    id DESC;
    limit
    示例:
    SELECT * FROM employee ORDER BY salary DESC
    LIMIT 3; #默认初始位置为0

    SELECT * FROM employee ORDER BY salary DESC
    LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条

    SELECT * FROM employee ORDER BY salary DESC
    LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条

    1.找到表:from

    2.拿着where指定的约束条件,去文件/表中取出一条条记录

    3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

    4.将分组的结果进行having过滤

    5.执行select

    6.去重

    7.将结果按条件排序:order by

    8.限制结果的显示条数
  • 相关阅读:
    项目踩坑实记 :2019年(SSM 架构)
    多线程实践
    SpringCloud(一)之我学 Eureka
    JVM 第一次学习总结 --- 2019年4月
    《深入理解 JVM 虚拟机》 --- 看书笔记
    JVM 学习(二)Java 内存模型、方法内联、逃逸 --- 2019年4月
    JVM 学习(一)反射、垃圾回收、异常处理--- 2019年4月
    剑指offer-18.树的子结构
    剑指offer-17.合并两个有序链表
    剑指offer-16.翻转链表
  • 原文地址:https://www.cnblogs.com/jerry-hou/p/12332695.html
Copyright © 2020-2023  润新知