oracle如何查找关联 oracle的关联查询

oracle根据外键名查关联的表

查找表的所有索引(包括索引名 类型 构成列)

专注于为中小企业提供网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业双阳免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

select t * i index_type from user_ind_columns t user_indexes i where t index_name = i index_name and t table_name = i table_name and t table_name = 要查询的表

查找表的主键(包括名称 构成列)

select cu * from user_cons_columns cu user_constraints au where nstraint_name = nstraint_name and nstraint_type = P and au table_name = 要查询的表

查找表的唯一性约束(包括名称 构成列)

select column_name from user_cons_columns cu user_constraints au where nstraint_name = nstraint_name and nstraint_type = U and au table_name = 要查询的表

查找表的外键(包括名称 引用表的表名和对应的键名 下面是分成多步查询)

select * from user_constraints c where nstraint_type = R and c table_name = 要查询的表

查询外键约束的列名

select * from user_cons_columns cl where nstraint_name = 外键名称

查询引用表的键的列名

select * from user_cons_columns cl where nstraint_name = 外键引用表的键名

查询表的所有列及其属性

lishixinzhi/Article/program/Oracle/201311/17150

oracle两张表关联查询

select e.empno, e.ename, d.deptno, d.dname

from emp e, dept d

where e.deptno = d.deptno;

在之前所使用的查询操作之中,都是从一张表之中查询出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下:

SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名] ,…] FROM 表名称 [别名], [表名称 [别名] ,…] [WHERE 条件(S)] [ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]]。

扩展资料:

Oracle 常用的关联查询:

Oracle外连接:

(1)左外连接 (左边的表不加限制)。

(2)右外连接(右边的表不加限制)。

(3)全外连接(左右两表都不加限制)。

outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。

外连接分为三种: 左外连接,右外连接,全外连接。 对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我们省略outer 这个关键字。 写成:LEFT/RIGHT/FULL JOIN。

在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。

oracle数据库怎么关联查询

跟my sql一样的关联,这些关联查询都是一样的,例如内联查询,左联查询

内联查询:

想把用户的积分信息, 等级,都列出来,一般会出现:

select * from emd_mteller t1,emd_mrole t2 where t1.teller_id = t2.teller_id

select * from emd_mteller t1 inner join emd_mrole t2 on t1.teller_id = t2.teller_id

左联查询:

left join 或者left outer join

返回左表中的所有行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。

Select * from t1 left outer join t3 on t1.userid = t2.userid

oracle如何查询表被哪个关联

1. 查询一张表里面索引

select * from user_indexes where table_name=XX;

2. 查询被索引字段

select * from user_ind_columns where index_name=XX;

3.查询数据库中所有索引

select * from user_objects where object_type='INDEX';

可以通过 desc table_name; 来查看这三张表的数据结构,选择自己需要的字段查看。

Oracle数据查询时经常用到的关联

关联在Oracle数据查询时会经常用到 灵活的应用关联可以解决很多实际应用的问题 下面给出一些示例:

建表

create table ab ( ab_id number( ) ab_name varchar ( ) ); create table bb ( bb_id number( ) bb_name varchar ( ) );

插入数据

insert into ab(ab_id ab_name) values( ab_name ); insert into ab(ab_id ab_name) values( ab_name ); insert into ab(ab_id ab_name) values( ab_name ); insert into bb(bb_id bb_name) values( bb_name ); insert into bb(bb_id bb_name) values( bb_name ); insert into bb(bb_id bb_name) values( bb_name ); insert into bb(bb_id bb_name) values( bb_name );

等值关联(全关联)

select a ab_id a ab_name b bb_name from ab a bb b where a ab_id=b bb_id;

返回结果

AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name

返回两个表中所有能匹配的记录 不能匹配的记录不返回

左关联

select ab_id ab_name bb_name from ab a left join bb b on a ab_id=b bb_id; 同 select ab_id ab_name bb_name from ab a bb b where a ab_id=b bb_id(+);

返回结果

AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name ab_name

返回左边表的左右记录 在右边表中没有对应记录的右表字段显示为空

右关联

select ab_id ab_name bb_name from ab a right join bb b on a ab_id=b bb_id; 同 select ab_id ab_name bb_name from ab a bb b where a ab_id(+)=b bb_id;

返回结果:

AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name bb_name bb_name

