① 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