• PYTHON3.Mysql_expert.day03


    1.外键
         1.创建表设置外键
             create table xxxx(
                 xxx xxxx,
                 constraint 外键名 foreign key(字段)
                 references 主表(主键)
                 on delete cascade|restrict|set null
                 on update cascade|restrict|set null
             )
         2.修改表增加外键
             alter table xxx
             add constraint 外键名
             foreign key(字段)
             references 主表(主键)
             on delete cascade|restrict|set null
             on update cascade|restrict|set null
         3.查看外键
             show create table xxxx
         4.删除外键
             alter table xxxx
             drop foreign key 外键名
    2.连接查询
         1.交叉连接
             select * from A,B where A.bid=B.id
         2.内连接
             连接两张表,将满足条件的数据筛选出来
             select * from A
             inner join B
             on A.bid = B.id
    =======================================================
    1.连接查询
         1.外连接
             1.左外连接
                 1.作用
                     1.左表中所有的数据都会查询出来(即便不满足条件)
                     2.将右表中满足关联条件的数据查询出来
                     3.关联不上的数据关联字段将以null作为填充
                 2.语法
                     select 字段
                     from A left join B
                     on 关联条件

           

    -- 1左外连接:左表teacher,右表course,关联条件:teacher.course_id = course.id
    select * from
    teacher left join course
    on teacher.course_id = course.id
    
    --  2左外连接:左表course,右表teacher,关联条件:teacher.course_id = course.id
    select * from
    course left join teacher
    on teacher.course_id = course.id


                    左外连接

    2.右外连接
                 1.作用
                     1.右表中所有的数据都会查询出来
                     2.将左表中满足关联条件的数据查询出来
                     3.关联不上的数据关联字段将以null作为填充
                 2.语法
                     select 字段
                     from A right join B
                     on 关联条件

       

    -- 3.右外连接,左表:teacher,右表:course,关联条件:teacher.course_id = course.id
    select * from
    teacher right join course
    on teacher.course_id = course.id;
    
    
    select * from
    course right join teacher
    on teacher.course_id = course.id;
    

    右连接
             3.完整外连接
                 1.作用
                     将两张表的数据做关联查询,关联得上的则正常显示
                     关联不上的,则以null值填充
                 2.语法
                     select * from
                     A full join B
                     on 关联条件

         

    -- 4.完整外连接(有误)
    select * from
    course full join teacher
    on full.id = teacher.course_id
    
    -- 5.查看没有参加过考试的同学的信息
    select * from
    student left join score
    on student.id = score.stu_id
    where score.score is null;

    练习1
    2.子查询
         1.什么是子查询
             将一个查询的结果作为外侧操作的一个条件出现
         2.语法
             select .... from 表名 where 条件=(select ... )
             select .... from (查询)

         练习3:查询student表中比'张三'年龄大的学员信息
             select * from student where age > (select age from student where name = '张三');

    练习3
        练习4:

            1.查询考过"齐天大圣"老师所教课程的学员的信息
             2.查询在score表中有成绩的学员的信息
             3.查询"Python基础"课程并且分数在80分以上的
               学员的姓名和毕业院校
             4.查询和"张三"相同班级以及相同专业的同学的信息

        

    -- 练习4
    -- 1.查询考过齐天大圣老师所教授课程的学员信息
    -- 1.1查询该老师所教课程的id
    select course_id from teacher where name='齐天大圣';
    -- 1.2从course 表中查询出course_id为1的stu_id的值
    select stu_id from score where course_id = (select course_id from teacher where name='齐天大圣');
    -- 1.3 从student 中查出id在以上查询结果中出现的学员信息
    select * from student where id in (
      select stu_id from score where course_id = (
        select course_id from teacher where name='齐天大圣'
      )
    );
    -- 2.查询在score表中有成绩的学员信息
     select * from student where id in(select stu_id from score);
    -- 3.查询‘python基础’课程并且分数在820以上的学员姓名和毕业院校
    select name,school from student
      where id in(select stu_id from score
      where course_id = (select id from course where cname = 'python基础') and score > 80
      );
    -- 4.查询和‘张三’相同班级及相同专业的同学信息
    select * from student where name != '张三' and class_id = (select class_id from student where name = '张三')
    and major_id = (select major_id from student where name = '张三');
    


    3.E-R模型
         1.什么E-R模型
             Entity - Relationship 模型 (实体-关系模型)
             在数据库设计阶段一定会使用到
             以图形的方式展示数据库中的表以及表关系
         2.概念
             1.实体 - Entity
                 表示数据库中的一个表
                 图形表示:矩形框
             2.属性
                 表示某实体中的某一特性,即表的字段
                 图形表示:椭圆形
             3.关系 - Relationship
                 表示实体与实体之间的关联关系
                 1.一对一关系(1:1)
                     A表中的一条记录只能关联到B表中的一条记录上
                     B表中的一条记录只能关联到A表中的一条记录上

                    在数据库中的实现手段
                     在任意的一张表中增加:
                         1.外键,并引用自另一张表主键
                         2.唯一索引/约束
                 2.一对多关系(1:M)
                     A表中的一条记录能够关联到B表中的多条记录
                     B表中的一条记录只能关联到A表中的一条记录

                    在数据库中的实现手段
                     在"多"表中增加:
                         1.外键,引用"一"表的主键
                 3.多对多关系(M:N)
                     A表中的一条记录能够关联到B表中的多条记录
                     B表中的一条记录能够关联到A表中的多条记录

                    在数据库中的实现手段
                     靠第三张关联表,来实现多对多
                         1.创建第三张表
                         2.一个主键,俩外键
                             外键分别引用自关联的两张表的主键

          

    -- 1.创建wife表,目的是实现与teacher的一对一关系
    -- wife增加外键
    create table wife(
    id int primary key auto_increment,
    name varchar(20) not null,
    age int not null,
    teacher_id int not null,
    constraint fk_teacher_wife foreign key(teacher_id) references teacher(id),
    unique (teacher_id)
    );
    
    insert into wife(name,age,teacher_id) values('祁夫人',23,1),('吕夫人',76,2);
    
    
    create table goods(
    id int primary key auto_increment,
    gname varchar(32) not null,
    gprice int not null
    );
    
    -- 插入数据
    insert into goods(gname,gprice) VALUES
    ('iphone56',18888),
    ('ipad43mini',8888),
    ('华为mate3000',3000);
    
    -- 创建shoppingchart,teacher与goods对对多之间的第三张关联表
    create table shoppingcart(
      id int PRIMARY key auto_increment,
      t_id int,
      g_id int,
      count int DEFAULT 1,
      constraint fk_goods_shoppingcart foreign key(g_id) REFERENCES goods(id),
      constraint fk_teacher_shoppingcart foreign key(t_id) REFERENCES teacher(id)
    );
    
    -- 测试
    insert into shoppingcart(t_id,g_id)VALUES (1,1),(1,2);
    insert into shoppingcart VALUES (null,1,3,15),(null,2,2,8),(null,2,3,1);


    4.SQL语句优化
        1.索引:经常select,where,order by 的字段应该建立索引
         2.单条查询语句最后添加 LIMIT 1    , 停止全表扫描
         3.where子句中尽量不使用 != ,否则放弃索引全表扫描
         4.尽量避免null值判断,否则放弃索引全表扫描
         5.尽量避免 or 连接条件,否则放弃索引全表扫描
         6.模糊查询尽量避免使用前置%,否则全表扫描
         7.尽量避免使用in 和 not in,否则全表扫描
         8.尽量避免使用 select * ,使用具体字段代替 *,不要返回用不到的任何字段

    select * from A inner join B
    on A.bid = B.id


    Navicat for MySQL
    Power Designer - 数据库建模
    Microsoft Visio - ER图

  • 相关阅读:
    Hibernate初学者配置常见错误
    Hibernate单向多对一和单向一对多的配置
    浏览器兼容问题及解决办法(忽然想到的)
    经典sql语句大全
    log4j的ConversionPattern参数的格式含义
    SVN的使用及MyEclipse的集成
    windows下使用makefile
    c把bin二进制文件写入磁盘任意扇区(引用)
    java环境变量配置的一个网页
    图的深度优先遍历(DFS)—递归算法
  • 原文地址:https://www.cnblogs.com/shengjia/p/11165778.html
Copyright © 2020-2023  润新知