数据库——Oracle(8)
1 标准SQL外连接(二)
1) 全外连接:查询所有表所有的数据
格式:
select 别名1.*/列名,别名2.*/列名
from 表1 别名1 full outer join 表2 别名2
on 关联条件
案例:查询emp表中所有员工的编号,姓名,职位以及dept表所有部门的所有信息
select e.empno,e.ename,e.job,d.*
from emp e full outer join dept d
on e.deptno = d.deptno
案例:查询emp表中所有员工的姓名,职位,入职时间,工资以及工资等级表中所有工资的等级和该等下最低工资,最后根据入职时间进行升序排列。
select e.ename,e.job,e.hiredate,e.sal,s.grade,s.losal
from salgrade s full outer join emp e
on e.sal between s.losal and s.hisal
order e.hiredate asc
案例:查询emp表中没有字母S的所有员工的编号,姓名,工资,入职时间以及所有部门的编号,名称,最后根据员工的编号进行升序排列。
select e.empno,e.ename,e.sal,e.hiredate,d.deptno,d.dname
from emp e full outer join dept d
on e.deptno = d.deptno
where e.ename not like '%S%'
order by e.empno
2) 可以使用标准SQL实现内连接,不常用,知道即可。
格式:
select 别名1.*/列名,别名2.*/列名
from 表1 别名1 inner join 表2 别名2
on 关联条件
案例:查询emp表中员工的编号,姓名,职位,工资以及所属部门的编号,名称
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e inner join dept d
on e.deptno = d.deptno
案例:查询emp表中工资在1000~3000之间员工的编号,姓名,职位,工资,入职时间以及工资的等级,最后根据员工的编号进行降序排列(2种写法)
select e.empno,e.ename,e.job,e.sal,e.hiredate,s.grade
from emp e inner join salgrade s
on e.sal between s.losal and s.hisal
where e.sal between 1000 and 3000
order by e.empno desc
select e.empno,e.ename,e.job,e.sal,e.hiredate,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal and e.sal between 1000 and 3000
order by e.empno desc
2 视图:视图是一个虚拟表,通过视图从一张或者多张表中查看数据。
1)视图中不存储任何物理数据,只是用来查看数据的窗口。所以删除视图,对表中的数据没有任何的影响。
2)视图中的数据都来源于基本表,是在视图被引用的时候动态生成的。使用视图可以集中,简化,定制查询数据,让用户可以通过视图来访问表中的数据,而不需要去直接查询表格。
3)创建视图的格式:
create view 视图名称
as
查询语句
案例:创建一个视图emp_view1,查询emp表中所有的数据,查询语句作为视图emp_view1
create view emp_view1
as
select * from emp
对视图的使用,跟使用表是一样的
案例:通过视图emp_view1查询emp表中工资大于2000的所有员工的编号,姓名,职位,工资,以及入职时间。
select empno,ename,job,sal,hiredate from emp_view1
where sal > 2000
案例:通过视图emp_view1查询emp表中名字不是以及K开头所有员工的姓名,职位,工资
select ename,job,sal from emp_view1
where ename not like 'K%'
案例:创建一个视图dept_view,查询dept表中所有的数据,查询语句作为视图dept_view
create view dept_view
as
select * from dept
案例:创建一个视图emp_view2,查询emp表中所有员工的编号,姓名,职位,工资,入职时间以及所在部门的编号,名称,查询语句作为视图emp_view2
create view emp_view2
as
select e.empno,e.ename,e.job,e.sal,e.hiredate,d.deptno,d.dname
from emp e left outer join dept d
on e.deptno = d.deptno
案例:查询emp表中所有员工的编号,姓名,职位,入职时间以及所在部门的名字,最后根据入职时间进行降序排列
select e.empno,e.ename,e.job,e.hiredate,d.dname
from emp e left join dept d
on e.deptno = d.deptno
order by e.hiredate desc
select empno,ename,job,hiredate,dname
from emp_view2
order by hiredate desc
案例:创建一个视图emp_view3,查询emp表中所有员工的编号,姓名,职位,工资,上级领导的编号和该工资的等级,该等级的最低和最高工资,查询语句作为emp_view3
create view emp_view3
as
select e.empno,e.ename,e.job,e.sal,e.mgr,s.*
from emp e left join salgrade s
on e.sal between s.losal and s.hisal
案例:查询emp表中名字中没有T的所有员工的编号,姓名,工资,工资的等级和该等级的最高工资,最后根据员工的编号进行降序排列(2种写法)
select e.empno,e.ename,e.sal,s.grade,s.hisal
from salgrade s right join emp e
on e.sal between s.losal and s.hisal
where e.ename not like '%T%'
order by e.empno desc
select empno,ename,sal,grade,hisal from emp_view3
where ename not like '%T%'
order by empno desc
案例:创建视图emp_view4,查询emp表中所有员工的编号,姓名,职位,工资,入职时间以及该员工上级领导的编号,姓名,职位,工资
create view emp_view4
as
select e.empno,e.ename,e.job,e.sal,e.hiredate,m.empno 领导的编号,m.ename 领导的姓名,m.job 领导的职位,m.sal 领导的工资
from emp e left join emp m
on e.mgr = m.empno
4)视图中列名不能重复,遇到重复列名,使用别名进行处理。
5)修改视图:
create or replace view 视图名
as
查询语句
案例:查询emp表中10,20号部门员工的编号,姓名,职位,工资,所属部门的编号,查询语句来修改视图emp_view1
create or replace view emp_view1
as
select empno,ename,job,sal,deptno from emp
where deptno in(10,20)
6) 使用视图对表进行修改操作(insert , update , delete)
a) 使用视图实现插入操作(insert):
select * from dept
insert into dept_view values(70,'财务部门','迪拜')
b) 使用视图实现修改操作(update):
update dept_view set dname = '运维部门',loc = '旧金山'
where deptno = 70
c) 使用视图实现删除操作(delete):
案例:使用视图删除50,60,70号部门
delete from dept_view where deptno in(50,60,70)
7) 只读视图:只能通过视图进行查询操作,不能通过视图进行修改操作。
create view 视图名
as
查询语句
with read only
create view dept_view2
as
select * from dept
with read only
--反例:
insert into dept_view2
values(100,'开发部门','深圳')
8)删除视图
格式:
drop view 视图名
drop view dept_view2
案例:删除视图emp_view1,emp_view2,emp_view3,
emp_view4
drop view emp_view1
drop view emp_view2
drop view emp_view3
drop view emp_view4
3 外键约束:用来维护两张表或者多张表之间的关联关系,被外键约束所修饰的列,其列值参照与之关联的另外一张表中主键所修饰的列的列值。
子表:外键所在的表,称为子表,外键所修饰的列的列值参照于主表中主键所修饰的列的列值。
主表/父表:没有外键的表,子类中的数据参照主表中的数据。
注意:插入数据的时候,要先往主表中插入数据,然后再往子表中插入数据。
create table dept2(
did number(4) primary key,
dname varchar2(50) unique not null
)
create table emp2(
eid number(4) primary key,
ename varchar2(50),
deptId number(4)
)
alter table emp2
add constraint fk_deptId_did_emp2
foreign key(deptId)
references dept2(did)
--反例
insert into emp2 values(1,'刘备',1)
先往主表中插入数据,然后再往子表中插入数据。
insert into dept2 values(1,'研发')
insert into emp2 values(1,'刘备',1)
4 子查询(二):在一条查询语句中又包含一条查询语句。
案例:查询JONES所在部门的名称和地址
1) JONES所在部门的编号
select deptno from emp
where ename = 'JONES'
2) 根据部门的编号查询该部门的名称和地址
select dname,loc from dept
where deptno = (
select deptno from emp
where ename = 'JONES'
)
案例:查询部门名称是RESEARCH的部门下员工的编号,姓名,职位,以及所在部门的编号
1)RESEARCH部门的编号
select deptno from dept
where dname = 'RESEARCH'
2)根据部门编号查询该部门下员工的信息
select empno,ename,job,deptno
from emp
where deptno = (
select deptno from dept
where dname = 'RESEARCH'
)
案例:查询职业是MANAGER的员工所在部门的编号,名称和地址
1)查询职业是MANAGER的员工所在部门的编号
select deptno from emp
where job = 'MANAGER'
2)根据部门的编号查询该部门的信息
select * from dept
where deptno in (
select deptno from emp
where job = 'MANAGER'
)
案例:查询工资在1000~2000之间的员工所在部门的编号,名称
1)查询工资在1000~2000之间的员工的所在部门的编号
select deptno from emp
where sal between 1000 and 2000
2)根据部门的编号查询该部门的编号,名称
select deptno,dname from dept
where deptno in(
select deptno from emp
where sal between 1000 and 2000
)
数据库——Oracle(8)的更多相关文章
- Oracle实例和Oracle数据库(Oracle体系结构)
--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
- 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包----转
在开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数据 ...
- JDBC(用Eclipse操作数据库Oracle)的基础操作集合
JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...
- [数据库]Oracle和mysql中的分页总结
Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...
- Ubuntu16.04下安装数据库oracle客户端
在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...
- 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...
- SpringAccess数据库(oracle)构造
陈科朝:http://blog.csdn.net/u013474104/article/details/44279309 ================ 1.spring 对数据库訪问的支持 当我们 ...
随机推荐
- Linux下中文乱码
Linux下中文乱码 修改mysql配置文件,centeros下 配置文件在 /etc/my.cnf vi /etc/my.cnf 在[mysqld]段下添加 character-set-server ...
- 【转载】VMware Workstation网络说明
1.什么是bridged(桥接模式)?答:在这种模式下,使用VMnet0虚拟交换机,虚拟操作系统就像是局域网中的一台独立的主机,与宿主计算机一样,它可以访问网内任何一台机器.在桥接模式下,可以手工配置 ...
- My life
突然想到的好笑的: 1. 世界上一共有10种人,一种是男人,另一种是女人 2. 吐槽一个网站的域名: 你这网站域名取得,跟色情网站似的 明知这是一场意外,你要不要来,明知这是一场重伤害,你会不会来: ...
- Oracle-DQL 1- select基础
说明:语句中说到的“表”,以及表中有哪些“列”自行脑补......重要的是理解概念,能看懂语句代表的含义就可以了~ DQL-数据查询语句: 1.* 表示所有列SELECT * FROM emp; 2. ...
- Spring IOC的底层实现原理
PS:模块之间的相互依赖叫做耦合 传统方式的开发 UserService us=new UserService(); || v 面向接口编程 UserService us=new UserServi ...
- ARST第二周打卡
Algorithm : 做一个 leetcode 的算法题 题目:一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数.如何找出这个缺失的整数? int FindOneMissNum ...
- Python自学笔记之字符串的操作
1.将字符串全部变为小写:lower() casefold() 范围更广 2.将字符串全部变为大写:upper() 3.判断是否大小写:isupper() islower() 4.居中:center( ...
- Python验证数据的抽样分布类型
假如要对一份统计数据进行分析,一般其来源来自于社会调研/普查,所以数据不是总体而是一定程度的抽样.对于抽样数据的分析,就可以结合上篇统计量及其抽样分布的内容,判断数据符合哪种分布.使用已知分布特性,可 ...
- 怎样使用 v-html 指令?
v-html 可以在目标节点位置内部插入 html 子节点, 跟节点的 .innerHTML 属性类似, 使用方法如下: <!DOCTYPE html> <html lang=&qu ...
- 22-Perl Socket 编程
1.Perl Socket 编程Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. ...