数据准备

-- 创建db6数据库
CREATE DATABASE db6;
-- 使用db6数据库
USE db6;-- 创建user表
CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT,    -- 用户idNAME 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,   -- 订单idnumber VARCHAR(30),                  -- 订单编号uid INT,    -- 外键字段CONSTRAINT ou_fk1 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,  -- 商品分类idNAME VARCHAR(10)                    -- 商品分类名称
);
-- 添加数据
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,   -- 商品idNAME VARCHAR(30),                    -- 商品名称cid INT, -- 外键字段CONSTRAINT cp_fk1 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,  -- 中间表iduid INT, -- 外键字段。需要和用户表的主键产生关联pid INT, -- 外键字段。需要和商品表的主键产生关联CONSTRAINT up_fk1 FOREIGN KEY (uid) REFERENCES USER(id),CONSTRAINT up_fk2 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 USER INNER JOIN orderlist ON user.id=orderlist.uid;
    SELECT * FROM USER JOIN orderlist ON user.id=orderlist.uid;-- 查询用户信息和对应的订单信息,起别名
    SELECT * FROM USER u JOIN orderlist o ON u.id=o.uid;-- 查询用户姓名,年龄。和订单编号
    SELECTu.`name`,   -- 姓名u.`age`, -- 年龄o.`number`   -- 订单编号
    FROMUSER u          -- 用户表
    JOINorderlist o     -- 订单表
    ON u.`id` = o.`uid`;
    
  • 隐式内连接
    -- 标准语法
    SELECT 列名 FROM 表名1,表名2 WHERE 条件;-- 查询用户姓名,年龄。和订单编号
    SELECTu.`name`,   -- 姓名u.`age`, -- 年龄o.`number`   -- 订单编号
    FROMUSER u,     -- 用户表orderlist o     -- 订单表
    WHEREu.`id`=o.`uid`;
    

外连接查询

  • 左外连接

    • 查询原理

      • 查询左表的全部数据,和左右两张表有交集部分的数据
    • 基本演示

      -- 标准语法
      SELECT 列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 条件;-- 查询所有用户信息,以及用户对应的订单信息
      SELECTu.`name`,   -- 姓名u.`age`, -- 年龄o.`number`   -- 订单编号
      FROMUSER u          -- 用户表
      LEFT OUTER JOINorderlist o     -- 订单表
      ONu.`id`=o.`uid`;
      
  • 右外连接

    • 查询原理

      • 查询右表的全部数据,和左右两张表有交集部分的数据
    • 基本演示

      -- 基本语法
      SELECT 列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 条件;-- 查询所有订单信息,以及订单所属的用户信息
      SELECTu.`name`,   -- 姓名u.`age`, -- 年龄o.`number`   -- 订单编号
      FROMUSER u          -- 用户表
      RIGHT OUTER JOINorderlist o     -- 订单表
      ONu.`id`=o.`uid`;
      

子查询

  • 子查询介绍

    • 查询语句中嵌套了查询语句。我们就将嵌套查询称为子查询!
  • 子查询-结果是单行单列的

    • 可以作为条件,使用运算符进行判断!

    • 基本演示

      -- 标准语法
      SELECT 列名 FROM 表名 WHERE 列名=(SELECT 聚合函数(列名) FROM 表名 [WHERE 条件]);-- 查询年龄最高的用户姓名
      SELECT MAX(age) FROM USER;              -- 查询出最高年龄
      SELECT NAME,age FROM USER WHERE age=26; -- 根据查询出来的最高年龄,查询姓名和年龄
      SELECT NAME,age FROM USER WHERE age = (SELECT MAX(age) FROM USER);
      

      注意:这种方式是错错误的
      SELECT NAME,MAX(age) FROM USER;

  • 子查询-结果是多行单列的

    • 可以作为条件,使用运算符in或not in进行判断!
    • 基本演示
      -- 标准语法
      SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]); -- 查询张三和李四的订单信息
      SELECT id FROM USER WHERE NAME='张三' OR NAME='李四';   -- 查询张三和李四用户的id
      SELECT number,uid FROM orderlist WHERE uid=1 OR uid=2; -- 根据id查询订单
      SELECT number,uid FROM orderlist WHERE uid IN (SELECT id FROM USER WHERE NAME='张三' OR NAME='李四');
      
  • 子查询-结果是多行多列的

    • 可以作为一张虚拟表参与查询!
    • 基本演示
      -- 标准语法
      SELECT 列名 FROM 表名 [别名],(SELECT 列名 FROM 表名 [WHERE 条件]) [别名] [WHERE 条件];-- 查询订单表中id大于4的订单信息和所属用户信息
      SELECT * FROM USER u,(SELECT * FROM orderlist WHERE id>4) o WHERE u.id=o.uid;
      

