① sql语句中join ,left join ,right join有什么区别
left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
② SQL中join和left join的区别
简单点说:
逗号表示两个表都存在的记录才显示出来;
left join 表示只要左边表里面有符合条件的数据就可以查找出来
你可以参考一下数据库的几个范式说明
为什么用","的时候,不加where也可以用。
不加where条件可以用,但是这样的数据查出来有什么用吗。
③ 不同的SQL JOIN的区别以及使用
见 msdn
http://msdn.microsoft.com/zh-cn/library/ms191472(v=sql.105).aspx
INNER JOIN 是交集
LEFT JOIN 左集
RIGHT JOIN 右集
FULL JOIN 并集
还有个 CROSS JOIN 是笛卡尔乘积
④ SQL中的INNER JOIN和JOIN有什么区别
没区别,inner join 是内连接 join默认就是inner join。
Table A
aid adate
1 a1
2 a2
3 a3
TableB
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4
LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值
二. left join/right join/inner join操作演示
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
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 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
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:
SELECT * FROM A
INNERJOIN 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
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
⑤ 请问SQL中的几种join的方法有什么区别执行效率如何
(1)连接
select * from table1,table2
等价于
select * from table1 cross join table2
select * from table1,table2 where table1.row=table2.row
(2)自连接
select * from emploly e1 ,emploly e2
select e1.name,e2.name from employ e1,employ e2
where e1.name=e2.name
(3)内连接(inner join)
select stuname as '姓名',classname as '班级' from student inner join class on student.stuid=class.stuid
inner join '表名' on 条件 --连接多个表
它等价于:
select stuname as '姓名',classname as '班级'
from student,class
where student.stuid=class.stuid
(4)外连接:(outer join)
允许限制一张表中的行,而不限制另外一张表中的行。
注意:外连接不一定非要有外键约束
1: left outer join --不能用left out join
左表中的记录全部会出现在结果集中,匹配不上的显示NULL
2: right outer join
右表中的记录全部会出现在结果集中,匹配不上的显示NULL
3: full outer join|full join --不能用full out join
返回两个表中的匹配和不匹配的所有记录。
⑥ SQLServer中 join 跟inner join的区别是什么
一、指代不同
1、join:left join简写形式,关键字会从左表 (table_name1) 那里返回所有的行。即使在右表 (table_name2) 中没有匹配的行。
2、inner join:组合两个表中的记录,只要在公共字段之中有相符的值。
二、调用方式不同
1、join:在 FROM 子句中使用INNER JOIN运算。只返回左表存在的值。
2、inner join:在 FROM 子句中使用INNER JOIN运算。这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。
三、作用不同
1、join:类标识符是已被联接的字段,但是并不包含在查询输出中,因并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 SELECT 语句中。
2、inner join:可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。
⑦ sql中使用JOIN与不使用 的区别,需要详细解答!
你写的这2个是相等的关系,,,
默认不写就是inner join
但是还有其他的,例如left join,right join等
⑧ sql merge和join的区别
您好,他们作用差别很大啊,两个都是连表查询,CROSS APPLY 是把两个表合并成
一个集查询出来(品均行比如左表7行数据,右表5行查出来就会被整合成6行数据的集);CROSS
JOIN是左表和右表乘起来的(例如左表7行数据,右表5行数据,拿出来的集就是35行数据)。
cross
join是笛卡尔集的,通常没有join条件,通常是2个集合的关联(表、视图之间),如下:
select * from sys.objects
cross join sys.tables;
cross
apply是为用在给函数传值时,如果要把表或者视图里的很多值挨个传给函数,就用这个,如下:
select * from
sys.dm_exec_requests r
cross apply sys.dm_exec_sql_text(r.sql_handle) s;
⑨ SQL inner join和=的区别
没什么太大区别,一个是老式用法,一个是新式用法,from多表加上where和多个inner
join表加上on条件查询结果一样的,都是做完笛卡尔积在从里面根据条件筛选数据。
⑩ sql问题。两个表用等号和join连接什么区别
没区别~~~
等号的是PL/SQL的语法,join好像是个什么协会的写法,功能一样
包括外连接(+)和left join,right join一样
FULL JOIN:tab1和tab2匹配的行+tab1中没有匹配的行+tab2中没有匹配的行。
CROSS JOIN:笛卡尔乘积,tab1的行数乘以tab2的行数。select * from tab1 CROSS join tab2