Oracle 学习(1)
- Oracle简介?
Oracle是殷墟(yīn Xu)出土的甲骨文(oracle bone inscriptions)的英文翻译的第一个单词,在英语里是“神谕”的意思。Oracle公司成立于1977年,总部位于美国加州,是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名。Oracle数据库产品为财富排行榜上的前1000家公司所采用,许多大型网站也选用了Oracle系统。
Oracle数据库是Oracle(中文名称叫甲骨文)公司的核心产品,Oracle数据库是一个适合于大中型企业的数据库管理系统。在所有的数据库管理系统中(比如:微软的SQL Server,IBM的DB2等),Oracle的主要用户涉及面非常广,包括:银行、电信、移动通信、航空、保险、金融、电子商务和跨国公司等。
Oracle公司成立以来,从最初的数据库版本到Oracle7、Oracle8i、Oracle9i,Oracle10g到Oracle11g,Oracle12c 虽然每一个版本之间的操作都存在一定的差别,但是Oracle对数据的操作基本上都遵循SQL标准。因此对Oracle开发来说各版本之间的差别不大。
WebLogic是美国bea公司出品的一个application server确切的说是一个基于Javaee架构的中间件,BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。2008年1月16日,全球最大的数据库软件公司甲骨文(Oracle)宣布已经同BEA达成协议,以85亿美元收购BEA。
2008年1月16日,Sun宣布已经与MySQL AB达成协议,以大约10亿美元收购MySQL AB。
2009年04月20日,甲骨文宣布,该公司将以每股9.5美元的价格收购Sun。该交易价值约为74亿美元。
-
- Oracle 体系结构
Oracle服务器 :是一个数据管理系统(RDBMS),它提供开放的, 全面的, 近乎完整的信息管理。由1个数据库和一个(或多个)实例组成。数据库位于硬盘上,实例位于内存中。
-
- 表空间(users)和数据文件
逻辑概念:表空间,表空间由多个数据文件组成。位于实例上,在内存中。
物理概念:数据文件,位于硬盘之上。(C:\app\Administrator\oradata\orcl目录内后缀为.DBF的文件)
??一个表空间可以包含一个或者是多个数据文件。1:n(表空间:数据文件)
-
- 段、区、块
?
段存在于表空间中;??段是区的集合;??区是数据块的集合;??数据块会被映射到磁盘块。?
?
-
- DBA的时间开销
?
-
- 数据库的启动设置:
控制面板?→ 管理工具??→ 服务 ?→ OracleServiceORCL?→ 自动(手动)
控制面板?→ 管理工具??→ 服务 ?→ …home1TNSListener?→ 自动(手动)
- sqlplus 登录
- sqlplus ?↙?用户名?↙ 密码 ↙
- sqlplus scott/11??↙ ??或 ??sqlplus hr/11??↙
- 以管理员身份登陆:sqlplus??/??as ?sysdba ?(在Oracle数据库安装时指定了登陆密码)
- 解锁用户:SQL>?alter user scott account unlock???(管理员身份登陆,给scott用户解锁。用户默认锁定)
- 修改用户密码:SQL>?alter user scott identified?by 新密码 ???(管理员身份登陆,给scott用户修改密码)
- 查看当前语言环境:SQL>?select userenv('language') from dual ?
- 贯穿这门课程的方案
scott方案:
?
hr方案:?
- 基本的SQL?select语句
- sqlplus的基本操作
显示当前用户: SQL> show?user;
查看当前用户下的表: SQL> select * from tab;
tab: 数据字典(记录数据库和应用程序源数据的目录),包含当前用户下的表。
查看员工表的结构: SQL> desc emp; (desc ?→ ?description?描述)
设置行宽:set?linesize 120;
设置页面:set pagesize 100;
??或者将上述两行写入如下两个配置文件,可永久设置:
C:\app\Administrator\product\11.2.0\client_1\sqlplus\admin\glogin.sql
C:\app\Administrator\product\11.2.0\dbhome_1\sqlplus\admin\glogin.sql
设置员工名列宽:col ename for a20 (a表示字符串)
设置薪水列为4位数子:col?sal for 9999 (一个9表示一位数字)
-
- 基本?SELECT 语句
其语法格式为:
SELECT *|{[DISTINCT] column|expression?[alias],...}
FROM table;
查询所有员工的所有记录: SQL>?select * from emp; (效果等同于:)
SQL>?select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp;
※SQL优化: 尽量使用列名代替 *?(Oracle 9i之前不同, 之后一样)
查询员工号、姓名、薪水: SQL>?select?empno, ename, sal from emp;
增加年薪: SQL>??select?empno, ename, sal, sal * 12
???from emp; ??
“/”执行上一条成功执行的SQL语句。
修改上一条SQL语句:
- 用c命令来修改(c 即?change)
默认,光标闪烁位置指向上一条SQL语句的第一行。输入?2 则定位到第二行
c ?/错误关键字/正确关键字 ↙
使用“/”来执行修改过的SQL语句
例如:错误输入了:SQL>?select?empno, ename, sal, sal * 12?
???from emp; ??(“from”书写错误,该错误位于整条SQL语句的第二行)
- 输入:2↙ ?终端提示:2*?from emp
- 输入:c ?/form/from?↙ 终端提示:2*?from emp ?(意为改正后的sql语句样子)
- 输入:/↙
- 使用ed命令来修改???edit
ed ↙弹出系统默认的文本编辑器,(如记事本)
修改、保存、退出、执行“/”。
别名:as ????SQL>?select empno as “员工号”, ename “姓名”, sal 月薪, sal * 12 年薪
? ???from ?emp;??
关键字as写与不写没有区别; “”有与没有取决于别名中是否有空格或者关键字。
“DISTINCT” 关键字。重复记录只取一次
SQL>?select deptno from emp; → SQL>?select DISTINCT deptno from emp;
SQL>?select job from emp; ?→???SQL>?select distinct job from emp;
SQL>?select distinct deptno, job from emp; ?会发现没有行减少,因为deptno不重复。
因此得出,DISTINCT的作用范围: distinct作用于后面所有列。
-
- SQL语句使用注意事项
- SQL 语言大小写不敏感。?
- SQL 可以写在一行或者多行
- 关键字不能被缩写也不能分行
- 各子句一般要分行写。
- 使用缩进提高语句的可读性。
- 算数运算?+?-?*?/
- 乘除的优先级高于加减
- 优先级相同时,按照从左至右运算
- 可以使用括号改变优先级
查询: 员工号、姓名、月薪、年薪、奖金、年收入。
SQL>?select deptno, ename, sal, sal * 12, comm, comm+sal*12 from emp;
结果不正确。没有奖金的员工,年收入不正确。
需注意,在程序开发过程中,数据是核心。程序再正确也没有用,必须保证数据不能丢,且正确。对于上面的结果,有对有错的情况是最危险的。
-
- NULL值
☆NULL值问题:1. 包含NULL值的表达式都为空。2. NULL != NULL
解决:滤空函数:nvl(a, b) ?如果a为NULL, 函数返回b。所以:sal * 12 + nvl(comm, 0)?年收入。
NULL != NULL举例:
查询奖金为NULL的员工信息: SQL>?select * from emp where comm =?NULL;?(SQL中不使用==)
在SQL中,判断一值是否等于NULL不用“=” 和“!=”而使用is和is?not。
SQL>?select * from emp where comm is NULL; (is not)
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0。(特别强调)
-
- 连接符
Oracle中定义了一个连接符 ’||’ 用来连接字符串。
显示“xxx?是一个?xxx”怎么显示呢?
SQL>?select ename || ‘ is a ’ || ‘job’ from emp ?
但是如果显示一个“hello?world”应该怎么显示呢?
- 使用concat函数来实现: SQL>?select concat(‘hello’, ‘ world’)?from ????
这两个字符串不是任何一个表的内容,在Oracle中,定义一张“伪表”dual用来满足SQL99语法(ANSI)。
语法规定:select 后?必须接 from。
再如: SQL>?select concat('hello', '?world') as "你好"?from dual??
??注意:SQL双引号“”表示别名,使用‘’来表示字符串。
但是: SQL>?select concat('hello', '?world', '?Oracle') as "你好"?from dual?可以吗?
可以这样:SQL>?select concat('aa', concat('bb', 'cc')) from dual; ?
- 使用连接符?||?来实现: SQL>?select 'hello' || '?world' ||?'?Oracle'?as "你好"?from dual??
再如: SQL>?select 3 + 2 from dual;
‘||’就是用来代替concat函数的。SQL> select ename || ‘ is a ’ job “员工描述” from emp ?
-
- SQL和sqlplus
我们已经学习使用了select,应该知道还有update、delete、insert、create…
同时,我们学习了ed、c、set、col、desc….
SQL?→ 语言,关键字不能缩写。
sqlplus → Oracle提供的工具,可在里面执行SQL语句,它配有自己的命令(ed、c、set、col)?特点是缩写关键字。
SQL
-
- 一种语言
- ANSI 标准
- 关键字不能缩写
- 使用语句控制数据库中的表的定义信息和表中的数据
SQL*Plus
-
- 一种环境
- Oracle 的特性之一
- 关键字可以缩写
- 命令不能改变数据库中的数据的值
- 集中运行
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!