(转)数据库左右连接,内外连接

本文详细介绍了SQL中的连接类型,包括内连接与外连接的具体用法。内连接用于获取两个表中相同字段的交集,而外连接则分为左连接和右连接,分别返回左表或右表的所有记录加上另一表匹配的记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说 内外连接:
  内连接:取的两个表的(有能连接的字段),的交集,即字段相同的。利用内连接可获取两表的公共部分的记录,
      select * from A,B where A.Aid=B.Bnameid
   与 Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
  外连接:左右连接。
   外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)
   (1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。语句如下:   select * from A Left JOIN B ON A.Aid=B.Bnameid  A的字段全有,查询出来在结果集的左边。
   (2)右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1。语句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid 
 

    左右连接的sql语句实例:(+),中间函数NVL给空值赋值。
sql="select name,id,area_name from (select a.name,a.id,NVL(c.area_name,'未分配') area_name "+
"from department a, area_department b,area_table c "+
"where a.id= b.f_branch_id(+) "+
  评论这张
 
### 数据库连接与外连接的区别及使用场景 #### 内连接 (Inner Join)连接返回两个表中满足连接条件的匹配行。这意味着只有当两个表中的记录存在对应关系时,才会出现在结果集中。 ```sql SELECT students.name, grades.score FROM students INNER JOIN grades ON students.id = grades.student_id; ``` 这段SQL语句展示了如何通过`id`字段将`students`表和`grades`表进行内连接,只获取那些既有学生信息又有成绩记录的数据[^5]。 #### 外连接 (Outer Join)连接不仅返回两个表中匹配的行,还会保留不匹配的行。根据保留哪一侧的非匹配行,外连接可分为: - **左连接 (Left Join)**:即使右侧表中不存在对应的记录,也会返回左侧表中的所有记录。 ```sql SELECT students.name, grades.score FROM students LEFT JOIN grades ON students.id = grades.student_id; ``` - **右连接 (Right Join)**:即使左侧表中不存在对应的记录,也会返回右侧表中的所有记录。 ```sql SELECT students.name, grades.score FROM students RIGHT JOIN grades ON students.id = grades.student_id; ``` - **全连接 (Full Join)**:无论两侧是否有匹配项,都会返回两表的所有记录;对于无匹配的情况,在相应位置填充NULL值。 在外连接的情况下,如果某个学生的成绩为空,则该生的名字仍然会显示出来,并且其分数一栏将是NULL[^1]。 #### 使用场景 - 当仅关心共同存在的数据时,应选用**内连接**; - 如果希望查看某一方全部的信息而不局限于双方都有的部分,则适合采用相应的**外连接**形式; - 对于统计分析类需求,比如计算有多少名学生尚未录入成绩等情况,往往需要用到带有NULL处理机制的外连接来实现完整的数据分析功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值