mysql ---- 多表查询相关推荐

  1. java mysql 多表查询_解析Mysql多表查询的实现

    查询是数据库的核心,下面就为您介绍Mysql多表查询时如何实现的,如果您在Mysql多表查询方面遇到过问题,不妨一看. Mysql多表查询: CREATE TABLE IF NOT EXISTS co ...

  2. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  3. mysql教程多表查询_解析Mysql多表查询的实现

    查询是数据库的核心,下面就为您介绍Mysql多表查询时如何实现的,如果您在Mysql多表查询方面遇到过问题,不妨一看. Mysql多表查询: CREATE TABLE IF NOT EXISTS co ...

  4. 零基础带你学习MySQL—多表查询笛卡尔集(二十)

    零基础带你学习MySQL-多表查询笛卡尔集(二十) 一.多表查询 多表查询:就是指基于两个和两个以上的表的查询,在实际应用中,单个表并不能满足你的需求,我们经常需要在很多个表之间查询数据 二.笛卡尔集 ...

  5. mysql 大表查询慢_mysql大表查询慢怎么优化?

    mysql大表查询慢的优化方法:1.合理建立索引,通常查询利用到索引比不用索引更快:2.对关键字段建立水平分区,比如时间字段,若查询条件往往通过时间范围来进行查询,能提升不少性能:3.建立粗粒度数据表 ...

  6. mysql锁表查询和解锁操作

    mysql锁表查询和解锁操作 1.在做数据库操作时,有时会因为自己的粗心或者程序设计上的缺陷导致锁表,在mysql中查看锁表和解锁的步骤如下: //1.查看当前数据库锁表的情况SELECT * FRO ...

  7. Mysql 多表查询详解

    Mysql 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...

  8. Mysql多表查询效率的研究(一)

    Mysql多表查询效率的研究(一) 本文探究了mysql InnoDB引擎在多表查询的应用场景下,使用子表.内连接和左联接运行速度的差别,并且比较了索引使用与否对查询效率的影响. 第一部分简略地概括了 ...

  9. cmd操作MySQL 多表查询(日记 day 4)

    cmd操作MySQL 多表查询 今天记录一下学习多表查询的一些操作,也算是练习记录了. 通过练习排错,来避免知识的盲区和解决心中的一些疑惑 其中的数据.题目是参照b站大刘老师的,我觉得讲的很精炼 有兴 ...

  10. 浅谈 MySQL 连表查询

    浅谈 MySQL 连表查询 连表查询是一把双刃剑, 优点是适应范式, 减少数据冗余; 缺点是连表查询特别是多张表的连表会增加数据库的负担, 降低查询效率. 简介 连表查询就是 2 张表或者多张表的联合 ...

最新文章

  1. java been 字段命名的坑
  2. python写一个服务_写一个Python的windows服务
  3. 使用delphi 开发多层应用(十二)使用kbmMW webserver 返回JSON
  4. FineReport报表和FineBI的差别和各自的优势在哪
  5. 在Spark中自定义Kryo序列化输入输出API(转)
  6. 【ubuntu-version】 几种常见工具查看版本的命令
  7. Servlet页面跳转实现方法的区别
  8. hibernate多对一和一对多关联
  9. ElasticSearch概述(一)——简介
  10. 【CDH】 kafkaServer-gc.log日志太多
  11. NGUI_2.6.3_教程五(角色信息跟随)
  12. swift网络编程入门应用:天气预报
  13. 学python语言有前途吗-在成都学Python有发展前景吗?
  14. golang在windows下编译Linux下的文件
  15. log4j 配置文件参数说明
  16. 超星pdg格式转换为pdf格式原理方法
  17. 竞拍网站服务器配置,GOM引擎新区竞拍脚本,GOM传奇服务端设置竞拍的方法和教程...
  18. Windows 10 使用Easy Sysprep V5 新版封装软件的图文封装教程
  19. linux系统开启端口命令
  20. 高斯过程、高斯过程回归、克里金模型

热门文章

  1. 【好文推荐】梁宁:人一通透,就不怎么算小账
  2. 推荐系统实战第二部分 评价指标
  3. 好文!2020届最新互联网校招薪资大全!
  4. leetcode力扣454. 四数相加 II
  5. 万物皆可Graph | 当信息检索遇上图神经网络
  6. Knowledge Distillation | 知识蒸馏经典解读
  7. 啥?!BM25 比语义向量检索效果好?
  8. 面试题简答题——数据库相关汇总
  9. puppet连载八:linux优化模块
  10. 数字信号处理1:卷积