数据库——Oracle(7)
1 索引(二):索引是用来提高查询的效率。
索引的优点和缺点:
优点:索引可以提高查询的速度。
缺点:创建索引会占用磁盘物理空间,而且添加索引,会减慢修改(insert,update,delete)数据速度。
2 Oracle中专门用来执行外链接操作的SQL语句(仅限于Oracle中使用)
1)内连接:只查询表中有关联关系的数据。
案例:查询emp表中员工的编号,姓名,职位,上级领导的编号,姓名,职位,最后根据员工的编号进行降序排列
select e.empno,e.ename,e.job,e.mgr,m.ename,m.job
from emp e,emp m --e,员工表;m,领导表
where e.mgr = m.empno
order by e.empno desc
2)外连接:在查询的时候可以以某一张表为主,查询该表中所有的数据,以及与之关联另外一张或者多张表中数据(常见)
insert into emp(empno,ename) values(1111,'刘备')
insert into emp(empno,ename) values(5555,'关羽')
insert into emp(empno,ename) values(6666,'张飞')
insert into dept values(50,'研发部门','北京')
insert into dept values(60,'人事部门','上海')
select e.empno,e.ename,e.hiredate,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno
3) 在关联条件的位置(在要查询所有数据的条件的表的对面)使用(+)
案例:查询emp表中所有员工的编号,姓名,职位,工资以及所属部门的编号,名称
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno(+)
案例:查询dept表中所有部门的所有信息以及该部门下员工的编号,姓名,职位,工资,入职时间,最后根据员工的入职时间进行降序排列。
select d.*,e.empno,e.ename,e.job,e.sal,e.hiredate
from dept d,emp e
where d.deptno = e.deptno(+)
order by hiredate desc
案例:查询emp表中名字中不包含'S'的所有员工的编号,姓名,职位,工资以及该部门的名字和地址,最后根据员工的编号进行升序排列
select e.empno,e.ename,e.job,e.sal,d.dname,d.loc
from emp e,dept d
where e.deptno = d.deptno(+) and e.ename not like '%S%'
order by e.empno
案例:查询emp表中所有员工的编号,姓名,工资,职位以及该工资的等级,该等级的最低工资,最后根据员工的编号进行升序排列。
select e.empno,e.ename,e.sal,e.job,s.grade,s.losal
from emp e,salgrade s
where e.sal between s.losal(+) and s.hisal(+)
order by e.empno asc
select e.empno,e.ename,e.sal,e.job,s.grade,s.losal
from emp e,salgrade s
where e.sal >= s.losal(+) and e.sal <=s.hisal(+)
order by e.empno asc
案例:查询emp表中职业不是MANAGER和SALESMAN的所有员工的编号,姓名,职位,工资以及工资等级
select e.empno,e.ename,e.job,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal(+) and s.hisal(+) and e.job not in('MANAGER','SALESMAN')
案例:查询emp表中所有员工的编号,姓名,职位,工资以及对应上级经理的编号,姓名,职位,工资,最后员工的编号进行降序排列。
select e.empno,e.ename,e.job,e.sal,m.empno,m.ename,m.job,m.sal
from emp e,emp m -- e,员工表;m,领导表
where e.mgr = m.empno(+)
order by e.empno desc
4) 不能在关联条件的两端都加上(+),仅仅只能在一端加上(+)
--反例
select e.*,d.*
from emp e,dept d
where e.deptno(+) = d.deptno(+)
5) 使用(+)实现外链接,只能在Oracle中使用。
3 序列:Oracle中的一个数据库对象,可以通过序列自动的生成自增的数值,经常使用序列生成的数值作为主键所修饰的列的列值。
1)创建序列:
create sequence 序列名
create sequence id_seq1
2)nextval:第1次使用nextval生成数值默认的初始值,从第2次开始每次自增。
select id_seq1.nextval from dual
案例:创建一张表worker15,id number(4)主键,name varchar2(50)。创建一个序列id_seq2。往worker15表中插入任意的3条数据,使用id_seq2.nextval生成数值作为主键所在的列的列值。
insert into worker15 values(id_seq2.nextval,'张三')
create table worker15(
id number(4) primary key,
name varchar2(50)
)
create sequence id_seq2
insert into worker15 values(id_seq2.nextval,'李世民')
insert into worker15 values(id_seq2.nextval,'李靖')
insert into worker15 values(id_seq2.nextval,'苏定方')
3)currval:返回序列当前的值
select id_seq2.nextval from dual
select id_seq2.currval from dual
4)序列的几个属性
a)序列的初始值:第1次使用nextval生成数值
start with 初始值,如果不设置初始值,默认的初始值是1。
b)增长的步长:每次使用nextval的增量
increment by 增量
c)序列的最小值:
minvalue 最小值
d)序列的最大值:
maxvalue 最大值
create sequence id_seq3
start with 1000
increment by 100
minvalue 1
maxvalue 100000000000
select id_seq3.nextval from dual
4 事务:对数据库一系列连续的操作都封装在一起(一个事务内),要么一起成功,要么一起失败。
1)commit和rollback
create table worker16(
id number(4) primary key,
name varchar2(20),
age number(3)
);
insert into worker16 values(1,'张无忌',23);
insert into worker16 values(2,'任我行',32);
insert into worker16 values(3,'杨过',19);
commit:提交,确认表中的数据真实发生改变,在Oracle中只有提交事务以后,表中的数据才可以真实被修改(数据在底层真正被修改)
rollback:回退(回滚),撤销未提交(没有commit)的操作
insert into worker16 values(4,'郭靖',31);
insert into worker16 values(5,'黄蓉',35);
insert into worker16 values(6,'周芷若',21);
2) 为什么需要使用事务(把一系列连续对数据库的操作封装在一起)?
银行表
编号 姓名 余额
1 大哥 99999999999999999999999.99
2 范冰冰 100.1
1号转给2号100
第1步:从1号账户减去100
update 银行表 set 余额 = 余额 - 100
where 编号 = 1
停电了
第2步:给2号账户加上100
update 银行表 set 余额 = 余额 + 100
where 编号 = 2
commit
总结:把加钱和减钱的操作封装在一个事务内,要么一起成功,要么一起失败。
5 标准SQL外连接(可以在任何一款数据库中使用)
1)左外连接查询:以左边的表为主,查询左表中所有的数据以及与之关联的右表中的数据
格式:
select 别名1.*/列名,别名2.*/列名
from 左表 别名1 left (outer) join 右表 别名2
on 关联条件
案例:查询emp表中所有员工的编号,姓名,职位,工资以及所属部门的编号,名称
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e left outer join dept d
on e.deptno = d.deptno
案例:查询dept表中所有部门的编号,名称以及该部门下员工的编号,姓名,职位,入职时间,最后根据入职时间进行降序排列
select d.deptno,d.dname,e.empno,e.ename,e.job,e.hiredate
from dept d left join emp e on d.deptno = e.deptno
order by e.hiredate desc
案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,最后根据工资的等级进行升序排列。
select e.empno,e.ename,e.job,e.sal,s.grade
from emp e left join salgrade s on e.sal between s.losal and s.hisal
order by s.grade
案例:查询emp表中所有员工的编号,姓名,工资以及上级领导的编号,姓名,工资,最后根据员工的编号进行降序排列
select e.empno,e.ename,e.sal,m.empno,m.ename,m.sal
from emp e left join emp m on e.mgr = m.empno
order by e.empno desc
案例:查询emp表中名字中没有字母'K'的所有员工的编号,姓名,职位以及所在部门的编号,名称
select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e left join dept d on e.deptno = d.deptno
where e.ename not like '%K%'
2) 右外连接查询:以右表为主,查询右表中所有的数据以及与之关联的左表中的数据
格式:
select 别名1.*/列名,别名2.*/列名
from 左表 别名1 right (outer) join 右表 别名2 on 关联条件
案例:查询dept表中所有部门的所有信息,以及与之关联的emp表中员工的编号,姓名,职位,工资
select d.*,e.empno,e.ename,e.job,e.sal
from emp e right join dept d on e.deptno = d.deptno
案例:查询emp表中所有员工的编号,姓名,职位,工资以及该工资的等级和该等级的最高工资,最后根据员工的编号进行降序排列
select e.empno,e.ename,e.job,e.sal,s.grade,s.hisal
from salgrade s right join emp e on e.sal between s.losal and s.hisal
order by e.empno desc
案例:查询emp表中名字中不包含字母‘T’的所有员工的编号,姓名,工资,入职时间以及上级领导的编号,姓名,最后根据员工的编号进行升序排列
select e.empno,e.ename,e.sal,e.hiredate,m.empno,m.ename
from emp m right join emp e on m.empno = e.mgr
where e.ename not like '%T%'
order by e.empno asc
案例:查询emp表中不是12月入职的所有员工的编号,姓名,职位,入职时间,工资,以及工资等级,最后根据入职时间进行降序排列,to_char(hiredate,'mm') = '12'
select e.empno,e.ename,e.job,e.hiredate,e.sal,s.grade
from salgrade s right join emp e on e.sal between s.losal and s.hisal
where to_char(e.hiredate,'mm') != '12'
order by e.hiredate desc
案例:查询emp表中不在10号部门的所有员工的编号,姓名,职位,入职时间以及所在部门的所有信息
select e.empno,e.ename,e.job,e.hiredate,d.*
from dept d right join emp e
on d.deptno = e.deptno
where e.deptno <> 10
数据库——Oracle(7)的更多相关文章
- 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 对数据库訪问的支持 当我们 ...
随机推荐
- vue中如何使用event对象
原文地址 一.event 对象 (一)事件的 event 对象 你说你是搞前端的,那么你肯定就知道事件,知道事件,你就肯定知道 event 对象吧?各种的库.框架多少都有针对 event 对象的处理. ...
- Windows 10 删除资源管理器中7个文件夹
Windows 10 安装完成之后 ,在资源管理器中会存在 7 个文件夹,他们分别是:图片.视频.下载.音乐.桌面.文档.3D对象. 我们可以通过修改注册表的方式,隐藏这7个文件夹.相关注册表内容如下 ...
- PHP学习(5)——字符串操作与POSIX正则
一.字符串操作 1.字符串的格式化 1.1 干掉空格 trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回. ltrim()函数可以除去字符串开始位置的空格. rtrim()函数 ...
- nRF5 SDK Bootloader and DFU moudles(3)
DFU控制点特性用于控制DFU过程的状态. 通过写入该特征来请求所有DFU程序. 标记过程结束的响应将作为通知收到. BLE传输 Transfer of an init packet DFU控制器首先 ...
- Java-Redis 热部署问题
项目请求时报错: java.lang.ClassCastException: cn.xingaohbd.seckil.model.User cannot be cast to cn.xingaohbd ...
- Oracle数据库弱口令解密
1.首先我们先看下Oracle加密的格式. 接下来我们把他头和尾部删除,中间加: 通过py脚本来进行完成 转换完成后输出成这种格式 之后直接丢进kali里面,用john --w=字典文件 + 转换文件 ...
- setsockopt用法详解
最近做的一个程序用到了IOCP通信模型,里面用到了setsockopt对套接字进行设置,看源代码的时候最setsockopt函数很不理解,看了msdn以后还是不太明白这个函数的用法,于是就到网上找了一 ...
- vue中关于checkbox数据绑定v-model指令说明
vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type="c ...
- SOSdp
layout: post title: SOSdp author: "luowentaoaa" catalog: true tags: mathjax: true - codefo ...
- linux终端命令(四)系统信息相关命令(五)其他命令
四.系统信息相关命令 时间和日期 date cal 磁盘和目录空间 df du 进程信息 ps top kill 1.时间和日期 序号 命令 作用 01 cal 查看日历,-y选项可以查看一年的日历 ...