韩顺平oracle笔记

合集下载

oracle教程从入门到精通(精编文档).doc

oracle教程从入门到精通(精编文档).doc

【最新整理,下载后即可编辑】韩顺平—玩转oracle视频教程笔记一:Oracle认证,与其它数据库比较,安装Oracle安装会自动的生成sys用户和system用户:(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install(2)system用户是管理操作员,权限也很大。

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

二:Oracle的基本使用--基本命令sql*plus的常用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper2.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笔记1

韩顺平Oracle笔记1


--例子:如果Scott用户把访问表EMP的权限授予用户xiaoming,并允许它传递这个权限, 用户xiaoming把这个权限传递给了用户xiaohong, 所以现在无论是xiaoming或者是 xiaohong都可以访问scott用户的EMP表,但是当Scott用户收回了用户xiaoming的这个权 限之后,无论是xiaoming或者是xiaohong都没有办法在访问Scott用户的EMP表
• 条件是:is null • 条件是:is not null
删除数据
Oracle表管理
• .删除数据: • --delete from 表名;删除所有记录,但是表格的结构仍然存
在,写日志,可以恢复,速度慢 • 在删除之前,设置savepoint 点名—>删除—>rollback to 点名; 就可以 恢复
Oracle表名和列的命名规则、Oracle支持的数据类型
Oracle表管理
• *Oracle表名和列的命名规则
• • • • . . . . 必须以字母开头 长度不能超过30个字符 不能使用Oracle的保留字 只能使用如下字符A-Z、a-z、0-9、$、#等
• *Oracle支持的数据类型 • .字符型
• •
数字型、日期类型、图片类型
Oracle表管理
• .数字型
• • • --number 范围 10的-38次方到-10的38次方可以表示整数,也可以 表示小数。 --number(5,2) 表示一个小数有5为有效数字,2位小数,范围999.99到999.99 --number(5) u表示一个无谓整数,范围-99999到99999
权限分为、角色分为、数据库中的重要角色、对象权限
Oracle用户管理

OCM学习笔记

OCM学习笔记

最近在看韩顺平老师讲解的“玩转oracle”视频,在学习的过程中觉得还是有必要将一些知识点整理出来以期后期记忆跟不上时光变迁时回头做一个简单地回顾。

所以在记笔记的过程中可能会显得有一些杂乱,还请各位看官如果无意间闯入本文,能够多多包含。

(温馨提示:个人认为韩顺平老师的授课视频适合每一位IT人员去观看和琢磨,风趣幽默、浅显易懂,擅长化繁为简,对提升自我还是大有裨益的)1)数据库一般分为小型数据库(access,foxbase)、中型数据库(mysql,sql server,informix)和大型数据库(oracle,db2,sybase)。

我们在考虑选用哪种数据库时,通常需要综合考虑以下三个方面的因素:①负载量大小,即用户使用数量的多少;②成本,即企业或者是个人愿意投入的成本;③安全性。

一般的,如果负载在100人内,成本在千元以内,对安全性要求不高时可以选用小型数据库。

而当需要处理海量(千万级)数据成本在万元以上对安全性要求较苛刻时,则考虑使用大型数据库,且目前大型数据库的综合评分排名顺序为:SYBASE 2)oracle认证分三层,OCA->oracle初级认证;OCP->oracel专家级认证;OCM->oracle大师认证。

通常,我们如果能让自己通过OCP认证就不错了哦。

3)Daemon Tools是一款虚拟光驱的工具,安装oracle镜像文件的时候可能会使用到它。

如果不会使用又需要使用,请自己度娘。

4)oracle安装会自动生成sys用户和system用户,其中sys用户是超级用户,具有最高权限,拥有sysdba的角色,拥有创建新的数据库create database的权限。

system用户是管理操作员,权限也是很大的,具有sysoper系统操作员的角色,没有创建新的数据库的权限,其他基本等同于sys用户。

一般来讲,对数据库进行维护,使用system用户登录即可。

5)在sql/plus中切换登录用户的口令:conn username/password@全局数据库名 as sysdba/sysoper;断开连接的口令:disc;修改密码的口令:passw;运行脚本的口令:start 脚本所在的目录+文件名;保存sql plus中的内容到一个文件中去的口令:spool 文件地址;spool off; 设置每行显示多少个字符的口令:set linesize 100,设置每行显示100个字符;设置每页显示多少条数据的口令:set pagesize 10,设置每页显示10条数据;查看表结构的口令:desc +表名;清屏命令:clear;6)当需要删除一个用户,而这个用户又拥有属于自己的表时,则删除用户DROP USER时,如果使用cascade关键字,会将与这个用户相关联的表一并删除。

racle学习笔记总计

racle学习笔记总计

培训第二天(上午)学习视频《韩顺平oracle视频》学习中遇到的想法:1.sql server 数据——》oracle(编程是实现java,先读在插入)一,oracle的安装1.oracle数据库自带用户 sys(默认密码:manager)(最好权限,可以create database),system(默认密码:change_on_install)。

二,oracle的启动1.启动一个oracle实例,即启动一个单个数据库。

2.管理——服务 oracleservice实例名(一个实例代表一个数据库)+oracle……listener三,oracle的卸载1.卸载需要动注册表(可观看视频)四,sql plus常用命令1.显示用户show user2.链接命令conn 用户名/密码disc3.修改密码passw4.运行一个脚本start和@ 如:start d:\aa.sql || @ d:\aa.sql5.编辑一个脚本edit D:\aa.sql6.spool 该命令可以将sqlplus屏幕上的内容输出到指定的文件中1. spool d:\b.sql2. select * from3. spool off7.交互 &8 set linesize, set pagesize(分页显示)9.desc 表名(查看表结构)五,oracle常用工具1.sqlplus,sqlplusw,pl/sql developer(第三方独立开发),oracle enterprise manager(图像化界面)六,用户管理1.create user 名 identified by 密(密码不能以数字开头)(新创建的用户是没有任何权限的,甚至是没有登录权限 grant, revoke)2.password 名3.drop user 名(如果用户有表,则加参数cascade)培训第二天(下午)(自己动手遇到无法登陆oracle)(gaotuan:gaotuan、system:G6*******cxz)一,用户授权(对象权限(select insert update delete all create index),系统权限)1.grant connect to 名(登录)2.grant resource to 名(创建数据库对象)3.sqlplus "/as sysdba"(sys登陆)4.alter user scott account unlock;(解锁)二,角色connect ,dba对象权限:with grant option系统权限:with admin option收回父权限时下边的用户也没有相应得权限三,表空间一,表空间作用: 1.控制数据库占用的磁盘空间。

韩顺平数据结构和算法笔记

韩顺平数据结构和算法笔记

韩顺平数据结构和算法笔记韩顺平的数据结构和算法笔记包括以下内容:1. 线性结构:线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。

线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。

2. 稀疏数组:稀疏数组是一种只存储非零元素的数据结构,可以节省存储空间并加快计算速度。

3. 队列:队列是一种特殊的线性结构,其操作遵循先进先出(FIFO)的原则。

队列的实现包括循环队列(环形队列)等。

4. 链表:链表是一种由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

单向链表和双向链表是链表的两种常见形式。

5. 单向环形链表约瑟夫问题:约瑟夫问题是一个著名的数学和计算机科学问题,可以通过使用单向环形链表来解决。

6. 栈:栈是一种后进先出(LIFO)的数据结构,可以用于实现各种算法,如深度优先搜索、括号匹配等。

7. 递归:递归是一种算法的实现方式,通过将大问题分解为小问题来解决。

递归可以用于解决各种实际问题,如迷宫问题、八皇后问题等。

8. 排序:排序是将一组数据按照某种顺序排列的过程。

常用的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序等。

9. 查找算法:查找算法是在数据结构中查找某个元素的过程。

常用的查找算法包括二分查找、插值查找、斐波那契查找等。

10. 哈希表:哈希表是一种通过散列技术实现的数据结构,可以用于快速查找和插入数据。

11. 树:树是一种非线性的数据结构,由节点和边组成。

二叉树是树的一种特殊形式,可以用于实现各种算法,如堆排序、哈夫曼树和哈夫曼编码等。

平衡二叉树和多路查找树也是树的一种形式,可以用于解决各种实际问题。

12. 图:图是一种由节点和边组成的数据结构,可以用于表示各种实际问题,如社交网络、交通网络等。

