这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师。

依赖软件:mysql5.6

系统环境:win

连接查询

在谈连接查询之前我们需要对数学上的笛卡尔积有一定的了解

现在有两个集合m和n

m = (m1,m2,.....mx)

n =(n1,n2,.....ny)

m*n得到的笛卡尔积有多少个元素?

答:m*n有x*y个元素

连接查询有以下类型

1、左连接

2、右连接

3、内连接

连接查询的作用

从2张或多张表中取出有关联的数据

3种连接查询的详细说明

1、左连接

A left join B on 条件;
这样形成了一个结果集,可以看成一张表 设为C
C表有A,B中的所有列;可以做所有表的操作

考虑到兼容问题和理解上的容易程度都推荐用左连接

  1. # 语法
  2. Select 查询项
  3. from
  4. 表名 left join 表名 on 表名.列名 = 表名.列名
  5.  
  6. # 我是这样理解左连接的:左表不动,右表来匹配
  7.  
  8. # 示例
  9. # 用左连接取出两表cat_id 对应的cat_name
  10. select goods_id,goods.cat_id,category.cat_id,cat_name,goods_name
  11. from
  12. goods left join category on goods.cat_id=category.cat_id;

2、右连接

左右连接可以互换

A left join B <==> B right join A

A right join B on 条件;
这样形成了一个结果集,可以看成一张表 设为C
C表有A,B中的所有列;可以做所有表的操作

  1. # 语法
  2. Select 查询项
  3. from
  4. 表名 right join 表名 on 表名.列名 = 表名.列名
  5.  
  6. # 我是这样理解右连接的:右表不动,左表来匹配
  7.  
  8. # 示例
  9. # 用右连接取出两表cat_id 对应的cat_name
  10. select goods_id,goods.cat_id,category.cat_id,cat_name,goods_name
  11. from
  12. category right join goods on category.cat_id=goods.cat_id;

3、内连接

B inner join A on 条件;
这样形成了一个结果集,可以看成一张表 设为C
C表有A,B中的所有列;可以做所有表的操作

  1. # 语法
  2. Select 查询项
  3. from
  4. 表名 inner join 表名 on 表名.列名 = 表名.列名
  5.  
  6. # 我是这样理解内连接的:右左连接的交集
  7.  
  8. # 示例
  9. # 用内连接取出两表cat_id 对应的cat_name
  10. select goods_id,goods.cat_id,category.cat_id,cat_name,goods_name
  11. from
  12. goods inner join category on category.cat_id=goods.cat_id;

小练习

要求:

Match的hostTeamID与guestTeamID都与Team中的teamID关联
查出 2006-6-1 到2006-7-1之间举行的所有比赛,并且用以下形式列出:
拜仁 2:0 不来梅 2006-6-21

建表时特别主要match是mysql的关键字

  1. select t1.teamName,match_Result,t2.teamName,match_Time
  2. from
  3. match1 left join Team as t1
  4. on match1.hostTeamID=t1.teamID
  5. left join Team as t2
  6. on match1.guestTeamID =t2.teamID
  7. where match_Time between '2006-06-01 and '2006-07-01';

联合查询

union查询

使用条件:只要列数一样即可合并(唯一要求)

语法:

sql1 union sql2 表操作

union对重复行的处理:union会去重,union all 不去重复

  1. # 示例1
  2. # 用union取出第4个栏目的商品,第5个栏目的商品,并按价格升序排列
  3.  
  4. select cat_id,shop_price,goods_name from goods where cat_id=4
  5. union
  6. select cat_id,shop_price,goods_name from goods where cat_id=5
  7. order by shop_price asc;

内层的order by 如果没有影响结果集的结果则将被优化过滤掉

  1. # 示例2
  2. # 用union查出第三个栏目下价格前三高的商品,和第四个栏目下价格前2高的商品
  3. (select cat_id,shop_price,goods_name from goods
  4. where cat_id=3 order by shop_price desc limit 3)
  5. union
  6. (select cat_id,shop_price,goods_name from goods
  7. where cat_id=4 order by shop_price desc limit 2);

小练习

要求:

将两张结构一样的表相同id的值相加,返回所有id和值

  1. # 第一步 将两表合并成一张表,即表c
  2. select id,num from a
  3. union all
  4. select id,num from b
  5.  
  6. # 第二步对表c from型子查询操作,
  7. select id,sum(num) as num
  8. from (select id,num from a
  9. union all
  10. select id,num from b) as c
  11. group by id;

mysql--浅谈多表查询1的更多相关文章

  1. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  2. mysql 数据操作 单表查询 目录

    mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...

  3. mysql 数据操作 多表查询 目录

    mysql 数据操作 多表查询 准备 多表连接查询介绍 mysql 数据操作 多表查询 多表连接查询 笛卡尔积 mysql 数据操作 多表查询 多表连接查询 内连接 mysql 数据操作 多表查询 多 ...

  4. MySQL数据库语法-多表查询练习一

    MySQL数据库语法-多表查询练习一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的多表查询的外键约束,以及如何使用外链接和内连接查询数据信息. 一.数据表和测试 ...

  5. mysql 数据操作 单表查询 where 约束 目录

    mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...

  6. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

  7. MySQL数据库之单表查询中关键字的执行顺序

    目录 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 2 执行顺序 3 关键字使用语法 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from ...

  8. mysql中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Sec ...

  9. MySQL数据库语法-单表查询练习

    MySQL数据库语法-单表查询练习 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要是对聚合函数和分组的练习. 一.数据表和测试数据准备 /* @author :yinz ...

  10. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

随机推荐

  1. JAVA各版本更新特性1-8

    JAVA各版本更新特性1-8 原文地址 Java Versions, Features and History This article gives you a highlight of import ...

  2. Android开发学习之三——第一个Android程序

    下面我们建立第一个Android程序. 打开Eclipse,开始如下步骤: 1.File ==> New ==> Android Application Project 出现如下窗口: 2 ...

  3. elementaryos必装软件

    所使用版本:elementaryos-0.4-stable-amd64.20160909.iso vmtools jdk sougouinput IntellijIEAD

  4. awk添加文本到指定内容后一行

    一下操作会输入到文件末尾,,测试不全面,还不如使用echo解决呢... 1. 要添加的文本内容如下: 文件名:code_list html</>!@$%^^ fdsafds <> ...

  5. Python 使用正则表达式验证密码必须包含大小写字母和数字

    校验密码是否合法的程序. 输入一个密码 1.长度5-10位 2.密码里面必须包含,大写字母.小写字母和数字 3.最多输入5次 ===================================== ...

  6. 英特尔® Software Guard Extensions 教程系列:第一部分,英特尔® SGX 基础

    英特尔® Software Guard Extensions 教程系列:第一部分,英特尔® SGX 基础 from:https://software.intel.com/zh-cn/articles/ ...

  7. PHP 正则表达示

    PHP 正则表达示 php如何使用正则表达式 正则表达式基本元字符 #正则表达式示例 ^:匹配输入字符串开始的位置.如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\ ...

  8. BZOJ_2259_ [Oibh]新型计算机 _最短路

    Description Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算机的输入也很独特,假 ...

  9. linux下Redis以及c++操作

    使用不同的语言,redis支持不同的编程语言,但是调用了不同的redis包,例如: java对应jedis: php对应phpredis: C++对应的则是hredis. 安装Redis 上篇博客已经 ...

  10. HDU1540(线段树统计连续长度)

    ---恢复内容开始--- Tunnel Warfare Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...