Oracle笔记

来源:互联网 发布:eclipse打war包源码 编辑:程序博客网 时间:2024/06/05 22:54

Oracle 数据库

终于学到了Oracle数据库这一块了,记录一下今天学的知识。

基础知识

  1. 登录 SQLPLUS
    cmdsqlplus [用户名]/[密码][@数据库] [参数]sqlplus sys/orcl as sysdba  -- 登录 sys 用户,必须指定 sysdba 或 sysoper 身份sqlplus system/orcl         -- 数据库管理员    
  2. 创建一个自己的用户(比如 vip/vip)
    create user vip identified by vip;     -- 注意,新创建的用户,什么权限都没有,需要授权后才能使用grant create session to vip;           -- 授予登录的权限grant connect to vip;                  -- 角色是很多权限的打包,connect 是一种角色,它包含了连接查看数据的一些基本权限grant dba to vip;                      -- dba 是绝大多数权限的集合,它基本能做所有事情,所以很少单独授予用户。但在测试环境中,这样,很爽。-- 上面的创建用户、授予权限两步操作,可以简化为下面一步:grant dba to vip identified by vip;  -- 注意,使用分号结尾    
  3. 切换到用户
    sqlplus vip/vip  -- 在 cmd 下conn vip/vip     -- 在 sqlplus 中    
  4. 使用
    create table aaa (id int);    
  5. 激活内置的测试账号
    alter user scott account unlock;    
  6. 修改密码
    alter user scott identified by [newpassword];    

Sqlplus

这是一个轻量级的功能强大的客户端, 是 dba 必须掌握的工具。

我们可以配置 sqlplus 的一些行为,两个命令:

  1. show. 用来显示配置参数
  2. set. 用来设置配置参数

比如:

show all               -- 显示所有配置参数show lines             -- 显示 lines 的配置信息set lines[ize] 333     -- 将行宽设置为 333set pages[ize] 444     -- 将每页的记录数设置为 444set echo off/on        -- 导入外部文件,是否要显示原始 sql 语句set feedback on/off    -- 是否显示“查询到xx数据”等信息set timing on/off      -- 是否显示语句的执行时间set autocommit on/off  -- 是否启用自动提交set autotrace on/off   -- 是否输出执行计划set serverouput on/off -- 是否显示来自服务端的信息set column addr a22    -- 将列 'addr' 的宽度限制为 22 个字幕'a'的大小

在 sqlplus 中有缓冲区的概念:

缓冲区是用来记录上一次执行的命令语句的空间。

我们可以通过一些列简单命令,对上一次输入的语句进行一些控制:

  • 增 append/insert
  • 删 delete
  • 改 change
  • 查 list
  • 执行修改后的语句 run

例子:

list         -- 显示完整的缓存区list 3       -- 显示并定位到第三行list 3 5     -- 显示第三行到第五行的内容list last    -- 定位到最后一行
list 3del               -- 删除第三行
list 3append  order by sal  -- 定位到第三行,然后追加 order by sal 语句insert order by sal   -- 开启新的一行,插入 order by sal
list 3change /emp/dept      -- 定位到第三行,将这一行的 emp 换为 dept

还有其他一些命令:

get D:\aaa.sql        -- 将文件加载到缓冲区,但不执行start D:\aaa.sql      -- 将文件加载到缓冲区,并且执行@D:\aaa.sql           -- 是上面一条语句的简写形式save D:\bbb.sql       -- 将缓冲区的内容保存到文件中edit                  -- 调用外部编辑器,编辑缓冲区

甜点

示例

[题目] 从 scott 用户的 emp/dept 表中,找到“来自芝加哥最有钱的那个人”。

首先,我们需要理清思路。

这里总共有两个条件:

  1. 这个人是来自芝加哥的
  2. 这个人是最有钱的,是芝加哥最有钱的。

我们可以看出,第二个条件是基于第一个条件的。

所以,分两步查询:

  1. 找出所有来自芝加哥的人
  2. 从这些人中,找到最有钱的那个。这一步,可以通过 max 函数和 order by 两种方式实现。

下面是语句示例:

---- 第一步:找到来自芝加哥的所有人。这么两种写法等价:select e.* from emp e  join dept d on (e.deptno=d.deptno)  where d.loc='CHICAGO';select e.* from emp e, dept d  where d.deptno = e.deptno        and d.loc='CHICAGO';---- 第二步,基于上面结果,筛选出最有钱的那个-- 可以通过 max 函数select e.* from emp e, dept d  where e.deptno = d.deptno        and d.loc='CHICAGO'        and sal =             (select max(sal) from emp e, dept d              where e.deptno = d.deptno                    and d.loc='CHICAGO');-- 可以通过排序的方式select ename from  (select e.*, d.* from emp e, dept d    where e.deptno = d.deptno          and d.loc='CHICAGO'    order by sal desc)where rownum = 1;