leetcode组合两张表——oracle的左右连接运用

表1: Person

+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主键

表2: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State

分析题目需要用到左右连接:概念如下LEFT OUTER JOIN左联接:结果包括左表(出现在JOIN子句最左边)中的所有行,不包括右表中的不匹配行。RIGHT OUTER JOIN右联接:结果包括右表(出现在JOIN子句最右边)中的所有行,不包括有左表中的不匹配的行。

本题目中应该是person左连接address表,或者address右连接person
--解法1
select p.FirstName, p.LastName, a.City, a.state
from Person p
LEFT JOIN Address a
ON p.PersonId = a.PersonId;

--解法2
select p.FirstName, p.LastName, a.City, a.state
from Person p, Address a
where p.PersonId = a.PersonId(+);

需要注意的是左连接对应在address后面添加(+)

对应的两个执行时长如上图。

原文地址:https://www.cnblogs.com/raychou1995/p/10374019.html

时间: 2024-11-02 22:25:46

leetcode组合两张表——oracle的左右连接运用的相关文章

两张表一对多的连接,取多记录表中最新的一条数据

select sn, pname, srnum, rerepairtime, rn from ( select sn,pname, srnum, rerepairtime,row_number() over(partition by assetsid order by rerepairtime desc) rn from atzserreportb ) where rn = 1 两张表一对多的连接,取多记录表中最新的一条数据

数据库力扣题组合两个表

解析:首先是一个SQL查询语句,由条件组合两个表得出应该是连接查询,由条件无论Person表是否有地址信息,都要基于上述两表提供Person表的信息得出应该是用FROM字句中的左外连接,这样在结果集中保留了连接表达式左表中的非匹配记录. 知识点:详见教材P151.SQL查询语句分为简单,连接,嵌套,组合查询4种类型.连接查询中的连接条件可通过WHERE子句和FROM子句表示.WHERE子句表示的连接操作可分等值连接,非等值连接,自然连接.FROM子句表示的连接操作可分为内连接,左外连接,右外连接

Oracle两张表关联批量更新其中一张表的数据

Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXISTS (SELECT 1 FROM 表1 WHERE 表1.A = 表2.A); 尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围. 方法二: MERGE INTO 表2 USING 表1 ON (表2.A = 表1.A) -- 条件是 A 相同 WHEN MATCHED TH

2016.2.13 (年初六) oracle两张表update方法

A表customers和B表tmp_cust_city有3个相同字段, customer_id,city_name,customer_type 现要根据b表更新a表 更新一个字段情况: update customers a set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id) where exists (select 1 from tmp_cust_city b wher

使用kettle实现两张表的数据更新

请大家指教,使用的Oracle数据库作为数据源,mysql数据库做同步 1.如图所示: 拖进,表输入,插入/更新,write to log, 2.下面进入配置页面,双击”表输入“ 或是右键”编辑步骤“ 如果所示: 配置你的主数据源,就是你要从他上边更新数据的,点击”新建“或是”编辑“进行数据库配置,如图所示, 你的数据库地址ip,数据库,端口号,用户名,密码,点击”Test“进行测试连接,然后关闭进行点击,”获取查询sql语句“,如图所示: 选择你的数据源表,然后点击”确定“ 3.进行插入/更新

力扣leetcod 175:组合两个表

175:组合两个表 题: 表1: Person +-------------+---------+| 列名 | 类型 |+-------------+---------+| PersonId | int || FirstName | varchar || LastName | varchar |+-------------+---------+PersonId 是上表主键表2: Address +-------------+---------+| 列名 | 类型 |+-------------+

mysql将一张表拆分两张表来使用

"SELECT n1.id, n1.nav_name, n1.nav_info, n2.id iid, n2.nav_name nnav_name FROM cms_nav n1 LEFT JOIN cms_nav n2 ON n1.pid=n2.id WHERE n1.id='$this->id' OR n1.nav_name='$this->nav_name' LIMIT 1" 中国军事 id=26 它的 pid=1 通过pid=1找到他的主类, id=pid=1 id

mysql高效获取两张表共同字段的交集数据

问题: 例如下面两站表A,B.A表和B表分别有5-10w数据.A表结构如下:id bid name title publisher extraB表结构如下id bid name title publisher A出版社也为很多人出版了书籍,B出版社也为很多人出版了书籍,有sql语句找出这两个出版社为那些人 共同出版书籍,用innerjoin太慢,有没有什么更好的办法? 解答一: 由于不知道你表的索引情况,至于用join还是in和exists不太好说,理论上讲,exists最快.in次之.join

CROSS JOIN连接用于生成两张表的笛卡尔集

将两张表的情况全部列举出来 结果表: 列= 原表列数相加 行= 原表行数相乘 CROSS JOIN连接用于生成两张表的笛卡尔集. 在sql中cross join的使用: 1.返回的记录数为两个表的记录数乘积. 2.将A表的所有行分别与B表的所有行进行连接. 例如: tableA r1 r2 A B C D tableB r3 r4 1 2 3 4 select * from tableA cross join tableB; return: r1 r2 r3 r4 r1 r2 1 2 r1 r2