图的深度优先遍历和广度优先遍历是常用的遍历算法。

以上是韩顺平数据结构和算法笔记的主要内容,这些知识是计算机科学和软件开发的基础,对于学习和从事计算机相关工作的人来说非常重要。

韩顺平oracle笔记.

韩顺平oracle笔记.

韩顺平oracle学习笔记第0讲:如何学习oracle一、如何学习oracleOracle目前最流行的数据库之一,功能强大,性能卓越。

学习oracle需要具备一定基础:1.学习过一门编程语言(如:java ,c)2.最好学习过一门别的数据库(sql server,mysql , access)教程推荐:oracle使用教程,深入浅出oracle记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解Oracle基础部分:oracle基础使用; oracle用户管理; oracle表管理Oracle高级部分:oracle表的查询; oracle的函数; oracle数据库管理;oracle 的权角色; pl/sql 编程;索引,约束和事物。

期望目标:1 学会安装、启动、卸载oracle2 使用sql *plus工具3 掌握oracle用户管理4 学会在oracle中编写简单的select语句第1讲:基础语法内容介绍:1.为什么学习oracle2.介绍oracle及其公司的背景3.学会安装、启动、卸载oracle4.oracle开发工具5.Sql*plus的常用命令6.oracle用户管理一、主流数据库包括:●微软:sql server 和 access●瑞典:mysql AB公司●IBM公司:DB2●美国sybase公司:sybase●IBM公司:infromix●美国oracle公司:oracle(目前最流行的之一)二、oracle安装,启动及卸载1.系统要求:操作系统最好为windows2000内存最好在256M以上硬盘空间需要2G以上2.oracle安装会自动的生成sys和system两个用户说明:○1Sys用户是超级用户,具有最高权限,具有sysdba角色,create database 的权限,默认密码是manager○2System 用户是管理操作员,权限也很大,具有sysoper角色,没有create database权限,默认密码是 change_on_install○3一般讲,对数据库维护,使用system用户登录就可以了3.启动oracle右键单击我的电脑->服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener4.卸载oracle1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭2、开始->程序->Oracle - oracle的版本号,我的是10ghome->Oracle Installation Products->Universal Installer 卸载oracle3、进注册表,regedit,删除选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。

韩顺平玩转ORACLE

韩顺平玩转ORACLE

目录1.Oracle 认证,与其它数据库比较,安装 (4)2.Oracle 的基本使用--基本命令 (7)2.1 连接命令 (7)2.1.1 conn[ect] (7)2.1.2 disc[onnect] (7)2.1.3 psssw[ord] (7)2.1.4 show user (7)2.1.5 exit (7)2.2文件操作命令 (7)2.2.1 start 和@ (7)2.2.2 edit (7)2.2.3 spool (8)2.3交互式命令 (8)2.3.1 & (8)2.3.2 edit (8)2.3.3 spool (8)2.4显示和设置环境变量 (9)2.4.1 linesize (9)2.4.2 pagesize (9)3.oracle 用户管理 (10)3.1 oracle 用户的管理 (10)3.1.1创建用户 (10)3.1.2 给用户修改密码 (10)3.1.3 删除用户 (10)3.1.4用户管理的综合案例 (10)3.2 使用profile 管理用户口令 (12)3.2.1.账户锁定 (12)3.2.2.给账户(用户)解锁 (13)3.2.3.终止口令 (13)3.3口令历史 (13)3.4 删除profile (13)4.oracle 表的管理(数据类型,表创建删除,数据CRUD 操作) (14)4.1 oracle 的表的管理 (14)4.1.1表名和列的命名规则 (14)4.1.2 oracle 支持的数据类型 (14)4.2怎样创建表 (15)4.3添加数据 (15)4.4修改数据 (16)4.5删除数据 (16)5.oracle 表查询 (16)5.1 oracle 表基本查询 (16)5.2简单的查询语句 (17)5.3 oracle 表复杂查询 (18)5.3多表查询 (19)5.4子查询 (20)5.5 分页查询 (21)5.5.1.根据rowid 来分 (22)5.5.2.按分析函数来分 (22)5.5.3按rownum 来分 (22)5.6用查询结果创建新表 (23)5.7合并查询 (23)6 创建数据库 (23)7. java 操作oracle (24)7.1 java 连接oracle (24)7.2在oracle 中操作数据 (28)8.oracle 中事务处理 (29)8.1什么是事务 (29)8.2提交事务 (29)8.3回退事务 (29)8.4 java 程序中如何使用事务 (29)9.oracle 的函数 (32)9.1 sql 函数的使用 (32)9.1.1字符函数 (32)9.1.2数学函数 (33)9.1.3日期函数 (34)9.1.4转换函数 (35)9.1.5系统函数 (36)10.数据库管理,表的逻辑备份与恢复 (37)10.1数据库管理员 (37)10.2数据库(表)的逻辑备份与恢复 (39)10.3导出 (39)10.3.1导出表 (39)10.3.2导出方案 (39)10.3.3导出数据库 (40)10.4导入 (40)10.4.1导入表 (40)10.4.2导入方案 (40)10.4.3导入数据库 (41)11.数据字典和动态性能视图 (41)11.1数据字典 (41)11.2 用户名,权限,角色 (41)11.3动态性能视图 (44)12.数据库管理-- 管理表空间和数据文件 (45)12.1数据库的逻辑结构 (45)12.2表空间 (45)12.2.1建立表空间 (45)12.2.2 改变表空间的状态 (46)12.2.3删除表空间 (46)12.2.4扩展表空间 (46)12.2.5移动数据文件 (47)12.2.6 显示表空间信息 (47)12.2.7表空间小结 (47)12.2.8其它表空间 (48)13.约束 (48)13.1维护数据的完整性 (48)13.2约束 (48)13.2.1使用 (48)13.2.2维护 (49)13.2.3删除约束 (50)13.2.4显示约束信息 (50)14.Oracle 索引、权限 (51)14.1创建索引 (51)14.2 显示索引信息 (52)14.3 管理权限和角色 (52)14.3.1 系统权限 (52)14.3.2 对象权限 (53)15.角色 (55)15.1预定义角色 (56)15.2自定义角色 (56)15.3角色授权 (56)15.4删除角色 (57)15.5显示角色信息 (58)16.PL/SQL 块的结构和实例 (59)17.pl/sql 分类-- 过程,函数,包,触发器 (64)17.1 过程 (64)17.2 函数 (65)17.3包 (66)17.3触发器 (67)18.定义并使用变量,复合类型 (68)18.1定义并使用变量 (68)18.2复合变量(composite) (69)19.pl/sql 的进阶--控制结构(分支,循环,控制) (71)19.1 pl/sql 的进阶--控制结构 (72)19.1.1条件分支语句 (72)20.PL/SQL 分页 (75)21.例外处理 (85)21.1处理预定义例外 (86)21.2非预定义例外 (89)22.oracle 的视图 (92)1.Oracle 认证,与其它数据库比较,安装Oracle 安装会自动的生成sys 用户和system 用户:(1)sys 用户是超级用户,具有最高权限,具有sysdba 角色,有create database的权限,该用户默认的密码是change_on_install(2)system 用户是管理操作员,权限也很大。

韩顺平老师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.&说明:可以替代变量,而该变量在执行时,需要用户输入。

韩顺平数据结构和算法笔记

韩顺平数据结构和算法笔记

韩顺平数据结构和算法笔记摘要:一、数据结构和算法的概念- 数据结构:数据在计算机中的组织方式,包括数据的存储方式、访问方式和操作方式等。

- 算法:解决问题的方法或过程,它是一组逻辑或数学规则,用于解决特定问题或完成特定任务。

二、常见的数据结构- 数组:一组同类型的数据元素,以编号方式存储,可以通过下标访问。

- 链表:由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

- 栈:后进先出(LIFO)的数据结构,可以在顶部添加或删除元素。

- 队列:先进先出(FIFO)的数据结构,可以在队尾添加元素,从队头删除元素。

- 树:由一个根节点和多个子节点组成,节点之间有层次关系。

- 图:由顶点和边组成,可以表示实体之间的关系。

三、算法的基本分类- 排序算法:将一组数据按照特定顺序进行排列的算法,如冒泡排序、快速排序等。

- 查找算法:在数据结构中查找特定元素或满足特定条件的元素,如二分查找、哈希查找等。

