美文网首页
mysql的多表查询总结

mysql的多表查询总结

作者: dev晴天 | 来源:发表于2018-11-08 20:48 被阅读0次

前言:

前面我们了解了多表的设计及其创建,为了不和上一章的数据混合本章还是会建立新的数据库 进行数据的练习。

补充:笛卡尔积(了解)

多张表无条件联合查询,没什么意思。

例如:查询user orders表内所有字段。
语法:
 select user.*,orders.* from user,orders;

一 多表查询

1 知识架构图:
image.png
2 详细介绍(假如有a,b表来举例子)
  • 内连接
    格式1:显式内连接(推荐使用)
语法:
(*代表查所有字段)
select a.*,b.* from a[inner] join b on ab链接条件  

格式2:隐式内连接

语法:
select a.*,b.* from a,b where ab链接条件
  • 外链接
    格式1:左外连接(记住这个就行了)
select a.*,b.* from a left [outer] join b on 链接条件  
意思:先展示join左边表的全部数据,根据条件关联查询join右边的表,符合条件展示出来,不符合
     条件以null展示。

格式2:右外连接

 select a.*,b.* from b right join orders on user.id=orders.id;
 意思:先展示join右面边表的全部数据,根据条件关联查询join左边的表,符合条件展示出来,不符合
     条件以null展示。

注意:格式1 格式2 可以等价转换 记住一个就行。
  • 子查询 当一个查询是另一个查询的条件时,称之为子查询
3 准备数据(建库 建表 初始化数据)

首先创建个新数据库(day0602)


image.png

数据表的创建及其初始化(准备好了数据 如下)

初始化数据:
-- 用户表(user) 
   create table `user` (                                  
          `id` int auto_increment primary key,                
          `username` varchar(50)  -- 用户姓名                                                
        );

-- 订单表(orders)
   create table `orders` (                                                  
          `id` int  auto_increment primary key,                                  
          `price` double,                                           
          `user_id` int                                       
        );
-- 给订单表添加外键约束
alter table orders add constraint user_fk foreign key (user_id) references user(id); 

-- 向user表中添加数据
        insert into user values(3,'张三');
        insert into user values(4,'李四');
        insert into user values(5,'王五');
        insert into user values(6,'赵六');

-- 向orders 表中插入数据
        insert into orders values(1,1314,3);
        insert into orders values(2,1314,3);
        insert into orders values(3,15,4);
        insert into orders values(4,315,5);
        insert into orders values(5,1014,null);


 这样表我们就建立完成了,也添加号数据了嘿嘿
如下表:我们发现用户赵六是没有下订单的(我们观察orders表 发现id 为5 的项是没有user_id的)
image.png image.png
4 练习:
   1内连接练习:
    查询用户的订单,没有订单的用户不显示
       分析没有下订单的用户不显示就行了
       隐式内连接查询:
      (此处查询全部字段,当然我们也可以查询一个或者多个字段)
       select user.*,orders.* from user,orders where user.id=orders.id;
       显式内连接查询:
      select user.*,orders.* from user join orders on user.id=orders.id;
   2外链接练习(左外连接)
    查询所有用户的订单详情
    select user.*,orders.* from user left join orders on user.id=orders.id;

   3 子查询 练习

   3.1查看用户为张三的订单详情
     分析: 先查询张三的id 再根据他的id 查询订单
      select id  from user where username = '张三';
      select * from orders where user_id = 3;--结果为3
     以上执行两部太麻烦,两者和2 为1
     select * from orders where user_id = (  select id  from user where username = '张三');
  
    3.2 查询出订单的价格大于300的所有用户信息。
         分析 订单表中没有用户但是有用户id 先先查出用户id根据用户id用户表中查询用户
          tip:你查询出来的用户id是一组数正好在结果查询中可以使用in关键字
    3.3查询订单价格大于300的订单信息及相关用户的信息。
    内连接方式:
    分析:先查询所有的订单信息,用户信息我们可以。用笛卡尔积就行。
             订单价格大于300  我们在笛卡尔积的语句中加where条件就行
             还有有关联条件
         select user.*,orders.* from user,orders where orders.price>300;

子查询方式:(将查询结果作为一张临时表)
select user.*,temp.* from user,(select * from orders where  price>300 )as temp where user.id = temp.user_id;
(描述的不够明白这个例子 初学刚总结的 。。。)

ps:给表起别名
      表 [as] 别名
 

小结 :

刚刚接触查询还是比较迷惑的特别是多表查询不知道该怎么挖掘信息,相信练习多了就熟练了!!!

相关文章

  • SQLAlchemy(四)

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

  • 2018-03-20

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

  • 深入浅出MySQL(五)

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

  • mysql的多表查询总结

    前言: 前面我们了解了多表的设计及其创建,为了不和上一章的数据混合本章还是会建立新的数据库 进行数据的练习。 补充...

  • mysql数据库-多表查询

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

  • Mysql-多表查询as索引

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

  • 4/30day45_MySql多表

    回顾 MySQL多表查询&权限 今日目标 一 多表查询【重点...】 同时查询多张表获取到需要的数据组成完整的信息...

  • MySQL多表查询笔记总结

    SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FRO...

  • MySQL 多表操作

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

  • MySQL学习笔记二之单表查询与多表查询

    title: MySQL学习笔记二之单表查询与多表查询tags: MySQL 数据库categories: MyS...

网友评论

      本文标题:mysql的多表查询总结

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