Oracle课堂笔记4

合集下载

oracle课程笔记.

oracle课程笔记.

1.触发器创建命令 Creat trigger <触发器名称>2.before insert or update of department_id on employees 意思是当表employees执行insert操作以及针对employees表中的department_id字段做update操作地时候,发起触发器;3.referencing old as old_value new as new_value for each row 定义了触发器关键动作(insert,update,delete)的修改临时变量(new,old) insert: 此时有一个new的修改临时变量可以被后续SQL操作当为insert时,只存在new变量,存放着insert的所有记录信息 update: 当为update时,update之前的数据存放在old中, update之后的数据存放在new中;注:如果update了一个字段,那么old和new里是保存着字段值还是一个完整的记录值 delete: 当为delete时,delete之前的数据存放在old中,并且只有old;4.定义触发器限制 when (new_value.department_id<>805.if...then elseif...then6. user当前登录用户7. Raise_application_error一个oracle定义的异常对象8. Create or replace 创建或者替换触发器9. sysdate当前系统时间 10.表修改关键字alter table 11.Declare 定义触发器中的变量 12.<字段>%type 表示字段的类型 13.定义触发器生效之后的SQL句操作 begin :new_mission_pct :=0; end; 14.before....for each row表示触发器对每一行生效 15.create sequence 建立字增长的序列号。

oracle课堂笔记

oracle课堂笔记

oracle课堂笔记星期⼀:Monday星期⼆:Tuesday星期三:Wednesday星期四:Thursday星期五:Friday星期六:Saturday星期天:Sunday数据库⽬录实例主⽬录:C:\oracle\product\10.1.0\admin实例⽬录⽂件:bdump:⽤于保存进程跟踪⽂件 cdump:⽤于保存内核放弃⽂件 create:o数据库创建⽂件 pfile:初始化参数⽂件 udump:⽤户SQL跟踪⽂件C:\oracle\product\10.1.0\oradata\orcl 数据库⽂件 .ctl 数据库控制⽂件 .log 重做⽇志⽂件 .dbf 数据⽂件Oracle注册表相关项[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\OracleCSService] Oracle服务相关项[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1] Oracle安装,运⾏环境,参数设置相关项[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Oracle in OraDb10g_home1] 与ODBC驱动相关的⼦键变量&select employee_id,last_name,salary,department_id from employees where employee_id=&请输⼊员⼯编号;select job_id, last_name, department_id, salary*12,salary from employees where job_id='&job' 中⽂字符要加单引号select employee_id,last_name,job_id,&column_name from employees;select employee_id,last_name,job_id,&column_name from employees order by &order_column;操作符优先级:(1)乘除的优先级⾼于加减。

oracle教学视频课后笔记

oracle教学视频课后笔记

一Oracle中如果不知道system,sys用户的密码后可用如下方法找回:首先以一个普通用户等入数据库:在SQL*Plus中执行如下命令:SQL>connect/as sysdba (也可以以如下方式连接:SQL>connect internal)SQL>alter user sys identified by sys; (回车后用户sys的密码会更改为sys)同理可以更改system密码SQL>alter user system identified by system; (回车后用户system的密码会更改为system)使用操作系统认证conn / as sysdba修改sys的密码在windows下测试OKOracle忘记密码怎么办?在本机安装完Oracle以后,不记得sys用户的密码了,采用如下方法可以修改密码:1.打开cmd,输入sqlplus /nolog,回车;输入“conn / as sysdba”;输入“alter user sys identified by 新密码”,注意:新密码最好以字母开头,否则可能出现错误Ora-00988。

有了这个方法后,只要自己对oracle服务器有管理员权限,不记得密码的时候就可以随意修改密码了。

2.在命令行执行如下命令:sqlplus "/@服务名as sysdba",然后在sqlplus中alter user sys identified by 新密码;alter user system identified by 新密码;3.运行到C盘根目录1)输入:SET ORACLE_SID = 你的SID名称2)输入:sqlplus/nolog3)输入:connect/as sysdba4)输入:alert user sys identified by sys5)输入:alert user system identified by system6)更改完成,密码是Oracle数据库初始密码4.首先,在CMD下输入SQLPLUS/NOLOG然后再在出来的界面中打入CONN/AS SYSDBA,这样就会以本地系统登录的用户为信任用户进入数据库的操作.解决这个问题的方式有两种,一个是:ALTER USER (USERNAME)IDENTIFIED BY “密码”;这个是可以改变USERNAME的密码.当然这个USERNAME必须已经存在的另一种是:CREATE USER (USERNAME) IDENTIFIED BY "密码";改变用户权限的命令是:GRANT ROLES TO (USERNAME);以上2种方法都是针对ORACLE 9I的版本。

Oracle超详细学习笔记

Oracle超详细学习笔记

Oracle超详细学习笔记-----员⼯培训------1.最简单的查询--例SELECT *FROM employees;DESC employees;SET linesize 600;SET PAGESIZE 50;--例2SELECT table_name FROM user_tables;--查询数据库中所有表名--2.查询特定的列--例SELECT employee_id,fisrt_name,last_name.salaryFROM employees;--3.在SELECT⼦句中使⽤直接量--例SELECT 5FROM employees;-----------------------SELECT 5FROM dual;--这是Oracle提供的伪表--例2:SELECT 'Hello Oracle SQL'--在Oracle中如何表⽰字符串常量FROM employees;SELECT 'Hello Oracle SQL'--在Oracle中如何表⽰字符串常量FROM dual;--例3:SELECT 'Hello Oracle''s SQL'--⽤两个连续单引号进⾏单引号转义FROM employees;--4在SELECT⼦句中使⽤算术表达式--例1:查询员⼯的编号、姓名和年薪SELECT employee_id,fist_name,last_name,salry,salary*12FROM employees;--例2:SELECT 5/2FROM dual;--5.给例定义别名--例1:SELECT employee_id AS idFROM employees;--例2:SELECT employee_id AS "Id"--双引号中的字符原样显⽰FROM employees;--例3:SELECT employee_id,fist_name,last_name,salry,salary*12 AS annual_salary FROM employees;--例4:SELECT employee_id,fist_name,last_name,salry,salary*12 AS "annual salary" FROM employees;--如果别名有特殊字符必须使⽤双引号--6.字符串的链接运算符--例:SELECT employee_id||''||fist_name,last_name,salry,salary*12 AS annual_salary FROM employees;--7.过滤重复记录--例1:SELECT DISTINCT department_idFROM employees;--例2:SELECT DISTINCT department_id,job_idFROM employees;--第⼆章过滤查询和结果集排序--1.使⽤WHERE⼦句过滤记录--例1:SELECT *FROM employeesWHERE salary > 8000;--例2:SELECT employee_id,first_name,last_name,salary FROM employeesWHERE salary = 17000;--例3:SELECT employee_id,first_name,last_name,salary FROM employeesWHERE salary <> 17000;-- !=--⽐较运算符号:>,>=,<,<=,=,!=或<>--例4SELECT employee_id,first_name,last_name,salary FROM employeesWHERE salary >=2500 AND salary <= 17000;--逻辑运算符:AND,OR,NOT--2.在WHERE⼦句中使⽤字符串和⽇期--例1:查询职位ID为st_clerk的员⼯信息SELECT employee_id,job_id,first_name,FROM employeesWHERE job_id = 'ST_CLERK';--表中字段的值是区分⼤⼩写的--例2:查询1998年7⽉9⽇⼊职的员⼯信息SELECT employee_id,job_id,first_nameFROM employeesWHERE hire_date = '09-7⽉-1998';--⽇期直接量必须以字符串的形式来体现--Oracle的⽇期是格式敏感的--标准⽇期表⽰DD-MM-RR--3.其他⽐较运算符--1)BETWEEN AND--例1:查询⼯资在【2500,7000】上的员⼯信息SELECT employee_id,job_id,first_name,salaryFROM employeesWHERE salary BETWEEN 2500 AND 7000;--包含边界值--第⼀个值要⼩于第⼆个值--练习:查询1998年⼊职的员⼯信息SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE hire_date BETWEEN '01-1⽉-1998' AND '31-12⽉-1998';--2) IN--例1:查询职位ID是ST_CLERK或者ST_MAN的员⼯SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE job_id IN ('ST_CLERK','ST_MAN');--例2SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE NOT job_id IN ('ST_CLERK','ST_MAN');----------------------------------------------------------------------------SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE job_id NOT IN ('ST_CLERK','ST_MAN');--3)LIKE--例1:模糊查询SELECT employee_id,job_id,first_name,salary,hire_dateFROM employeesWHERE job_id LIKE 'ST%';--通配符:%任意多个字符,_⼀个字符。

