oracle //sql server中的连接,以后用这种方法

1)sql server的连接

原来的方法:select name from a,b where a.id = b.aid

现在推荐:select name from a inner join b on a.id = b.aid

将连接操作与  WHERE  子句中的搜索条件区分开来。所以,在  Transact-SQL  中推荐使用这种方法。 

SQL-92  标准所定义的  FROM  子句的连接语法格式为: 

FROM  join_table  join_type  join_table 

[ON  (join_condition)] 

其中  join_table  指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 

个表操作的连接又称做自连接。 

join_type  指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接  (INNER  JOIN)  使用比 

较运算符进行表间某  (  些  )  列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 

的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 

外连接分为左外连接  (LEFT  OUTER  JOIN  或  LEFT  JOIN)  、右外连接  (RIGHT  OUTER  JOIN  或  RIGHT  JOIN) 

和全外连接  (FULL  OUTER  JOIN  或  FULL  JOIN)  三种。与内连接不同的是,外连接不只列出与连接条件相匹 

配的行,而是列出左表  (  左外连接时  )  、右表  (  右外连接时  )  或两个表  (  全外连接时  )  中所有符合搜索条件的 

数据行。 

交叉连接  (CROSS  JOIN)  没有  WHERE  子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 

数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 

连接操作中的  ON  (join_condition)  子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 

运算符等构成。 

无论哪种连接都不能对  text  、  ntext  和  image  数据类型列进行直接连接,但可以对这三种列进行间接 

连接。例如: 

SELECT  p1.pub_id,p2.pub_id,p1.pr_info 

FROM  pub_info  AS  p1  INNER  JOIN  pub_info  AS  p2 

ON  DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) 

(  一  )  内连接 

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种: 

1  、等值连接:在连接条件中使用等于号  (=)  运算符比较被连接列的列值,其查询结果中列出被连接 

表中的所有列,包括其中的重复列。 

2  、不等连接:  在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 

运算符包括  >  、  >=  、  <=  、    、  !  。 

3  、自然连接:在连接条件中使用等于  (=)  运算符比较被连接列的列值,但它使用选择列表指出查询 

结果集合中所包括的列,并删除连接表中的重复列。 

例,下面使用等值连接列出  authors  和  publishers  表中位于同一城市的作者和出版社: 

SELECT  * 

FROM  authors  AS  a  INNER  JOIN  publishers  AS  p 

ON  a.city=p.city 

又如使用自然连接,在选择列表中删除  authors  和  publishers  表中重复列  (city  和  state)  : 

SELECT  a.*,p.pub_id,p.pub_name,p.country 

FROM  authors  AS  a  INNER  JOIN  publishers  AS  p 

ON  a.city=p.city 

(  二  )  外连接 

内连接时,返回查询结果集合中的仅是符合查询条件  (  WHERE  搜索条件或  HAVING  条件  )  和连接条件 

的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表  (  左外 

连接时  )  、右表  (  右外连接时  )  或两个边接表  (  全外连接  )  中的所有数据行。 

如下面使用左外连接将论坛内容和作者信息连接起来: 

SELECT  a.*,b.*  FROM  luntan  LEFT  JOIN  usertable  as  b 

ON  a.username=b.username 

下面使用全外连接将  city  表中的所有作者以及  user  表中的所有作者,以及他们所在的城市: 

SELECT  a.*,b.* 

FROM  city  as  a  FULL  OUTER  JOIN  user  as  b 

ON  a.username=b.username 

(  三  )  交叉连接 

交叉连接不带  WHERE  子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 

据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 

例,  titles  表中有  6  类图书,而  publishers  表中有  8  家出版社,则下列交叉连接检索到的记录数将等 

于  6*8=48  行。 

SELECT  type,pub_name 

FROM  titles  CROSS  JOIN  publishers 

ORDER  BY  type 

2) oracle 中的连接

在Oracle PL-SQL中,左连接和右连接以如下方式来实现

查看如下语句:

SELECT  emp_name, dept_name 
FORM Employee, Department
WHERE  Employee.emp_deptid( + =  Department.deptid

此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

反之:

SELECT  emp_name, dept_name 
FORM Employee, Department
WHERE  Employee.emp_deptid  =  Department.deptid( + )

则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示

SELECT  emp_name, dept_name 
FORM Employee, Department
WHERE  Employee.emp_deptid( + =  Department.deptid

此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

反之:

SELECT  emp_name, dept_name 
FORM Employee, Department
WHERE  Employee.emp_deptid  =  Department.deptid( + )

则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Oracle数据库连接SQL Server数据库,可以使用Oracle Database Gateway for SQL Server。以下是连接步骤: 1. 安装Oracle Database Gateway for SQL Server。需要注意的是,安装Oracle Database Gateway for SQL Server之前,需要先安装SQL Server客户端软件,并配置好SQL Server客户端环境变量。 2. 在Oracle数据库创建一个数据库链接,将链接命名为SQLServerLink。 3. 配置数据库链接属性。在数据库链接属性,选择“HSODBC”作为提供程序,输入SQL Server数据库的DSN(数据源名称),以及SQL Server数据库的用户名和密码等信息。 4. 在Oracle数据库创建一个数据库链接用户,并授权该用户访问SQL Server数据库。 5. 在Oracle数据库创建一个数据库链接,将链接命名为SQLServerTable。 6. 在链接定义链接的结构。例如,如果要访问SQL Server数据库的一个名为“Orders”的,可以在链接定义类似以下的结构: ``` CREATE TABLE SQLServerTable ( OrderID NUMBER, OrderDate DATE, CustomerID NUMBER, Amount NUMBER ) ORGANIZATION EXTERNAL ( TYPE HS_LINK DEFAULT DIRECTORY ext_tab_data ACCESS PARAMETERS ( CONNECT_STRING 'DSN=SQLServerDSN;UID=sa;PWD=sa;' REMOTE_QUERY 'SELECT OrderID, OrderDate, CustomerID, Amount FROM Orders' ) LOCATION ('Orders.dat') ) REJECT LIMIT UNLIMITED; ``` 其,“DSN=SQLServerDSN;UID=sa;PWD=sa;”是SQL Server数据库的DSN、用户名和密码等信息,“SELECT OrderID, OrderDate, CustomerID, Amount FROM Orders”是SQL Server数据库的查询语句。 7. 在Oracle数据库查询链接。例如,可以使用以下语句查询链接的数据: ``` SELECT * FROM SQLServerTable; ``` 需要注意的是,使用Oracle Database Gateway for SQL Server连接SQL Server数据库时,需要遵循SQL Server数据库的权限控制规则,确保连接用户拥有访问SQL Server数据库的权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值