在实际应用中,由于不同的业务需求,一般的select查询语句无法满足要求。所以就需要了解一些MySQL的高级查询方式

内连接 inner join

典型的连接查询,有相等(=)连接和不等(<>)连接。如:现在有产品表及供应商表

产品表:

供应商表:

如果现在有个需求:查询产品表中产品对应的供应商公司名称及地址。那么就可以根据产品表中的供应商ID进行连接查询

这样根据两个表中供应商ID相同的条件,就查询出想要的数据。注:连接查询默认为inner join,所以inner可省略不写

左连接 left join

left join 也可写成left outer join,是外连接的其中一种查询方式,其他的外连接还有右连接(right join | right outer join)、完整外部连接(full join | full outer join)

假设:有一张学生表,里面存储了学生的学号、名字、年龄、性别等相关信息。还有一张技能表,里面存储了学生的学号以及对应的特长

现在要查询学生的信息,并且展示他们所掌握的特长。但是并不是所有的学生都有特长,所以此时要用到left join而不能用inner join

表students:

表skills:

连接查询:

这样就查询到所有的学生和他们掌握的技能,没有特长的显示为Null。

所以,左连接查询返回左表中符合条件的所有行,如果左表中的某行记录在右表中没有匹配,那么在结果集中,相关右表的列显示为空。

右连接 right join

右连接查询返回所有符合条件的右表记录,如果右表的记录在左表找不到匹配,那么相关左表的列显示为空。

还以上文中的students表和skills表为例。假设:需要找出所有拥有特长的学生。结果如下:

完全连接 full join

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。

由于MySQL好像不支持full join,可以使用union all来实现。如:

结果集中将两个查询结果合并在一块,如果去除重复记录,可使用union来代替union all

MySQL常见连接查询的更多相关文章

  1. MySql的连接查询

    类似于oracle的连接查询,mysql连接查询也有左外连接.右外连接.内连接查询.但是,不同的是没有直接 的全外连接查询. 这里介绍MySql的连接查询: 这里已两张表为例:STUDENT 表 和 ...

  2. MySQL查询优化:连接查询排序limit

    MySQL查询优化:连接查询排序limit(join.order by.limit语句) 2013-02-27      个评论       收藏    我要投稿   MySQL查询优化:连接查询排序 ...

  3. 【杂记】mysql 左右连接查询中的NULL的数据筛选问题,查询NULL设置默认值,DATE_FORMAT函数

    MySQL左右连接查询中的NULL的数据筛选问题 xpression 为 Null,则 IsNull 将返回 True:否则 IsNull 将返回 False. 如果 expression 由多个变量 ...

  4. Mysql表连接查询

    原文地址: https://www.cnblogs.com/qiuqiuqiu/p/6442791.html 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等 ...

  5. 【mysql】连接查询

  6. MySQL之连接查询

    主要是多表查询和连接查询

  7. mysql之连接查询、联合查询、子查询

    本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...

  8. mysql(连接查询和数据库设计)

    --创建学生表 create table students ( id int unsigned not null auto_increment primary key, name varchar(20 ...

  9. LeetCode 175. Combine Two Tables 【MySQL中连接查询on和where的区别】

    一.题目 175. Combine Two Tables 二.分析 连接查询的时候要考虑where和on的区别 where : 查询时,连接的时候是必须严格满足条件的,满足了才会加入到临时表中. on ...

随机推荐

  1. CCF-201403-3-命令行选项

    问题描述 试题编号: 201403-3 试题名称: 命令行选项 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项.每 ...

  2. C++ list forward_list

    list,forward_list list:双向链表 forward_list:单向链表 在任何位置添加元素,删除元素都很快,但随机访问元素则很慢 声明和初始化 list<T> l; l ...

  3. 免费靠谱的 Let’s Encrypt 免费 https 证书申请全过程

    申请 Let’s Encrypt证书的原因: 现在阿里云等都有免费的 https 证书,为什么还要申请这个呢(估计也是因为阿里云这些有免费证书的原因,所以 Let’s Encrypt 知道的人其实并不 ...

  4. 版本号控制-GitHub

    前面几篇文章.我们介绍了Git的基本使用方法及Gitserver的搭建.本篇文章来学习一下怎样使用GitHub. GitHub是开源的代码库以及版本号控制库,是眼下使用网络上使用最为广泛的服务,Git ...

  5. Android Static分析

    1.static的变量或者方法会放在内存的一个方法区内 2.static变量会在该变量所属的类从内存中释放掉之后. 才会释放掉而类释放的条件是非常苛刻的. 必需要该类相应的全部对象被释放掉. 同一时候 ...

  6. SYSAUX表空间使用率高问题处理

    SYSAUX表空间做为SYSTEM表空间的辅助表空间,主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等,而假设SYSAUX表空间在默认条件下你假设不做不论什么配置,随着时间的推移.会膨胀的 ...

  7. 【日常学习】【线性DP】codevs1044 拦截导弹题解

    题目描写叙述 Description 某国为了防御敌国的导弹突击,发展出一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以到达随意的高度,可是以后每一发炮弹都不能高于前一发的高 ...

  8. (转)解决jdk1.8中发送邮件失败(handshake_failure)问题

    解决jdk1.8中发送邮件失败(handshake_failure)问题 作者 zhisheng_tian 2016.08.12 22:44* 字数 1573 阅读 2818评论 6喜欢 9 暑假在家 ...

  9. Django项目创建02

    Django项目创建(ubuntu环境) 1.    创建项目目录,我是在root下创建了一个workspace文件夹:mkdir workspace  然后cd到该目录下 命令:django-adm ...

  10. iOS开发 字符串的转化 小技巧

    /字典或者数组转化为nsstring NSArray *arr = [NSArray arrayWithObject:@"1"]; NSString *str = [arr JSO ...