Oracle
mysql : 开源免费的数据库, 中小型企业, 淘宝网 mysql集群
Oracle: 收费的数据库, 国企, 金融, 银行, 证券,保险 , 京东 按CPU核数, 一核=永久使用费用 18万.
1.安装
Oracle 11g是使用比较多的是Oracle开发主要分成两类
- 数据库管理类:DBA
- 数据库的编程:SQL编程、PL/SQL编程(子程序、触发器、面向对象、游标)
下载Oracle直接登录www.oracle.com,选择两个压缩包分别解压缩再合并为一个进项安装,注意:
- 如果电脑上有各种病毒防火墙,要先关闭
- 安装前保证系统是健康的
oracle只是一个平台,平台上可以存在若干数据库,安装的时候会询问用户是否创建和配置数据库-->选择服务器类-->在Oracle数据库里面有一个比较牛的专业:IBM AIX+RAC(主流搭配),本机操作的时候选择单实例安装-->选择高级配置,配置编码,同时定义样本数据,安装企业版,选择安装的位置-->设置全局数据库名称与sid(服务id,数据库网络连结用的)名称完全一致,内存不用设置,后面设置字符集UTF-8-->打钩创建具有示例方案的数据库--。。-->默认提供若干个用户,每个用户权限不同,密码设置可以不同,可以为了方便统一,设置的密码不符合标准依然可以通过-->安装过程不要进行操作了-->进入口令管理,先解锁,配置四个用户的密码
- 超级管理员:sys/change_on_install
- 普通用户管理员:system/mannger
- 普通用户:scott/tiger(是在选定了“样本”方案数据之后产生)
-->确定,安装完成
在虚拟机上安装ORACLE
Oracle虚拟机安装:
1. 先安装 vm wareworkstation
2. 双击纯净版中的 xp_oracle.vmx文件
3. 关闭防火墙
配置网络:
1. 编辑 ----> 添加虚拟网络
2. 设置虚拟机网络为固定IP地址
3. 测试网络是否ping通
Oracle软件安装:
1.将Oracle拖到虚拟机中
2.安装数据库软件
3.解锁Scott和HR账户
4.配置Oracle的地址为固定IP地址
5.重启Listener 和 ORCL服务
6.客户端测试访问ORACLE
PLSQLDevelop的安装: (注意:安装在没有中文,没有空格的路径下)
1.先安装instantclient
2.配置tools --> preferences --> 配置instantclient的路径
3.将前面步骤中tnsnames.ora 文件拷贝到本机, 配置TNS_ADMIN环境变量
4.重启PLSQLDevelop
5.输入用户名和密码测试
2.服务
必须启动系统服务,计算机--管理--把所有的oracle相关的自动项改成手动项,两个最重要的服务:
- OracleOraDbllg_homelTNSListener:监听服务,留给客户端访问本机使用的,比如在进行程序开发过程中需要连接数据库如果此服务没有启动或者是错误的,那么将导致程序无法连接
- OracleServiceMLDN:oracle数据库的实例服务,在oracle平台上可以同时配置多个数据库,使用“Database Configuuration Assistant”,这个工具可以建立更多的数据库,每一个数据库建立完成之后都会按照“OracleServiceSid”这样的服务,如果想使用MLDN数据库进行数据操作,那这个服务必须开启。
如果只是通过本机进行操作可以不用开启监听服务,如果要访问可以使用“splplus”命令完成,直接通过运行窗口完成-->如果用登录会出现提示输入用户信息,但是输入密码的时候不会进行回显操作不会使用“*”显示,除了这种方式也可以使用“cmd”命令操作
3.sqlplus命令
通常是写在文本中复制粘贴到命令行
(1)格式化操作
数据库本身会有一系列的数据表所组成,所谓的表值得就是行与列的集合。执行以下语句查询emp表的全部内容
SELECT * FROM emp;
对此会显示以下问题:
表格的显示格式非常混乱;
所有表格都会有一个标题行,对于标题行重复了很多次。
因此需要针对显示进行优化:
- 设置每行显示的数据长度:SET LINESIZE 200;
- 设置每页显示的行数:SET PAGESIZE 30;
这个格式化操作都是值针对数据库的直接操作进行的,而实际开发中需要通过程序实现,所以这种格式化没有实际意义。但是都是针对整体显示的格式化,也可以针对某一列进行格式化
- 命令格式:COL 列名称 FOR A长度数字;
(2)调用记事本
如果现在编写语句,直接在命令行的方式下是很难完成的。有图形界面的时候这样的语句编写很容易,没有图形的界面直接写比较累,所以可以利用“ed”命令启动本机的记事本程序。
输入:“ed hello”会出现一个提示是否创建hello.sql文件
在不设置文件后缀的时候默认使用的是“.sql”,同时这个文件会在用户目录下,用户可以直接在打开的记事本中进行代码的编写,而后保存执行。
如果想要执行文件,直接使用“@文件名称”即可,如果这个文件的后缀是“*.sql”也可以不用写后缀,如“@hello”,如果现在E盘有一个hello.sql文件,执行输入“@e:hello”。
(3)显示用户
SELECT * FROM scott.emp;
(4)调用本机程序
在sqlplus下,尽可能考虑到用户需要的系统命令,HOST指令,可以在HOST指令之后调用本机的程序执行,例如执行一个文件拷贝的程序,命令语法结构:“copy 原始文件路径 拷贝目标文件路径”;
在sqlplus中调用在前面加上HOST
HOST copy 原始文件路径 拷贝目标文件路径
HOST copy e:\data.sql d:\hello.sql
4.SQL基础查询
(1)结构化查询语句,本身分为若干个子类:
- DML(数据操作语言):数据的更新与查询操作(SELECT、FROM、GROUP BY、HAVING、WHERE、UPDATE、DELETE),在开发之中几乎都是以DML为主
- DDL(数据定义语言):数据库对象的定义语言,例如;数据表、约束、索引、同义词,数据库设计的时候都必须掌握
- DCL(数据库控制语言):数据库的权限控制
重点在于DML与DDL
(2)scott用户表(重要)
- 查询表结构:DESC 表名;
- 查询表中数据:SELECT * FROM 表名;
oracle数据库中Scott用户下一共有四张表:dept,emp,salgrade,bonus,其中emp,dept,salgrade表都存在有数据,只有bonus表没有数据。
>1.部门表 dept
>2.雇员表 emp
>3.工资等级表 salgrade
>4.工资表 bonus
查询bonus会出现未选定行
(3)sql简单查询
- 查询顺序是先from后select,如果select字句中使用了“*”表示是查询一张表中所有的数据列,select后面就是select的字句,from后面是from的字句;
- from子句是确定数据来源,来源只要是表结构(行与列的集合)都可以使用,而select子句控制的是所需要的的数据列---数据投影概念
- 除了进行基本的查询之外,简单查询中也支持四则运算,并且可以直接使用列的内容进行四则运算
- 为了达到美观,可以进行别名设置,中文也支持
SELECT empno 雇员编号,ename 姓名,sal*12 年薪 FROM emp;
- 也支持数据的连接操作,直接使用“||”进行连接
SELECT empno || ename FROM emp; //列数据的连接
SELECT ename || 1 FROM emp; //连接普通数字
SELECT ename || 'hello' FROM emp; //连接字符串
SELECT '编号:' || empno || ',姓名:' || ename FROM emp;
数字中间连接字符串要用单引号,程序中用双引号,数据库中是单引号
- DISTINCT关键字的主要目的是消除重复内容,消除重复内容是指的是查询出来的所有列的内容都重复(比如同时查询姓名和职位,职位重复而姓名不同的不能被消除)
(4)SQL限定查询
SELECT子句是整个语法最后被执行的,但是如果要进行数据筛选,必须要使用若干个条件判断符
- 关系运算:>、=、<、>=、<=、!=(<>);
- 范围运算:BETWEEN...AND;
- 空判断:IS NULL、IS NUT NULL;
- IN判断:IN、NOT IN、exists()(复杂查询);
- 模糊查询:LIKE、NOT LIKE
- 以上限定符只能判断一次,若出现若干个限定符,那么就需要若干个限定符的连接,可以使用逻辑运算:AND(与)、OR(或)、NOT(非)
与操作表示的所有的判断条件都满足时返回真(true);
或操作表示若干个判断条件只要有一个满足就返回真(true);
以上所给出的判断符号是SQL中的标准支持,其他的不同数据库可能有自己扩充的内容
>(1)关系运算符:>、=、<、>=、<=、!=(<>)
- 关系运算符只要进行大小的判断
- 但是对于“=”除了可以在数字上使用还可以在字符串上使用
- 在Oracle中,数据是区分大小写的
- 对于不等于判断有两个符号:!=、<>
>(2)逻辑运算:AND(与)、OR(或)、NOT(非)
可以保证连接多个条件,主要使用AND(与)、OR(或)完成,使用NOT进行求反(一般用的不多)
>(3)范围运算:BETWEEN...AND
WHERE 字段|数值 BETWEEN 最小值 AND 最大值;
- 主要进行范围的查询
- 使用BETWEEN...AND是一个运算符,使用关系运算是两个运算对付,所以更高效(性能优化)
- 在Oracle中的所有运算符都不受数据类型的控制,在之前使用的事数字进行的判断,除了数字以外还可以进行字符串或者是日期的判断,字符串的意义不大,重点是日期判断
SELECT * FROM emp WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981';
SELECT * FROM emp WHERE ename BETWEEN 'ALLEN' AND 'CLARK';(无聊的字符串范围,结果出现从ALLEN开始到CLARK的名字列表,以字母为顺序)
>(4)空判断:IS NULL、IS NOT NULL
- null从数据库的定义上来讲属于一个未知的数据,任何情况下任何一个数字与null进行计算,结果会原封不动的输出
SELECT null+1 FROM emp; //NULL+1
- 在某些数据列上允许存在null值,但是不能使用关系运算判断。关系可以判断的是数据,null不是空字符串也不是数字0,所以在SQL中只能通过IS NULL来判断空,以及IS NOT NULL(NOT 字段 IS NULL)判断不为空
>(5)IN判断:IN、NOT IN、exists()(复杂查询)
- IN是指根据一个指定的范围进行数据查询,对于指定的数据范围查询,使用IN查询,不仅语句短而且性能好
- NOT IN 表示不在指定范围中,使用NOT IN 范围中不能包含null,如果使用NOT IN的时候查找的数据范围中包含null值,不会有任何结果返回,但是IN不存在此操作
SELECT *
FROM emp
WHERE empmo IN (7654,7896,1452,null); //结果不受影响
SELECT *
FROM emp
WHERE empmo NOT IN (7654,7896,1452,null); //未选定行(没有任何数据返回)
SELECT *
FROM emp
WHERE NOT empmo IN (7654,7896,1452,null); //未选定行(没有任何数据返回)
>(6)模糊查询:LIKE、NOT LIKE(核心)
LIKE可以实现数据的模糊查询操作,如果想要使用了LIKE必须只用两个匹配符号:
SELECT *
FROM emp
WHERE ename LIKE '_A%'; //查询名字第二个字母是A的雇员
如果使用LIKE限定查询没有使用任何关键字,表示查询全部
LIKE 可以在任意的数据类型上使用(原生支持),但是一般都是在字符串上使用,大部分系统查询都是用此语句实现的,但是不包括搜索引擎的实现
(5)查询排序
- ASC:升序,默认不写排序也是升序;
- DESC:降序,由高到低进行排序;
- 排序可以在任意数据类型上进行,包含字符串、日期都可以
- 所有的排序都是在WHERE筛选之后进行的,ORDER BY子句最后执行