ORACLE学习笔记整理

ORACLE学习笔记整理

ORACLE学习笔记整理1.学习环境注意,以下涉及到的例题数据均来自于作业管理系统中“陈勇”名下的“数据库原理与应用”文件夹中的“实验数据04.xls”。

请下载使用。

1.1 SQL窗口通常用于试运行单条SQL语句。

(1)启动方式在PL/SQL Developer界面下单击新建中的第一个图标,在菜单中选“SQL窗口”。

界面如下图所示:在其中可以输入SQL语句,单击工具栏上的运行按钮“”,可得到运行结果。

如下图:1.2 命令窗口同SQL窗口,可以执行ORACLE的各种命令、SQL语句、程序等。

(1)执行SQL语句结果如下图:执行SQL语句时,要求语句以“;”结束,如果语句末尾没有“;”,表示语句还没有录入结束,后面以续行号“2,3,4”的形式等待录入后续内容。

如果不想录入“;”,也可以以“/”表示语句录入结束。

如下图(2)执行ORACLE命令如下图:命令目的是显示学生信息表的结构,对于ORACLE命令关键字,只要输入前面四个以上的字符即可。

1.3 测试窗口用于录入ORACLE程序。

如下图单击工具栏上的运行按钮,可以运行程序,程序结果在“DBMS”输出页中。

如下图所示:从这个程序我们可以看到ORACLE程序的基本结构如下:Declare/*定义部分-变量、常量、游标等*/Begin/*执行部分-PL/SQL,SQL语句*/Exception/*异常处理部分-处理运行错误*/End; /*块结束标志*/也可以看出ORACLE中的字符串连接运行符非常得单“||”。

2. 语言基础2.1 PL/SQL数据类型在PL/SQL程序中定义变量、常量和参数时,必须要为它们指定数据类型,在编写PL/SQL 时,可以使用标量类型、复合类型、参照类型和LOB(Large Object大对象类型)类型等。

如下表所示:2.1.1 标量(SCALAR)合法的标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。

它又分为七个组:数字、字符、行、日期、行标识、布尔和可信。

oracle 笔记

oracle 笔记

oracle 笔记摘要:一、Oracle 简介1.Oracle 的发展历程2.Oracle 的产品和服务二、Oracle 数据库的基本概念1.数据库管理系统2.关系型数据库3.Oracle 数据库的结构三、Oracle 数据库的安装与配置1.安装Oracle 数据库的前提条件2.安装过程及注意事项3.配置Oracle 数据库四、Oracle 数据库的管理1.数据库的启动与关闭2.数据库的备份与恢复3.用户与权限管理五、SQL 语言基础1.SQL 简介2.SELECT 查询语句3.INSERT、UPDATE 和DELETE 操作语句六、PL/SQL 编程1.PL/SQL简介2.存储过程与函数3.触发器与异常处理七、Oracle 数据库的应用1.Oracle 数据库在企业级应用中的优势2.Oracle 数据库在典型行业的应用案例正文:一、Oracle 简介Oracle(甲骨文)公司成立于1977 年,总部位于美国加州,是全球著名的数据库软件及解决方案供应商。

Oracle 的产品和服务涵盖了数据库、应用软件、中间件、云计算等领域,广泛应用于企业、政府、金融、医疗等各个行业。

二、Oracle 数据库的基本概念1.数据库管理系统:数据库管理系统(DBMS)是一种用于存储、检索和管理数据的计算机软件。

它提供了对数据的高效组织、存储、检索、更新和维护功能。

2.关系型数据库:关系型数据库是基于关系模型的数据库,采用表格形式存储数据,并通过SQL(结构化查询语言)进行操作。

Oracle 数据库是一种关系型数据库,具有强大的数据管理功能和高度的数据安全性。

3.Oracle 数据库的结构:Oracle 数据库由物理结构和逻辑结构组成。

物理结构包括数据库文件、数据块、表空间等;逻辑结构包括表、视图、索引等。

三、Oracle 数据库的安装与配置1.安装Oracle 数据库的前提条件:首先,需要确保计算机硬件满足Oracle 数据库的最低要求;其次,需要获取Oracle 数据库的安装文件,这些文件通常可以从Oracle 官网下载。

orcal备课笔记

orcal备课笔记

Oracle备课笔记Oracle第一课(数据库介绍)备课笔记一、了解数据库管理系统的不同类型1、数据存储系统将数据存储在计算机上的概念就叫数据存储系统。

数据以文本、数字、图片或声音等形式存储。

2、数据库是一组在逻辑上相关的信息的集合。

表以行和列的形式保存数据。

实现数据库管理任务的软件叫做数据库管理系统(DBMS)。

3、DBMS的不同类型为:RDBMS和ORDBMSRDBMS是由E.F.Codd博士在1970年首先提出的。

RDBMS 的例子包括Sybase, Microsoft Access, Ingres, Oracle, 及SQL Server。

在RDBMS的表中,每个属性叫做一列,每条记录被称为一行。

4、ORDBMSORDBMS将面向对象的前端与RDBMS集成起来。

5、面向对象的概念在面向对象的方法中,系统被当作一组真实世界中对象的集合。

这些对象以类来分类,类就是拥有共同属性和行为的一组对象。

面向对象方法具有以下特性:抽象、继承、封装、多态性二、了解Oracle9i的特性可以使用结构化查询语言(SQL)或面向对象的编程语言来访问数据。

可使用内置数据类型在表中存储数据存储。

将复合结构当作单个实体进行存储。

使用ORDBMS 的继承特性。

允许创建许多同名函数。

可扩展性使得用户能够定义新的数据类型来存储复合数据。

