问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql之left join,right join,inner join和逗号的区别

发布网友 发布时间:2022-04-27 06:22

我来回答

2个回答

懂视网 时间:2022-05-02 11:49

输出结果:

技术分享

可以很明显发现:这不就是inner join嘛!

没错,答案正是这样:sql用逗号连接多张表对应的是 inner join。

为了严谨性,我到处找sql的官方文档来证实这一点。然而搜不出来sql的文档(谁知道网址请务必发我),最后还是在维基百科上找到了可以当作论据的话。

SQL 定义了两种不同语法方式去表示"连接"。首先是"显式连接符号",它显式地使用关键字 JOIN,其次是"隐式连接符号",它使用所谓的"隐式连接符号"。隐式连接符号把需要连接的表放到 SELECT 语句的 FROM 部分,并用逗号隔开。这样就构成了一个"交叉连接",WHERE 语句可能放置一些过滤谓词(过滤条件)。那些过滤谓词在功能上等价于显式连接符号. SQL 89标准只支持内部连接与交叉连接,因此只有隐式连接这种表达方式;SQL 92标准增加了对外部连接的支持,这才有了JOIN表达式。

 

也就是说,

SELECT *
FROM employee 
 INNER JOIN department 
  ON employee.DepartmentID = department.DepartmentID

等价于:

SELECT * 
FROM employee,department 
WHERE employee.DepartmentID = department.DepartmentID

至于哪个效率高一点,其实两者是一回事,没有区别。只是内连接是由SQL 1999规则定的书写方式而已。

另外,在写sql语句测试4种join的时候,发现mysql对于full join返回的结果和inner join一模一样。经查阅资料,才发现原来mysql不支持full join啊。

见:http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql

技术分享

参考资料:

1.维基百科 https://zh.wikipedia.org/wiki/%E8%BF%9E%E6%8E%A5_(SQL)

2.w3school http://www.w3school.com.cn/sql/sql_join.asp

3.CSDN博客最后一段话 http://www.cnblogs.com/huangfr/archive/2012/06/20/2555530.html

sql用逗号连接多张表对应哪个join?

标签:rtm   网址   支持   tar   写法   tail   这一   定义   stack   

热心网友 时间:2022-05-02 08:57

看例子就明白了。
表A记录如下:     表B记录如下:
aID aNum  bID bName
1 a20050111  1 2006032401
2 a20050112  2 2006032402
3 a20050113  3 2006032403
4 a20050114  4 2006032404
5 a20050115  8 2006032408

创建这两个表SQL语句如下:
CREATE TABLE a
aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,
aNum char( 20 )
)
CREATE TABLE b(
bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
bName char( 20 )
)

INSERT INTO a
VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ;

INSERT INTO b
VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ;

实验如下:
1.left join(左联接)

sql语句如下:
SELECT * FROM a
LEFT JOIN b
ON a.aID =b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)

结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL.

2.right join(右联接)

sql语句如下:
SELECT * FROM a
RIGHT JOING b
ON a.aID = b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)

结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join(相等联接或内联接)

sql语句如下:
SELECT * FROM a
INNER JOIN b
ON a.aID =b.bID

等同于以下SQL句:
SELECT *
FROM a,b
WHERE a.aID = b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
LEFT JOIN操作用于在任何的 FROM 子句中,

组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即
使在第二个(右边)表中并没有相符值的记录。

语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的
名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
YY聊天中哪些语音的会不会作为文件存下来 2023谷雨节气的含义 谷雨三候是什么 我老公欠债,外遇,我想离婚,怎么办 ...我提供了我的姓名,出生年月日,还有工作地点,会出什么事吗... 刚刚接到一个诈骗电话,问我要了我的姓名和出生年月日,会不会利用... 不小心接到骗子的电话,还告诉了我的姓名和出生年月日,要不要紧啊... 知道了姓名和出生年月日,能拿来作案吗? WOW安装要CD 是什么问题? 急急急、、、魔兽世界用盘安装时老要CD片 时怎么回事 取消以后就安装不... 每次下载魔兽世界安装中途都会断掉,要求插入什么CD,然后出现这么一段文... mysql中的inner join问题 MYsql 中INNER JOIN 问题 sql join 的问题 MySql INNER JOIN三表联查性能如何提升 mysql中的inner join 数据库中的“INNER JOIN”是什么意思? My SQL(join)意思及详细用法 mysql怎么用left join right join inner join 求MySQL 中JOIN 的详细用法 什么人不能吃芒果 这五类人最好不要吃芒果 体内有湿气吃了芒果会怎么样 不是只有女生失恋才会痛彻心扉,男生失恋以后怎样才能早点走出失恋阴影... 哪些人易吃芒果,哪些人不能吃 湿气重影响身体健康,为什么湿气重的人不适合吃柿子和芒果? 有人说芒果湿气重,不能吃,是真的吗 湿气重能吃芒果吗 湿寒体质能吃芒果吗 湿气重 芒果可以吃吗 湿气重可以吃芒果吗 身体湿气重能吃芒果吗 湿气重的人不能吃这几种水果,特别第三种 sql INNER JOIN 语句的作用是什么? mysql update和inner join要怎么写才对 急 救命 mysql中,inner join和where的结合问题 家人迷上炒期货怎么办 炒期货的最好方法是怎么炒呢? 家人想做期货螺纹钢,怎么开户,在哪开户有区别吗?新手请详解,谢谢 怎样炒期货?请高手讲详细点。谢谢! 【满分泣血急求】如何劝我妈不再炒期货、炒股票!!! 我想炒期货,怎么操作 炒期货的具体流程是怎么样的? 贷款记录建行在征信上什么时候能消除? excel清单怎么导入广联达 如何把XML格式的工程量清单,招标控制价导入广联达4.0 广联达6.0怎么导入excel清单 港式清单如何导成广联达清单? 广联达导入清单如何识别清单拦和措施栏 手机出现白屏条纹怎么办? 手机用的好好的,突然出现闪白屏暗纹花屏的情况怎么回事? 广联达excel工程量清单导入 广联达如何导入各项清单报表?