MySQL 连接查询汇总
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 连接查询汇总的更多相关文章
- mysql连接查询经典小例题
mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...
- MySQL连接查询、联合查询、子查询
参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...
- 掌握MySQL连接查询到底什么是驱动表
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- MySQL连接查询驱动表被驱动表以及性能优化
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- 细说MySQL连接查询:内连、左连和右连
转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...
- mysql连接查询,封装mysql函数
连接查询 交叉连接语法: select * | 字段列表 from 表1 cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...
- Mysql 连接查询 Mysql支持的连接查询有哪些
CREATE TABLE `chx` ( `id` VARCHAR(20) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, `name2` CHAR( ...
- Mysql连接查询、子查询、联合查询 整理
连接查询 连接语法的基本形式 from 表1 [连接方式] join 表2 [on 连接条件]: 交叉连接 语法: from 表1 [cross] join 表2 ; //可 ...
- mysql 连接查询 join
本文用到的表 CREATE TABLE `cls` ( `cls_id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMARY KEY (`cls ...
随机推荐
- 关于PowerShell调用Linq的一组实验
Windows PowerShell 版权所有 (C) Microsoft Corporation.保留所有权利. 尝试新的跨平台 PowerShell https://aka.ms/pscore6 ...
- bzoj4396[Usaco2015 dec]High Card Wins*
bzoj4396[Usaco2015 dec]High Card Wins 题意: 一共有2n张牌,Alice有n张,Bob有n张,每一局点数大的赢.知道Bob的出牌顺序,求Alice最多能赢几局.n ...
- Websphere修改web.xml不生效的解决办法(转)
在websphere下部署了一个java工程后,如果修改了web.xml文件,重新启动这个java工程发现websphere并没有自动加载web.xml文件,即修改后的web.xml并不起作用,除非重 ...
- [C++面向对象]-C++成员函数和非成员函数
大纲: 1.成员函数和非成员函数 2.详细解释 3.总结 4.参考 1.成员函数和非成员函数 其实简单来说成员函数是在类中定义的函数,而非成员函数就是普通函数,即不在类中定义的函数,其中非成员 ...
- P1433 吃奶酪(洛谷)状压dp解法
嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加 ...
- 设计模式:decorator模式
两点: 继承同一虚接口,实现数据一致性 桥接方式指向被装饰类 目的:在不改变被装饰类功能的前提下增加新功能 特点:继承是子类和父类强耦合,桥接是低耦合 例子: class Print //抽象接口 { ...
- C#计算数组的算术平均数、几何平均数、调和平均数、平方平均数和中位数
1.函数实现 0)打印数组 /// <summary> /// 打印数组 /// </summary> /// <param name="arr"&g ...
- ajax工作原理/实例
ajax是什么? 是一种创建交互式网页应用的一种网页技术.简单来说,就是向服务器发起请求,获得数据使交互性和用户体验更好. ajax不是一种新的技术,是一些技术的集合体.有 1.XHTML和CSS 2 ...
- 教孩子学编程 python语言版PDF高清完整版免费下载|百度云盘|Python入门
百度云盘:教孩子学编程 python语言版PDF高清完整版免费下载 提取码:mnma 内容简介 本书属于no starch的经典系列之一,英文版在美国受到读者欢迎.本书全彩印刷,寓教于乐,易于学习:读 ...
- Python3网络爬虫开发实战PDF高清完整版免费下载|百度云盘
百度云盘:Python3网络爬虫开发实战高清完整版免费下载 提取码:d03u 内容简介 本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib.req ...