允许创建对象视图。

三、了解ER 图的组成1、实体- 关系(ER)图: 以图形方式表示数据库的逻辑结构,可被看作是数据库的蓝图。

2、画ER图的指南是:(1)确定各实体(2)确定实体的属性(3)确定实体之间的关系,联系的类型: 一对一、一对多或多对一、多对多四、ER图映射成表的规则:1、独立存在的实体转换成一个表2、属性转换成列(字段),可唯一标识一行的属性设置为主键3、一对一关系,可在两表中互设为主键,也可将两表合并例如:部门和部分负责人4、一对多关系,第一个表的主键可作为第二个表的外键例如:班级和学生5、多对多关系,关系转换成表,原来的两表主键在新表中用做外键例如:学生和课程四、使用SQL*Plus 语句1、SQL语句介绍SQL用来检索和维护数据库中数据。

Oracle学习笔记

Oracle学习笔记

Oracle 入门学习笔记
4.3 分析函数 .................................................................................................... 17 第三章 分区表与锁 ................................................................................................ 17 1. 分区表的分类 ....................................................................................................... 17 2. 分区表的使用 ....................................................................................................... 17 3. 分区表的维护 ....................................................................................................... 20 4. 锁 ........................................................................................................................ 21 第四章 数据对象..............................................................................

oracle课堂笔记

oracle课堂笔记

9.数据库的备份和恢复
exp命令可以把数据从远程数据库服务器导出到本地的dmp文件
imp命令可以把dmp文件从本地导入到远处的数据库服务器中
10.表的创建
语法:
create table 表名(列名 数据类型 [default 默认值],列名2 数据类型,...);
修改表结构:
SERIALIZABLE:串行化。不允许任何并发事务问题。最严格的事务隔离性。
Oracle只支持READ COMMITTED和SERIALIZABLE。
默认为READ COMMITTED
设置一个事务的隔离级别
set transaction isolation level serializable
自动隐式提交事务:
执行一个DDL语句、执行一个DCL语句、从SQL*Plus正常退出(exit,quit)
自动隐式回滚事务:
强行退出SQL*Plus、客户端到服务器的连接异常中断MMIT;
回滚事务:ROLLBACK [TO 回滚点];
ALTER TABLE 表名
ADD [CONSTRAINT 约束名] 约束类型(要约束的列名);
ALTER TABLE 表名
ADD [CONSTRAINT 约束名]
FOREIGN KEY (要添加外键的列名)
REFERENCES 主表名(主表的某一列名);
设置事务回滚点:SAVEPOINT 回滚点;
5.事务的隔离级别
SQL标准定义了四种隔离级别:
READ UNCOMMITTED: 读未提交数据。脏读、不可重复读、幻读都可能发生。它的事务隔离性最低。
READ COMMITTED:读已提交数据。不允许脏读。

oracle运维课堂笔记

oracle运维课堂笔记

Oracle的安装:进入u01目录,cd /u01创建目录,mkdir –p app/oracle修改u01目录的权限,chown –R oracle :install /u01修改五个文件的内容,五个文件在帮助文档2.6节修改.bash_profile文件,它在home目录下,cd ~进入进入u01目录,解压oracle,uzip 10201_database_linux32.zip进行解压启动vnc,vncservervi /home/oracle/.vnc/xstartup,修改文件,去除两个#kill掉这个vnc,vncserver –kill :1(这个数字是vnc的号)打开vnc的exe程序,输入ip:192.168.98.11 :1进行连接,前面是ip地址,后面是vnc的id号,(ˇˍˇ) 进入vnc时是database目录下在vnc的exe程序界面,打开终端,进入/u01/databse目录,用ls –l 查看文件,执行./runInstaller执行后可以看到oracle的安装界面选择高级安装选项(第二个选项),点击next后,看到的目录指出安装文件在什么地方选择install database software only先选择只安装数据库软件vnc.exe界面,dbca命令选择general...选项,点击next,设置global database name和sid选择sample schemas设置character sets,选择第三个,再选择utf8sqlplus / as sysdba,进入sql了startup 打开数据库shutdown immediate关闭数据库show parameter sga 查看sga的相关参数alter system set sga_target=150m scope=both 修改参数修改sga_max_size特殊参数时需要先关闭数据库再执行其它操作重点:第一章、第三章、第九章、第二十章20.1、20.3监听、EM、五个数据字典,redo日志等文件索引的种类和意义,优化sql文,分区表,给分区表加索引(分区索引)Oracle Server由例程(instance)和数据库(Database)组成。

韩顺平老师oracle视频教程听课笔记

韩顺平老师oracle视频教程听课笔记

韩顺平老师 oracle教程笔记1.Oracle认证,与其它数据库比较,安装Oracle安装会自动的生成sys用户和system用户:(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。

具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。

2.Oracle的基本使用--基本命令sql*plus的常用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect]说明: 该命令用来断开与当前数据库的连接3.psssw[ord]说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。

4.show user说明: 显示当前用户名5.exit说明: 该命令会断开与数据库的连接,同时会退出sql*plus文件操作命令1.start和@说明: 运行sql脚本案例: sql>@ d:\a.sql或是sql>start d:\a.sql2.edit说明: 该命令可以编辑指定的sql脚本案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开3.spool说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。

案例: sql>spool d:\b.sql 并输入 sql>spool off交互式命令1.&说明:可以替代变量,而该变量在执行时,需要用户输入。

韩顺平老师oracle教程听课笔记_整理

韩顺平老师oracle教程听课笔记_整理

韩顺平老师 oracle教程笔记1.Oracle认证,与其它数据库比较,安装Oracle安装会自动的生成sys用户和system用户:(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。

具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。

2.Oracle的基本使用--基本命令sql*plus的常用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect]说明: 该命令用来断开与当前数据库的连接3.psssw[ord]说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。

4.show user说明: 显示当前用户名5.exit说明: 该命令会断开与数据库的连接,同时会退出sql*plus文件操作命令1.start和@说明: 运行sql脚本案例: sql>@ d:\a.sql或是sql>start d:\a.sql2.edit说明: 该命令可以编辑指定的sql脚本案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开3.spool说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。

案例: sql>spool d:\b.sql 并输入 sql>spool off交互式命令1.&说明:可以替代变量,而该变量在执行时,需要用户输入。

oracle精品笔记(53节完整版)名师手书

oracle精品笔记(53节完整版)名师手书

尚学堂马士兵老师oracle笔记(2008-10-30 10:17:39)第一课:客户端1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。

2. 从开始程序运行:sqlplus,是图形版的sqlplus.3. http://localhost:5560/isqlplusToad:管理,PlSql Developer:第二课:更改用户1. sqlplus sys/密码as sysdba2. alter user scott account unlock;(解锁账号)第三课:table structure(系统自带的表有emp、salgrade、dept、bonus、dual)1. 描述某一张表:desc 表名2. select * from 表名第四课:select 语句:1.计算数据可以用空表:比如:.select 2*3 from dual2.select ename,sal*12 annual_sal from emp;与select ename,sal*12 "annual sal" from emp;区别:加双引号保持原大小写,不加全变大写。