- 图算法:处理图结构数据的算法,如最短路径算法、最小生成树算法等。

- 字符串算法:处理字符串问题的算法,如字符串匹配、字符串查找等。

四、算法复杂度分析- 时间复杂度:表示算法执行的速度,通常用大O 符号(O)表示。

- 空间复杂度:表示算法占用的空间,通常也用大O 符号(O)表示。

正文:数据结构和算法是计算机科学中的基本概念,它们在解决计算问题和优化计算机程序的性能方面具有重要作用。

数据结构指数据在计算机中的组织方式,包括数据的存储方式、访问方式和操作方式等。

常见的数据结构有数组、链表、栈、队列、树和图等。

不同的数据结构适用于不同类型的问题,选择合适的数据结构可以提高程序的效率。

算法则是解决问题的方法或过程,它是一组逻辑或数学规则,用于解决特定问题或完成特定任务。

常见的数据结构包括:1.数组:一组同类型的数据元素,以编号方式存储,可以通过下标访问。

数组适合存储元素个数固定的数据。

2.链表:由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

韩顺平java从入门到精通笔记整理1

韩顺平java从入门到精通笔记整理1

韩顺平java从入门到精通笔记整理1 2011年5月5日星期四第0讲开山篇1. Java se J2se 桌面Java ee J2ee 网络Java me J2me 手机2. SQL server Mysql Oracle3.学习软件编程的注意事项1.高效愉快学习2.先建立一个整体框架然后细节3.用什么再学习什么4.先知道how,再知道why5.软件编程是一门“做中学”学科,做了才会6.适当囫囵吞枣7.琢磨别人怎么做,不是我认为这么做第1讲内容介绍.项目演示.原理剖析1. 课程包括:java面向对象编程,java图形界面,java数据库编程,java文件i/o流,java网络编程,java的多线程2. Java历史:1990 sun 启动绿色计划1992 创建 oak语言—> java1994 gosling 参加硅谷大会演示java功能震惊世界1995 sun 正式发布java第一个版本,目前最新的是jdk7.03. java开发工具:记事本,jcreator,jbuilder,netbean,eclipse4. jdk包括:jre(java运行环境)java的工具:编译器javac.exe解释执行器java.exejava的类库:3600多个,常用的150多个5. 第一个程序://作者:阿贵//功能:显示“HelloWorld”//日期:2011.5.5//public:表示类是公共的,一个文件中只有一个public类//class:表示这个是一个类//HelloWorld:类名(公共类的类名,必须和文件名一样)public class HelloWorld{//一个主函数,程序的入口public static void main (String args[]){//执行语句System.out.println("helloWorld!");}}6. Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行第2讲变量.数据类型1. 在java里面int占4个字节,long占8个字节2. Java基本数据类型:整数:(byte一个字节:-128---127 int四个字节:-2147483648---+2147483647short两个字节:-32768---+32767 long八个字节: )小数(浮点): float double布尔:boolean字符:char(两个字节,可以存放汉字, char test1 ='中';)引申到字符串(类)3. 在java中对char进行运算的时候,直接是当做ASCII码对应的整数4. 数据不能从高精度到低精度的转换 Byte<short<int<long<float<doublefloat a=3.4;是过不去的,在java中小数默认是double(双精度)的应该写成是float a=3.4f;不过可以强制转换:int a=(int)1.2; int b=(int)1.95. int a=1;int b=a+1.2; a先是往高精度转换,然后赋给b,就报错改成int a=1;doubleb=a+1.2; 或者 int a=1;float b=a+1.2f; 就解决了。

韩顺平玩转oracle10g实战教程第1天

韩顺平玩转oracle10g实战教程第1天

主讲 韩顺平
玩转oracle 10g实战教程
oracle管理工具的介绍(3)
主讲 韩顺平
概述: pl/sql developer 属于第三方软件,主要用于开发,测试,优化 oracle pl/sql 的存储过程比如: 触发器,此软件oracle不带,需要单独安装。
玩转oracle 10g实战教程
玩转oracle 10g实战教程
主讲 韩顺平
引言 解决之道

解决之道-文件、数据库 我们刚学习过文件,大家可能回答用文件就可以保存数据嘛! 没有错,可以如果用文件保存数据存在几个缺点: (1)文件的安全性问题 (2)文件不利于查询和对数据的管理 (3)文件不利于存放海量数据 (4)文件在程序中控制不方便
玩转oracle 10g实战教程
主讲 韩顺平
为什么选择oracle –需求量大
概述:从目前软件公司对数据库的需求看,oralce程序员的需求量是最 大的,这里有一些数据大家可以看看。
玩转oracle 10g实战教程
主讲 韩顺平
为什么选择oracle –待遇好
概述:通过oracle ocm认证参加工作的人, 一般月薪或年薪是多少? 我们看看别人怎么说?
玩转oracle 10g实战教程
主讲 韩顺平
主讲:韩顺平 email:hanshunping@
玩转oracle 10g实战教程
oracle 第1讲
0.引言 1.为什么要学习oracle 2.oracle的安装,启动及卸载 √ 3.介绍oracle及oracle公司的背景 4.oracle开发工具介绍 5.sql*plus的常用命令 √ 6.oracle用户的管理 √

玩转oracle 10g实战教程

[实用参考]Oracle教程从入门到精通

[实用参考]Oracle教程从入门到精通

韩顺平—玩转oracle视频教程笔记一:Oracle认证,与其它数据库比较,安装Oracle安装会自动的生成sPs用户和sPstem用户:(1)sPs用户是超级用户,具有最高权限,具有sPsdba角色,有createdatabase的权限,该用户默认的密码是change_on_install(2)sPstem用户是管理操作员,权限也很大。

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

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

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

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

selectGfromempwherejob='&job';2.edit说明:该命令可以编辑指定的sql脚本案例:SQL>editd:\a.sql3.spool说明:该命令可以将sqlGplus屏幕上的内容输出到指定文件中去。

韩顺平Oracle笔记5

韩顺平Oracle笔记5

Pl/sql编程——块的实例(一)
• 实例 :只包括执行部分的 实例1:只包括执行部分的pl/sql块 块 • set serveroutput on --打开输出选项 • begin • dbms_output.put_line('hello'); • end; • 相关说明:dbms_output是Oracle所提供 相关说明: 的包(类似Java的开发包),该包包含一些过 程,put_line就是dbms_output包的一个过程。
– 如果出现错误,使用show error 显示错误信息。 如果出现错误,使用 显示错误信息。
调用该pl/sql:第一种方式:exec 过程名(参数列表)、 第二种方式:call 过程名(参数列表) <2>pl/sql developer开发工具:pl/sql developer 工具适用于开发pl/sql块 的集成开发环境(ide),它是一个独立的产品,而不是Oracle的;一个附带产品。 举例:编写一个存储过程,改过程可以删除某表记录。
Pl/sql编程——块的实例(二)续
• 实例 续:在实例 的基础上,要求再显示工资。 实例2续 在实例2的基础上 要求再显示工资。 的基础上, • declare • v_ename varchar2(5); • v_sal number(7,2); • begin • select ename,sal into v_ename,v_sal from emp where empno=&员工编号; • dbms_output.put_line(v_ename||'的工资 是:'||v_sal); • end; • /
• pl/sql基础 • 介绍:开发人员使用pl/sql编写应用模块时,不 仅需要掌握SQL语言的编写方法,还要掌握pl/sql语 句及语法规则。pl/sql变成可以使用变量和逻辑控制 语句,而可以编写非常有用的功能模块。比如:分 页存储过程模块、订单处理存储模块、转账存储过 程模块等等。而且如果使用pl/sql编程,我们可以轻 松地完成非常复杂的查询要求。 • pl/sql可以做什么? • 分类:块(编程)包括:过程(存储过程)、函数、 触发器、包。

韩顺平 oracle视频教程上课笔记

韩顺平 oracle视频教程上课笔记

