Oracle学习笔记——基础一起学 4

--按照sno升序来排student2表。

select * from student2 order by sno;

--按照sno降序来拍sno,sname用升序来排,注意升序asc可以省略;

SQL> select * from student2 order by sno desc,sname;

       SNO SNAME                BIRTHDAY

---------- -------------------- --------------

         5 AAAA                 16-2月 -01

         4                      23-2月 -82

         3 AA                   23-2月 -81

         2 一行琉璃璃酱         21-1月 -80

         1 一行琉璃             11-1月 -01

--也可以用数字来代表列。(1就代表你取的结果集数的第一列,2就代表第二列)

SQL> select * from student2 order by 1 desc,2;

       SNO SNAME                BIRTHDAY

---------- -------------------- --------------

         5 AAAA                 16-2月 -01

         4                      23-2月 -82

         3 AA                   23-2月 -81

         2 一行琉璃璃酱         21-1月 -80

         1 一行琉璃             11-1月 -01

--给列取别名,sno 学号,sname 姓名(注意要””要英文双引号引姓名,但是不加也一样)

SQL> select sno 学号,sname "姓名" from student2;

      学号 姓名

---------- --------------------

         5 AAAA

         1 一行琉璃

         2 一行琉璃璃酱

         3 AA

         4

--如果想添加带有空格的别名呢(如姓 名)?

SQL> select sno "姓    名 " from student2;

 姓    名

----------

         5

         1

         2

         3

         4

--更改记录内容

update 成绩 set sno=2 where lower(km)='语文' and lower(score)=70;

--ok,那么现在有一个问题,刚刚查询的数据有一组相同的学号,科目,成绩,只有行数不一样,那么我们要该如何定位修改他们呢?

可以使用伪列ID来来进行操作。

SQL> select rowid from 成绩;

ROWID

------------------

AAASXBAAEAAAAIuAAA

AAASXBAAEAAAAIuAAB

AAASXBAAEAAAAIuAAC

AAASXBAAEAAAAIuAAD

AAASXBAAEAAAAIuAAE

AAASXBAAEAAAAIuAAF

--ok,现在我们就查到了rowid ID,那么更改数据就很简单了,因为我们能够定位了。

SQL> update 成绩 set sno=3 where rowid='AAASXBAAEAAAAIuAAF';

已更新 1 行。

SQL> update 成绩 set score=80 where rowid=('AAASXBAAEAAAAIuAAF');

已更新 1 行。

SQL> select * from 成绩;

       SNO KM              SCORE

---------- ---------- ----------

         1 语文               60

         1 数学               60

         1 英语               60

         2 语文               70

         2 数学               70

         3 语文               80

已选择6行。

--ok,这样就成功了。

--这里引入一个伪列的概念 rowid 和 rownum

  1. Rowid

是表中行的存储地址,该地址可以唯一地标识数据库中的每一行,可以使用rowid伪列快速地定位表中的一行。
以emp表为例,查询表中的rowid。如:
select rowid from emp;

以第一行的rowid为例:

AAAR3S,代表数据对象编码

AAE,代表文件编码

AAAACX,代表块编码

AAA,代表行编码

使用rowid查询数据,还是以第一行的rowid为例,如:

select * from emp where rowid=‘AAAR3sAAEAAAACXAAA’;

查询结果显示为emp表中第一行的数据。

  1. ROWNUM 

—(只能用小于号或者小于等于号,不能用大于或者大于等于号,即:rownum < 或者 rownum <=)

在查询的结果集中,ROWNUM 为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。

通过 ROWNUM 伪列可以限制查询结果集中返回的行数。

----查询出员工表中前5名员工的姓名,工作,工资。

SELECT

      A.ENAME

     ,A.JOB

     ,A.SAL

FROM EMP A

WHERE ROWNUM <=5;

--------------------------------------------

ROWNUM 与 ROWID 不同,ROWID 是插入记录时生成,ROWNUM 是查询数据时生成。
ROWID 标识的是行的物理地址。ROWNUM 标识的是查询结果中的行的次序

----------查询出员工表中工资前5名员工信息。

SELECT

      A1.*

FROM(SELECT

           A.ENAME

          ,A.SAL

      FROM EMP A

      ORDER BY A.SAL DESC

      )A1

WHERE ROWNUM <=5;      

----------查询出员工表中入职时间最早的5名员工信息。

SELECT

      A1.*

FROM (SELECT

         A.EMPNO,

         A.ENAME,

         A.JOB,

         A.MGR,

         A.HIREDATE,

         A.SAL,

         A.COMM,

         A.DEPTNO

        FROM EMP A

        ORDER BY A.HIREDATE

        )A1

WHERE ROWNUM<6  ;      

----------查询出员工表中工资大于平均工资前三名员工姓名、工资。

SELECT

      A1.ENAME

     ,A1.SAL

FROM(SELECT

           B.EMPNO,

           B.ENAME,

           B.JOB,

           B.MGR,

           B.HIREDATE,

           B.SAL,

           B.COMM,

           B.DEPTNO

      FROM EMP B

      WHERE B.SAL>(SELECT

                         AVG(A.SAL)

                    FROM EMP A

                    )

      ORDER BY B.SAL DESC              

      )A1

WHERE ROWNUM<=3;      

--oracle中commit的用法

SQL语言分为五大类:

DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。

DQL(数据查询语言) - Select 查询语句不存在提交问题,无需用Commit提交。

DML(数据操作语言) - Insert(插入)、Update(更新)、Delete(删除) ,这些语句需要Commit才能提交。

DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句,无需用Commit提交。

DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句,无需用Commit提交。

1、commit(提交)的作用

在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在Oracle 数据库中,

在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成时才能看见

2、commit的类型

2.1 显式提交

用COMMIT 命令直接完成的提交为显式提交

格式

SQL>COMMIT;

2.2 隐式提交

用SQL 命令间接完成的提交为隐式提交

命令有以下的

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME

2.3 自动提交

若把AUTOCOMMIT 设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。

格式

SQL>SET AUTOCOMMIT ON;

--如何查看是否启用了自动提交?

要判断Oracle数据库是否已设置为自动提交模式,可以检查数据库的默认提交模式。数据库的默认提交模式可以通过以下两种方式之一确定。

方法一:使用SQL查询

可以运行以下SQL查询来检查数据库的默认提交模式:

SELECT name, value

FROM v$parameter

WHERE name = 'commit';

如果有查询结果如下

NAME    | VALUE

--------|--------

commit  | immediate

方法二:使用Oracle SQL Developer

Oracle SQL Developer是Oracle官方提供的一款免费的数据库开发工具,它提供了直观的用户界面来管理和查询数据库。

使用Oracle SQL Developer,你可以通过以下步骤查看数据库的默认提交模式:

1、设置成自动提交事务:

打开PL/SQL Developer,

英语界面:Tools -> Preferences -> Window Types -> SQL Window:勾选“AutoCommit SQL”,

中文是:工具-> 首选项 -> 窗口类型 -> SQL窗口 -> 勾选“自动提交sql”

最后点击确定,即可实现自动提交操作

2、退出登录自动提交:

英文:Tools -> Preferences -> Oracle -> Connection -> Log off with open transaction:选择“Commit”。

中文:工具-> 首选项 ->Oracle -> 注销(有打开的事务) -> 选择提交

设置完这两个步骤,无论是执行sql,还是注销用户,都会自动提交事务。

如果能帮到你请感谢我的老婆“一行琉璃”

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值