任何含有空值的数学表达式结果都为空值。

3. select ename || ‘abcd’|| 用来连接两个字符串如果连接字符串中含有单引号,用两个单引号代替一个单引号。

第五课:distinctselect deptno from emp;select distinct deptno from emp;select distinct deptno ,job from emp去掉deptno,job两者组合的重复。

更多的项,就是这么多项的组合的不重复组合。

第六课:Whereselect * from emp where deptno =10;select * from emp where deptno <>10;不等于10select * from emp where ename ='bike';select ename,sal from emp where sal between 800 and 1500 (>=800 and <=1500)空值处理:select ename,sal,comm from emp where comm is (not) null;select ename,sal,comm from emp where ename ( not)in ('smith','king','abc');模糊查询like :%代表任意数量的任意字符_代表一个任意字符select ename from emp where ename like '_A%';如果要查询含有%的,要用转义字符\转义字符可以自定义:escape '自定义的转义字符' 比如:select ename from emp where ename like '%$a%' escape '$';第七课: order byselect * from dept;默认按升序(asc)排列,要按降序(desc)用如下语句:select * from dept order by dept desc;select ename,sal,deptno from emp order by deptno asc,ename desc;第八课: sql function1:select ename,sal*12 annual_sal from empwhere ename not like '_A%' and sal>800order by sal desc;select lower(ename) from emp;select ename from empwhere lower(ename) like '_a%';等同于select ename from emp where ename like '_a%' or ename like '_A%';select substr(ename,2,3) from emp;从第二个字符开始截,一共截三个字符.select chr(65) from dual 结果为:Aselect ascii('a') from dual 结果为:65select round(23.652,1) from dual; 结果为: 23.7(第二个参数为指定四舍五入到哪位数)select round(23.652,-1) from dual; 20select to_char(sal,'$99,999,999') from emp;(用9就可以在没有数字的地方不显示,如果用0的话一定会用0填充满)select to_char(sal,'L99_999_999') from emp; L:代表本地符号这个需要掌握牢:select hiredate from emp;显示为:BIRTHDATE----------------17-12月-80----------------改为:select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;显示:BIRTHDATE-------------------1980-12-17 12:00:00-------------------select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; //也可以改为:HH12TO_CHAR(SYSDATE,'YY-------------------2007-02-25 14:46:14to_date函数:select ename,hiredate from emp where hiredate > to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');如果直接写birthdate>'1981-2-20 12:34:56'会出现格式不匹配,因为表中的格式为: DD-MM月-YY.select sal from emp where sal>888.88 无错.但select sal from emp where sal>$1,250,00;会出现无效字符错误.改为:select sal from emp where sal>to_number('$1.250.00','$9,999,99');把空值改为0select ename,sal*12+nvl(comm,0) from emp;作用:把comm为空的地方用0代替,这样可以防止comm为空时,sal*12相加也为空的情况.第九课: Group function 组函数(即从多行中得到一个输出)牢记组函数:max(), min(), avg(), sum(), count()select to_char(avg(sal),'99999999,99') from emp;select round(avg(sal),2) from emp;结果:2073.21select count(*) from emp where deptno=10;select count(ename) from emp where deptno=10; count某个字段,如果这个字段不为空就算一个.select count(distinct deptno) from emp;select sum(sal) from emp;第十课: Group by语句注意:count() 是计数不是空值的数量需求:现在想求每个部门的平均薪水.select avg(sal) from emp group by deptno;select deptno, avg(sal) from emp group by deptno;select deptno,job,max(sal) from emp group by deptno,job;求薪水值最高的人的名字.select ename,max(sal) from emp;出错,因为max只有一个值,但等于max值的人可能好几个,不能匹配.应如下求:select ename from emp where sal=(select max(sal) from emp);Group by语句应注意,出现在select中的字段,如果没出现在组函数中,必须出现在Group by语句中.第十一课: Having 对分组结果筛选Where是对单条纪录进行筛选,Having是对分组结果进行筛选.select avg(sal),deptno from empgroup by deptnohaving avg(sal)>2000;查询工资大于1200雇员,按部门编号进行分组,分组后平均薪水大于1500,按工薪倒充排列.select avg(sal) from empwhere sal>1200group by deptnohaving avg(sal)>1500order by avg(sal) desc;第十二课:子查询谁挣的钱最多(谁:这个人的名字, 钱最多)select 语句中嵌套select 语句,可以在where,from后.问那些人工资,在平均工资之上.select ename,sal from emp where sal>(select avg(sal) from emp);查找每个部门挣钱最多的那个人的名字.select ename ,deptno from emp where sal in (select max(sal) from ename group by deptno) 查询会多值.应该如下:把select max(sal),deptno from emp group by deptno;当成一个表.语句如下:select ename, sal from emp join(select max(sal) max_sal,deptno from emp groupby deptno) t on (emp.sal=t.max_sal and emp.deptno=t.deptno);每个部门的平均薪水的等级.分析:首先求平均薪水(当成表),把平均薪水和另外一张表连接.第十四课:self_table_connection把某个人的名字以及他的经理人的名字求出来(经理人及这个人在表中同处一行)分析:首先求出这个人的名字,取他的编号,然后从另一张表与其相对应编号,然后找到经理的名字.select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr= e2.empno.empno编号和MGR都是编号.第十15课: SQL1999_table_connectionsselect ename, dname,grade from emp e,dept d, salgrade swhere e.deptno = d.deptno and e.sal between s.losal and s.hisal andjob <> 'CLERK'有没有办法把过滤条件和连接条件分开来? 出于这样考虑,Sql1999标准推出来了.有许多人用的还是旧的语法,所以得看懂这种语句.select ename,dname from emp,dept;(旧标准).select ename,dname from emp cross join dept;(1999标准)select ename,dname from emp,dept where emp.deptno=dept.deptno (旧)select ename,dname from emp join dept on(emp.deptno = dept.deptno); 1999标准.没有Where语句.select ename,dname from emp join dept using(deptno);等同上句,但不推荐使用.select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal);join 连接语句, on过滤条件。

Oracle学习笔记

Oracle学习笔记

Oracle学习笔记Oracle学习笔记Oracle学习笔记(1) Oracle数据库编程基础文章分类:数据库这段时间出差,一直在搞需求分析和设计,每天都是写文档画UML,都有好几个月没有写代码了,只怕都快忘记了!这是我用Oracle时学习的Oracle编程做的笔记,今天也发上来与大家分享一下,一共有八章。

现在在有时间就学一下EJB3,因为在项目中会用到,等学完了把EJB3的笔记也发上来和大家分享!通过SqlPlus登录Oracle ,sqlplus 用户名/密码@数据库名建表Sql代码1.create table demo(2. id number(8),3. name varchar2(20)4.)插入数据Sql代码1.insert into demo values(1,'zhangshang');2.insert into demo values(2,'lishi');提交Sql代码/doc/fe11207420.html,mit;查询数据字典(table_name='这里的值要大写')Sql代码1.select * from dba_tab_cols a where a.table_name='DEMO';创建视图create or replace:如果该视图存在就替换,如果不存在就创建1.create or replace view myView as select id 编号,name 姓名 from demo;2.select * from myView;创建同义词(同义词相当于表的别名或逻辑名,可以通过该名称来操作相对应的物理表)在分布式Oracle数据库中,标识一个对象需要四部分:主机名、实例名、模式名、对象名。

