我自己就是一个oracle和sql的初学者,前段时间看了韩顺平老师的oracle视频教程,觉得很深入浅出,收获了很多。同时自己也做了不少笔记,现在想将纸质笔记以自己的话总结出来。俗话说得好:教学总是相得益彰,在总结的过程中想必会加深自己的印象,能够巩固自己的学习过程。

oracle 用户部分:

创建用户:create user user_name identified by user_password;

此时用户并没有连接数据库的权限。需要给其赋予连接权限

赋予权限:权限分为对象权限和系统权限。

grant [select|updat|all] on table_name to user_name;--对象权限

grant connect to user_name with admin option; --系统权限

with admin option 表示这个user可以将此权限继续下发

收回权限: revoke  Quanxian on table_name from user_name;

连接数据库:conn user_name/user_password;

profile文件,可以限制某些用户的行为,如登录尝试次数,密码输入错误次数等。

创建profile 文件: create profile profile_name limit failed_login_attempts m password_lock time n;

应用给某用户:alter user user_name profile profile_name;

在初次建立oracle数据库实例的时候,默认创建了几个用户,但是只有几个用户没有上锁,给某个用户解锁的步骤如下:

首先要以sysdba的用户登录oracle数据库,需要打开sqlplus这个oracle安装自带的工具

cmd or terminal 下: sqlplus / as sysdba;

解锁用户:alter user user_name account unlock;

更改用户密码: alter user user_name identified by  password;

这里,几个常用的用户的系统默认密码总结如下:

scott:tiger

system:manager

sys:change_on_install

sysdba 不需要密码登录。

几个用户的权限具体如何等我总结到后面再补上,韩顺平老师这里讲的有点分散。

继续用户管理。

设置口令历史:修改密码时不能使用以前使用的密码

password_reuse_time n;--n 天后才能重用密码

定期修改密码:

create profile profile_name limit password_life_time m pasword_grace_time n;

m天修改一次密码,宽限期n天。

sql语句中的几种数据类型:

char(n) :定长字符串,最长2000,查询速度快

varchar2(n):变长字符串,最长4000,节省空间

clob(character large object) :字符型大对象,最大4G

number(m,n):m位有效数,其中n位小数

number(m) :m位整数

date:日期类型 年月日时分秒

timestamp:更精确

blob:图片类型,二进制数据 可存放图片,声音,最大4G(韩老师当时用的是9i,我用了个64位的12c版本,估计能支持最大8G的吧。。自己猜的)

显示表结构:desc table_name;

增加字段:alter table table_name add (colum_name,colum_type);\

修改字段: alter table table_name modify (colum_name,colum_type);

删除字段:alter table table_name  drop colum colum_name;

删除表:drop table table_name;

date格式'日-月-年'

insert into table_name values(每个字段的值,如果有非数字的字段值,需要用单引号对''括起来)

alter session set nls_date_format 'yyyy-mm-dd';

【注意】这个改的效果是临时生效的。

插入空值NULL(该字段允许为空才行)

查询空值:select xxx from xxx where colum_name is [NULL|NOT NULL];

更改表内容:update table_name set colum_name='xxx' where yyy;

删除数据:delete from table_name;--删除数据,表的结构还在,可恢复,删除速度略慢
truncate table table_name;删除表中所有的数据,表结构还在,但是由于不写日志,无法找回删除记录,好处是删除速度快。

恢复数据:

save point point_name;--创建恢复点

delete from table_name;

rollback to point_name;--恢复

删除表结构和数据:drop table table_name;--删除表的结构和数据

commit提交事物,提交后保存点会失效,要注意。

打开显示操作时间开关:set timming on;

nvl函数处理NULL值的情况:nvl(字段名,值),如果字段本身值为NULL,则改变其新值为逗号后面的那个,如果不是NULL,不做任何事。

where 语句后面的like关键字用于查找并匹配符合条件的字段:

%表示零到多个字符

下划线_ 表示任意单个字

in关键字表示从一个范围内选取

order by语句默认升序(ASC),如果想降序排列,可以这样:

select *** from table_name where xxx order by colum_name desc;

