oracle查询包含在子表中的主表数据

 Oracle数据库,查询某表中包含在子表中的数据,子表中数据按特定条件来源于该父表,SQL命令如

select * from a_table a where a.commandId in (select commandId from b_table where type = 1)

a_table父表,b_table子表,a和b表都有commandId列,a表的commandId主键关联b表中的外键commandId,要求a表中commandId包含在b表commandId中,且b表的type黑白名单类型为1的数据

(即查出b表存在的关联的a表的数据)

也可以用:(仅限于一对一的情况,一对多会出现主表重复的情况)

select * from a_table a,b_table b where a.commandId =b.commandId (+) and b.commandId is not null and b.type = 1;

如(一对多出现的问题):

或者是

select * from a_table a where exists(select 1 from b_table b where b.commandId =a.commandId where b.type = 1)

有关in和exists的区别:

“EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项。IN,在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。

1、UNION (无重并集):当执行UNION 时,自动去掉结果集中的重复行,并以第一列的结果进行升序排序。

2、UNION ALL (有重并集):不去掉重复行,并且不对结果集进行排序。

3、INTERSECT  (交集):取两个结果集的交集,并且以第一列的结果进行升序排列。

select   id,name,job  from worker 
      INTERSECT
      select  empno,ename,job  fromemp;

4、MINUS  (差集):只显示在第一个集合中存在,在第二个集合中不存在的数据。并且以第一列的结果进行升序排序。

因此,还有一种写法:

select * from a_table a where a.commandId in (select commandId from a_table intersect select commandId from b_table)

原文地址:https://www.cnblogs.com/likui-bookHouse/p/11532809.html

时间: 2024-10-14 00:46:11

oracle查询包含在子表中的主表数据的相关文章

Oracle生成查询包含指定字段名对应的所有数据表记录语句

应用场合:已知字段名字,查询数据库中所有数据表中包含该字段名的所有数据表 操作办法:指定字段名,数据库表用户,执行下面查询语句即可 --Oracle生成查询包含指定字段名对应的所有数据表记录语句 declare mycolumnname VARCHAR(255):='userid';--定义要查询的字段名变量,运行前修改成您要查询的字段名myownername VARCHAR(255):='system';--定义要查询的数据库用户名变量,运行前修改成您要查询的数据库用户名mystring NV

EF直接查询一张子表的注意事项

项目用到的一个查询,看着再简单不过的查询,没想到居然栽跟头了. 有两张表,一张主表,一张子表[1→多] 在这里我主要是想对子表操作,之所以加主表,是因为在添加子表数据的时候,可以只用一个主表的对象,然后用上下文添加一次,EF自动开存储过程,自动添加关联子表数据.如果大家有什么好的办法让子表一次添加一千多条数据,请指教.[因为我也不太想这样添加数据] 问题就出现在我查询这个子表数据的时候 我的查询语句是这样写的 然后奇迹出现了,按照我的条件约束,查询出来的数据应该只有一两条数据,但是,查询出的结果

Oracle查询被锁的表及进程的方法

Oracle查询可以有多种方法,下面为您介绍的是如何Oracle查询被锁的表及Oracle查询连接的进程的方法,希望对您能够有所帮助. 一.查看被锁的表 select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a

mysql5.7基础 查询指定表中的所有数据

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ Operating System:UbuntuKylin 16.04 LTS 64bitmysql: Ver 14.14 Distrib 5.7.17, for Linux (

ORACLE查询数据库的锁表情况

  查询数据库的锁表情况语句如下: SELECT p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name FROM v$process p,v$session a, v$locked_object b,all_objects c WHERE p.addr=a.paddr AND a.process=b.process AND c.object_id=b.object_id 如果表因为某些情况出现死

Oracle 外键约束子表、父表

CREATE TABLE employees( employee_id      NUMBER(6), last_name        VARCHAR2(25) NOT NULL, email            VARCHAR2(25), salary           NUMBER(8,2), commission_pct   NUMBER(2,2), hire_date        DATE NOT NULL, ... department_id    NUMBER(4), CON

oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?

Oracle 语句中"||"代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335select * from tablename order by col; 结果就是 cola123a234b335b999 如果按倒序排列:select * from tablename order by col desc; 结果就是 colb999b335a234a123 其他回答 先创

oracle删除一个表中的重复数据,且只保留一条

例子1:查找一个表中的重复数据,重复记录是根据单个字段(Id)来判断,表名为STUDENT SELECT ID , COUNT(1) FROM STUDENT T GROUP BY T.ID HAVING COUNT(ID) > 1 例子2:删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录,表名为STUDENT DELETE FROM STUDENT WHERE ID IN (SELECT ID FROM STUDENT T GROUP BY T.ID H

定位表中的行数据存放于哪一个具体的datafile上

副标题:用一个PL/SQL查出表中的行数据存放在哪个具体的datafile中 经常有遇到做DBA的朋友问,该如何知道自己插入的某一行数据,是存在了数据库中的哪一个数据文件(datafile)上了,回答是肯定可以的.在此,就将该方法写出来供更多的朋友使用. 1.正常查询步骤 1.1.先查到表上行数据的ROWID select rowid from tivoli.test_db_avg1 where rownum =1 输出值:   AAAQ0mAAEAAAAhLAAA 1.2.根据ROWID定位到