例如********************,其中模式名是SYSTEM,对象名是auths,PX.orcl是一个数据库链,它指向服务器PX上的实例orcl,我们可以为其指定一个同义词,使所有的用户都可以通过简单的同义词来访问表********************创建公有的同义词Sql代码1.create public synonym syn1 for demo;创建私有的同义词Sql代码1.create synonym syn2 for demo;创建并使用序列创建序列的完整语法:create sequence 序列名 increment by 增量种子数 start with 起始数字maxvalue 最大值;我们可以使用序列的两个属性nextval和currval,其中nextval 是返回下一个可用的序列值,而currval用于获得当前序列的值创建序列的简单方法Sql代码1.create sequence mySeq;使用创建的序列Sql代码1.insert into demo values(mySeq.nextval,'ddd');获得当前序列的值1.select mySeq.currval from dual;删除一条记录Sql代码1.delete from demo where id=2;查询所有记录Sql代码1.select * from demo;格式化日期时间Sql代码1.select to_char(sysdate,'yyyy-MM-dd hh24:mm:ss') 格式化日期 from dual;Oracle学习笔记(2) PLSQL编程基础文章分类:数据库这是第二章的学习笔记,学习完第一章的基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!编程时使用的工具是PLSQL Developer 7.1.4Sql代码1.select * from Employee;2.select * from dba_tab_cols t where t.table_name='EMPLOYEE'; Sql代码1.-- 声明部分,用于定义变量2.declareconstant用于定义常量,当定义常量时必须指定它的初始值,且数据不能改变Sql代码1.n_aaa constant number(4,2) :=5.5;boolean 类型的值只能用于sqlplus语句块中,不能用在表字段的数据类型中not null 用于强制初始化变量不能为空,此时必须为变量指定值default用于指定变量或常量的默认值1.v_valid boolean not null default false;2.v_name varchar2(20);为了确保变量使用合适的数据类型和长度,可以使用%type属性定义变量,它会按照数据库列或其它变量来确定新变量的类型和长度Sql代码1.v_job Employee.Job%type;将v_job2定义为与变量v_job的数据类型和长度完全一致Sql代码1.v_job2 v_job%type;复合变量:处理单行单列数据时,用标量变量;处理单行多列时,用PL/SQL 记录;处理单列多行时,用集合;处理多行多列数据时,可以结合使用PL/SQL记录和集合PL/SQL记录(RECORD):方法一:emp_recode_type 是PL/SQL记录类型并包含有三个成员(name,salary,job)Sql代码1.type emp_recode_type is record(2. name /doc/fe11207420.html,%type,3. salary employee.salary%type,4. job employee.job%type5.);emp_recode是记录变量Sql代码1.emp_recode emp_recode_type;方法二:使用表名的%rowtype 属性定义记录变量注意:用%rowtype 属性定义记录变量时,记录成员个数、名称、类型必须与表或视图的列的个数、名称和类型完全相同Sql代码1.emp_recode2 employee%rowtype;集合类型PL/SQL 表(也称索引表,下标可以为负数,下标没有上限和下限,并且元素的个数无限)Sql代码1.--这里的table 实指集合2.type name_table_type is table of /doc/fe11207420.html,%type index by bi nary_integer;3. name_table name_table_type;嵌套表:嵌套表的下标不能为负值,其元素的个数没有限制并可以使用表列的数据类型在使用嵌套表时必须先用create type 语句建立嵌套表类型嵌套表只是比PL/SQL 表少了 index by binary_integerSql代码1.type num_table_type is table of number(4);2.num_table num_table_type;varray(变长数组):varray的元素个数是有限制的,在使用其之前必须先建立varray 类型在此创建的varray只能存放20个varchar2类型的数据注意:嵌套表列数据需要存储在专门的存储表中,而varray数据则与其它列数据一起存放在表字段中Sql代码1.type v_varray_type is varray(20) of varchar2(10);2.n_empno employee.empno%type;Sql代码1.-- 程序开始2.begin执行部分,执行PL/SQL/和SQL语句可以用into将从表人查询出来的值赋给指定的变量将值赋给变量有两种方法,一是用 := ,二是用 into& 符号用于提示用户输入一个值,& 为sqlplus的替代变量Sql代码1.n_empno := &输入你要查询的员工编号:;2.select Name,Job into v_name,v_job from Employee where empno=n_empno;这里的 || 号与Java中的 + 号类似,表示要将两边的字符串连接起来dbms_output是Oracle所提供的系统包,用于输出数据或消息,而put_line是该包所包含的过程,用于输出字符串信息并换行当在CMD中使用dbms_output包时,必须要先将sqlplus 的环境变量serveroutput 设置为 onSql代码1.dbms_output.put_line('你查询的员工是:' || v_name || ' 他的工作是:' || v_job);引用记录变量的成员并赋值(赋值可以用 := 和 into 两种方法)注意:用sele ct……into 语句给记录变量赋值时,select语句中的列名列表的名称和个数、类型必须与记录变量的成员个数、名称、类型完全相同Sql代码1.dbms_output.put_line('你查询的员工是:' || v_name || ' 他的工作是:' || v_job);2.3.emp_/doc/fe11207420.html, := '钱森';4. dbms_output.put_line('引用记录变量的成员并赋值(Recode):' || emp_/doc/fe11207420.html,);5.6. select name,job into emp_/doc/fe11207420.html,,emp_recode2.jobfrom employee where empno=2;7. dbms_output.put_line('引用记录变量的成员并赋值(RowType):' || emp_/doc/fe11207420.html, || ' 的工作是:' || emp_recode2.job);8. -- 使用PL/SQL表(索引表)9. select name into name_table(-50) from employee where empno=1;10. dbms_output.put_line('雇员名:' || name_table(-50));11. -- 使用嵌套表12. -- 必须先设置嵌套表的下标,然后才能对该集合进行赋值13. num_table := num_table_type(1,2,3,4,5);14. num_table(1) := 10;15. num_table(5) := 100;16. dbms_output.put_line('使用嵌套表:' || num_table(1) || ',' || num_table(5));17.18.exception19. -- 异常处理部分20. when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!');21. when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!');22. when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);23.-- 程序结束24.end;25./Oracle学习笔记(3) PLSQL程序控制结构文章分类:数据库这是第三章的学习笔记,学习完第二章的编程基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!这周六总算是不用加班,可以好好出去玩一下了!今天去武大看樱花了,哈哈,不错!编程时使用的工具是PLSQL Developer 7.1.4Sql代码1.select * from employee;2.select * from dba_tab_cols t where t.table_name='EMPLOYEE';Sql代码1.declare2. n_empno employee.empno%type;3. v_name /doc/fe11207420.html,%type;4. n_salary employee.salary%type;5. v_temp varchar2(30);6. n_temp number(5) := 1;7. -- 自定义异常8. e_exception exception;exception_init 是一个编译时指令,用于将一个内部错误与异常的名称关联。