一、oracle 常用sql plus 命令(1)conn[ect] 用户名/密码@网络[as sysdba /sysoper](2)一般情况下使用普通用户登录,除非需要更高权限时,在切换高级用户;(3)disc[onnect] 断开连接,又不退出当前窗口;(4)quit/exit 完全退出;(5)show user 显示当前用户;(6)管理员修改用户密码:alter user xxxx identified by yyyy;(7)Passw[ord]pass 用户名;给自己修改密码,不需要带用户名;给别的用户修改,需要带用户名;创建临时表空间create temporary tablespaceuser_temptempfile 'd:\user_temp.dbf'size 50mautoextend onnext 50m maxsize 1024mextent management local;创建表空间createtablespaceuser_tsdatafile 'd:\user_ts.dbf'size 50mautoextend onnext 50m maxsize 1024mextent management local;创建用户create user test38 identified by test38default tablespaceuser_tstemporary tablespaceuser_tempquota 5m on user_ts;给用户赋予权力grantdba to test38;给scott用户解锁alter user scott account unlock;用system 用户给scott修改密码Alter user scott identified by tiger;不常用的命令:linesize一行能显示多少个字符就换行了默认就只有80字符,所以会出现一个记录一行没有显示完全就换行了。

oracle11g教程从入门到精通

oracle11g教程从入门到精通

