资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

如何使用oracle查询,如何oracle查询db中各个表的数据条数

oracle使用(四)_关联查询

---关联查询

成都创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为新野企业提供专业的成都网站设计、网站制作新野网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

/**

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

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

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

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

*/

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查询用户表空间:select * from user_all_tables 

Oracle查询所有函数和储存过程:select * from user_source

Oracle查询所有用户:select * from all_users.select * from dba_users

Oracle查看当前用户连接:select * from v$Session

Oracle查看当前用户权限:select * from session_privs

表空间含义:

表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。

Oracle数据库中至少存在一个表空间,即SYSTEM的表空间。

oracle怎么通过索引查询数据语句?

oracle对于数据库中的表信息,存储在系统表中。查询已创建好的表索引,可通过相应的sql语句到相应的表中进行快捷的查询:\x0d\x0a1. 根据表名,查询一张表的索引\x0d\x0a\x0d\x0aselect * from user_indexes where table_name=upper('表名');\x0d\x0a\x0d\x0a2. 根据索引号,查询表索引字段\x0d\x0a\x0d\x0aselect * from user_ind_columns where index_name=('索引名');\x0d\x0a\x0d\x0a3.根据索引名,查询创建索引的语句\x0d\x0a\x0d\x0aselect dbms_metadata.get_ddl('INDEX','索引名', ['用户名']) from dual ; --['用户名']可省,默认为登录用户\x0d\x0a\x0d\x0aPS:dbms_metadata.get_ddl还可以得到建表语句,如:\x0d\x0a\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE','表名', ['用户名']) FROM DUAL ; //取单个表的建表语句,['用户名']可不输入,默认为登录用户\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u; //取用户下所有表的建表语句\x0d\x0a\x0d\x0a当然,也可以用pl/sql developer工具来查看相关的表的各种信息。


分享标题:如何使用oracle查询,如何oracle查询db中各个表的数据条数
URL链接:http://cdkjz.cn/article/dscccsj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220