Oracle课堂笔记

Oracle课堂笔记

Oracle课堂笔记---------??create建表??------------------createtableemp_tian(EmpnonNumber(4)删除,enamevarchar(20),jobvarchar(20),salarynumber (7,2),BonuNumber(7,2),hiredatedate,managernumber(4),deptnonumber(2))-----------------------------------------?? 插入添加信息--------------------插入时间值(1001,'Zhangwji','manager',100002000,'12-mar-10',1005,10);insertintoemp_uuTianValues(1002,'liucangsong','analyst',80001000,'01-apr-11',1001,10);insertintoemp_uuTianValues(1003,'liyu','analyst',90001000,'10年4月11日',1001,10);insertintoemp_uTian值(1004,'guoferong','programmer',5000,null,'01-jan-11',1001,10);插入时间值(1005,'zhangsanfeng','persident',15000,空,'08年5月15日',空,20);insertintoemp_u2;tianvalues(1006,'yanxiaoliu','manager',5000400,'01-feb-09',1005,20);插入时间值(1007,'luwushuang','clerk',4000500,'01-feb-09',1006,20);insertintoemp_uuTian价值观(1008,'huangrong','manager',4000500,'01-may-09',1005,30);insertintoemp_uTianValues(1009,'weixiaobao','saller',4000,空,'2022年2月20日',1008,30);insertintoemp_ujian值(1010,'guojing','Saleser',4500,null,'09年5月10日',1008,30);------------调整数据显示(仅在Oracle中试用,重新登录后无效)--------------列宽调整columnempnofor9999---------------column可用col代替columnenamefora10---------------format可用for代替columnmanagerformat9999columnsalaryformat99999columnbonusfor9999coljobfora10ColNameFormat10 ColJobFormat12翻页设置setpagesize100setlinesize300调整数据显示(仅在Oracle中试用,重新登录后无效)------?修改信息-----------------updateemp_uuTiansetjob=\whereName='jizyue';select*fromemp_tian;-------------查询-----------------选择姓名,从emp_uuu_u;tianwherelower(job)in('analyst','clerk','programer');在(10,20)中选择eName,deptnofromemp_u_2;tian wherelower(deptno);selectename,salaryfromemp_tianwheresalary>=5000andsalary<=8000;-------------------------相当于5000至8000之间的工资;nvl(***,0)----当***中内容为null时,则返回0,否则返回***的值selectename.salaryfromemp_tianwherenvl(salary,0)=0;-----------找到了一个内容为空的选项--------------selectenamefromemp_tianwheresalaryisnull;-----------找到非空的选项---------从EMP_uutian where salary snotnull;-------------获取项目数-----------从用户表格中选择Count(*);showuser-------显示当前用户-------通配符%以查找名为EMP+任意字符的文件----------选择Table_u-namefromuser_uuu-table_uu-namelike'EMP%';selectename,salary,四舍五入(工资*0.12345678)astaxfromemp_ujian;------------舍入(Num,XXX)舍入-----------------XXX(截断整数)-------------xxx0(保留十的整数)-----------------xxx.xx(保留两位小数)selectename,salary,四舍五入(薪水*0.12345678)astax,四舍五入(薪水*0.12345678,-1)astax1,四舍五入(薪水*0.12345678,2)Astax2来自Emp_u_jian;---------------trunc直接截取--------------------------------selectename,salary,trunc(salary*0.12345678)astax,trunc(salary*0.12345678,-1)astax1,trunc(salary*0.12345678,2)astax2from emp___tian;--------------得到系统日期-------------------dual是一个虚表单行单列的表selectsysdatefromdual;---------------------按照指定的格式显示------------------selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')asmytimefromdual;selectto_char(sysdate,'yearmonthmondaydyam')fro mdual;selectto_char(sysdate,'yearmonthmondaydyam')fromdual;---------------按照制定的格式显示某个时间量-------------------选择eName,hiredate,to_char(hiredate,'yyyy-mm-dd')hirefromemp_ujian;一.oracle中的日期处理selectsysdatefromdual;----------------计算两个日期之间的间隔------------------------selectename,hiredate,sysdate-hiredateasdaysfromemp_tian;---------------计算间隔天数(整数)-----------------------------选择名称、hiredate、round(sysdate hiredate)作为DaysFrommp_uTian;--------------计算间隔月----------------------------------------selectename,hiredate,months_between(sysdate,hiredate)asdaysfromemp_tian;-----------------计算间隔月份整月份--------------------------------------------选择名称、雇佣日期、轮数(从(系统日期、雇佣日期)到日的月数);----------------------计算某月的最后一天------------------------------selectlast_day(sysdate)fromdual;------------------------计算三个月后的日期--------------------从Dual中选择Add_u;monds(sysdate,3);------------------------计算10天前/后的日期-------------------------------selectsysdate-10fromdual;selectsysdate+10fromdual;--------------------将万晓飞的进入时间修改为2022年2月1日-------------------updateemp_uu;tiansethiredate='01-feb-12'whereename='wanxiaofei';--------------将字符串更改为日期(以特定格式)-------------------------updateemp_tiansethiredate=to_date('2021/03/01','yyyy/mm/dd')whereename='wanxia ofei';----------------------添加员工:1012,‘Jerry’,‘2022-01-12’---------插入emp_utian(empno,ename,hiredate)values(1012,'jerry',to_date('2021/01/01','yyyy/mm/dd'));--------------------------------------------------至图表编号日期------------>字符------------>编号-to_datetochar---------------------------------------------------数字字符编号-10000------>$10000.00------>10000-to_charto_number---------------------------------------------------II单线函数计算——一个数据对应一个结果NVL(奖金,0)upper(job)='analyst'round(salary,2)至字符(sysdate,'yyyy-mm-ss')至日期('2022/03/01','yyy/mm/dd')------------如果有奖金发奖金,没奖金的发工资的一半,都没有的话发一百-----------selectename,salary,bonus,coalesce(bonus,salary*0.5,100)asfinalbonusfromemp_tia n;-----------------雅思成绩------------------姓名听、读、写、说总分叶凡55786.25->6.5[0,0.25)[0.25,0.75)[0.75,1)00.51select*fromielts_tian;-----------------------计算每人四项的平均结果-----------------------------------selectname,scr1,scr2,scr3,scr4,(scr1+scr2+scr3+scr4)scorefromielts_tian;-------------------------------取模-------------------------------------------得到小数位mod(7.25,1)-------结果0.25得到整数位trunc(7.25)-------结果7casewhen....thenwhen....thenwhen....thenend整数部分TRUNC((sCR1+scr2+scr3+scr4)/4)小数部分mod((sCR1+scr2+scr3+scr4)/4,1)----------------------雅思算分代码---------------------------------------选择名称、scr1、scr2、scr3、scr4、trunc((scr1+scr2+scr3+scr4)/4)+casewhenmod((scr1+scr2+scr3+scr4)/4,1)<0.25Then0 WhenMod((scr1+scr2+scr3+scr4)/4,1)>=0.25andmod((scr1+scr2+scr3+scr4)/4,1)<0.75then0.5whenmod((scr1+scr2+scr3+scr4)/4,1 )>=0.75then1endasieltscorefromielts_tian;-----------------------------数据库创建函数------------------------------------------CreateReplaceFunctionCalculation_uUtian(scorenumber)ReturnNumbers--定义变量记住;——整数jnumber——十进制resultnumber;--结果begin--程序体i:=trunc(分数);——数据库中的作业:=J:=mod(分数1);如果j<0.25,则结果:=i+0;elsifj>=0.25andj<0.75thenresult:=i+0.5;elsifj>=0.75thenresult:=i+1;endif;返回结果;结束;/——使生效showerrors--------------检查错误语法----------------用你自己的函数替换复杂的代码--------------------选择名称、sCR1、scr2、scr3、scr4、(sCR1+scr2+scr3+scr4)/4asagv、计算_Utian((sCR1+scr2+scr3+scr4)/4)AsieltsCorefromielts_Utian;selectename,salary,bonusfromemp_tianorderbybonus;----------------------分别提薪---------------------方法一selectename,job,salary,当“职员”时的案例工作NVL(工资,0)*1.05when'programmer'thennvl(salary,0)*1.1when'analyst'thennvl(salary,0)*1.15elsenv l(salary,0)从Emp_u_u_u_u_u_u_u_u_u_u_u_;tian获得新的薪水;----------------------分别提薪---------------------方法二selectename,job,salary,casewwhenjob='clerk'thennvl(工资0)*1.05whenjob='programmer'thennvl(salary,0)*1.1whenjob='analyst'thennvl(salary,0)*1. 15elsenvl(salary,0)。