韩顺平—玩转oracle视频教程笔记之欧侯瑞魂创作创作时间:二零二一年六月三十日一:Oracle认证, 与其它数据库比力, 装置Oracle装置会自动的生成sys用户和system用户:(1)sys用户是超级用户, 具有最高权限, 具有sysdba角色,有create database的权限, 该用户默认的密码是change_on_install(2)system用户是管理把持员, 权限也很年夜.具有sysoper角色, 没有create database的权限, 默认的密码是manager (3)一般讲, 对数据库维护, 使用system用户登录就可以拉也就是说sys和system这两个用户最年夜的区别是在于有没有create database的权限.二: Oracle的基本使用--基本命令sql*plus的经常使用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[assysdba/sysoper]当用特权用户身份连接时, 必需带上as sysdba或是as sysoper 2.disc[onnect]说明: 该命令用来断开与以后数据库的连接3.psssw[ord]说明: 该命令用于修改用户的密码, 如果要想修改其它用户的密码, 需要用sys/system登录. 4.show user说明: 显示以后用户名说明: 该命令会断开与数据库的连接, 同时会退出sql*plus 文件把持命令1.start和@说明: 运行sql脚本案例: sql>@ d:\a.sql或是sql>start d:\a.sql ,这样会把d:\a.sql这个文件翻开说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去. 案例: sql>spool d:\b.sql 并输入 sql>spool off 交互式命令1.&说明:可以替代变量, 而该变量在执行时, 需要用户输入.select * from emp where job='&job';说明:该命令可以编纂指定的sql脚本案例:SQL>edit d:\a.sql说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去. spool d:\b.sql 并输入 spool off 显示和设置环境变量概述:可以用来控制输出的各种格式, set show如果希望永久的保管相关的设置, 可以去修改glogin.sql脚本说明:设置显示行的宽度, 默认是80个字符show linesizeset linesize 90说明:设置每页显示的行数目, 默认是14用法和linesize一样至于其它环境参数的使用也是年夜同小异三:oracle用户管理oracle用户的管理创立用户概述:在oracle中要创立一个新的用户使用create user语句, 一般是具有dba(数据库管理员)的权限才华使用. create user 用户名 identified by 密码; (oracle有个毛病, 密码必需以字母开头, 如果以字母开头, 它不会创立用户) 给用户修改密码概述:如果给自己修改密码可以直接使用 password 用户名如果给他人修改密码则需要具有dba 的权限, 或是拥有alter user的系统权限 SQL> alter user 用户名 identified by 新密码删除用户概述:一般以dba的身份去删除某个用户, 如果用其它用户去删除用户则需要具有drop user的权限. 比如 drop user 用户名【cascade】在删除用户时, 注意:如果要删除的用户, 已经创立了表, 那么就需要在删除的时候带一个参数cascade; 用户管理的综合案例概述:创立的新用户是没有任何权限的, 甚至连登岸的数据库的权限都没有, 需要为其指定相应的权限.给一个用户赋权限使用命令grant, 回收权限使用命令revoke. 为了给讲清楚用户的管理, 这里我给年夜家举一个案例. SQL> conn xiaoming/m12; ERROR: ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE. SQL> show user; USER 为"" SQL> conn system/p; 已连接. SQL> grant connect to xiaoming; 授权胜利. SQL> conn xiaoming/m12; //后面的为密码分开来输入.已连接. SQL> 注意:grant connect to xiaoming;在这里, 准确的讲, connect不是权限, 而是角色.. 看图:现在说下对象权限, 现在要做这么件事情: * 希望xiaoming用户可以去查询emp表 * 希望xiaoming用户可以去查询scott的emp表 grant select on emp to xiaoming * 希望xiaoming 用户可以去修改scott的emp表 grant update on emp to xiaoming * 希望xiaoming用户可以去修改/删除, 查询, 添加scott的emp表 grant all on emp to xiaoming * scott希望收回xiaoming对emp表的查询权限 revoke select on emp from xiaoming //对权限的维护. * 希望xiaoming用户可以去查询scott的emp表/还希望xiaoming可以把这个权限继续给他人. --如果是对象权限, 就加入 with grant option grant select on emp to xiaoming with grant option 我的把持过程: SQL> conn scott/tiger; 已连接. SQL> grant select on scott.emp to xiaoming with grant option; 授权胜利. SQL> conn system/p; 已连接. SQL> create user xiaohong identified by m123; 用户已创立. SQL> grant connect to xiaohong; 授权胜利. SQL> conn xiaoming/m12; 已连接. SQL> grant select on scott.emp to xiaohong; 授权胜利.--如果是系统权限. system给xiaoming权限时: grant connect to xiaoming with admin option问题:如果scott把xiaoming对emp表的查询权限回收, 那么xiaohong会怎样?谜底:被回收.下面是我的把持过程: SQL> conn scott/tiger; 已连接. SQL> revoke select on emp from xiaoming; 裁撤胜利. SQL> conn xiaohong/m123; 已连接. SQL> select * from scott.emp; select * from scott.emp 第 1 行呈现毛病: ORA-00942: 表或视图不存在结果显示:小红受到诛连了.使用profile管理用户口令概述:profile是口令限制, 资源限制的命令集合, 当建立数据库的, oracle会自动建立名称为default的profile.当建立用户没有指定profile选项, 那么oracle就会将default分配给用户. 概述:指定该账户(用户)登岸时最多可以输入密码的次数, 也可以指定用户锁定的时间(天)一般用dba的身份去执行该命令. 例子:指定scott这个用户最多只能检验考试3次登岸, 锁按时间为2天, 让我们看看怎么实现. 创立profile文件 SQL> create profile lock_account limit failed_login_attempts 3 password_lock_time 2; SQL> alter user scott profile lock_account; 2.给账户(用户)解锁SQL> alter user tea account unlock; 为了让用户按期修改密码可以使用终止口令的指令来完成, 同样这个命令也需要dba的身份来把持. 例子:给前面创立的用户tea创立一个profile文件, 要求该用户每隔10天要修改自己的登岸密码, 宽限期为2天.看看怎么做. SQL> create profile myprofile limitpassword_life_time 10 password_grace_time 2; SQL> alter user tea profile myprofile;口令历史概述:如果希望用户在修改密码时, 不能使用以前使用过的密码, 可使用口令历史, 这样oracle就会将口令修改的信息寄存到数据字典中, 这样当用户修改密码时, oracle就会对新旧密码进行比力, 当发现新旧密码一样时, 就提示用户重新输入密码. 例子: 1)建立profile SQL>create profilepassword_history limit password_life_time 10password_grace_time 2 password_reuse_time 10password_reuse_time //指定口令可重用时间即10天后就可以重用 2)分配给某个用户删除profile概述:当不需要某个profile文件时, 可以删除该文件. SQL> drop profile password_history 【casade】注意:文件删除后, 用这个文件去约束的那些用户通通也都被释放了.加了casade, 就会把级联的相关工具也给删除失落四:oracle表的管理(数据类型, 表创立删除, 数据CRUD把持) oracle的表的管理表名和列的命名规则•必需以字母开头•长度不能超越30个字符•不能使用oracle的保管字•只能使用如下字符 A-Z, a-z, 0-9, $,#等oracle支持的数据类型字符类char定长最年夜2000个字符. 例子:char(10) ‘小韩’前四个字符放‘小韩’, 后添6个空格补全如‘小韩’ varchar2(20)变长最年夜4000个字符. 例子:varchar2(10)‘小韩’ oracle分配四个字符.这样可以节省空间.clob(character large object) 字符型年夜对象最年夜4G char 查询的速度极快浪费空间, 查询比力多的数据用. varchar 节省空间数字型number范围 -10的38次方到 10的38次方可以暗示整数, 也可以暗示小数 number(5,2) 暗示一位小数有5位有效数, 2位小数范围:-999.99到999.99 number(5) 暗示一个5位整数范围99999到-99999日期类型 date 包括年月日和时分秒 oracle默认格式 1-1月-1999 timestamp 这是oracle9i对date数据类型的扩展.可以精确到毫秒. 图片blob 二进制数据可以寄存图片/声音 4G 一般来讲, 在真实项目中是不会把图片和声音真的往数据库里寄存, 一般寄存图片、视频的路径, 如果平安需要比力高的话, 则放入数据库. 怎样创立表建表--学生表 create table student ( ---表名 xh number(4), --学号 xm varchar2(20), --姓名 sex char(2), --性别 birthday date, --出身日期 sal number(7,2) --奖学金 );--班级表 CREATE TABLE class( classIdNUMBER(2), cName VARCHAR2(40));修改表添加一个字段SQL>ALTER TABLE student add (classId NUMBER(2)); 修改一个字段的长度 SQL>ALTER TABLE student MODIFY (xmVARCHAR2(30)); 修改字段的类型/或是名字(不能有数据)不建议做 SQL>ALTER TABLE student modify (xm CHAR(30)); 删除一个字段不建议做(删了之后, 顺序就变了.加就没问题, 应为是加在后面)SQL>ALTER TABLE student DROP COLUMN sal; 修改表的名字很少有这种需求 SQL>RENAME student TO stu; 删除表 SQL>DROP TABLE student; 添加数据所有字段都拔出数据INSERT INTO student VALUES ('A001','张三','男','01-5月-05', 10); oracle中默认的日期格式‘dd-mon-yy’ dd日子(天) mon 月份 yy 2位的年‘09-6月-99’ 1999年6月9日修改日期的默认格式(临时修改, 数据库重启后仍为默认;如要修改需要修改注册表) ALTER SESSION SETNLS_DATE_FORMAT ='yyyy-mm-dd'; 修改后, 可以用我们熟悉的格式添加日期类型: INSERT INTO student VALUES('A002','MIKE','男','1905-05-06', 10); 拔出部份字段INSERT INTO student(xh, xm, sex) VALUES ('A003','JOHN','女'); 拔出空值 INSERT INTO student(xh, xm, sex, birthday) VALUES ('A004','MARTIN','男', null); 问题来了, 如果你要查询student内外birthday为null的记录, 怎么写sql呢?毛病写法:select * from student where birthday = null; 正确写法:select * from student where birthday is null; 如果要查询birthday不为null,则应该这样写: select * from student where birthday is not null; 修改数据修改一个字段UPDATE student SET sex = '女' WHERE xh = 'A001'; 修改多个字段UPDATE student SET sex = '男', birthday = '1984-04-01' WHERE xh = 'A001'; 修改含有null值的数据不要用 =null 而是用 is null; SELECT * FROM student WHERE birthday IS null;删除数据DELETE FROM student; 删除所有记录, 表结构还在,写日志, 可以恢复的, 速度慢. Delete 的数据可以恢复. savepoint a; --创立保管点 DELETE FROM student; rollback to a; --恢复到保管点一个有经验的DBA, 在确保完成无误的情况下要按期创立还原点. DROP TABLE student; --删除表的结构和数据; delete from student WHERE xh = 'A001'; --删除一条记录; truncate TABLE student; --删除表中的所有记录, 表结构还在, 不写日志, 无法找回删除的记录, 速度快.五:oracle表查询(1)oracle表基本查询介绍在我们讲解的过程中我们利用scott用户存在的几张表(emp, dept)为年夜家演示如何使用select语句, select语句在软件编程中非常有用, 希望年夜家好好的掌握. emp 雇员表clerk 普员工 salesman 销售 manager 经理 analyst 分析师 president 总裁 mgr 上级的编号 hiredate 入职时间sal 月工资 comm 奖金 deptno 部份 dept部份表 deptno 部份编号 accounting 财政部 research 研发部 operations 业务部 loc 部份所在地址 salgrade 工资级别 grade 级别 losal 最低工资 hisal 最高工资简单的查询语句检查表结构DESC emp; 查询所有列SELECT * FROM dept; 切忌动不动就用select * SET TIMING ON; 翻开显示把持时间的开关, 在下面显示查询时间. CREATE TABLE users(userId VARCHAR2(10), uName VARCHAR2 (20), uPassw VARCHAR2(30)); INSERT INTO users VALUES('a0001','啊啊啊啊','aaaaaaaaaaaaaaaaaaaaaaa'); --从自己复制, 加年夜数据量年夜概几万行就可以了可以用来测试sql语句执行效率 INSERT INTO users(userId,UNAME,UPASSW) SELECT * FROM users; SELECT COUNT (*) FROM users;统计行数查询指定列SELECT ename, sal, job, deptno FROM emp; 如何取消重复行DISTINCT SELECT DISTINCT deptno, job FROM emp; 查询SMITH所在部份, 工作, 薪水 SELECT deptno,job,sal FROM emp WHERE ename = 'SMITH'; 注意:oracle对内容的年夜小写是区分的, 所以ename='SMITH'和ename='smith'是分歧的使用算术表达式nvl null 问题:如何显示每个雇员的年工资? SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm FROM emp; 使用列的别名SELECT ename "姓名", sal*12 AS "年收入" FROM emp; 如何处置null值使用nvl函数来处置如何连接字符串(||)SELECT ename || ' is a ' || job FROM emp; 使用where子句问题:如何显示工资高于3000的员工?SELECT * FROM emp WHERE sal > 3000; 问题:如何查找1982.1.1后入职的员工?SELECT ename,hiredate FROM emp WHERE hiredate >'1-1月-1982'; 问题:如何显示工资在2000到3000的员工? SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000; 如何使用like把持符 %:暗示0到多个字符 _:暗示任意单个字符问题:如何显示首字符为S的员工姓名和工资? SELECT ename,sal FROM emp WHERE ename like 'S%'; 如何显示第三个字符为年夜写O的所有员工的姓名和工资? SELECT ename,sal FROM emp WHERE ename like '__O%'; 在where条件中使用in 问题:如何显示empno为7844, 7839,123,456 的雇员情况?SELECT * FROM emp WHERE empno in (7844, 7839,123,456); 使用is null的把持符问题:如何显示没有上级的雇员的情况?毛病写法:select * from emp where mgr = ''; 正确写法:SELECT * FROM emp WHERE mgr is null;六:oracle表查询(2)使用逻辑把持符号问题:查询工资高于500或者是岗位为MANAGER的雇员, 同时还要满足他们的姓名首字母为年夜写的J?SELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%'; 使用order by 字句默认asc 问题:如何依照工资的从低到高的顺序显示雇员的信息? SELECT * FROM emp ORDER by sal; 问题:依照部份号升序而雇员的工资降序排列 SELECT * FROM emp ORDER by deptno, sal DESC; 使用列的别名排序问题:按年薪排序 select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc; 别名需要使用“”号圈中,英文不需要“”号分页查询等学了子查询再说吧........ Clear 清屏命令 oracle表复杂查询说明在实际应用中经常需要执行复杂的数据统计, 经常需要显示多张表的数据, 现在我们给年夜家介绍较为复杂的select语句数据分组——max, min, avg, sum, count 问题:如何显示所有员工中最高工资和最低工资? SELECT MAX(sal),min(sal) FROM emp e; 最高工资那个人是谁?毛病写法:select ename, sal from emp where sal=max(sal); 正确写法:select ename, sal from emp where sal=(select max(sal)from emp); 注意:select ename, max(sal) from emp;这语句执行的时候会报错, 说ORA-00937:非单组分组函数.因为max是分组函数, 而ename不是分组函数....... 可是select min(sal), max(sal) from emp;这句是可以执行的.因为min和max都是分组函数, 就是说:如果列里面有一个分组函数, 其它的都必需是分组函数, 否则就犯错.这是语法规定的问题:如何显示所有员工的平均工资和工资总和?问题:如何计算总共有几多员工问题:如何扩展要求:查询最高工资员工的名字, 工作岗位 SELECT ename, job, sal FROM emp e where sal = (SELECT MAX(sal) FROM emp); 显示工资高于平均工资的员工信息 SELECT * FROM emp e where sal > (SELECT AVG(sal) FROM emp); group by 和having子句 group by用于对查询的结果分组统计, having子句用于限制分组显示结果. 问题:如何显示每个部份的平均工资和最高工资? SELECT AVG(sal), MAX(sal), deptno FROM emp GROUP by deptno; (注意:这里隐藏了一点, 如果你要分组查询的话, 分组的字段deptno一定要呈现在查询的列内外面, 否则会报错.因为分组的字段都不呈现的话, 就没法子分组了)问题:显示每个部份的每种岗位的平均工资和最低工资? SELECT min(sal), AVG(sal), deptno, job FROM emp GROUP by deptno, job; 问题:显示平均工资低于2000的部份号和它的平均工资?SELECT AVG(sal), MAX(sal), deptno FROM emp GROUP bydeptno having AVG(sal) < 2000; 对数据分组的总结 1 分组函数只能呈现在选择列表、having、order by子句中(不能呈现在where中) 2 如果在select语句中同时包括有group by, having, order by 那么它们的顺序是group by, having, order by 3 在选择列中如果有列、表达式和分组函数, 那么这些列和表达式必需有一个呈现在group by 子句中, 否则就会犯错. 如SELECT deptno, AVG(sal),,, d.dname FROM emp e,,, e.sal FROM emp e,,, s.grade FROM emp e,,, d.dname FROM emp e,,boss.ename FROM emp worker,emp boss WHERE worker.mgr = boss.empno AND worker.ename = 'FORD'; 子查询什么是子查询子查询是指嵌入在其他sql语句中的select语句, 也叫嵌套查询. 单行子查询单行子查询是指只返回一行数据的子查询语句请思考:显示与SMITH同部份的所有员工?思路:1 查询出SMITH的部份号 select deptno from emp WHERE ename = 'SMITH'; 2 显示 SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename = 'SMITH'); 数据库在执行sql 是从左到右扫描的, 如果有括号的话, 括号里面的先被优先执行. 多行子查询多行子查询指返回多行数据的子查询请思考:如何查询和部份10的工作相同的雇员的名字、岗位、工资、部份号 SELECT DISTINCT job FROM emp WHERE deptno = 10; SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno = 10); (注意:不能用job=.., 因为等号=是一对一的)在多行子查询中使用all把持符问题:如何显示工资比部份30的所有员工的工资高的员工的姓名、工资和部份号?SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30); 扩展要求:年夜家想想还有没有另外查询方法. SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30); 执行效率上, 函数高很多在多行子查询中使用any把持符问题:如何显示工资比部份30的任意一个员工的工资高的员工姓名、工资和部份号? SELECT ename, sal, deptno FROM emp WHERE sal > ANY (SELECT sal FROM emp WHEREdeptno = 30); 扩展要求:年夜家想想还有没有另外查询方法. SELECT ename, sal, deptno FROM emp WHERE sal > (SELECTmin(sal) FROM emp WHERE deptno = 30); 多列子查询单行子查询是指子查询只返回单列、单行数据, 多行子查询是指返回单列多行数据, 都是针对单列而言的, 而多列子查询是指查询返回多个列数据的子查询语句. 请思考如何查询与SMITH的部份和岗位完全相同的所有雇员. SELECT deptno, job FROM emp WHERE ename = 'SMITH'; SELECT * FROM emp WHERE (deptno, job) = (SELECT deptno, job FROM emp WHERE ename ='SMITH'); 在from子句中使用子查询请思考:如何显示高于自己部份平均工资的员工的信息思路: 1. 查出各个部份的平均工资和部份号 SELECT deptno,,,, ds.mysal FROM emp e, (SELECT deptno,,,, ds.mysal FROM emp e,(SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno) as ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal; 在ds前不能加as, 否则会报错(给表取别名的时候, 不能加as;可是给列取别名, 是可以加as的)分页查询按雇员的id号升序取出 oracle的分页一共有三种方式 1.根据rowid来分 select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_xiaoxi order by cid desc) where rownum<10000) where rn>9980) order by cid desc; 执行时间0.03秒 2.按分析函数来分 select * from (select t.*, row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980; 执行时间1.01秒 3.按rownum来分 select * from (select t.*,rownum rnfrom(select * from t_xiaoxi order by cid desc)t where rownum<10000) where rn>9980; 执行时间0.1秒其中t_xiaoxi为表名称, cid为表的关键字段, 取按cid降序排序后的第9981-9999条记录, t_xiaoxi表有70000多条记录. 个人感觉1的效率最好, 3次之, 2最差. //测试通过的分页查询okokok select * from (select a1.*, rownum rn from(select ename,job from emp) a1 where rownum<=10)where rn>=5; 下面最主要介绍第三种:按rownum来分 1. rownum 分页 SELECT * FROMemp; 2. 显示rownum[oracle分配的] SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e; rn相当于Oracle分配的行的ID号 3.挑选出6—10条记录先查出1-10条记录SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10; 如果后面加上rownum>=6是不成的, 4. 然后查出6-10条记录 SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6; 5. 几个查询变动 a. 指定查询列, 只需要修改最里层的子查询只查询雇员的编号和工资 SELECT * FROM (SELECT e.*, ROWNUMrn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6; b. 排序查询, 只需要修改最里层的子查询工资排序后查询6-10条数据 SELECT * FROM (SELECT e.*, ROWNUMrn FROM (SELECT ename, sal FROM emp ORDER by sal) e WHEREROWNUM <= 10) WHERE rn >= 6; 用查询结果创立新表这个命令是一种快捷的建表方式 CREATE TABLE mytable (id, name, sal, job, deptno) as SELECT empno, ename, sal, job, deptno FROM emp; 创立好之后, desc mytable;和select * from mytable;看看结果如何?合并查询合并查询有时在实际应用中, 为了合并多个select语句的结果, 可以使用集合把持符号union, union all, intersect, minus 多用于数据量比力年夜的数据局库, 运行速度快. 1). union 该把持符用于取得两个结果集的并集.当使用该把持符时, 会自动去失落结果集中重复行. SELECT ename, sal, job FROM emp WHERE sal >2500 UNION SELECT ename, sal, job FROM emp WHERE job = 'MANAGER'; 2).union all 该把持符与union相似, 可是它不会取消重复行, 而且不会排序. SELECT ename, sal, job FROM emp WHERE sal >2500 UNION ALL SELECT ename, sal, job FROM emp WHERE job ='MANAGER'; 该把持符用于取得两个结果集的并集.当使用该把持符时, 会自动去失落结果集中重复行. 3). intersect 使用该把持符用于取得两个结果集的交集. SELECT ename, sal, job FROM emp WHERE sal >2500 INTERSECT SELECT ename, sal, job FROM emp WHERE job = 'MANAGER'; 4). minus 使用改把持符用于取得两个结果集的差集, 他只会显示存在第一个集合中, 而不存在第二个集合中的数据. SELECT ename, sal, job FROM emp WHERE sal >2500 MINUS SELECT ename, sal, job FROM emp WHERE job = 'MANAGER'; (MINUS就是减法的意思)创立数据库有两种方法: 1). 通过oracle提供的向导工具.√ database Configuration Assistant 【数据库配置助手】 2).我们可以用手工步伐直接创立.七:java把持oraclejava连接oracle 介绍:前面我们一直在plsql中把持oracle, 那么如何在java 法式中把持数据库呢?下面我们举例说明, 写一个java, 分页显示emp表的用户信息.Java代码1.package com.sp;2.import java.sql.Connection;3.import java.sql.DriverManager;4.import java.sql.ResultSet;5.import java.sql.Statement;6.//演示如何使用jdbc_odbc桥连接方式7.public class TestOracle {8.public static void main(String[] args){9.try {10.// 1.加载驱动11.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");12.// 2.获得连接13.Connection ct = DriverManager.getConnection(14."jdbc.odbc:testConnectOracle", "scott",15."tiger");16.// 从下面开始, 和SQL Server一模一样17.Statement sm = ct.createStatement();18.ResultSet rs = sm.executeQuery("select * from emp");19.while (rs.next()) {20.//用户名21.System.out.println("用户名:"+rs.getString(2));22.//默认是从1开始编号的23.}24.} catch (Exception e) {25. e.printStackTrace();26.}27.}28.}在获得连接那里, 要去配置数据源, 点击控制面板-->系统和平安-->管理工具-->数据源(ODBC),翻开后点添加,如图:可以看到, 有个Oracle in OraDb10g_home1的驱动, 它是Oracle装置完后自动加上去的. 选中后, 点完成, 再填如下信息,如图:这样配好后基本就可以了, 但为了平安起见, 建议年夜家测试一下, 点击 Test Connection按钮, 测试通过后点ok,然后数据源就生成了, 如图:然后把数据源名称写进jdbc.odbc:里.这里要注意:jdbcodbc能不能远程连接呢?不能远程连接, 也就是你这样写的话就意味着java法式和oracle数据库应该是在同一台机器上, 因为这里没有指定IP地址, 肯定默认就是本地.如果要远程连, 就用jdbc,jdbc是可以远程连的.,控制台输出.......................可惜我没运行胜利, 说java.sql.SQLException: No suitable driver found forjdbc.odbc:testConnectOracle atjava.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.sp.TestOracle.main(TestOracle.java:18) 不知道为什么... 接下来讲解用JDBC的方式连接OracleJava代码1.package com.sp;2.import java.sql.Connection;3.import java.sql.DriverManager;4.import java.sql.ResultSet;5.import java.sql.Statement;6.//使用jdbc连接oracle7.public class TestOracle2 {8.public static void main(String[] args){9.try {10.// 1.加载驱动11.Class.forName("oracle.jdbc.driver.OracleDriver");12.// 2.获得连接13.Connection ct = DriverManager.getConnection14.("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott","tiger");15.// 从下面开始, 和SQL Server一模一样16.Statement sm = ct.createStatement();17.ResultSet rs = sm.executeQuery("select * from emp");18.while (rs.next()) {19.//用户名20.System.out.println("用户名:"+rs.getString(2));21.//默认是从1开始编号的22.}23.} catch (Exception e) {24. e.printStackTrace();25.}26.}27.}记得要把驱动包引入, classes12.jar 运行, .... 再次可惜, 我还是没运行胜利, 毛病是: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.ja va:134) atoracle.jdbc.dbaccess.DBError.throwSqlException(DBError.ja va:179) atoracle.jdbc.dbaccess.DBError.throwSqlException(DBError.ja va:334) atoracle.jdbc.driver.OracleConnection.<init>(OracleConnecti on.java:418) atoracle.jdbc.driver.OracleDriver.getConnectionInstance (OracleDriver.java:521) atoracle.jdbc.driver.OracleDriver.connect(OracleDriver.java :325) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.sp.TestOracle2.main(TestOracle2.java:18) 我也不知道为什么... 幽怨了.. 接下来建个web project, 来测试oracle的分页, 挺麻烦, 不记录了.. 在oracle中把持数据 - 使用特定格式拔出日期值使用 to_date函数请年夜家思考:如何拔出列带有日期的表, 并依照年-月-日的格式拔出? insert into empvalues (9998,'xiaohong', 'MANAGER',7782,to_date('1988-12- 12','yyyy-mm-dd'),,, 10); 注意: insert into emp values (9998,'xiaohong','MANAGER', 7782,'12-12月-1988',,,10); 这句语句是可以胜利运行的使用子查询拔出数据介绍当使用valus子句时, 一次只能拔出一行数据, 当使用子查询拔出数据时, 一条inset语句可以拔出年夜量的数据.当处置行迁移或者装载外部表的数据到数据库时, 可以使用子查询来拔出数据. 把emp表中10号部份的数据导入到新表中 create table kkk(myId number(4), myName varchar2(50), myDeptnumber(5)); insert into kkk (myId, myName,myDept) select empno, ename, deptno from emp where deptno = 10; 介绍使用update语句更新数据时, 既可以使用表达式或者数值直接修改数据, 也可以使用子查询修改数据. 问题:希望员工SCOTT的岗位、工资、补助与SMITH员工一样.update emp set(job, sal, comm)=(select job, sal, comm from emp where ename='SMITH') where ename='SCOTT';八:oracle中事务处置什么是事务事务用于保证数据的一致性, 它由一组相关的dml语句组成, 该组的dml(数据把持语言, 增删改, 没有查询)语句要么全部胜利, 要么全部失败. 如:网上转账就是典范的要用事务来处置, 用于保证数据的一致性. dml 数据把持语言银行转账、QQ申请、车票购买事务和锁当执行事务把持时(dml语句), oracle会在被作用的表上加锁, 防止其它用户修改表的结构.这里对我们的用户来来讲是非常重要的. .....其它进程排序, 知道1号进程完成, 锁翻开, 2号进程进入.依次进行, 如果有进程级别较高的, 可以插队. 提交事务当执行用commit语句可以提交事务.当执行了commit语句之后, 会确认事务的变动、结束事务.删除保管点、释放锁, 当使用commit语句结束事务之后, 其它会话将可以检查到事务变动后的新数据. 保管点就是为回退做的.保管点的个数没有限制回退事务在介绍回退事务前, 我们先介绍一下保管点(savepoint)的概念和作用.保管点是事务中的一点.用于取消部份事务, 当结束事务时, 会自动的删除该事务所界说的所有保管点.当执行rollback时, 通过指定保管点可以回退到指定的点, 这里我们作图说明. 事务的几个重要把持 1.设置保管点 savepoint a 2.取消部份事务 rollback to a 3.取消全部事务 rollback 注意:这个回退事务, 必需是没有commit前使用的;如果事务提交了, 那么无论你刚才做了几多个保管点, 都统统没有. 如果没有手动执行commit,而是exit了, 那么会自动提交java法式中如何使用事务在java把持数据库时, 为了保证数据的一致性, 比如账户把持(1)从一个账户中减失落10$(2)在另一个账户上加入10$,我们看看如何使用事务?Java代码1.package com.sp;2.import java.sql.Connection;3.import java.sql.DriverManager;4.import java.sql.ResultSet;5.import java.sql.Statement;。

