mysql的多表查询总结

前言:

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

补充:笛卡尔积(了解)

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

例如:查询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] 别名
 

小结 :

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容