Oracle课堂笔记

Oracle课堂笔记

Oracle课堂笔记2009-10-21-------2009-11-一、oracle 10 g 的安装与卸载1、oracle 10g的卸载Oracle 在windows下安装比较简单但卸载比较复杂,因为使用oracle的卸载工具oracle universal installer(OUI)无法完全卸载干净,主要涉及到修改注册表的,所以卸载步骤如下:(1)打开windows注册表:regedit(2)删除注册表中HKEY_LOCAL_MACHINE\SOFTWARE有关oracle的选项(3)删除注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services(4)删除注册表中有关oracle的事件日志HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application(5)删除oracle环境变量(6)删除oracle菜单,将“开始\程序”位置下所以带有oracle字样的目录删除;(7)删除windows安装目录中“program file\oracle”目录(8)重启windows系统(9)删除原先安装的oracle主目录至此,数据库环境已清除,可以重新安装oracle的其他产品二、oracle10g安装安装时系统默认提供四个特权帐户(sys,system,sysman,dbsnmp)Sys:change_on_installSystem:managerSysman:Dbsnmp:********************************************************听课笔记:Oracle sql 语句:Lsnrctl stop 关闭oracle监听Lsnrctl start 启动oracle 监听Sqlplus /nolog 开启sqlplus 或在运行内输入:sqlpluswConn system/manager 以system帐号登录Conn scott/tiger 以scott帐号登录Discon 关闭连接**********************************************************二、oracle的体系结构Oracle服务器是一种对象关系型数据库管理系统(ORDBMS);它提供了一种开放的体系结构,并且提供了许多功能强大的管理工具(OEM,DBCA,SQLPlus等),通过这些工具可以很方便的完成对数据库的各种操作。

Oracle基础知识学习笔记(自己整理的)

Oracle基础知识学习笔记(自己整理的)

基本概念:数据:描述事物的符号;数据库:数据存放的地方,数据库是由数据和数据库对象组成的;数据库管理系统(DBMS):用于管理数据的计算机软件,使用户能方便的定义和操纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和数据库恢复。

关系数据库(RDB):基于关系模型的数据库。

ORACLE数据库的体系结构是由一个实例和若干个数据库文件组成。

SQL语句分为:数据定义语句(DDL):create、drop、alter、truncate(不能回滚)数据操作语句(DML):insert、select、update、delete、merge数据控制语句(DCL):grant、revoke事物控制语句:commit、rollback、savepointORACLE数据库的核心组件:数据字典(DD)动态性能表(DPT)触发器PL/SQL包用户与角色:角色是一些权限的集合,分为dba、connect、resource、exp_full_database、imp_full_database。

用户分为sys、system。

用户权限包括两种:是指执行某一SQL语句或访问另一用户对象的权限。

它分为系统权限和对象权限。

(Dba_roles/dba_roles_privs/dba_sys_privs/dba_tab_pri vs/dba_col_privs/role_role_privs/role_sys_privs/role_ta b_privs)创建用户:Create user username identified by password;修改用户:Alter user username identified by newpassword; 创建角色:Create role rolename identified by password;修改角色:Alter role rolename identified by new password; ORACLE数据库的物理结构:1.数据文件:用于存放所有的数据库数据,若干个数据文件组成表空间;它包括系统数据(数据字典)、用户数据(表、索引、簇等)、undo数据等。

Oracle笔记

Oracle笔记

2.数据库应用系统 (5)3.数据库管理员(DBA) (5)4.数据库系统 (5)第二章数据库操作工具 (6)启动数据库服务: (6)1.使用sqlplus工具操作数据库 (6)(1)启动sqlplus (6)(2)配置sqlplus (6)(3)输出sql语句 (6)2.PL/SQL Developer工具 (7)3.sql语句概要 (7)(1)sql语句分类 (7)(2)sql语句的书写规则 (7)第三章用户管理 (8)1.用户类型与权限 (8)2.用户管理语句 (8)创建:create user 用户名identified by 密码 (8)修改:alter user 用户名identified by 密码; (8)alter user 用户名account lock/unlock; (8)查询:show user; //显示当前用户名 (8)登录:conn scott/scott; (8)3.用户权限控制 (8)(1)权限分类: (8)(2)权限管理: (9)grant XX to user01 (9)①赋予系统权限: (9)登录(create session)、创建用户(create user)、 (9)创建表(create table)、使用表空间(unlimited tablespace) (9)②赋予对象权限: (9)查询表权限(select on emp/select any table)、插入权限(insert on)、所有权限(all on) (9)③赋予传递权限: grant XX to user01 withgrant(对象权限)/admin(系统权限) option; (9)④查询权限: (9)⑤收回权限: (9)4.用户角色控制 (10)(1)创建角色 (10)(2)对角色赋权 (10)(3)从角色收回权限 (10)(4)把角色赋予用户 (10)(5)控制角色 (10)5.用户口令控制 (11)(1)创建环境文件并指定口令管理语句 (11)(2)将环境文件指定用户 (11)(3)修改环境文件中的口令管理语句 (11)2.数字 (12)3.日期类型 (12)4.二进制 (13)第六章表的控制 (13)1.表级控制 (13)(1)创建表 (13)(2)查看表结构 (14)(3)重命名表 (14)(4)复制表 (14)(5)删除表 (14)2.表结构控制 (14)(1)增加列 (14)(2)修改列 (15)(3)删除列 (15)3.表数据控制 (15)(1)增 (15)(2)删 (15)(3)改 (15)(4)查 (16)(8)多表查询 (18)(9)子查询 (19)(10)多表连接后显示 (21)(11)分页显示 (22)4.事务(insert/update/delete) (23)5.约束 (23)[1]创建约束 (23)[2]删除约束 (24)第七章函数 (24)1.单行函数: (24)(1)字符函数 (25)(2)数字函数 (26)(3)转换函数 (26)(4)日期函数 (27)(5)其他函数 (27)2.多行函数(统计函数) (27)3.表达式 (28)(1)case---when--then--else---end (28)(2)decode (28)4.分组函数: (29)5.自定义函数 (29)(1)创建自定义函数 (29)(2)调用自定义函数 (29)第八章PL/SQL (30)2.基础语法 (30)(1)声明变量:变量名类型[:=初值]; (30)(2)声明常量: (31)(3)变量命令规则: (31)(4)从表中查询数据给变量赋值: (31)(5)在plsql中执行sql语句 (31)3.数据类型 (32)(1)引用类型:%type (32)(2)记录类型 (32)(3).索引类型(关联数组) (33)(4)变长数组 (34)10.if语句 (34)11.case语句 (35)12.loop循环 (36)13.while loop循环 (37)14.for loop循环 (37)15.游标 (38)[1]静态游标 (38)①定义游标:cursor cur_emp is select * fromemp; (38)③使用游标 (38)a.for循环游标 (38)for v_emp in cur_emp (38)loop (38)dbms_output.put_line(v_emp.empno); (38)end loop; (38)// for循环游标不需要open、fetch和close语句,以及%FOUND属性检测是否到最后一条记录。

