当前位置:网站首页>多表操作-内连接查询
多表操作-内连接查询
2022-07-04 18:32:00 【汤键.TJ】
目录
多表查询分类
- 内连接查询
- 外连接查询
- 子查询
- 自关联查询
多表查询数据准备
- 总共创建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;
边栏推荐
猜你喜欢
随机推荐
English grammar_ Noun - use
双冒号作用运算符以及命名空间详解
Pointnet/Pointnet++点云数据集处理并训练
2014 Hefei 31st youth informatics Olympic Games (primary school group) test questions
2021 Hefei informatics competition primary school group
Stream流
Allure of pytest visual test report
Have you guys ever used CDC direct Mysql to Clickhouse
Hough Transform 霍夫变换原理
PointNeXt:通过改进的模型训练和缩放策略审视PointNet++
1002. A+B for Polynomials (25)(PAT甲级)
升级智能开关,“零火版”、“单火”接线方式差异有多大?
添加命名空间声明
node_ Exporter deployment
kotlin 循环控制
Oracle with as ORA-00903: invalid table name 多表报错
Explore the contour drawing function drawcontours() of OpenCV in detail with practical examples
BCG 使用之CBCGPProgressDlg进度条使用
The difference and usage between substr (), slice (), and substring () in the string interception methods of "understand series after reading"
kotlin 类和对象