韩顺平Oracle笔记——表空间

韩顺平Oracle笔记——表空间



<3>设置文件的自动增长:alter tablespace 表空间名称 '数据文件 路径' autoextend on next 大小 maxsize 最大容量;
管理表空间和数据文件——移动数 据文件
• • • • • • 有时,如果数据文件所在的磁盘损坏,该数据文件将不能再使用,为了能够 重新使用,需要将这些文件的副本移动到其它的磁盘,然后恢复。 下面以移动数据文件sp01.dbf举例说明: <1>确定数据文件所在的表空间 确定数据文件所在的表空间:select tablespace_name from 确定数据文件所在的表空间 dba_data_files where file_name='d:\test\sp01.dbf'; <2>使表空间脱机:确保数据文件的一致性,将表空间转变为offline的状 使表空间脱机: 使表空间脱机 态。alter tablespace sp01 offline; <3>使用命令移动数据文件到指定的目标位置:host move 使用命令移动数据文件到指定的目标位置: 使用命令移动数据文件到指定的目标位置 d:\test\sp01.dbf c:\test\sp01.dbf <4>执行 执行alter tablespace命令 命令:在物理上移动了数据后,还必须执行alter 执行 命令 tablespace命令对数据库文件进行逻辑修改。alter tablespace sp01 rename datafile 'd:\sp01.dbf' to 'c:\sp001.db'; <5>使表空间联机:在移动了数据文件以后,为了使用户可以访问该表 使表空间联机: 使表空间联机 空间,必须将其转变为online状态。alter tablespace data01 online;

