多表操作-内连接查询

  • 目录

    多表查询分类

    多表查询数据准备

    查询原理

    查询语法

    相关概念

    实例操作


  • 多表查询分类

  • 内连接查询
  • 外连接查询
  • 子查询
  • 自关联查询
  • 多表查询数据准备

  • 总共创建5个表
  • 分别为用户表,订单表,商品分类表,商品表,中间表
  • -- 创建user表
    CREATE TABLE user(
    	id INT PRIMARY KEY auto_increment, -- 用户id
    	name VARCHAR(20),  -- 用户姓名
    	age INT  -- 用户年龄
    );
    -- 添加数据
    INSERT INTO user VALUES (1,'张三',23);
    INSERT INTO user VALUES (2,'李四',24);
    INSERT INTO user VALUES (3,'王五',25);
    INSERT INTO user VALUES (4,'赵六',26);
    
    -- 创建订单表
    CREATE TABLE orderlist(
     id INT PRIMARY KEY auto_increment, -- 订单id
     number VARCHAR(20),   -- 订单编号
     uid INT, -- 外键字段
     CONSTRAINT ou FOREIGN KEY (uid) REFERENCES user(id)
     );
     -- 添加数据
     INSERT INTO orderlist VALUES (1,'hm001',1);
     INSERT INTO orderlist VALUES (2,'hm002',1);
     INSERT INTO orderlist VALUES (3,'hm003',2);
     INSERT INTO orderlist VALUES (4,'hm004',2);
     INSERT INTO orderlist VALUES (5,'hm005',3);
     INSERT INTO orderlist VALUES (6,'hm006',3);
     INSERT INTO orderlist VALUES (7,'hm007',NULL);
     
     -- 创建商品分类表
     CREATE TABLE category(
       id INT PRIMARY KEY auto_increment, -- 商品分类id
    	 NAME VARCHAR(20)  -- 商品分类名称
     );
     -- 添加数据
     INSERT INTO category VALUES (1,'手机数码');
     INSERT INTO category VALUES (2,'电脑办公');
     INSERT INTO category VALUES (3,'烟酒茶糖');
     INSERT INTO category VALUES (4,'鞋靴箱包');
     
     -- 创建商品表
     CREATE TABLE product(
    		id INT PRIMARY KEY auto_increment, -- 商品id
    		NAME VARCHAR(20), -- 商品名称
    		cid INT, -- 外键字段
    		CONSTRAINT cp_1 FOREIGN KEY (cid) REFERENCES category(id)
     );
     -- 添加数据
     INSERT INTO product VALUES (1,'华为手机',1);
     INSERT INTO product VALUES (2,'小米手机',1);
     INSERT INTO product VALUES (3,'联想电脑',2);
     INSERT INTO product VALUES (4,'苹果电脑',2);
     INSERT INTO product VALUES (5,'中华香烟',3);
     INSERT INTO product VALUES (6,'玉溪香烟',3);
     INSERT INTO product VALUES (7,'计生用品',NULL);
     
     -- 创建中间表
     CREATE TABLE us_pro(
    	upid INT PRIMARY KEY auto_increment, -- 中间表id
    	uid INT, -- 外键字段,需要和用户表的主键产生关联
    	pid INT, -- 外键字段,需要和商品表的主键产生关联
    	CONSTRAINT up_1 FOREIGN KEY (uid) REFERENCES user(id),
    	CONSTRAINT up_2 FOREIGN KEY (pid) REFERENCES product(id)
     );
     -- 添加数据
     INSERT INTO us_pro VALUES (NULL,1,1);
     INSERT INTO us_pro VALUES (NULL,1,2);
     INSERT INTO us_pro VALUES (NULL,1,3);
     INSERT INTO us_pro VALUES (NULL,1,4);
     INSERT INTO us_pro VALUES (NULL,1,5);
     INSERT INTO us_pro VALUES (NULL,1,6);
     INSERT INTO us_pro VALUES (NULL,1,7);
     INSERT INTO us_pro VALUES (NULL,2,1);
     INSERT INTO us_pro VALUES (NULL,2,2);
     INSERT INTO us_pro VALUES (NULL,2,3);
     INSERT INTO us_pro VALUES (NULL,2,4);
     INSERT INTO us_pro VALUES (NULL,2,5);
     INSERT INTO us_pro VALUES (NULL,2,6);
     INSERT INTO us_pro VALUES (NULL,2,7);
     INSERT INTO us_pro VALUES (NULL,3,1);
     INSERT INTO us_pro VALUES (NULL,3,2);
     INSERT INTO us_pro VALUES (NULL,3,3);
     INSERT INTO us_pro VALUES (NULL,3,4);
     INSERT INTO us_pro VALUES (NULL,3,5);
     INSERT INTO us_pro VALUES (NULL,3,6);
     INSERT INTO us_pro VALUES (NULL,3,7);
     INSERT INTO us_pro VALUES (NULL,4,1);
     INSERT INTO us_pro VALUES (NULL,4,2);
     INSERT INTO us_pro VALUES (NULL,4,3);
     INSERT INTO us_pro VALUES (NULL,4,4);
     INSERT INTO us_pro VALUES (NULL,4,5);
     INSERT INTO us_pro VALUES (NULL,4,6);
     INSERT INTO us_pro VALUES (NULL,4,7);
  • 查询原理

  • 内连接查询的是两张表有交集的部分数据(有主外键关联的数据)
  • 查询语法

  • 显式内连接
  • select 列名 from 表名1 [inner] join 表名2 on 条件
  • 隐式内连接
  • select 列名 from 表名1,表名2 where 条件
  • 相关概念

  • 自连接
  • 概念:是内连接查询中一种特殊的等值连接,所谓的自连接就是指表与其自己当前表进行连接
  • 最大特点:一张表看作两张表
  • 自己连接自己
  • 等值连接
  • 就是在关键字on后的匹配条件是通过=来实现的;
  • 等值连接通常是一个表连接另外一张表
  • 不等值连接
  • 在关键字on后匹配条件中使用除了=以外的关系运算符实现的不等条件(> >= < <= !=)
  • 实例操作

  • 显式内连接
  • 查询用户信息和对应的订单信息
  • 查询用户信息和对应的订单信息,起别名
  • 查询用户姓名,年龄和订单编号
  • -- 显式内连接
    -- 查询用户信息和对应的订单信息
    SELECT * FROM user INNER JOIN orderlist ON orderlist.uid=user.id;
    
    -- 查询用户信息和对应的订单信息,起别名
    SELECT * FROM user u INNER JOIN orderlist o ON o.uid=u.id;
    
    -- 查询用户姓名,年龄和订单编号
    SELECT
    		u.name,      -- 用户姓名
    		u.age,       -- 用户年龄
    		o.number     -- 订单编号
    FROM
        user u       -- 用户表
    INNER JOIN
        orderlist o  -- 订单表
    ON 
    		o.uid=u.id;
  • 隐式内连接
  • 查询用户姓名,年龄和订单编号
  • -- 隐式内连接
    -- 查询用户姓名,年龄和订单编号
    SELECT
    		u.name,      -- 用户姓名
    		u.age,       -- 用户年龄
    		o.number     -- 订单编号
    FROM
        user u,       -- 用户表
        orderlist o  -- 订单表
    WHERE
    		o.uid=u.id;
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔子队列

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值