Oracle学习笔记
- 1.什么是oracle数据库
- 2.什么是Oracle实例
- 3.Oracle实例与数据库关系
- 4.Oracle版本
- 5.安装Oracle 11g
- 6.卸载Oracle
- 7.Oracle 目录结构与系统用户
- 8.Oracle 的启动与关闭
- 9.Oracle客户端工具介绍
- 10.Oracle的使用
- 11. Oracle 的链接配置
- 12.Net Configuration Assistant 工具
- 13.Oracle 基本操作
- 14.SQL语言基础
- 15.Oracle中HR用户介绍
- 16.DQL语言
1.什么是oracle数据库
所以关系型数据库存储数据的集合就是磁盘中的文件。oracle数据库其实就是一组文件的集合。
它由:数据文件、控制文件、日志文件构成
1.1 数据文件(.DBF)
数据文件是二进制文件,是用于保存用户应用程序数据和Oracle系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件。Oracle在创建表空间的同时会创建数据文件
1.2 控制文件(.CTL)
控制文件是一个二进制文件,它主要记录数据库的名称,数据库的数据文件存放位置等信息。一个控制文件只能属于一个数据库。如果控制文件丢失,这个数据库就无法操作
1.3 日志文件(.LOG)
日志文件在Oracle数据库中分为重做日志(Redo Log File)文件和归档日志文件两种。重做日志文件是Oracle数据库正常运行不可或缺的文件,主要记录数据库操作过程。用于备份和还原数据库,以达到数据库最新状态
2.什么是Oracle实例
实例就是数据库启动后分配的内存和建立的后台进程,数据库关闭后,物理上的文件还存在,但实例分配的内存和建立的进程就没有了
3.Oracle实例与数据库关系
实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存。
这些进程可以操作数据库;
而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制 文件)。
在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。
大多数情况下, 反过来也成立:一个数据库上只有一个实例对其进行操作。
4.Oracle版本
Oracle 8i i 代表 Internet。8i 版本开启对 Internet 的支持。所以,在版本号之后,添加了标识 i
Oracle 9i
Oracle 10g g 代表 Grid 网格。10g 加入了网格计算的功能,因此版本号之后的标识使用了字母 g
Oracle 11g
Oracle 12c c 代表云(cloud)计算设计。12c 版本表示对云计算的支持
5.安装Oracle 11g
密码为oracle
密码为oracle
6.卸载Oracle
6.1 停止使用 Oracle 的服务
停用 oracle 服务,进入计算机管理,在服务中,找到 oracle 开头的所有服务,右击选择 停止。
6.2 运行卸载 Oracle 数据库程序
在开始菜单中找到 Oracle 安装产品,点击运行 Oracle 自带的卸载程序 Universal Installer 工具卸载。
6.3 删除使用 Oracle 的服务
开始菜单中,找到 Universal Installer,运行 Oracle Universal Installer,单击卸载产品,
在产品清单窗口中,单击全部展开,除了 OraDb11g_home1 外,
勾选其他项目,单击删除, 根据软件提示单击下一步最终完成卸载。
6.4 删除注册表中 Oracle 相关项
在命令窗口 ,输 入 regedit , 打 开 注 册 表 , 依 次 展 开 HKEY_LOCAL_MACHINE\SOFTWARE,
找到 oracle,删除之。
依次展开 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 中,删除所有 oracle 开头的项。
依次展开 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有 oracle 开头的项。
扩展删除(以下不是必须的注册表删除项),如果安装不成功可以自己也把这些删除了在 HKEY_CLASSES_ROOT,
删除以 Ora、Oracle、Orcl 或 EnumOra 为前缀的键删除HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\St art Menu\Programs
中所有以 oracle 开头的键。 删除 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI 中除 Microsoft ODBC for Oracle 注册表键以外的所有含有Oracle的键。
6.5 删除 Oracle 环境变量
右键点击我的电脑-->属性-->高级-->环境变量,删除环境变量 ORACLE_HOME、 TNS_ADMIN 等环境变量,
删除 PATH 中等环境变量有关 Oracle 的设定的路径信息。
6.6 删除“开始”菜单中 Oracle 目录
打开资源管理器,在地址栏中输入“%userprofile%\「开始」菜单\程序”回车,删除安 装的 Oracle 目录。
然后再到地址栏中输入“%allusersprofile%\「开始」菜单\程序”回车, 删除安装的 Oracle 目录。
6.7 重新启动计算机
6.8 删除 Program Files\Oracle 目录
如果在 Program Files\Oracle 目录存在,则删除 Program Files\Oracle 目录。
6.9 删除 Oracle 安装目录
删除 Oracle 的安装目录 app 等目录
7.Oracle 目录结构与系统用户
7.1 Oracle 目录结构
7.1.1 admin 目录
记录Oracle实例的配置,运行日志等文件。每个实例一个目录。
SID:System IDentifier 的缩写,是 Oracle实例的唯一标记。
在Oracle中一个实例只能操作一个数据库。如果安装多个库那么就会有多个实例,
我们可以通过实例SID来区分。
由于Oracle中一个实例只能操作一个数据库的原因oracle中也会使用 SID来作为库的名称。
7.1.2 cfgtoollogs 目录
下面子目录分别存放当运行 dbca,emca,netca 等图形化配置程序时的 log。
7.1.3 checkpoints 目录
存放检查点文件
7.1.4 diag 目录
Oracle11g新添加的一个重组目录。
其中的子目录,基本上Oracle每个组件都有了自己单独的目录,在Oracle10g中我们一直诟病的log文件散放在四处的问题终于得到解决,无论是asm还是crs还是rdbms,所有组件需要被用来诊断的log文件都存放在了这个新的目录下。
7.1.5 flash_recovery_area(闪回区)目录
闪回区:分配一个特定的目录位置来存放一些特定的恢复文件,用于集中和简化管理数据库恢复工作。闪回区可存储完全的数据文件备份、增量备份、数据文件副本、当前的控制文件、备份的控制文件、spfile文件、快照控制文件、联机日志文件、归档日志、块跟踪文件、闪回日志。
7.1.6 oradata 目录
存放数据文件
1)orcl 数据库文件
2)CONTROL01.CTL
Oracle 数据库的控制文件。
3)EXAMPLE01.DBF
Oracle 数据库表空间文件。
4)REDO01.LOG
Oracle 数据库的重做日志文件。
5)SYSAUX01.DBF
11g 新增加的表空间。主要存储除数据字典以外的其他数据对象。由系统内部自动维护。
6)SYSTEM01.DBF
用于存放 Oracle 系统内部表和数据字典的数据。比如,表名、列名、用户名等。
7)TEMP01.DBF
临时表空间文件。
8)UNDOTBS01.DBF
撤销表空间文件。用来保存回滚数据。
9)USERS01.DBF
用户表空间。
7.1.7 product 目录
Oracle RDBMS的软件存放目录。
RDBMS 即关系数据库管理系统(Relational Database Management System)。
7.2 Oracle 系统用户
7.2.1 sys 用户
sys:sys 是 Oracle 中的超级账户,拥有的权限最大。可以完成数据库的所有管理任务。
7.2.2 system 用户
system:没有 sys 权限大,通常用来创建一些用户查看管理信息的表或视图。
不建议使 用 system 用户来创建一些与管理无关的表或者视图。
7.2.3 二者在登录时的区别
sys和system在登录 Oracle 时,sys 只能以系统管理员(sysdba)或系统操作员(sysoper)的权限登录,而system可以直接登录(normal)。
7.2.4 scott 用户
scott:是oracle提供的示例用户,提供了一些学习 oracle操作的数据表。如:emp、dept、 salgrade、bonus 表
8.Oracle 的启动与关闭
8.1 Oracle 启动
Oracle 是通过系统的服务来启动的。
1)OracleServiceORCL(必须启动) OracleServiceORCL:
数据库服务(数据库实例),是 Oracle 核心服务该服务是数据库启动的基础,
只有该服务启动,Oracle 数据库才能正常启动。
2)OracleOraDb11g_home1TNSListener(必须启动) OracleOraDb11g_home1TNSListener:
监听器服务,服务只有在数据库需要远程访问的时候 或者使用 PL/SQL Developer 等第三方工具时才需要。
3)Oracle ORCL VSS Writer Service(非必须启动) Oracle ORCL VSS Writer Service:
Oracle 卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)
创建高保真的时间点映像,即映射拷贝 (shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影
响到系统的系统能。
4)OracleDBConsoleorcl(非必须启动) OracleDBConsoleorcl:
Oracle 数据库控制台服务,orcl 是 Oracle 的实例标识,默认的实例为 orcl。
在运行Enterprise Manager(企业管理器 OEM)的时候,需要启动这个服务。
5)OracleJobSchedulerORCL(非必须启动) OracleJobSchedulerORCL:
Oracle 作业调度(定时器)服务,ORCL 是 Oracle 实例标识。
6)OracleMTSRecoveryService(非必须启动) OracleMTSRecoveryService:
服务端控制。该服务允许数据库充当一个微软事务服务器 MTS、COM/COM+对象和分布式环境下的事务的资源管理器。
9.Oracle客户端工具介绍
9.1 自带客户端SQL PULS
sys 用户登录命令: sys as sysdba|sysoper
system 用户登录命令:system
9.2 pl/sql
9.2.1 Command Window(与自带的sql plus类似)
封号回车执行
9.2.2 Sql Window
execute键执行
10.Oracle的使用
10.1 Oracle表空间
1.Oracle 的表空间分类
1.1 永久表空间
表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。
但主要存放的是表,所以称作表空间。
1.2 临时表空间
Oracle 临时表空间主要用来做查询和存放一些缓冲区数据。
临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间。
2.创建永久表空间命令
create tablespace 永久表空间名称 datafile ’ 永久表空间物理文件位置 ’ size 15M autoextend on next 10M permanent online;
10.2 Oracle创建用户
1.通过 PL/SQL Developer 工具创建用户
10.3 分配用户权限
1.edit编辑对象权限(Object privileges)
对象权限是指在指定的表,视图,序列上制定执行动作的权限或权利。
2.角色权限(Role privileges)
角色是可以授予用户的相关权限的组,该方法使权限的授予,撤回更加容易管理。
3.系统权限(System privileges)
为用户分配创建表、创建用户、创建视图、创建存储过程等权限。
10.4 分配链接权限
为当前用户分配一个 connect 链接角色
创建表
10.5 分配系统权限
没有对表空间写入的权限
加上unlimited tablespace
11. Oracle 的链接配置
1.文件位置
Oracle 目录\product\11.2.0\dbhome_1\NETWORK\ADMIN
2.sqlnet.ora
名称解析。通过这个文件来决定怎么样找一个连接中出现的连接字符串。 如:sqlplus bjsxt/oracle@orcl NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
3.tnsnames.ora
用在 oracle client 端,用户配置连接数据库的别名参数,就像系统中的 hosts 文件一样。
3.1 ORCL
客户端连接服务器端使用的服务别名。注意一定要顶行书写,否则会无法识别服务别名。
3.2 PROTOCOL
客户端与服务器端通讯的协议,一般为 TCP,该内容一般不用改。
3.3 HOST
ORACLE 服务器端 IP 地址或者 hostname。确保服务器端的监听启动正常
3.4 PORT
数据库侦听正在侦听的端口,此处 port 的值一定要与数据库侦听正在侦听的端口一样。
4.listener.ora
用在 oracle server 端,可配置 Oracle 的监听端口
4.1LISTENER 监听名称,可以配置多个监听,多个监听的端口号要区分开来。
4.2PROTOCOL 监听协议,一般都使用 TCP 。
4.3HOST 本机 IP 地址或者 localhostname。
4.4PORT 监听的端口号。
12.Net Configuration Assistant 工具
12.1 配置监听程序
12.2 Oracle 本地网络服务配置
2.1配置本地网络服务要求:
1,防火墙需要关闭
2,相互是可 ping 通的
2.2配置方式
13.Oracle 基本操作
13.1 Oracle 中的数据类型
13.1.1 字符类型
字符串数据类型还可以依据存储空间分为固定长度类型(CHAR) 和可变长度类型 (VARCHAR2/NVARCHAR2)两种。
1)CHAR 类型(中文3个字节,西文数字1个字节,12字节只能存4个中文)
CHAR类型,定长字符串,会用空格填充来达到其最大长度。非 NULL 的 CHAR(12)总是包含12字节信息。
CHAR 字段最多可以存储 2,000 字节的信息。如果创建表时,不指定CHAR 长度,则默认为1。
2)VARCHAR2 类型
变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储 4,000 字节的信息。
3)NVARCHAR2 类型(中文,西文数字都是固定一样的)
这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储 4,000 字节的信息。
13.1.2 数字类型
1)NUMBER 类型
NUMBER(P,S)是最常见的数字类型。 P是Precision 的英文缩写,即精度缩写,表示有效数字的位数,
最多不能超过38个有效数字。S是Scale的英文缩写,表示小数点数字的位数。
2)INTEGER 类型
INTEGER是NUMBER 的子类型,它等同于NUMBER(38,0),用来存储整数。若插 入、更新的数值有小数,
则会被四舍五入。
13.1.3 浮点数
1)BINARY_FLOAT 类型
BINARY_FLOAT是32位、单精度浮点数字数据类型。可以支持至少6位精度,每个BINARY_FLOAT的值需要5个字节
,包括长度字节。
2)BINARY_DOUBLE
BINARY_DOUBLE是为64 位,双精度浮点数字数据类型。每个BINARY_DOUBLE的值需要9个字节,包括长度字节。
13.1.4 日期类型
1)DATE 类型
DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息
,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle存储以下信息:世纪、年、月、日期、小时、
分钟和秒。一般占用7个字节的存储空间。
2)TIMESTAMP 类型
这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,
带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
3)TIMESTAMP WITH TIME ZONE 类型
这是TIMESTAMP类型的变种,它包含了时区偏移量的值。
4)TIMESTAMP WITH LOCAL TIME ZONE 类型
将时间数据以数据库时区进行规范化后进行存储
13.1.5 LOB 类型
1)CLOB 类型(Character Large Object) 大文章LONG 存不下时考虑使用CLOB
二进制数据,存储单字节和多字节字符数据。最大长度4G。
2)BLOB 类型(Binary Large Object)
它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。
最大长度 4G。
3)NCLOB 数据类型
存储 UNICODE 类型的数据 ,最大长度 4G。
13.1.6 LONG & RAW & LONG RAW 类型
1)LONG 类型 大文章可变字符VARCHAR2存不下时考虑使用LONG
它存储变长字符串(超长字符串),最多达 2G 的字符数据(2GB 是指 2 千兆字节, 而不是 2 千兆字符)。
2)LONG RAW 类型
能存储 2GB 的原始二进制数据,可存放多媒体图象声音等。
3)RAW 类型
用于存储二进制或字符类型数据,必须制定长度。这种数据类型存储的数据不会发生字 符集转换。
可存放多媒体图象声音等。
13.2 在Oracle中创建表
1)Oracle 表名命名规则
必须以字母开头
长度不能超过30个字符
避免使用Oracle的关键字
只能使用 A-Z、a-z、0-9、_#$
2)使用带有特殊符号的表名
Oracle在创建表时,表名会自动转换大写。Oracle对表名大小写不敏感。
如果在定义表名时含有特殊符号,或者用小写字母来定义表名则需要在表名两侧添加双引号。
13.3 数据库中的约束
13.3.1 约束的作用
约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止。
13.3.1 约束类型
1)主键约束(Primay Key Constraint)
唯一性,非空性。
2)唯一约束 (Unique Constraint)
唯一性,可以空,但只能有一个。
3)检查约束 (Check Constraint)
对该列数据的范围、格式的限制(如:年龄、性别等)。
4)非空约束 (Not Null Constraint)
该列不允许包含空值。
5)外键约束 (Foreign Key Constraint)
需要建立两表间的关系并引用主表的列。
13.4 数据库中表关系
设计关系数据库的一个重要部分是将数据元素划分为相关的表,我们可以根据数据本身的关联性,将不同表之间的数据聚合在一起。注意:无论在表与表之间建立了什么样的关系, 决定数据之间是否有关系的不是表,而是数据本身。 表与表之间一般存在三种关系,即一对一,一对多,多对多关系。
13.4.1 一对多
一对多关系是建立在两张表之间的关系。一个表中的一条数据可以对应另一个表中的多条数据。
记住:外键永远在多方。外键允许重复,允许含有空值。
1.t_classroom
2.t_student
13.4.2 一对一
一对一关系是建立在一对多的基础之上,外键可以在任何一方,需要让外键一方具备唯一约束
13.4.3 多对多
需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键
1.t_order表
2.t_item表
3.中间表(t_order_item)–不存放业务数据
注意:添加数据先添加两个业务表后再添加中间表数据,删除数据先删除中间表数据再删除业务数据
14.SQL语言基础
14.1 什么是SQL语言
a) SQL, Structured Query Language, 结构化查询语言
b) SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言.
c) SQL语言是非过程化的语言, 只需要告诉做什么, 不需要关注怎么做, 简单.
d) 用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件扩展名
14.2 SQL能做什么
1.SQL面向数据库执行查询
2.SQL可从数据库取回数据
3.可在数据库中插入新的记录
4.可更新数据库中的数据
5.可从数据库删除数据
6.创建新数据库
7.创建新表
8.创建存储过程
9.创建视图
10.可以设置表、存储过程、和视图的权限
14.3 SQL语言分类
a) DQL, Data Query Language, 数据查询语言执行数据库的查询操作
select
b) DML, Data Manipulation Language, 数据操作语言操作表格中的数据,
执行增删改, insert, delete, update
c) DDL, Data Definition Language, 数据定义语言
用于操作数据库对象
create(创建数据库对象), alter(修改数据库对象), drop(删除数据库对象),rename(修改数据库对象名称)
d) DCL, Data Control Language, 数据控制语言
操作用户权限, grant(授予用户权限), revoke(撤销用户权限)
e) TCL, Transaction Control Language, 事务控制语言
用于管理事务, commit(事务提交),rollback(事务回滚),savepoint(设置回滚点)
15.Oracle中HR用户介绍
HR用户是Oracle自带的一个示例用户。在该用户下提供了给我们练习数据库操作时所使用的表与数据
15.1 使用HR用户的步骤
1)通过sys或system用户登录
2)在User中找到HR用户并设置登录密码
3)切换HR用户登录
4)查看该用户的表结构
16.DQL语言
16.1 SELECT 语句的作用
16.1.1 列选择(投影操作)
16.1.2 行选择(选择操作)
16.1.3 连接(多表操作操作)
16.2 SELECT 语句中的算术表达式
用算术运算符创建数字和日期数据的表达式(+ - * /)
注意:对日期进行计算,我们只能对DATE和TIMESTAMP数据类型使用“+”和“-”操作
16.2.1 运算符优先级
乘法和除法比加法与减法优先级高
相同优先级的运算从左至右计算
圆括号用于强制优先计算,并且使语句更清晰
16.2.2 示例
1.计算employees表中的员工全年薪水加100后的薪水是多少?
2.计算employees表中的员工薪水加100以后的全年薪水是多少?
16.3 定义空值
空值是一个未分配的、未知的、或不适用的值
空值不是为0,也不是空格
16.3.1 空值
如果一行中的某个列缺少数据值,该值被置为空值。空值和0或者空格不相同。0是一个数字,而空格是一个字符。任何数据类型的列都可以包含空值。可是,某些约束如NOT NULL和PRIMARY KEY防止在列中使用空值
16.3.2 算术表达式的空值
包含空值的算术表达式结果为空
16.4 定义列别名
列名与别名之间用空格分开。默认别名标题用大写字母显示。如果别名中包含空格或者特殊字符(如#或者&)或者大小写敏感,将别名放在双引号中
示例
查询employees表中last name,commission_pct并将佣金列名改为comm
select last_name,commission_pct as common from employees
计算所有员工全年薪水,将列名改为"Annual Salary"
select last_name,12*salary as "Annual Salary" from employees
16.5 连字运算符
连字运算符:
连接列或者字符串到其他列
用两个竖线表示(||)
构造一个字符串表达式的合成列
示例
将employees表中LAST NAME和JOB_ID合并到一个单个的输出列中,并且指定列别名Employees
16.6 文字字符串
文字字符串是包含在select列表中一个字符串,一个数字或者一个日期
日期和字符的文字字符串值必须用单引号括起来
每个文字字符串在一行输出一次
文字字符串不是列名或者别名。对每个返回行打印一次。任意格式文本的文字字符串能够被包含在查询结果中,并且作为select列表中的列处理。日期和字符文字必须放在单引号(’ ')中,数字不需要
示例
显示所有雇员的名字和工作代码,使用is a 链接查询结果。列标题用Employee Details
16.7 去除重复行
在select语句中用distinct关键字去除相同的行
示例
在Employees表中查询department_id并去除重复行
16.8 select语句小节练习
16.8.1 在下面语句中有4个编码错误,你能找出他们吗
SELECT employee_id ,last_name sal x 12 ANNUAL SALARY FROM employees;
1.逗号缺失
2.sal简写
3.别名没带双引号
4. x 不是乘法应该替换为*
16.8.2 显示 DEPARTMENTS表的结构。选择表中所有数据
16.8.3 创建一个查询,显示每个雇员的last name, job code,hire date和empolyee号显示在第一列。给HIRE_DATE列指定一个别名STARTDATE
16.8.4 创建一个查询从EMPLOYEES表中显示唯一工作代码
16.8.5 显示last_name,用job_id链接,用逗号和空格分开,用Employee and Title作为列名
16.9 约束和排序数据
16.9.1 用选择限制行(约束)
WHERE限制查询满足条件的行(由列名、表达式、常数、比较操作组成)
示例
查询雇员last_name、job_id、department_id,要求这些雇员的department_id是90
16.9.2 字符串与日期(约束)
字符串和日期值放单引号中
字符串区分大小写,日期格式敏感
日期默认格式为 DD-MON-RR
中文Oracle与英文Oracle对于日期的月份格式有区别。
中文版用1月
英文版为月份简写:January Jan
在where子句中字符串和日期必须包含单引号(’ ')但是数字常数不应该放单引号中,所有字符搜索都是大小写敏感的。
Oracle数据库以内部数据格式存储日期,表示为:世纪、年、月、日、小时、分钟、秒
示例
查询员工表中名字为King的员工的工作编号
查询2006年1月24日入职员工的姓名、部门编号以及工作ID
16.9.3 比较运算符(约束)
运算 | 含义 |
---|---|
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
<>、!=、^= | 不等于 |
示例
查询薪水小于等于3000的员工姓名跟薪水
16.9.4 其他比较运算符(约束)
操作 | 含义 |
---|---|
BETWEEN…AND… | 在两个值之间(包含) |
IN(set) | 匹配任意值列表 |
LIKE | 匹配一个字符模板 |
IS NULL | 是一个空值 |
BETWEEN…AND…示例
BETWEEN…AND…
可以用BETWEEN范围条件显示基于一个值得范围的行。指定范围上下限。实际上由Oracle服务器转化成AND条件
(a>=下限 AND a<=上限),并没有性能提高,只是逻辑简单
查询薪水在2500和3500(包含2500和3500)之间的雇员姓名和薪水
IN(set) 示例
IN(set)
用IN(set)条件在指定的一组值中进行选择。实际上是由Oracle服务器转化为一组or条件
a=value1 or b = value2 or c=value3并没有得到性能提升只是逻辑上简单
查询所有经理号为100、101或201的雇员的employee numbers, last_name,salary
LIKE 示例
使用LIKE条件执行有效搜索串值的通配符搜素
搜索条件既可包含文字可以包含数字
% 表示零个或多个字符
_ 表示一个占位符
1.查询employees表中名字以一个大写字母S开始的雇员名字
2.查询所有在2005年进入公司的雇员的名字和受雇日期
3.查询employees表中名字以第二个字母是m的雇员名字
ESCAPE:可以用ESCAPE标识符搜索实际的%和_符号。使用ESCAPE选项,该选项指定换码符是什么。如果你想要搜索包含 ‘SA_’ 的字符串可以使用ESCAPE对\表示该符号为转义符号。
LIKE ‘%SA_%’ ESCAPE ‘’
4.查询员工表中工作ID中包含SA_的员工姓名以及工作ID
使用NULL条件示例
NULL条件包括 IS NULL 条件和 IS NOT NULL条件。
IS NULL条件用于空值测试
1.查询所有没有佣金雇员的last_name和job_id和commission
2.查询所有佣金雇员的last_name和job_id和commission
16.9.5 逻辑条件关系(约束)
运算 | 含义 |
---|---|
AND | 如果两个组成部分的条件为真返回TRUE |
OR | 如果两个组成部分中的任一条件为真,返回TRUE |
NOT | 如果跟随的条件为假返回TRUE |
AND示例
查询工作岗位包含字符串MAN并且收入大于等于10000的那些雇员的编号、工作ID、名字以及薪水
OR示例
查询任何job ID中包含MAN或者收入大于等于10000的雇员编号、工作ID、名字以及薪水
NOT示例
NOT取反可以运用于另一个SQL运算符如:between、like、in、null
查询那些工作岗位不是IT_PROG、ST_CLERK、SA_REP的雇员名字和工作岗位
16.9.6 优先规则(约束)
求值顺序 | 含义 |
---|---|
1 | 算术运算 |
2 | 连字操作 |
3 | 比较操作 |
4 | IS [NOT] NULL、LIKE、[NOT] IN |
5 | [NOT] BETWEEN |
6 | NOT 逻辑条件 |
7 | AND 逻辑条件 |
8 | OR 逻辑条件 |
示例
1.查询工作岗位是SA_REP或者工作岗位是AD_PRES并且薪水大于15000的员工姓名、工作ID以及薪水
2.查询工作岗位是SA_REP或者工作岗位是AD_PRES并且他们薪水大于15000的员工姓名、工作ID以及薪水
16.9.7 order by (排序)
用order by 子句排序
ASC:升序排序(默认)
DESC:降序排序
在排序中也可以使用没有包括在select子句中投影的列排序。
如果未使用order by子句,排序次序就未定义,并且Oracle服务器可能对相同查询的两次执行取回行的顺序不同
升序规则:
对于数字,小的值在前面 如:1-999
对于日期,早的日期前面显示 如:01-1-92 在 01-1-95前面
对于字符值,依字母顺序显示 如 A第一,Z最后
对于空值,升序排序时显示在最后,降序显示在最前
列号排序(不推荐使用):
列别名排序
多列排序
16.9.8 select 语句执行顺序
FROM 子句 —先找查询哪个表
WHERE 子句 —对行进行约束
SELECT 子句 —对列进行约束
ORDER BY 子句 —对结果进行排序
16.9.9 约束与排序小节练习
1.显示收入超过12000的雇员名字和薪水
2.显示雇员号为176的雇员名字和部门号
3.显示所有薪水不在5000和12000之间的雇员名字和薪水
4.显示受雇日期在2002年2月20日和2007年5月1日之间的雇员名字、岗位和受雇日期。按受雇日期顺序排序查询
5.显示所有部门20和50中的雇员名字和部门号,并按名字字母顺序排序
6.列出收入在5000和12000之间,并且部门20或者50工作的雇员的名字和薪水。将列标题分布显示为Employee和Monthly Salary
7.显示每一个在2004年受雇的员工名字和受雇日期
8.显示所有没有主管经理的雇员的名字和岗位
9.显示所有有佣金的雇员名字、薪水、佣金。以及薪水和佣金的降序排序数据
10.显示所有名字中第三个字母是a的雇员名字
11. 显示所有名字中一个a和一个e的雇员名字
12.显示所有工作是销售代表(SA_REP)或者普通职员(ST_CLERK),并且薪水不等于2500、3500或7000的雇员名字、工作、薪水
13.显示所有佣金总计为20%的雇员名字、薪水和佣金
select last_name,salary,commission_pct from employees where commission_pct=.2
select last_name,salary,commission_pct from employees where commission_pct=.20
select last_name,salary,commission_pct from employees where commission_pct=0.20
select last_name,salary,commission_pct from employees where commission_pct=0.2