MYSQL-连接查询:

# 连接查询:把多张表进行记录的连接(按照某个条件进行数据的拼接)

# 分类

1,内链接

2,外连接

# 左外

# 右外

3,自然连接

4,交叉连接

MYSQL-内链接 :

# inner join (inner关键字可以省略) [inner join比left join快]

# 从左表中取出每一条记录,与右表中的所有记录进行匹配

# 匹配必须是某个条件,在左表和右表中相同【公共部分】,才会保留结果.否则,不保留

# 基本语法

SELECT * FROM [左表] innder join [右表] on [左表].[字段]=[右表].[字段];

# 内连接,可以没有on,那么系统会保留所有的结果,没错.又是传说中的笛卡尔积

# '还可以使用where代替on,但是效率没有on高'

例子:

排他性: A,B表中至少有1个匹配时,才返回行。两表的【交集】

SQL语句如下:

select A.name,B.address from A

inner join B

on A.id = B.A_id

查询结果为:

name address

张 北京

王 上海

inner join 内连接等价于下面的sql:

SELECT A.name, B.address

FROM A, B

WHERE A.id = B.A_id

MYSQL-外连接:

1, 左外

左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行。

【通俗:就是2张表,查左表满足条件的所有以及右表中含有左表条件的数据,where (右表条件)..is not null显示不为null的数】

# 以某张表为主,取出里面的所有记录.每条与另外一张表.不管能不能匹配上条件.最终都会保留.如果不能匹配,那么其他表的字段都置空

    # left join (left join 是left outer join的简写)
# 基本语法
SELECT
...
FROM
[左表]
LEFT JOIN
[右表]
ON
[条件]
# 会把左边所有的数据都显示出来,如果右表没有匹配的数据.以null显示
例:SELECT * from a_table a LEFT JOIN b_table b on a.a_id = b.b_id (where b_id is not NULL); 2,右外
右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行

【通俗:就是2张表,查右表满足条件的所有以及左表中含有右表条件的数据,where (左表条件)..is not null显示不为null的数】

    # right join
# 基本语法
SELECT
...
FROM
[左表]
RIGHT JOIN
[右表]
ON
[条件]
# 会把右表所有的数据都显示出来,如果左表没有匹配的数据.以null显示
例:SELECT * from a_table a RIGHT JOIN b_table b on a.a_id = b.b_id (where a_id is not NULL);

MYSQL-自然连接:

# natural join

# MYSQL方言,其他数据库不一定有

# '自动的匹配连接条件',但是.不怎么建议使用.是以'字段名称作为匹配模式'

# 基本语法

SELECT ...FROM [表1] natural join [表2]; //内连接

* 自动使用同名字段作为连接条件,结果中会合并该字段

SELECT ...FROM [表1] left natural join [表2]; //左外自然连接

SELECT ...FROM [表1] right natural join [表2]; //右外自然连接

MYSQL-交叉连接:

# cross join

# 从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配.而且匹配一定保留(没有条件匹配不带条件where...)

# 而连接本身字段就会增加(保留) -- 笛卡尔积(笛卡尔是没有意义的,【尽量要避免】)

# 存在的价值:保证连接这种结构的完整性而已.

# 基本语法

SELECT * from [左表] cross join [右表]; == select * from [左表],[右表];

select * from emp cross join dept;

    # 也可以加上条件
select *
from emp e
cross join
dept d
on e.deptno=d.deptno ;
【两表连接如果要避免返回笛卡尔积,必须确保至少一方表是唯一的,否则在能查到记录的情况下,不论哪一种连接方式一定会返回笛卡尔积记录集的。】

MYSQL-全外:

# 全外(MYSQL不支持,但是我们可以通过其他方式实现)

# 这个就是,左右两表都是相同的,两个表的所有内容都必须全部出来,如果没有对应记录的,就用null填充

