JOIN(内连接):SELECT
*
FROM
TABLE1
T1
INNER
JOIN
TABLE2
T2
ON
T1.ID
=
T2.ID
查询时只有满足了ID的值在俩个表同时存在,才能将此记录查询出来。
FULL
OUTER
JOIN(完全外连接):SELECT
*
FROM
TABLE1
T1
FULL
OUTER
JOIN
TABLE2
T2
ON
T1.ID
=
T2.ID
查询时TABLE1
和
TABLE2满足内连接的记录会统一成一条记录查询出来。
TABLE1中能找到ID值而在TABLE2中找不到对应的值,此时TABLE1中此记录的值不变,其他TABLE2字段的值补NULL,合并成一条记录查询出来。
反之,TABLE2中能找到ID值而在TABLE1中找不到对应的值,此时TABLE2中此记录的值不变,其他TABLE1字段的值补NULL,合并成一条记录查询出来。
SQL SERVER连接oracle数据库几种方法
--1 方式
--查询oracle数据库中的表
SELECT *FROM OPENDATASOURCE(
'MSDAORA',
'Data Source=GE160User ID=DAIMINPassword=DAIMIN'
)..DAIMIN.JOBS
--在sqlserver中创建与oracle数据库中的表同名的表
select * into JOBS fromOPENDATASOURCE(
'MSDAORA',
'Data Source=GE160User
ID=daiminPassword=daimin'
)..DAIMIN.JOBS
select * from JOBS
--2、方式
--在master数据库中查看已经存在的链接服务器
select * from sysserversEXEC sp_addlinkedserver
@server = 'GE160',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'GE160'
exec sp_addlinkedsrvlogin 'GE160', false, 'sa', 'daimin', 'daimin'
--要在企业管理器内指定登录帐号
exec sp_dropserver GE160select * from GE160..DAIMIN.JOBS
delete from GE160..DAIMIN.JOBS
--备注:引用ORACLE服务器上的表时,用户名称与表名一定要大写字母。
SELECT *FROM OPENQUERY(GE160, 'SELECT * FROM DAIMIN.JOBS')
--3、方式
SELECT a.*FROM OPENROWSET('MSDAORA',
'GE160''DAIMIN''DAIMIN',
DAIMIN.JOBS) AS a
ORDER BY a.JOB_ID
--4、方式 ODBC
--ODBC方式比较好办
SELECT A.*FROM
OPENROWSET('MSDAORA','GE160''DAIMIN''DAIMIN', --GE160是数据源名
DAIMIN.JOBS) AS
A
ORDER BY A.JOB_ID
举例回答:
表stu
id name
1, Jack
2, Tom
3, Kity
4, nono
表exam
id grade
1, 56
2, 76
11, 89
内连接(显示两表匹配的id)
select stu.id, exam.id, stu.name, exam.grade from stu inner join exam on stu.id = exam.id1 1 Jack 56
2 2 Tom 76
左连接(显示join左边表的所有数据)
select stu.id, exam.id, stu.name, exam.grade from stu left join exam on stu.id = exam.id1 1 Jack 56
2 2 Tom 76
3 NULL Kity NULL
4 NULL nono NULL
右连接(显示join右边表的所有数据)
select stu.id, exam.id, stu.name, exam.grade from stu right join exam on stu.id = exam.id1 1 Jack 56
2 2 Tom 76
NULL 11 NULL 89
总结:
内连接取交集
外连接(左连接,右连接)
左连接左边的全取
右连接右边的全取
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)