返回右边表中所有的记录 在右边表不能匹配的记录行上 左边表对应的字段显示为空

完全外关联

select ab_id ab_name bb_name from ab a full join bb b on a ab_id=b bb_id;

返回结果

AB_ID AB_NAME BB_NAME ab_name bb_name ab_name bb_name ab_name bb_name bb_name

返回两个表所有的结果 如果在关联条件上没有对应的记录 那么将在该列上显示为空

lishixinzhi/Article/program/Oracle/201311/18919

oracle使用(四)_关联查询

---关联查询

/**

等值连接:关联表中存在相同列

非等值连接:表中没有相同的列名,但是一个表中列,在另外表中存在某种关系,比如在范围内

外连接:左外连接(左边显示全部记录)和右外连接(右边显示全部记录)

自连接:自己关联自己查询

*/

select * from emp;

select * from dept;

-- 笛卡尔积

select * from emp,dept;

-- 关联查询

select * from emp,dept where emp.deptno = dept.deptno;

-- 查询雇员的名称和部门的名称

select ename,dname from emp,dept where emp.deptno = dept.deptno;

select * from salgrade;

--查询雇员名称和薪水等级

select e.ename,g.grade from emp e,salgrade g where e.sal between g.losal and g.hisal;

-- 需要将雇员表中的数据全部显示,利用等值连接,只能把关联到的数据显示出来,这就需要外连接

select * from emp e,dept d where e.deptno = d.deptno; --等值连接

select * from emp e,dept d where e.deptno = d.deptno(+); --左外连接(左数据要显示全,右表补空)

select * from emp e,dept d where e.deptno(+) = d.deptno; --右外连接(右数据要显示全,左表补空)

-- 自连接,把一张表自己关联自己

-- 将雇员和他的经理查出来 e表示雇员表,m也表示雇员表 匹配的e.mgr的经理是哪个雇员

select e.ename,m.ename from emp e,emp m where e.mgr = m.empno;

-- 不加任何连接条件 笛卡尔积

select * from emp e,dept d;

--以上是sql 92语法问题

-- 关联查询条件放到where子句中,而where语句还负责对结果集进行条件过滤,

-- 意味着将连接条件和过滤条件写在一起,可读性差,不符合单一职责

sql 99 语法

cross join 等价 92语法笛卡尔积

select * from emp cross join dept;

select * from emp cross join dept;

-- natural join 相当于等值连接,但是不需要等值条件,会做动找相同列左连接

-- 如果两表中没有相同列,相当于笛卡尔积

-- 有相同的列,会自动做等值连接

select * from emp e natural join dept d;

-- 没有相同的列,相当于笛卡尔积

select * from emp e natural join salgrade;

--on 子句,添加连接条件

-- on子句等值连接,相连接当于92语法等值连接

select * from emp e join dept d on e.deptno = d.deptno;

--on 子句非等值连接,相当于92语法非等值连接

select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;

-- left outer join ,其中outer可省略 99语法左外连接 会把左表记录显示全,右表无对应记录,显示空

select * from emp e left outer join dept d on e.deptno = d.deptno;

-- 92语法 左外连接

select * from emp e,dept d where e.deptno = d.deptno(+);

-- right outer join ,其中outer可省略 99语法右外连接

select * from emp e right outer join dept d on e.deptno = d.deptno;

-- 92语法 右外连接

select * from emp e,dept d where e.deptno = d.deptno;

-- full outer join 99语法独有相当于同时满足左外连接和右外连接

select * from emp e full outer join dept d on e.deptno = d.deptno;

-- inner join 就是表连接

select * from emp e inner join dept d on e.deptno = d.deptno;

-- 省略inner

select * from emp e join dept d on e.deptno = d.deptno;

--using,除了使用on作为连接条件,也可使用using作为连接条件

--此时查出的deptno不属于任何一张表

select * from emp e join dept d using(deptno);

-- 发现会出现两列deptno,分别属于两张表

select * from emp e join dept d on e.deptno = d.deptno;

99语法和92语法,实际开发中都可使用,建议使用99语法,可读性更强

-- 检索雇员名字、所在单位、薪水等级

select e.ename,d.loc,sg.grade from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;


当前标题:oracle如何查找关联 oracle的关联查询
标题来源:http://scyanting.com/article/hggijj.html