关于left join 和 inner join
今天遇到一个逻辑很复杂的SQL,虽然写出来了,但是并没有完全体会,找了找资料,算是摸清楚了left join和inner join 的实际意义。
感谢PCJIM的文章,写的非常明白,原文地址:http://www.cnblogs.com/pcjim/articles/799302.html。
实际上,join的作用在于将2个表组合起来成为一个新表,如何组合,完全看是使用什么join。
inner join,属于等值连接,我有表A和表B,其中A.Column1和B.Column1作为连接条件,即
select
*
from A inner join B
on A.Column1 = B.Column1
那么,根据条件,SQL会将等值的表A表B组合起来得出以下格式:
A.Column1 A.Column2 A.ColumnX... B.Column1 B.Column2 A.ColumnX...
1 xxx xxx 1 xxx xxx
2 xxx xxx 2 xxx xxx
而left join则仅仅以左表作为连接标准。
什么是左表?select * from A left join B on A.Column1 = B.Column1中的A即为左表(left的左边即左表咯)
最后SQL会将A和B全部信息组合为一个新表,如下所示
A.Column1 A.Column2 A.ColumnX... B.Column1 B.Column2 A.ColumnX...
1 xxx xxx 1 xxx xxx
2 xxx xxx 2 xxx xxx
3 xxx xxx null null null
从上面格式看出,当B表中的Column 1不存在A表中Column的时候,SQL会返回null 信息来和A表组合成一个记录。
以上得出的结论呢,我更想表达的是join是将2个表合成为一个新的表,
在实际应用中,我们不单单是只用一个join,有时候,需要通过A和B的join得到一个表C,之后再用表D去joinC得到一个新表,
从新表得到我们想要得到的信息去做别的操作(今天就遇到这破逻辑........关键还是的把ER图画好啊......搞不清关系SQL是无法向下写下去的)
关于left join 和 inner join的更多相关文章
- mysql join 和left join 对于索引的问题
今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_ ...
- 【转】mysql的union、left join、 right join、 inner join和视图学习
1.联合 union 进行多个查询语句时,要求多次查询的结果列数必须一样.此时,查询的结果以第一个sql语句的列名为准且union会自动去重复我们应该使用union all. 例...... 1.联合 ...
- SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结
在SQL语言中,存在着各种Join,有Left Join, Right Join, Inner Join, and Natural Join等,对于初学者来说肯定一头雾水,都是神马跟神马啊,它们之间到 ...
- sql语法:inner join on, left join on, right join on详细使用方法
inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...
- sql之left join、right join、inner join的区别
sql之left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括 ...
- SQL中inner join、outer join和cross join的区别
对于SQL中inner join.outer join和cross join的区别简介:现有两张表,Table A 是左边的表.Table B 是右边的表.其各有四条记录,其中有两条记录name是相同 ...
- SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...
- SQL表连接查询(inner join、full join、left join、right join)
SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...
- MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)
注:该MySql系列博客仅为个人学习笔记. 同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作 ...
- 实现Map-side Join和Reduce-side Join(转)
在大数据处理场景中,多表Join是非常常见的一类运算.为了便于求解,通常会将多表join问题转为多个两表连接问题.两表Join的实现算法非常多,一般我们会根据两表的数据特点选取不同的join算法,其中 ...
随机推荐
- tomcat部署不正确
我把一个名为cp的web项目导入myeclipse中,由于要再次导入该工程的新版本,我就把旧版本的cp项目改名成cp3.但是在运行新项目cp的时候,tomcat出问题,一直是之前旧cp对应的tomca ...
- BZOJ 1177 [Apio2009]Oil(递推)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1177 [题目大意] 给出一个矩阵,从中选出3个k*k且不相交的矩阵,使得其总和最大 [ ...
- Jquery读取URL参数
$(document).ready(function(){ function getQueryString(name) { var reg = new RegExp("(^|&)&q ...
- U盘重装系统win7
步骤: 1开机f12进入bios模式设置光盘的第一驱动 2U盘拷贝好的ghost镜像插入usb接口,重启默认U盘启动 3启动后进入重装系统界面,选择要重新的系统,进入pe系统,格式化c盘,后面默认自动
- 配置vim之插件
涉及linux平台下ctags, taglist插件 ctags是一个用于产生代码索引文件的插件,它产生的索引可以帮助我们更快的定位到特定位置. ctags支持很多语言,比如java, c, c++, ...
- js获取智能机浏览器版本信息
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- C++运算符重载为成员函数
#include<iostream> using namespace std; class Complex{ public: Complex(double r=0.0,double i=0 ...
- C语言:类似linux内核的分等级DEBUG宏(打印宏)
总结几种log打印printf函数的宏定义 http://blog.chinaunix.net/uid-20564848-id-73402.html #include <stdio.h> ...
- Problem F: Exponentiation
Problem F: ExponentiationTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 4 Solved: 2[Submit][Status][W ...
- BZOJAC400题留念
BZOJAC400题了...