数据库中JOIN怎么用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库中JOIN怎么用?相关的知识,希望对你有一定的参考价值。

我想在ASP中用一句SQL语句查询两个表中的数据,是用JOIN吗?给个例子好吗?谢谢

JOIN分为:内连接、相等连接、自然连接、交叉连接,如下:
  a、显式的内连接与隐式连接(inner join == join )
  显示连接:SELECT * from employee join department on employee.DepartmentID = department.DepartmentID
  等价于:
  隐式连接:SELECT * from employee,department WHERE employee.DepartmentID = department.DepartmentID
  注:当DepartmentID不匹配,就不会往结果表中生成任何数据。
  
  b、相等连接
  提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。
  SELECT * from employee join department using (DepartmentID)
  注:与显式连接不同在于:DepartmentID只显示一列
  
  c、自然连接
  比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。
  自然连接得到的结果表中,两表中名称相同的列只出现一次.
  select * from employee natural join department
  注:在 Oracle 里用 JOIN USING 或 NATURAL JOIN 时,如果两表共有的列的名称前加上某表名作为前缀,
  则会报编译错误: "ORA-25154: column part of USING clause cannot have qualifier"
  或 "ORA-25155: column used in NATURAL join cannot have qualifier".
  
  d、交叉连接(又称笛卡尔连接)
  如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.
  显示连接:
  select * from employee cross join department
  等价于
  隐式连接:
  select * from employee,department
参考技术A join 分为 inner join left join right join

假设
表 a 有字段 empid empname
1 jack
2 tom
表b 有字段 empid empaddr
1 bj
3 sh
inner join标准语法如下
select a.empid,b.empaddr from a inner join b on a.id=b.id
结果如下
1 bj
left join
select a.empid,b.empname from a left join b on a.id=b.id
结果如下
1 bj
2 null

right join
select a.empid,a.empaddr from a right join b on a.id=b.id
结果如下
1 jack
3 null本回答被提问者采纳

如何在一个查询中INNER JOIN 2或3个具有相同表的不同数据库

我试图用同一个表搜索来自不同数据库的数据。而不是做长切查询,我怎么能在单个查询中INNER加入2个不同的数据库。谢谢。

Set db = OpenDatabase(DbName, False, True, "MS Access;PWD=1234")
Set rs = db.OpenRecordset("SELECT * AVAILABLE_STAFF WHERE staff_id = '" & Search_ID & "'", dbOpenSnapshot, dbOptimistic)

With rs
    If .RecordCount = 0 Then
    Else
       'INSERT DATA TO LISTVIEW
    End If
End With

rs.Close
Set rs = Nothing

db.Close
Set db = Nothing

Set db = OpenDatabase(DbName1, False, True, "MS Access;PWD=1234")

 Set rs = db.OpenRecordset("SELECT * AVAILABLE_STAFF WHERE staff_id = '" & Search_ID & "'", dbOpenSnapshot, dbOptimistic)
With rs

    If .RecordCount = 0 Then

    Else
    'INSERT DATA TO LISTVIEW
    End If
End With

rs.Close
Set rs = Nothing

db.Close
Set db = Nothing
答案

由于您没有显示任何E / R,并且不是100%清楚您要求的答案可能不如您所希望的那么好。

  1. 更改问题的标题。 “如何在一个查询中INNER JOIN 2或3个不同的数据库同一个表”令人困惑!您“在数据库中连接表”,您不“在一个查询中连接具有相同表的数据库”!
  2. 我无法弄清楚这一个[MS Access;DATABASE=" & Completed & ";PWD=pwd].[DOCUMENT_STATUS]?猜猜它创造了某种表格?
  3. 您只是从第一个别名表[ds]中选择结果?你有没有尝试过:
SELECT ds.*, cds.*
        FROM DOCUMENT_STATUS AS ds
        LEFT JOIN [MS Access;DATABASE=" & Completed & ";PWD=pwd].[DOCUMENT_STATUS] AS cds 
        ON ds.refnum=cds.refnum

在你的情况下你也可以做SELECT *而不是SELECT ds.*, cds.*

以上是关于数据库中JOIN怎么用?的主要内容,如果未能解决你的问题,请参考以下文章

数据库 关系代数中 join 的意思是啥 怎么用

left join ,right join ,inner join,outer join,union all,union有啥区别?怎么用?

数据库中join的用法

sql语句中的full join具体是怎么回事啊?

Spark DataFrame join,需要两列,怎么做

用join连接三个表的查询,该怎么写语句?