zoukankan      html  css  js  c++  java
  • MySQL(十一)-多表查询(上)

    多表关系

    1 一对一

    方式1:通过修改表结构添加外键
    修改表结构: ALTER TABLE 当前表名 ADD CONSTRAINT FOREIGN KEY(id) REFERENCES 被关联表名 (id);

    方式1:通过修改表结构添加外键 
    -- 用户和资料表 
    -- 用户表 
    CREATE TABLE customer ( 
          id INT PRIMARY KEY AUTO_INCREMENT, 
          user_name VARCHAR(50) 
    );
    -- 资料表 
    CREATE TABLE extension( 
          id INT PRIMARY KEY AUTO_INCREMENT, 
          info VARCHAR(200) 
    );
    -- 外键(主键)关联主键 
    ALTER TABLE extension 
          ADD CONSTRAINT FOREIGN KEY(id) REFERENCES customer(id); 
    
    方式2: 在创建表时候,直接建立外键 
    -- 用户表同上 
    -- 资料表 
          --创建字段关联id 
    CREATE TABLE extension2( 
          id INT PRIMARY KEY AUTO_INCREMENT, 
          info VARCHAR(200), 
          cid INT UNIQUE, 
          foreign key(cid) REFERENCES customer(id) );
    
    注意:物理外键(主)和逻辑外键
    
    -- 测试数据 
    insert into customer values(1,'张三'); 
    insert into extension values(1,'开发工程师'); 
    
    insert into extension values(2,'测试工程师'); -- 报错,资料表时依赖于用户表 
    
    insert into customer values(1,'李四'); 
    insert into extension values(2,'测试工程师'); -- 成功 
    
    insert into extension2 values(1,'开发工程师',100); -- customer中没有id=100
    

    注意:auto_increment:如果没有指定编号,那么根据当前表中最大编号按照递增顺序编号,即使数据
    被删除,该编号也不会被再次利用

    方式2:通过建表时,添加外键约束

    创建表时候增加字段,用于外键约束:

    • 创建新字段 INT UNIQUE
    • foreign key(当前表字段名) REFERENCES 被关联表(id)

    2 一对多关系

    方式1:在多的一方表中增加字段,去关联少的一方的主键

    -- 商店表 
    CREATE TABLE shop( 
          id INT PRIMARY KEY, 
          sname VARCHAR(100) 
    );
    -- 商品表 
    CREATE TABLE goods( 
          id INT PRIMARY KEY auto_increment,
          gname VARCHAR(100), 
          price DOUBLE, 
          sid INT, 
          foreign key(sid) REFERENCES shop(id)
     );
    -- 在商店表中插入具体数据 
    insert into shop values(1,"华天"),(2,"好再来"); 
    
    -- 向商品表中增加数据 
    insert into goods values(1,'沙发',3999.9,1),(0,"电视",4888.8,1); --成功 i
    
    nsert into goods values(0,'笔记本',3999.9,3); -- 失败,shop不存在该编号
    

    方式2:新建一个关系表,用于关联之前两个表的各自主键。

    -- 商店表 
    CREATE TABLE shop( 
          id INT PRIMARY KEY, 
          sname VARCHAR(100) 
    );
    -- 商品表 
    CREATE TABLE goods2( 
          id INT PRIMARY KEY auto_increment, 
          gname VARCHAR(100), 
          price DOUBLE );
    -- 新建关系表 
    create table shop_goods( 
          id int primary key, 
          shop_id int, 
          goods_id int unique, 
          foreign key(shop_id) references shop(id), 
          foreign key(goods_id) references goods2(id) );
    
    -- 向goods2表中插入数据 
    insert into goods2 values (1,'沙发',999.9),(2,"电视",1999),(3,'笔记本',8999); 
    
    -- 向关系表中增加数据 
    insert into shop_goods values(1,2,3); --成功 
    insert into shop_goods values(2,2,3); -- 失败,同一个商品是能由一家卖 
    
    -- 向shop添加数据 
    insert into shop values (3,"家乐福");
    
    insert into shop_goods values(2,3,2); -- 成功 
    insert into shop_goods values(3,300,1); -- 失败,没有编号为300的店
    

    3 多对多
    创建第三方表用于记录各自主键

    • 学生和学科
    • 商品类型和商品
    -- 创建学生表 
    create table students( 
          id int primary key auto_increment not null, 
          s_name varchar(10) 
    );
    -- 创建学科表 
    create table courses( 
          id int primary key auto_increment not null, 
          c_name varchar(10) 
    );
    --第三张表 
    create table stu_cos( 
          id int primary key auto_increment not null, 
          s_id int, 
          c_id int, 
          foreign key(s_id) REFERENCES students(id), 
          foreign key(c_id) references courses(id)
    );
    
    -- 向学生表和课程表中插入数据 
    insert into students values(1,'张三'),(2,"李四"),(3,"王五"),(4,"马六"); 
    insert into courses values(1,"python"),(2,'java'),(3,"c++"),(4,'web'); 
    
    -- 向关系表中插入数据 
    insert into stu_cou values 
          (1,1,1),
          (2,3,3), 
          (3,2,1),
          (4,1,2), 
          (5,2,2),
          (6,4,4), 
          (7,4,3),
          (8,3,1);
    
  • 相关阅读:
    zabbix学习笔记----概念----2019.03.25
    用深信服AC控制方位话机注册链路的开、关
    方位话机冗余线路注册问题测试过程
    执行python文件报错SyntaxError: Non-ASCII character 'xe8' in file, but no encoding declared
    centos 7.4安装python3.7.4
    zabbix基础使用--添加ping监控
    snmp监控f5
    FortiGate 服务License注册步骤
    centos 7.4安装zabbix 3
    安装centos 6.7&7.4
  • 原文地址:https://www.cnblogs.com/duxiangjie/p/14243234.html
Copyright © 2011-2022 走看看