Oracle随堂笔记0406

Oracle随堂笔记0406

知识点四:多表查询emp dept分为4种1、等连接2、外连接3、自连接4、子查询3-1、等连接问题:显示员工姓名及所在部门的名称分析:姓名-emp.ename部门名称-dept.dname3-2、外连接问题:查询所有部门名称和对应的员工姓名,若该部门没有员工,只显示部门名称分析:部门名称dept.dname员工姓名emp.ename3-3、自连接问题:显示员工姓名及其上级员工的姓名分析:员工姓名emp.ename3-4、子查询问题:查询工资高于公司平均工资的所有员工分析:公司的平均工资补充:Oracle数据类型-合理划分空间1.字符类型Char-固定长度-1~2000个字节varchar和varchar2-可变长度-1~4000个字符long 长字符类型2GB2.数值类型Integer-整型类型Number(长度,精度)Number(4,1)-999.9~999.9Number(2) -99~993.日期类型date一般日期类型-显示到秒timestamp 日期时间-精确到秒后8位4.二进制类型-音乐,图片和文件LOB 1~2000字节VLOB 1~4000字节5.大对象类型CLOB 字符大对象类型4GBBLOB 二进制大对象类型2GBFLOB 文件大对象类型4GBOracle的数据库对象七大对象:用户、表、约束、序列、视图、同义词和索引知识点二:表–table -- 维护使用sql语句完成数据存储知识点三:约束– constraint –数据完整性和一致性大体分类:实体完整性-- 减少数据冗余-- 主键约束域完整性-- 数据的准确性-- check约束引用完整性-- 数据的一致性-- 外键约束Oracle约束对象5大分类:主键(primary key)、非空(not null)、唯一性(unique)、检查(check)、外键(foreign key)创建约束的两种方式:create table添加约束、alter table 添加约束注意:如果报错ORA-01950: 对表空间 'USERS' 无权限步骤一:conn system/123456步骤二:alter user zhangsan0323 quota unlimited on users;总结:添加约束【主键、唯一、check、foreign key】Alter table 表名add [constraint 自定义约束名]primary key(段名) |unique(段名) |check(…….|段名between 0 and 100 | 段名in(‘男’,’女’))foreign key(段名) references 主键表名(主键段)添加约束【非空、缺省】Altert table 表名modify (列名非空| 缺省)注意:select * from user_constraints; select * from user_cols_cons知识点四:序列(sequence)来实现字段的自增长特性dba sqlserver identified mysql auto_increment语法:create sequence 序列名seq_描述start with 起始值10increment by 步长 3maxvalue 最大值20知识点五:视图view - 简化查询、提高安全性语法: create or replace view v_名as复杂的select语句查询使用:select * from v_名【视图定义名称】where group by having order by知识点六:同义词(synonym)对象table的别名语法:create [public] synonym 名for对象知识点七:索引(index)加快查询速度,择优选择语法:create index idx_名on表(列1,列2)分类:单列索引:一个列。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

●Oracle 复杂表查询
⏹数据分组:-max,min,avg,sum,count
?如何显示所有员工中最高工资和最低工资?
select max(sal) from emp ; (有多个结果也只显示一个)
select min(sal) from emp ;
select avg(sal) from emp ; (有空值null则不参与运算)
select sum(sal)/count(*) from emp ; (count计算行数)
?统计有多少员工?
select count(*) from emp ;(字段亦可,空值不参与运算)
?显示工资最高的员工的名字和工作岗位?
(我们可以使用子查询来完成1.先查询最大工资是多少2.查找谁的工资是最大工资)
select ename , job from emp where sal = (select max(sal) from emp) ; (SQL语句默认从右往左执行)
?显示工资高于平均工资的员工信息?
select ename , job from emp where sal > (select avg(sal) from emp) ;
⏹group by和having子句:
group by对结果进行分组统计,
having进行限制(过滤)分组显示结果,通常与group by 同时
出现。

?如何显示每个部门的平均工资和最高工资?
select avg(sal),max(sal),deptno from emp group by deptno ;
?先是每个部门每个岗位的平均工资和最低工资?
select avg(sal),max(sal) ,deptno ,job from emp group by
deptno,job order by deptno ;
?显示部门平均工资低于2000的部门和平均工资?
select avg(sal),deptno from emp group by deptno having
avg(sal)<2000 ;(having不支持别名)
●注意事项:
⏹ 1.分组函数(avg)只能出现在选择列表、having、order by
子句中。

⏹ 2.如果select中同时出现,顺序是:group by、having、
order by,顺序不能出错。

⏹ 3.在选择列中,如果有列,表达式,分组函数,那么这些
列和表达式必须有一个出现在group by中,否则会出错。

多表查询:在实际开发中不可避免存在对两张或多张表的复杂查询。

1.我们看看多表查询的原理:
select * from emp,dept ;
2.如何实现多表查询:
select emp.ename,emp.sal,dept.dname from emp,dept
where emp.deptno=dept.deptno ;
3.如何避免笛卡尔积:
多表查询的条件是至少不能少于表的个数-1。

4.如何显示部门号为10的部门名、员工名和工资:
select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno and emp.deptno=10 ;
注意:我们建议大家在进行多表查询的时候使用别名。

select t1.ename,t1.sal,t2.dname from emp t1 ,dept t2 where t1.deptno=t2.deptno and t1.deptno=10;
自连接:
显示FORD的上级:select mgr from emp where ename='FORD' ;
显示FORD上级的信息:select * from emp where empno = (select mgr from emp where ename='FORD' );
显示各员工的姓名和他的上级领导的姓名:select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno ;
把worker的人员全部列出:select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno (+) ;
其中,加号是外连接。

相关文档
最新文档