file-type

Oracle JOIN详解:内外连接与实战示例

DOCX文件

下载需积分: 0 | 17KB | 更新于2024-09-13 | 88 浏览量 | 5 下载量 举报 收藏
download 立即下载
Oracle的JOIN操作是数据库查询中非常重要的一个部分,它允许我们将多个表中的数据关联起来,形成一个包含所有相关信息的结果集。本文将详细介绍Oracle的几种JOIN类型,包括条件连接、外连接的内外左右四种模式以及它们之间的区别和使用场景。 首先,条件连接,也称为标准JOIN,通过ON子句来定义连接条件。ON子句接受一个布尔表达式,判断来自T1和T2表的行是否匹配。例如,如果我们有表T1和T2,可以通过ON T1.id = T2.id这样的表达式来确保只有当id字段相等时,两行才会被连接在一起。ON子句是SQL中最常用的连接条件方式,与WHERE子句相似但用于连接操作。 USING子句则是另一种连接条件的方式,它适用于当两个表之间存在公共字段并且这些字段值需要完全匹配时。USING列出的字段名代表了连接条件,比如USING (field1, field2, field3) 等价于 ON T1.field1 = T2.field1 AND T1.field2 = T2.field2 AND T1.field3 = T2.field3。与ON不同的是,USING会使这些公共字段在结果集中仅出现一次。 NATURAL JOIN 是一种特殊的连接类型,它隐含地使用两个表中都存在的公共字段作为连接条件。NATURAL JOIN与USING类似,但不明确指定字段名,而是自动寻找共享的列进行匹配。然而,使用NATURAL JOIN时需要特别注意,因为如果没有明确的列名指定,可能会引发歧义,尤其是当表结构发生变化时。 接下来是外连接,分为LEFT OUTER JOIN、RIGHT OUTER JOIN和FULL OUTER JOIN: - LEFT OUTER JOIN:对于T1中的每一行,即使在T2中没有匹配的行,也会在结果集中返回T1的行,并且T2的列填充NULL值。这意味着T1的完整数据会被保留在结果中。 - RIGHT OUTER JOIN:与LEFT OUTER JOIN相反,如果T2中没有匹配的行,结果集中会包含T2的行,T1的列填充NULL值。这样,T2的数据完整性得到保证。 - FULL OUTER JOIN:结合了LEFT和RIGHT OUTER JOIN的特点,无论T1还是T2中是否存在匹配,都会在结果集中包含完整的行,对应的未匹配列填充NULL值。 理解Oracle的JOIN操作是提高数据库查询效率和数据处理能力的关键。选择合适的JOIN类型取决于数据关系和业务需求,正确使用ON、USING和NATURAL等连接条件,能够帮助我们高效地获取所需信息并保持数据一致性。在实际开发中,务必确保连接条件的正确性,以避免潜在的数据丢失或错误。

相关推荐

filetype

./bin/flink run -d -t yarn-per-job \ -Dyarn.application.name="flinkcdc_prod_old_smpcdb_3" \ -Dyarn.application.queue="hive" \ -Dstate.backend=rocksdb \ -Dstate.externalize-checkpoints=true \ -Dexecution.checkpointing.externalized-checkpoint-retention=RETAIN_ON_CANCELLATION \ -Dexecution.checkpointing.interval=180s \ -Dexecution.checkpointing.timeout=7200s \ -Dexecution.checkpointing.min-pause=60s \ -Dexecution.checkpointing.max-concurrent-checkpoints=1 \ -Dstate.checkpoints.dir=hdfs://hadoop102:8020/flink_ck/offline/prod_old_smpcdb \ --allowNonRestoredState \ -Dparallelism.default=4 \ -Djobmanager.memory.process.size=2048m \ -Dtaskmanager.memory.process.size=5120m \ -Dtaskmanager.numberOfTaskSlots=2 \ -c org.apache.doris.flink.tools.cdc.CdcTools \ /opt/module/flink-1.17.2-sql-cdc/lib/flink-doris-connector-1.17-1.6.2.jar \ oracle-sync-database \ --database prod_old_smpcdb \ --oracle-conf hostname=10.1.9.2 \ --oracle-conf port=1521 \ --oracle-conf database-name=PMS2 \ --oracle-conf username=pms \ --oracle-conf password="SRX3yak#8" \ --oracle-conf schema-name=PMS \ --oracle-conf debezium.database.history.store.only.captured.tables.ddl=true \ --oracle-conf debezium.log.miner.enabled=false \ --oracle-conf debezium.snapshot.mode=initial_only \ --oracle-conf debezium.snapshot.fetch.size=20000 \ --oracle-conf debezium.column.mapping="CLOB:STRING,BLOB:STRING" \ --oracle-conf debezium.snapshot.checkpoint.interval.ms=0 \ --oracle-conf debezium.transforms=encodeBlob \ --oracle-conf debezium.transforms.encodeBlob.format=base64 \ --oracle-conf debezium.database.url="jdbc:oracle:thin:@//10.1.9.2:1521/PMS" \ --including-tables "EXP_PHOTO" \ --sink-conf fenodes=10.210.31.92:18030 \ --sink-conf username=root \ --sink-conf password=zjj000000 \ --sink-conf jdbc-url=jdbc:mysql://10.210.31.92:9030 \ --sink.buffer-size=100M \ --sink.buffer-flush.interval=60000 \ --sink-conf sink.enable-2pc=false \ --sink-conf sink.label-prefix=label_cdc_prod_old_smpcdb_340 \ --sink-conf sink.stream-load.timeout=7200 \ --sink-conf sink.connect.timeout.ms=60000 \ --sink-conf sink.request.timeout.ms=3600000 \ --table-conf replication_num=1 目前是flink doris connetct 来采集表中大字段