美文网首页
MySQL多表

MySQL多表

作者: 李小二的倔强 | 来源:发表于2024-04-08 23:14 被阅读0次

一、外键约束

多表的概念_外键约束:

1、外键:'从表中'引用'主表中'主键字段的字段。
2、外键字段的取值的特点:
    1).允许为NULL
    2).可以重复;
    3).所有的值,必须在主表的主键中出现。
3、创建外键约束:
    alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
    示例:
    ALTER TABLE emp ADD CONSTRAINT fk_emp FOREIGN KEY (deptId) REFERENCES dept (deptId);

二、多表查询:

1、内连接:也叫:等值连接。结果:两个表中的"等值部分"的记录
    A).隐式内连接【常用】:
        select 字段列表 from 表1 , 表2 where 两个表的等值条件 and 其它条件 and ...;
        示例:
        SELECT * FROM product,category WHERE product.cid = category.cid;
       1).from 表1,表2:表1和表2的顺序可以随意,会影响结果的列的排列顺序,但不会影响结果。
       2).where 两个表的等值条件:等号两边的左右位置也可以随意。
       3).select 字段列表:字段列表可以来自于两个表,如果两个表中的字段没用同名的,那么可以不使用"表名限定",
          但如果两个表中有同名字段,必须使用"表名限定";建议:使用"表名限定"。
          可以为"表"起个"别名",之后可以使用"别名"来限定:
        SELECT p.pname,p.price,c.cname FROM product p,category c WHERE p.cid = c.cid;
       4).练习:查询电脑类商品,要同时显示类别名称:
        SELECT * FROM product p,category c WHERE p.cid = c.cid AND c.cname = '电脑';
    B).显示内连接:
        select 字段列表 from 表1 INNER JOIN 表2 ON 两个表的等值关系 where 其它条件 and ... and ...;
        示例:
        SELECT * FROM product p INNER JOIN category c ON p.cid = c.cid WHERE c.cname = '电脑';
    C).两种连接的写法说明:
        1).select * from 表1 , 表2 ON 两个表的等值关系;//错误
        2).select * from 表1 INNER JOIN 表2 where 两个表的等值关系;//OK的
2、外连接:
    A).左外连接:查询出左表的所有记录 + 右表的等值记录
        select 字段列表 from 表1 LEFT JOIN 表2 ON 两个表的等值关系;
        示例:
        SELECT * FROM product p LEFT JOIN category c ON p.cid = c.cid;
    B).右外连接:查询出右表的所有记录 + 左表的等值记录
        select 字段列表 from 表1 RIGHT JOIN 表2 ON 两个表的等值关系;
        示例:
        SELECT * FROM product p RIGHT JOIN category c ON p.cid = c.cid;

三、三表联查:

#隐式内连接:
    select * from 表1,中间表,表2 where 表1和中间表的等值关系 and 中间表和表2的等值关系;
    例如:
    SELECT * FROM orders o , order_product op , product p 
        WHERE o.oid = op.oid AND op.pid = p.pid 
        AND o.orderDate = '2018-01-30' 
        ORDER BY o.orderNO;
#显示内连接:
    select * from 表1 INNER JOIN 中间表 ON 中间表和表1的等值关系
              INNER JOIN 表2 ON 中间表和表2的等值关系
    例如:

    SELECT * FROM orders o INNER JOIN order_product op ON o.oid = op.oid
                   INNER JOIN product p ON op.pid = p.pid
                   WHERE o.orderDate = '2018-01-30' 
                   ORDER BY o.orderNO;
#左外连接
    select * from 表1 LEFT JOIN 中间表 ON 中间表和表1的等值关系
              LEFT JOIN 表2 ON 中间表和表2的等值关系
    例如:
SELECT * FROM orders o LEFT JOIN order_product op ON o.oid = op.oid
               LEFT JOIN product p ON op.pid = p.pid
               WHERE o.orderDate = '2018-01-30' ORDER BY o.orderNO;
#右外连接
    select * from 表1 RIGHT JOIN 中间表 ON 中间表和表1的等值关系
              RIGHT JOIN 表2 ON 中间表和表2的等值关系
    例如:
SELECT * FROM orders o RIGHT JOIN order_product op ON o.oid = op.oid
               RIGHT JOIN product p ON op.pid = p.pid
               ORDER BY o.orderNO;

四、五表联查:

#隐式内连接
SELECT u.uname,p.pname FROM USER u,user_role ur,role r,role_privilage rp,privilage p 
    WHERE u.uid = ur.userId AND
         ur.roleId = r.rid AND
         r.rid = rp.roleId AND
         rp.privilageId = p.pid
#显示内连接:
SELECT u.uname,p.pname FROM  USER u INNER JOIN user_role ur ON u.uid = ur.userId
        INNER JOIN role r ON ur.roleId = r.rid
        INNER JOIN role_privilage rp ON r.rid = rp.roleId
        INNER JOIN privilage p ON rp.privilageId = p.pid;
#左外连接
SELECT u.uname,p.pname FROM  USER u LEFT JOIN user_role ur ON u.uid = ur.userId
            LEFT JOIN role r ON ur.roleId = r.rid
            LEFT JOIN role_privilage rp ON r.rid = rp.roleId
            LEFT JOIN privilage p ON rp.privilageId = p.pid;
#右外连接
SELECT u.uname,p.pname FROM  USER u RIGHT JOIN user_role ur ON u.uid = ur.userId
            RIGHT JOIN role r ON ur.roleId = r.rid
            RIGHT JOIN role_privilage rp ON r.rid = rp.roleId
            RIGHT JOIN privilage p ON rp.privilageId = p.pid;

五、子查询:

1).查询价格高于"劲霸"的商品:
    select * from product where price > (select price from product where pname = '劲霸')
2).概念:写在一个查询内部的查询就是:子查询。
3).作用:
    1).作为外部查询的"查询条件"
    2).作为外部查询的"虚拟表"
4).示例:
    1).查询条件的示例:查询所有的电脑、服装类商品
        select * from product where cid in (select cid from category where cname in ('电脑','服装'));
    2).作为虚拟表:查询所有的电脑、服装类商品
        select * from product p,category c where p.cid = c.cid and c.cname in ('电脑','服装');
        使用子查询:
        select * from product p,(select * from category where cname in('电脑','服装')) c where p.cid = c.cid;

相关文章

  • mysql实现多表关联

    mysql实现多表关联 mysql关联单张表

  • MySQL 多表操作

    day07-多表操作 今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建...

  • 深入浅出MySQL(五)

    多表查询 MySQL中的多表联查 MySQL中多表查询分为三种形式: 笛卡尔积的形式 内连接的形式 外连接的形式 ...

  • mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MY...

  • 2018-03-20

    MYSQL查询语句 MYSQL复杂操作语句 MYSQL多表查询方法 函数部分

  • 02MySQL的多表操作

    MySQL的多表操作 1 多表关系 MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多 1.1...

  • MySQL基础——多表查询

    上篇文章我们学习了MySQL基础——约束,这篇文章我们学习MySQL基础——多表查询。 多表关系 在数据表中,各个...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • Mysql-多表查询as索引

    1、Mysql多表查询2、information_schema 虚拟库3、索引 1、多表查询 方法(1) 根据需求...

  • 多表联合查询

    MySQL中基本的多表连接查询教程Mysql脚本之家 var tougao="goldensun";var lmn...

网友评论

      本文标题:MySQL多表

      本文链接:https://www.haomeiwen.com/subject/gocatjtx.html