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. 重装win7时遇到点小问题

         最近装系统的时候有个头疼的事,事情的起因是这样的,我在工作的时候用的win7,破解的时候各种工具都破解不了,说是有未分配的盘符.并且,当时装的是没更新的win7,工作上要用到ie11只能在w ...

  2. Cyber Security - Palo Alto Firewall Objects Addresses, Services, and Groups(2)

    Users Objects and Groups Creating local user objects. Creating local user groups. https://docs.paloa ...

  3. Java实现一个简单的文件上传案例

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...

  4. 题解 洛谷 P3571 【[POI2014]SUP-Supercomputer】

    由数据范围可得出,不可能一次一次去进行回答询问,只能离线处理,然后\(O(1)\)解决. 考虑\(DP\)解决,先给出\(DP\)方程: \(f_i=max(j+ \lceil \frac{s_{j+ ...

  5. DJANGO-天天生鲜项目从0到1-003-用户模块-登录

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  6. mysql 联合唯一

    CREATE TABLE `NewTable` ( `id` int NOT NULL , `name` varchar(255) NULL , `phone` varchar(255) NULL , ...

  7. Intellij IDEA 快速查找接口实现类的快捷键

    查找接口的实现类: IDEA 风格 ctrl + alt +B 在按F2查看详细文档注解 查看类或接口的继承关系: ctrl + h

  8. Day13_Thymeleaf简介

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 1.Th ...

  9. day19:os模块&shutil模块&tarfile模块

    os模块:对系统进行操作(6+3) system  popen  listdir  getcwd  chdir  environ / name  sep  linesep import os #### ...

  10. Python os.write() 方法

    write()方法语法格式如下:高佣联盟 www.cgewang.com os.write(fd, str) 参数 fd -- 文件描述符. str -- 写入的字符串. 返回值 该方法返回写入的实际 ...