Oracle简介
世界上最大的三大软件提供商:
微软
Oracle
Adobe
中文含义甲骨文,在古希腊神话中被翻译为“神谕”,IBM的一个员工发布了一篇论文:“论关系型数据的发展”。
Larry Ellison就是这个公司的创始人,还有一个Bruce Scott是这个数据库的设计师,后来从公司中辞职。
Scott自己有开发了一个数据库我们称之为PointBase,BEA曾经使用过这个数据库,后再BEA公司被Oracle公司所收购了。
在Oracle的发展策略之中是以微软为竞争为对手的,微软的办公平台是Office,Oracle开发了定制化的ERP和CRM系统。
后来又收购了SUN公司,取得了java,在开发语言的技术上就可以和微软的.net竞争。
版本
Oracle8/oracle8i(1CD):“i”表示的是internet,表示的是网路版。
Oracle9(3CD):属于Oracle8i的稳定版本。
Oracle10g:使用了网格计算的方式,提高了数据的分布式的访问性能。
Oracle11g:属于Oracle10g的稳定版本。
Oracle12C:主要指云服务的支持,是当前的最新版本。
总结:
Oracle的中文含义“甲骨文”
Oracle的主要版本
版本中的i表示internet
版本中的g主要表示采用了网格运算原理,格子的英文单词为:grid
c就是云的英文单词缩写:cloud,表示的是云计算版本。
注:我们在这个视频采用的是oracle 11g这个版本。
安装和配置
配置图Oracle的安装和配置
Oracle软件本身是不收费,可是要想维护其的稳定性,就必须缴费。
Oracle的内容主要分为:开发部分和管理部分,我们在此个课程中重点要掌握的是开发部分。
可以直接在Oracle的官网上下载:www.oracle.com
下载下来的是两个文件,安装时需要将其合成为一个文件,可是我们要注意以下的事项:
关闭你本机的防火墙,尤其是360安全卫士。
如果有可能尽可能断开我们的互联网。(Oracle是使用java开发的)
流程:
是否接受邮件信息和更新操作(选择否),点击下一步。
询问是否创建和配置和数据库,仅安装数据库软件以及升级数据库,我们选择创建和配置数据库,选择服务器类型。
本课程中我们将会不去牵扯Oracle中的RAC管理(实时的应用集群,分布式)。我们选择单实例数据库安装,点击下一步,之后将选择高级安装选项。
接下去选择选择默认的一般事务或者说用途,之后设置数据库的名字和标识符(通常来件两者的命名是相同的),点击下一步。
修改字符集的配置,将其的编码修改为UTF-8,主要是为了避免在数据库中的中文被显示为乱码。修改示例方案的配置,让其给我们提供示例,主要是为了便于我们对于oracle数据库的学习。
进入到口令的配置环节,我们可以将所有用户的口令设置为自定义的口令,下一步,检查安装的先决条件,无法检查通过,可以忽略,通常不会影响其的功能,还有可以执行一条共享指令:net share c$=c:(在命令框中执行,也就是cmd框中输入回车就可以了,系统会将C盘共享),之后就是等待安装的完成。
设置口令
超级管理员(sys):change_on_install
普通管理员(system):manager
普通用户(scott):tiger
大数据用户(sh,样本数据库):sh
软件安装完成,关闭我们的界面。
会在windows中创建服务,打开我的电脑-管理-服务:
OracleOraDb11g_home1TNSListener:监听服务,需要和数据库连接时这个服务必须开启。
OracleServiceORACLE:数据库的实例服务,命名规则为OracleService加上数据库的标识符,在默认情况下SID和数据库的名字是一致的,在网络上使用的就是SID标识符,每当我们创建一个数据库时,就会创建这样一个服务。
Oracle的卸载问题:
Oracle卸载之后可能无法立刻安装成功。
运行程序的卸载程序,之后重启我们的电脑进入到安全模式(按F8),找到系统上的磁盘路径进行删除。运行regedit(windows键+r运行就可以),搜索所有和Oracle相关的文件全部删除,重新安装。
终极方法就是重装。
Oracle的两个服务:
如果要通过程序连接,必须启动监听服务。
所有的数据保存在实例服务之中,所以必须启动这两个服务。
SQLPLUS命令
Oracle是一个软件平台,想要让这个平台可以使用,我们使用命令行进行操作,sqlpuls是执行Oracle命令的主要工具。
Oeacle提供了sqlplus命令,直接运行sqlplus命令就可以,输入用户名和密码。
可以直接运行sqlplus,输入用户名和密码。
也可以在cmd命令框框中输入:sqlplus 用户名/密码。(这种方式密码直接被显示了出来,可能不太安全。)
数据库的基本组成是数据表,每一张表之中会有多条的数据记录,我们下面查询一下emp表中的数据:
说明:固定的语法我们采用大写的格式去描述,命令本身不区分大小写。
SELECT*FROM emp;(查询我们的数据库中的数据表)
设置每行的数据长度:SET LINESIZE 300;
显示本身会受到命令框的限制,我们需要调整一下命令,对命令行的属性进行设置,将其的宽度调整一下。
设置每一页显示的条数(列数):SET PAGESIZE 30;
上面的两个指令我们称之为格式化指令。
windows里面直接可以执行notepad,文本编辑器,在Oracle中的记事本程序:
ed 文件名称(默认后缀为*.sql)
执行文件命令:@文件名
切换用户:CONN 用户名/密码 [AS SYSDBA]
sys用户在登录时,后面必须跟上AS SYSDBA,否则无法正常登录。
假设一个用户名不属于这个用户必须访问这个文件的完整名称:模式名称.文件名,现在普遍将用户名设置为模式名称。
echo:输出命令(host是调用本机命令)
也可以调用本机的copy命令,也就是我们所说的赋值命令
copy 源文件 目标文件
本章的总结:
格式化命令 SET LINESIZE 度 SET PAGESIZE 长度
切换用户:CONN 用户名/密码,如果是sys用户必须要跟上AS SYSDBA
调用本机命令使用HOST作为前缀。
sql简介和对表结构的认识
SQL的简介
掌握scott用户的数据表结构
SQL指的是结构化的查询语言。当时的数据库太多了,每一种数据库有着自己的一套操作命令。这样对于我们开发者来讲极为的不方便。
最早由IBM开发出来一套SQL的操作标准,Oracle是支持SQL语法的数据库,今天,基本上所有的关系数据库全部支持SQL的语法了。SQL语法是简单的。
可以将SQL分为三种类型:
DML(数据操作语言):主要是指数据库的查询和更新操作。
DDL(数据定义语言)
DCL(数据库控制语言,DBA),这是一个系统性的调整工作。
SCOTT用户表的结构(必须掌握)
查询该用户下的所有数据表:
SELECT*FROM tab;
查询一个表格:DESC dept;
部分信息表:dept
部门编号
部门名称
部门位置
雇员信息表:emp
雇员编号 最多为四位数字
雇员姓名 最多十个字符
雇员工作
雇员领导编号
雇佣时间
SAL基本工资
COMM佣金 普通来讲只要销售能够拿
雇员的部门编号
COL ename for A长度(设置属性长度)
工资等级表 salgrade
等级编号
此等级最低工资
此等级最高工资
工资表:bonus(这个表格通常不存在任何的数据)
sal 基本工资
comm 佣金
总结:学SQL的重点在于DML上。
给出的scott表,尽量背住其的结构,以及查询一下里面的大概数据。
SQL简单查询
SQL简单查询
整个SQL结构就是由若干的关键字所组成的。
简单的查询就是查询数据表中所有的行内容。
SELECT [DISTINCT]* |列名称[别名],多个
FROM 表名称[别名]确定数据来源
*表示全部的列,select控制数列。后面加上distinct可以消除重复,是多个列全部要重复才可以消除,还可以对其进行四则运算,后面还可以跟上别名。
select可以设置常量:
常量为字符串需要用单引号
数字可以直接写出来
日期可以按照日期格式去写
||可以将两个列合成为一个列显示。
总结:
是将一张数据表中的所有数据行全部显示出来。
使用from确定数据源,select控制数据列。
如果出现重复的数据可以使用distinct来消除。
select语句可以进行四则运算。
可以输出列的常量内容,字符串需要用单引号。
“||”负责进行列内容的连接,需要注意的是我们在操作中不太涉及。
也可以在后面直接跟上列名称的别名,对其进行别名显示。
SQL限定查询
限定查询
掌握where语句的用法
掌握各种限定符号的使用。
关系运算符号:<,>,>=,<=,!=(<>)
逻辑运算符号:and,or,not
范围:between...and
谓词范围:in,not in
空判断:is null(is not null,not is null)
模糊查询:like
关系运算符:
主要是用来比较数据的大小,字符串是符等价。
逻辑运算符:
and:所有的判断条件全部要满足。
or:若干个条件只要有一个满足就可以了。
not:将真变成假,将假变成真。
注意:不要过于复杂的代码。
范围查询:
between 最小值(日期)and 最大值
包含了最小值和最大值,也可以。
有的数据未能设定的,等同于is null
in后面跟上多个具体的信息
列名称 in (数据)
in 中包含了null不会产生任何影响。
在not in中包含有null不会有任何的结果。
查询所有的数据等于宣判程序的死刑。
模糊查询:
执行数据的模糊查询,在使用like可以使用两个通配符“_”匹配任意一位的字符
“%”匹配多位的字符,也可以表示零位
说明:
like可以应用在各种数据类型上,不一定非要是字符串。
不设置关键字,表示查询全部。
总结:
where通常写在from之后
where控制数据行,select控制列,select定义的别名无法在where中使用。
要求完整地掌握限定查询的方法。
like实现模糊查询不设定关键字,相当于查询全部('%')。
not in中包含了null,不返回任何的结果。
注意:seclet的别名不能在我们的where中使用,其的别名是在我们的where执行之后被设置的,所以无法使用,还有就是注意where主要是为了控制行,select是为了选择我们的列。
查询排序
查询排序
排序的使用
多个字句的关系
要针对指定的列进行排序,关键字为order by,这个句子是在最后执行的,可以使用select中定义的别名:
ASC升序排列(默认值,可以不写)
DESC降序排列
在整个SQL的查询之中只有我们的order by可以使用我们在select中设定的别名。
总结:
使用order by查询的时,排序是最后完成的。
order by的子句是最厚执行的子句。
在order by可以设置多个排序的字段。
分为两种排序模式:ASC,DESC
是唯一一个可以使用select别名的子句。
单行函数(字符串函数)
单行函数(功能)
格式:“返回值 函数名称(参数)”
单行函数分为:
字符串函数,数值函数,日期函数,转换函数,通用函数。
字符串函数
字符串函数主要是操作字符串数据的,对于字符串函数我们需要注意的是其有可能操作的是列名称。
UPPER(列|字符串) 返回字符串 将字符串变为大写
lower(列|字符串)返回字符串 将字符串变为小写
initcap:首字符大写
数字length(列|字符串)字符串的长度
字符串substr(开始索引,长度)如果不指定长度,就是截取到结尾
replace(旧的字符串,新的字符串)
dual一张虚拟的表。
注意:在我们的oracle中如何要调用我们的函数,也必须使用我们的SQL语句。
大小写的转换:
转大写:
SQL> SELECT UPPER('hello') FROM dual;
转小写:
SQL> SELECT LOWER(ename) FROM emp;
注意:在oracle中数据是区分大小写的。
具体实例:
由用户输入雇员的姓名,查询雇员的完整信息,可以使用我们的替代变量完成。格式“&标记”,命令如下:
SELECT* FROM emp WHERE ename=UPPER('&input');
通过上述的函数可以忽略用户输入字符的大小写。
注:在不区分大小写的情况下我们会统一地将所有内容转换为大写或者小写处理。
首字母大写:
SELECT INITCAP(ENAME) FROM emp;
取得字符的长度:
SELECT* FROM emp WHERE LENGTH(ename)=5;
取得名字长度为5的雇员信息。
字符串截取:
从指定位置截取到极为
从指定位置截取到指定结尾。
注意:在所有程序中字符串的首字母索引为0,在Oracle中字符的索引设置为0,也会按照索引为1进行处理。(这和我们java中的substring方法是不同的)
这个方法和我们在java中的subtring还是有区别的:
1.在java中0角标有确定的值,是从0开始标记我们的字符顺序的。
2.在java中的substring方法是包含开始索引的字符,不包含结尾索引的字符。
Oracle在设计上考虑到了从后面开始执行,可以使用负整数,此类设置只有在我们的Oracle中才有,在后面的程序中不会存在这样的情况。
单行函数(数值函数)
Oracle基础系列
单行函数-数值函数(简单的知识)
数字(小数或者整数)
round(列或者数字,[保留的小数位]):实现数字的四舍五入,可以设置我们的保留小数位。
trunc(列或者数字,[保留的小数位]),实现数据的截取,不进行四舍五入计算。
数字mod(列或者数字,列或者数字) 求模运算(计算余数)
roud函数
如果不设置小数位,就是保留整数位。
SELECT ROUD(12.5) FROM dual;
如果保留位数设置为负数,我们可以认为这是对整数位的操作,表示的不保留的位数。
TRUNC函数和round函数区别不大,唯一的区别在于trunc函数是不会进位的。
mod函数就是我们在运算中的取余运算。
小数或者整数)round(列或者数字,[保留的小数位]
小数或者整数)round(列或者数字,[保留的小数位]
小数或者整数)round(列或者数字,[保留的小数位]
注意:小数或者整数)round(列或者数字,[保留的小数位]
注意:在以后的学习之中,如果我们见到了round这个单词通常就是表示四舍五入的函数运算。
单行函数(日期函数)
Oracle基础笔记
日期函数
如果想要处理任何的日期,我们有一个必要的前提,我们必须知道当前的日期,取得我们当前日期,Oracle里面提供了一个伪列:SYSDATE
操作公式:
日期+数字=日期(表示若干天之后)
日期-数字=日期(表示若干天之后前)
日期-日期=数字(表示天数)
对于我们的日期而言,由于每个月的天数是不同的,所以直接进行天数的加法实现月数的计算是不准确的。
日期处理函数
Add_MONTHS(日期,月份)
MONTHS_BETWEEN(日期,日期)返回两个日期所经历的月数,前者减去后者。
LAST_DAY(日期),返回所在日期的月份的最后一天。
NEXT_DAY(日期,星期X),返回下一个指定星期的日期。
在进行月数增加时基本是不会限制数据的大小(只要别太大就可以)
单行函数(转换函数)
Oracle基础笔记
日期函数
如果想要处理任何的日期,我们有一个必要的前提,我们必须知道当前的日期,取得我们当前日期,Oracle里面提供了一个伪列:SYSDATE
操作公式:
日期+数字=日期(表示若干天之后)
日期-数字=日期(表示若干天之后前)
日期-日期=数字(表示天数)
对于我们的日期而言,由于每个月的天数是不同的,所以直接进行天数的加法实现月数的计算是不准确的。
日期处理函数
Add_MONTHS(日期,月份)
MONTHS_BETWEEN(日期,日期)返回两个日期所经历的月数,前者减去后者。
LAST_DAY(日期),返回所在日期的月份的最后一天。
NEXT_DAY(日期,星期X),返回下一个指定星期的日期。
在进行月数增加时基本是不会限制数据的大小(只要别太大就可以)
单行函数(通用函数)
Oracle基础笔记-单行函数-通用函数
通常我们认为这是指我们的Oracle特色函数
数字 NVL()
数据类型DECODE()
处理null函数
null参与的任何运算结果还是为null
为了保证计算的准确性,我们需要将其变为默认值。
NVL将为空的数据处理为一个默认值
decode的函数,if..else不同的是只能判断内容,不能判断关系,比较内容,显示内容是配对的,最后一个默认值,不设置就是一个null值。
在笔试当中,decode函数会被经常问到的。
总结:
1.每一个函数只是完成一个独立的功能,这种函数全部可在SQL中使用。
2.记下每一个函数的名称以及作用,这样在编写代码时就可以顺手拈来了。
多表查询(基本概念)
oracle基础学习-多表查询
1.多表的实现形式
2.笛卡尔积的处理
3.数据表的连接操作
4.数据的集合操作
基本概念:
在之前的所做的全部查询中,在RROM
语句中我们只设置了一张数据表,多表查询就是设置多张数据表,进行查询、
count是统计行数。
SELECT * FROM emp,dept;
上述的数据按照集合的概念来讲实际上出现了一种乘积的概念,这种关系在数据库上称之为笛卡尔积,要想要消除这种笛卡尔积的运算结果,我们必须为两张数据表设置关系。
我们要消除笛卡尔积的影响:
SELECT*FROMemp,deptWHEREemp.deptno=dept.deptno;
以上的代码的确是可以消除笛卡尔积的影响,而对于运行速度和性能来讲不高。
原则:多表查询在查询性能上一定是特别差的,能不用就尽可能不用。(这是根据我们的数据量去选择的,当数据量太大时,我们不能使用多表查询),在多表查询时建议使用表的别名。
原则:任何情况如何要实现我们的多表查询,要关联的数据表必须存在关联字段后者关联条件,不存在这种条件的,一定不能使用多表查询。
要求显示雇员的编号,姓名,职位,工资部门名称,部门位置。
确定要使用的数据表
emp表格
dept表
确定已知的关联字段
雇员与部门
SELECTe.empno,e.ename,e.job,e.sal,d.dname,d.locFROMemp e,dept dWHEREe.deptno=d.deptno;
一般情况下我们多个消除笛卡尔积的条件我们会使用AND进行连接。
多表操作的使用:
没有关联字段和关联条件的两张数据表不可能实现多表查询。
在多表查询操作时,我们必须分步骤去操作,这将会有利于我们的分析和逐步的操作。
多表查询(表的连接)
Oracle基础-表的连接
内连接(等值连接)
外连接(左外连接,右外连接以及全外连接)
内连接
我们在之前使用的全部等值连接,
外连接
让等值判断的左右两边有一边的数据全部显示出来。
左外连接 字段=字段(+)
右外连接 字段(+)字段
在实现外连接的过程我们强烈建议大家不要刻意去区分左右连接,当发现数据的查询结果缺少了内容,我们就利用我们的外连接进行控制。
范例:写出每一个雇员的姓名,工资和领导姓名。
SELECTemp.ename,emp.job,memp.enameFROMemp,emp mempWHEREemp.mgr=memp.empno(+);
以上的用法就是左外连接我们让不存在mgr的雇员也能被显示出来。
这种使用自己的数据表进行关联的操作我们也可以称之为自身关联的操作,可是我们不管这是不是一种自身关联的操作,只要有多张表格就必须编写消除笛卡尔积的条件。
多表查询(1999语法)
“(+)”标记只是Oracle中才有的,其它的数据库时如何定义的,主要是靠SQL1999语法来实现查询。
CROSS JOIN(交叉关联是产生笛卡尔积的操作)
natural join(自然关联,是自动使用关联字段去消除我们的笛卡尔积,但是它是以名字相同为主),属于我们内连接的概念,重复的列内容不会重复显示。
USING:可以明确地支持关联字段
ON子句可以设置条件
左外连接:left outer join
右外连接:right outer join
全外连接:full outer join
只有在我们的sql才明确了我们要使用的全外连接。
多表查询(数据集合操作)
Oracle基础-数据集合操作
对于多个查询结果进行连接:
UNION:
碰到相同的内容就不会显示了。
UNION ALL:
所有的重复数据全部会被显示。
intersect:
求交集。
minus:
集合的求差运算。
只要是多表查询一定存在着笛卡尔积,所以优秀的设计绝对不能考虑我们的多表查询。
多表查询,必须会存在有关联字段或者是关联条件,否则不会存在我们的多表查询。
大部分情况下是内连接操作,外连接提供了符号“(+)”。
在Oracl之外的数据库(SQL SERVER,MySQL),我们就必须使用SQL:1999语法。
可以使用集合操作将查询结果合并在一起显示,渴死要求,多个查询结果必须具有相同的结构。
分组统计查询(统计函数)
Oracle基础-分组统计查询-统计函数
基础统一函数的使用
分组统计的实现,要结合多表查询来实现。
在之前我们使用过count()
MAX():可以对数字和日期类型进行操作
MIN():可以对数字和日期类型进行操作
SUM():求和
AVG():求平均值
count(*)明确返回数据个数
count(字段):不统计为null的数据
count(distinct 字段):不统计重复的数据个数。
分组统计查询(分组查询)
Oracle分组统计查询(难点)
在什么情况下我们采用分组统一查询。
能够分组时往往是指部门数据具备某种共性,具备共性才会分组,要想进行分组我们需要使用子句:GROUP BY HAVING 过滤条件
SELECTjob,count(empno),AVG(SAL)FROMempGROUPBYjob;
我们的job是存在重复数据的,我们对job进行分组之后进行了统计。
三个限制
统一函数在不编写GROUP BY子句时(全表为一组),不能出现非统计字段。
在group by的字段才可以在select出现。
要嵌套必须除去我们的字段。
注意:只能存在统计函数和分组字段。
多字段分组必须完全重复。
WHERE不允许使用统计函数,而我们的HAVING可以使用统计函数。
注意事项:
不管是单表分组还是多表分组,重点是先看重复列的,一个重复就用一个字段,多个就用多个。
网友评论