--按照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
- Rowid
是表中行的存储地址,该地址可以唯一地标识数据库中的每一行,可以使用rowid伪列快速地定位表中的一行。
以emp表为例,查询表中的rowid。如:
select rowid from emp;
以第一行的rowid为例:
AAAR3S,代表数据对象编码
AAE,代表文件编码
AAAACX,代表块编码
AAA,代表行编码
使用rowid查询数据,还是以第一行的rowid为例,如:
select * from emp where rowid=‘AAAR3sAAEAAAACXAAA’;
查询结果显示为emp表中第一行的数据。
- 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,还是注销用户,都会自动提交事务。