zoukankan      html  css  js  c++  java
  • mysql 中多表 总结

    1.多表的创建语法

      alter table 从表名  add constraint 外键名 foreign key (从表类名) references 主表名(主表列);

      准备数据:

    CREATE DATABASE one2many;
    USE one2many;
    #创建学生表
    CREATE TABLE stu (
    	stuid VARCHAR(32) PRIMARY KEY,
    	NAME VARCHAR(32),
    	number INT ,
    	adress VARCHAR(32)
    );
    INSERT INTO stu VALUES ('s001','huluwa',123456,'葫芦山');
    INSERT INTO stu VALUES ('s002','automan',654321,'北海道');
    
    #创建成绩表
    CREATE TABLE score(
    	scoid VARCHAR(32),
    	chinese INT,
    	math INT,
    	english INT,
    	studentid VARCHAR(32)  #在成绩表中添加一列,存放学生表中学生ID
    );
    INSERT INTO score VALUES('sc1',100,90,90,'s001');
    INSERT INTO score VALUES('sc2',90,80,90,'s002');
    INSERT INTO score VALUES('sc3',90,70,70,'s001');
    INSERT INTO score VALUES('sc4',100,95,95,'s002');
    

         在上述两个表中,score表中的seudentid类存储了stu表中学生的信息,可以通过成绩在score表中查询到studentid后,在stu表中通过studentid的值查到该成绩对应的学生的信息,但此时两个表并没有添加外键关系,可以随意从表可以随意添加符合数据类型的值(这个值在主表中没有对应的信息).主表可以随意删除学生信息,删除后从表将查询不到,但是对应的考试成绩还存在,简单说就是主表可以随意删除数据,从表可以随意添加数据,这是不符合业务逻辑的

      添加主键约束

    ALTER TABLE score ADD CONSTRAINT stu_score FOREIGN KEY (studentid) REFERENCES stu(stuid);

        此时主表随意删除数据(从表中未删除)或从表随意添加数据(主表中没有对应的值)时就会报错.------a foreign key constraint fails

    2.多表的查询

      1)笛卡尔积

    SELECT * FROM score,stu;
    

         查询结果为:两个表格所有元素的组合.

        笛卡尔积查询会有大量的无用数据,一般不会使用.

      2)内连接

    SELECT * FROM score INNER JOIN stu ON score.studentid = stu.stuid;
    

       3)外连接

        A:左外连接

    SELECT * FROM score LEFT OUTER JOIN stu ON score.studentid = stu.stuid;
    

         查询结果为左侧的studentid对应的为准

        B:右外连接

    SELECT * FROM score RIGHT OUTER JOIN stu ON score.studentid = stu.stuid;
    

         查询结果为右侧的stuid对应的为准

      4)子查询

    SELECT NAME FROM stu WHERE stuid=(SELECT studentid FROM score WHERE scoid='sc4');

       查询结果为automan

         子查询就是一一个表中查到的结果为条件在另一个表中查询.

  • 相关阅读:
    02 序列模型问题
    02 序列模型问题
    04 电路交换
    31 路由算法.md
    NumPy入门教程
    有穷自动机
    上下文无关语法
    基本乐理
    正则表达式
    【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译(转)
  • 原文地址:https://www.cnblogs.com/cocosili/p/6700276.html
Copyright © 2011-2022 走看看