oracle11g教程从入门到精通剖析

oracle11g教程从入门到精通剖析

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

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

二: Oracle的基本使用--基本命令sql*plus的常用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper2.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.&说明:可以替代变量,而该变量在执行时,需要用户输入。

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

disc ;退出命令conn连接命令passw[] 用户修改用户密码需要sys/system登录show user 显示当前用户exit断开与数据库的连接start和@ 运行sql脚本如start d:\a.sql;edit 编辑指定的文本edit d:\a.sql;spool 可以将sql*plus屏幕上的内容输出到指定文件中去spool d:\a.sql;spool off;控制输出的各种格式set show 如果希望永久保存相关配置可以去修改glogin.sql linesize 设置显示行的宽度,默认是80个字符show linesizeset linesize 90pagesize 设置每页显示的行数目,默认是14,用法和linesiz一样系统权限用户对数据库的相关权限connect,dba ,resource;对象权限用户对其他用户的数据对象的操作的权限(如select ,insert update ,delete, all) 数据对象比如表,视图,过程角色分为自定义角色和预定义角色如果xiaomign也可以建表那么需要把resource权限赋予xiaoming除外权限有resource,dba是最高的权限,还有connect登录权限创建xiaoming用户,修改用户密码只需要把create改成alter即可create user xiaoming identified by xiaoming ;create user xiaoming identified by xiaohong ;grant connect to xiaoming ;//赋予权限revoke connect to xiaoming;//收回权限希望小明可以去查询scott用户的emp表grant select on emp to xiaoming;希望xiaoming用户可以去修改empbiaogrant update on emp to xiaoming;如果是对象权限就在后面加上with grant optiongrant all on emp to xiaoming with grant option;xiaoming把emp表的查询权限给xiaohonggrant select on scott.emp to xiaominge;如果是系统权限grant connect to xiaoming with admin option;意味着xiaoming可以将这种权限继续传递一旦收回权限,则赋予权限的下级也被收回,诛九族式的;账户锁定使用profile管理文件创建profile文件create profile chen limit failed_login_attempts 3password_lock_time 2;alter user xiaoming profile chen;alter user xiaoming account unlock;//解锁创建个profile文件,要求该用户每隔10天修改自己的登录密码,宽限期市两天create profile myprofile limit password_life_time 10 password_grace_time 2;alter user xiaoming profile myprofile;口令历史如果希望用户在修改密码时,不能使用以前使用过的密码,可以使用口令历史当发现旧密码一样时提示用户重新输入create profile myprfile limit password_life_time 10password_grace_time 2 password_reuse_time 10;注意password_reuse_time 是指口令可以重用的时间是10天后就可以重用删除profile文件drop profile chen[cascade];----------------------------------------------表名必须以字母开头,长度不能超过30个字符,不能使用oracle保留字char 定长最大两千字符,varchar2(10) 变长最大是四千字符clob 字符型对象最大4Gnumber(3,2) 一共有3位有效数字2位小数number(2)表示一个两位整数number范围10的-38次方到10的38次方date 时间类型timestamp 较为精确的时间图片blob类型4G 可以存放图片声音(通常处于安全的考虑会把图片声音放入数据库中) 建表create table student(xh number(4),xm varchar2(20),sex char(2),birthday date,sal number(4,2)--讲学);insert into student values(001,'admin','男',01-03月-1990',4000.50);create table class(classId number(2),cname varchar2(20));-----------------------------------------------------------添加一个字段alter table student add(classId number(2));修改字段长度alter table student modify (xm varchar2(19));修改字段类型或名字alter table student modify (xm char(20));删除一个字段alter table student drop column sal;修改表的名字rename student to stu;删除表drop table student;修改日期的默认格式alter session set nls_date_format='yyyy-mm-dd';insert into student values(2,'小红','男','1990-04-10',3260.50,11);insert into student values(1,'小陈','女','1980-07-10',3310.50,12);insert into student values(3,'小龙','男','null',2330.50,11);设置保存点savepoint a;delete from student;删除所有记录,表的结构还在,记录删除了,写日志,可以恢复的,速度慢drop table student ; 删除表的结构和数据truncate table student; 删除表中的所有记录,表的结构还在,不写日志无法找回删除的记录,速度快delete from student where xh=1;删除一条记录rollback to a;clear;清屏命令--------------------8讲查询mgr字段是指员工上级的编号; comm是指奖金; loc 指部门所在地点desc dept查看表结构取消重复行select distinct deptno,job from emp;查询SMITH(注意名字区分大小写)的薪水,工作,所在部门select ename,sal,job,dname fromemp,dept where emp.deptno=dept.deptno and ename='SMITH';如何显示雇员的年工资(但此种方法会出现年薪空值) select ename ,12*sal+12*comm "年薪" from emp;(必须是"" 不能'')如何处理null值select ename,nvl(sal,0)*13+sal*13 "年薪" from emp;如何显示工资高于三千的员工select * from emp where sal>3000;显示1980-01-01以后入职的员工select * from emp where hiredate>'1982-01-01';工资高于2000低于2500的员工select * from emp where sal>2000 and sal<2500;%表示多个字符_表示任意单个字符显示首字母为S的员工select * from emp where ename like'S%';显示第三个字符时大写O的select * from emp where ename like'__O%';显示雇员编号是123,3445,800的雇员信息select * from emp where empno in(7839,7876,7934);显示没有上级的员工select * from emp where mgr is null;查询工资高于500或者是岗位是MANAGER 的雇员,同时还有满足他们的姓名首字母为大写Jselect * from emp where (sal>500 or job='MANAGER') and ename like'J%';工资从高到低排列select * from emp order by sal desc ;默认是asc从低到高部门号升序而雇员工资降序排列select * from emp order by deptno ,sal desc;使用列的别名排序select ename,sal*12+nvl(com,0)*12 "年薪" from emp order by "年薪" desc; 复杂查询:显示所有员工的平均工资和工资总和select sum(sal) as "工资总和" ,avg(sal) as "平均工资" from emp;显示所有员工中最高工资和最低工资select max(sal) as "最高工资",min(sal) as "最低工资"from emp ;显示所有员工中最高工资的员工姓名,工资select ename, sal from emp where sal=(select max(sal) from emp);计算共有多少员工select count(*) from emp;显示工资高于平均工资的员工信息select * from emp where sal>(select avg(sal) from emp); group by 用于对查询的结果进行分组统计having 子句用于显示分组显示结果显示每个部门的平均工资和最高工资select avg(sal),max(sal),deptno from emp group by deptno;显示每个部门的每种岗位的平均工资和最低工资及最高工资select max(sal), avg(sal),min(sal)from emp group by job;显示平均工资低于2000的部门号和它的平均工资select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>200分组函数只能出现在选择列表,having ,order by子句中;如果在select 语句中同时包含有group by,having,order by,那么他们的顺序是group by,having,order by;在选择列种如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错;案例:显示雇员名,工资及所在部门的名字并按部门排序按平均工资升序select deptno ,avg(sal),max(sal),min(sal) from emp groupby deptno having avg(sal)>2000 order by avg(sal);笛卡尔集:规定多表查询的条件是至少不能少于表的个数减一10讲显示部门号位10的部门名,员工名,和工资select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno anda1.deptno=10;显示各个员工的姓名,工资,及其工资的级别select a1.ename,a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.losal and a2.hisal显示雇员名工资及所在部门的名字,并按部门排序select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno order by a2.deptno;自连接:在同一张表的连接查询显示某个员工的上级领导的姓名select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno ;查询和部门10的工作相同的雇员的名字,岗位,工资,部门号select * from emp where deptno=(select deptno from emp where ename='SMITH');单行子查询,指返回一行数据的子查询语句多行子查询指返回多行数据的子查询查询和部门10号的工作相同的雇员的信息select * from emp where job in (select distinct job from emp where deptno=10);显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);或者(这种方法的效率要高)select * from emp where sal>(select max(sal) from emp wheredeptno=30);在多行子查询中使用any操作符显示工资比部门30的任意一个员工的工资高的姓名工资和部门号;select ename,sal,deptno from emp where sal>any(select sal from emp where deptno=30);或select ename,sal,deptno from emp where sal>(select min(sal) from emp where deptno=30);多列子查询:单行子查询是指查询只返回单列,单行数据,多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列的数据的子查询语句查询与SMITH的部门和岗位完成相同的所有雇员;select * from emp where (deptno,job)=(select deptno,job from emp whereename='SMITH') ;-------------------显示高于自己部门平均工资的员工的信息1,先查询出各个部门的平均工资和部门号select deptno,avg(sal) mysal from emp group by deptno;2把1查出的看做一张子表select a2.ename,a2.sal,a2.deptno,a1.mysal from emp a2 ,(select deptno,avg(sal) mysal from emp group by deptno) a1where a2.deptno=a1.deptno and a2.sal>a1.mysal;--------------------分页一共有三种方式(按rowid分其效率最高但是不易理解,按分析函数来分,效率太差,按rownum来分,还行)1。

相关文档
最新文档