别名排序 select sss as xx from xxx之类的

数据分组函数:max,min,avg,sum,count

子查询:嵌入在其他sql语句中的select语句,也叫做嵌套查询。

分组查询:

group by | having

group by 用于对查询结果的分组统计 having用于限制分组显示的结果

select xxx,yyy from table_name where zzz group by xxx having (yyy的一些限制条件);

注意:分组查询的字段必须在查询的字段中出现,不然查询失败。

分组函数只能出现在选择列表,having,order by子句中

如果select语句中同时包含group by,having,order by那么顺序是group by-having-order by

在选择列表中如果有列,表达式和分组函数,那么这些列和表达式必须有一个出现在group by子句中,不然出错。

多表查询:以oracle自带的emp表和dept表结构为例

SQL> select * from emp;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17    1288.41               20
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.16    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00    400.00     30
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00    200.00     30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
12 rows selected
SQL> select * from dept;
DEPTNO DNAME          LOC
------ -------------- -------------
    10 ACCOUNTING     NEW YORK
    20 RESEARCH       DALLAS
    30 SALES          CHICAGO
    40 OPERATIONS     BOSTON

可以看到两个表共同的字段为deptno;

因此在查询中可以以这个为连接桥梁

比如我要查询分别位于两个表的ename,和loc,可以如下写。

SQL> select a.deptno,a.loc,b.deptno,b.ename from dept a,emp b where a.deptno=b.deptno;
DEPTNO LOC           DEPTNO ENAME
------ ------------- ------ ----------
    10 NEW YORK          10 KING
    10 NEW YORK          10 CLARK
    10 NEW YORK          10 MILLER
    20 DALLAS            20 FORD
    20 DALLAS            20 SMITH
    20 DALLAS            20 JONES
    30 CHICAGO           30 JAMES
    30 CHICAGO           30 TURNER
    30 CHICAGO           30 MARTIN
    30 CHICAGO           30 WARD
    30 CHICAGO           30 ALLEN
    30 CHICAGO           30 BLAKE
12 rows selected

在查询过程中需要将选出来的表重命名,并用点符号选出相应的字段,如上所示。

分页查询:

采用rownum分页

第一步:oracle自带的rownum函数将每行查询出来的结果编号,如下:

SQL> select a1.* ,rownum rn from (select * from emp) a1;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO         RN
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
 7369 SMITH      CLERK      7902 1980/12/17    1288.41               20           1
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.16    300.00     30            2
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30           3
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20                 4
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00    400.00     30          5
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00    200.00     30            6
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10                7
 7839 KING       PRESIDENT       1981/11/17    5000.00               10                   8
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30             9
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30                   10
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20                 11
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10                  12
12 rows selected

第二步:选取rownum<=10的列,以上次选取的结果作为结果。

SQL> select * from (select a1.* ,rownum rn from (select * from emp) a1) where rownum <=10; 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO         RN
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
 7369 SMITH      CLERK      7902 1980/12/17    1288.41               20          1
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.16    300.00     30          2
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30          3
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20          4
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00    400.00     30          5
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00    200.00     30          6
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10          7
 7839 KING       PRESIDENT       1981/11/17    5000.00               10          8
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30          9
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30         10
10 rows selected

第三步,选取>=6的列,继续以上一次选取的为结果进行查询。

select * from (select * from (select a1.* ,rownum rn from (select * from emp) a1) where rownum <=10) where rn>=6;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO         RN
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00    200.00     30          6
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10          7
 7839 KING       PRESIDENT       1981/11/17    5000.00               10          8
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30          9
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30         10

这样就选取了6-10的分页结果。

注意事项:所有的改动,只需要改变最里面那层select语句即可,即改变

select  * from emp这个语句,外面两层select 语句是为了完成分页功能而已。

合并查询:将多个select语句的查询结果进行相关操作,类似于集合的求交集,并集,差集之类的。

老师讲的比较少,这里就先不写。

查询结果创建表:

create table table_name(colum_name1 colum_type1,colum_name2 colum_type2...)

as select colum1,colum2,...colum_n from table_name2;