select * from 表1 left outer join 表2 on 表1.字段=表2.字段
union
select * from 表1 right outer join 表2 on 表1.字段=表2.字段;
-联合查询 ,把他们的结果集合并一下就出来了 例: SELECT * from a_table a LEFT JOIN b_table b on a.a_id = b.b_id (where b_id is not NULL) UNION SELECT * from a_table a

LEFT JOIN b_table b on a.a_id = b.b_id (where b_id is not NULL);

本文由博客一文多发平台 OpenWrite 发布!

MySQL 连接查询汇总的更多相关文章

  1. mysql连接查询经典小例题

    mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...

  2. MySQL连接查询、联合查询、子查询

    参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...

  3. 掌握MySQL连接查询到底什么是驱动表

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  4. MySQL连接查询驱动表被驱动表以及性能优化

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  5. 细说MySQL连接查询:内连、左连和右连

    转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...

  6. mysql连接查询,封装mysql函数

    连接查询 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...

  7. Mysql 连接查询 Mysql支持的连接查询有哪些

    CREATE TABLE `chx` (   `id` VARCHAR(20) NOT NULL,   `name` VARCHAR(50) DEFAULT NULL,   `name2` CHAR( ...

  8. Mysql连接查询、子查询、联合查询 整理

    连接查询 连接语法的基本形式 from 表1  [连接方式]  join 表2  [on 连接条件]: 交叉连接 语法: from  表1  [cross]  join  表2  ;      //可 ...

  9. mysql 连接查询 join

    本文用到的表 CREATE TABLE `cls` ( `cls_id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMARY KEY (`cls ...

随机推荐

  1. bzoj2296【POJ Challenge】随机种子*

    bzoj2296[POJ Challenge]随机种子 题意: 求一个≤10^16的数,使这个数包含123456789且为x的倍数.x≤1000000. 题解: 16-6刚好等于10.因此我们可以直接 ...

  2. Docker 基础知识 - 使用卷(volume)管理应用程序数据

    卷(volumes)是 Docker 容器生产和使用持久化数据的首选机制.绑定挂载(bind mounts)依赖于主机的目录结构,卷(volumes)完全由 Docker 管理.卷与绑定挂载相比有几个 ...

  3. Python 3基础教程8-if else语句

    终于更新到了,教程8, 如果对python软件测试.接口测试.自动化测试.面试经验交流.感兴趣可以加君羊软件测试交流: 1079636098,还会有同行一起技术交流. 本文介绍if else语句,不多 ...

  4. OSCP Learning Notes - Exploit(6)

    Antivirus Bypassing Tools: Kali Linux Detection Platform: https://www.virustotal.com/gui/home/upload ...

  5. 详解Vue大护法——组件

    1.什么是组件化 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题进 ...

  6. 《Head First 设计模式》:工厂方法模式

    正文 一.定义 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类. PS:在设计模式中,"实现一个接口"泛指实现某个超类型(可 ...

  7. css中使用浮动的情况和清除浮动的方法

    1.使用浮动时出现的情况: (1)使块元素在一行显示 (2)使内嵌元素支持宽高 (3)不设置宽高的时候宽度由内容撑开 (4)换行不被解析(故使用行内元素的时候清除间隙的方法可以使用浮动) (5)元素添 ...

  8. 两数相加(B站看视频总结)

    ''' 两数相加: 给出两个 非空 的链表用来表示两个非负的整数 各自的位数是按照逆序的方式存储的 每一个节点只能保存 一位数 示例: 输入:(2->4->3) + (5->6-&g ...

  9. timeit_list操作测试

    ''' timeit库Timer函数 ''' from timeit import Timer def test1(): l = list(range(1000)) def test2(): l = ...

  10. PHP xml_error_string() 函数

    定义和用法 xml_error_string() 函数获取 XML 解析器的错误描述.高佣联盟 www.cgewang.com 如果成功,该函数则返回错误描述.如果失败,则返回 FALSE. 语法 x ...