JAVA连接oracle数据库:

Class.forName( "oracle.jdbc.driver.OracleDriver" );

Connection cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

初级Oracle和SQL学习者的学习笔记。韩顺平-玩转oracle。的更多相关文章

  1. Linux学习笔记-韩顺平

    这是我学习哔哩哔哩UP主韩顺平的2021韩顺平图解Linux课程的学习笔记. 课程地址:2021韩顺平图解Linux课程 Linux基础篇-Linux目录结构 基本介绍 linux 的文件系统是采用级 ...

  2. ORACLE PL/SQL异常处理(Exception)学习笔记

    1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...

  3. Oracle PL/SQL语句基础学习笔记(上)

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE server和其它工具中了,近几年中很多其它的开发者和DBA開始使用PL/SQL,本文将讲述PL ...

  4. 韩顺平玩转Oracle视频资料整理

    .oracle10g 11g:g(grid)表示网格技术 以baidu搜索为准,现在想使用一个软件,但是此软件在离自己非常近的地方就存在了下载地址,但是与自己非常远的地方也同样存在一个下载地址,而搜索 ...

  5. SQL反模式学习笔记12 存储图片或其他多媒体大文件

    目标:存储图片或其他多媒体大文件 反模式:图片存储在数据库外的文件系统中,数据库表中存储文件的对应的路径和名称. 缺点:     1.文件不支持Delete操作.使用SQL语句删除一条记录时,对应的文 ...

  6. SQL反模式学习笔记16 使用随机数排序

    目标:随机排序,使用高效的SQL语句查询获取随机数据样本. 反模式:使用RAND()随机函数 SELECT * FROM Employees AS e ORDER BY RAND() Limit 1 ...

  7. SQL反模式学习笔记17 全文搜索

    目标:全文搜索 使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难. SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的. 反模式:模式匹配 使用Like 或者正 ...

  8. SQL反模式学习笔记1 开篇

    什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...

  9. SQL反模式学习笔记5 外键约束【不用钥匙的入口】

    目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外 ...

随机推荐

  1. HDU2056JAVA

    Rectangles Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. Google Map API v2 步步为营(一) ----- 初见地图

    官方文档:https://developers.google.com/maps/documentation/android/start?hl=zh-CN 先谷歌后百度.使用google的api基本上按 ...

  3. sublime text 3.0使用

    # 快捷键    //未完待续 ctrl+p : 文件快速搜索 Ctrl+D : 选词 (按住-继续选择下个相同的字符串) ctrl+L : 选择整行(按住-继续选择下行,即按住ctrl不放按一次L则 ...

  4. springmvc使用aop心得

    第一步:创建aop拦截类: @Component @Aspect public class ControllerSelectorInterceptor { @Before("executio ...

  5. jquery easyUI 日期格式化,DateBox只显示年

    jquery easyUI 日期格式化,DateBox只显示年 >>>>>>>>>>>>>>>>> ...

  6. Andriod中WebView加载登录界面获取Cookie信息并同步保存,使第二次不用登录也可查看个人信息。

    Android使用WebView加载登录的html界面,则通过登录成功获取Cookie并同步,可以是下一次不用登录也可以查看到个人信息,注:如果初始化加载登录,可通过缓存Cookie信息来验证是否要加 ...

  7. Jquery Ajax方法传递json到action

    ajax向后台传入json需要设置option,如下 contentType:'application/json' data:Json.Stringify(jsObj) 后台处理复杂json对象(不知 ...

  8. Spring4.3.1 JDBCTemplate操作数据库

    个人总结,转载请注明出处:http://www.cnblogs.com/lidabnu/p/5679354.html 基于Spring4.3.1官方文档总结,官方文档链接http://docs.spr ...

  9. 深入理解shared pool共享池之library cache系列二

    背景 继续上文:深入理解shared pool共享池之library cache系列一,学习library cache数据结构,本文主要学习library cache object(lco)的数据结构 ...

  10. 枚举N行N列的自然数列

    数据库环境:SQL SERVER 2005 现有一个需求,要枚举1-50个自然数,分10行5列展示.如图,