Oracle数据库学习笔记5

select 字段名

from 表明

where 条件

group by 分组字段

having 筛选的条件

order by 排序

--伪表 dual

--伪列 rownum,对面原表中的数据

select rownum,empno,ename,sal from emp

order by sal desc;

--分析函数

--row_number()over():为有序组中的每一行返回一个

--唯一的排序值,序号由order by 子句指定,从1开始

select ename,job,deptno,sal,

row_number() over(order by sal asc)

from emp;

--根据每个部门返回排序值

select ename,job,deptno,sal,

row_number() over(partition by deptno

order by sal)

from emp;

--dense_rank:计算一个值在一组有序中的排序值,

--排名是从1开始,具有相同值的排名相同,并且

--后面的排序是连续的

select ename,job,deptno,sal,

dense_rank() over(partition by deptno order by

sal asc)

from emp;

--rwoid 对应字段的物理地址

select rowid,ename,deptno

from emp;

--子查询(单列)

select * from emp;

--查询谁的工资比ALLEN的工资高

select * from emp where sal >

(select sal from emp where ename = ‘ALLEN‘);

--销售部有哪些职位

select * from dept;

--distinct 去重

--单值运算符连接,子查询只能有一个结果

select distinct job from emp where deptno=

(select deptno from dept where dname=‘SALES‘);

--查询那些员工的薪水比ALLEN高

--有问题的

select * from emp_temp where sal >

(select sal from emp_temp where ename = ‘ALLEN‘);

--改进

select * from emp_temp where sal >

(select max(sal) from emp_temp where ename = ‘ALLEN‘);

-- >all

select * from emp_temp where sal >all

(select sal fron emp_temp where ename=‘ALLEN‘);

select * from emp_temp;

insert into emp_temp(empno,ename,sal)

values(8888,‘ALLEN‘,3200);

select * from emp_temp where ename=‘ALLEN‘;

--查询那些人的薪水比人一个ALLEN的薪水高

-->any(大于最小值)

select * from emp_temp where sal >any

(select sal from emp_temp where ename = ‘ALLEN‘);

--in

--谁和ALLEN同部门,列出除了ALEEN以外的员工名子

select * from emp_temp;

update emp_temp set deptno = 20 where empno = 8888;

select ename,sal from emp_temp where deptno in

(select deptno from emp_temp where ename = ‘ALLEN‘)

and ename <> ‘ALLEN‘

--子查询(多列)

--查询每个部门薪水最高人的名子和薪水和部门号

select ename,sal,deptno from emp

where(deptno,sal) in

(select deptno,max(sal) from emp

group by deptno);

--查询哪些部门的人数比20部门的少?

select deptno,count(*) from emp

group by deptno

having count(*) <

(select count(*) from emp

where deptno = 20);

--那些员工的薪水比本部门的平均薪水

select ename,sal,deptno

from emp a

where sal <

(select avg(nvl(sal,0)) from emp

where deptno=a.deptno);

--exists: 存在子查询,关联子查询

--那些人是其他人的经理

select * from emp;

select ename from emp a

where exists

(select 1 from emp where mgr = a.empno);

--1是不管结果,看存不存在

--那些部门没有员工

select * from dept;

select deptno,dname from dept d

where not exists

--两个表相连的部门

(select 1 from emp where deptno = d.deptno);

时间: 2024-10-24 17:25:55

Oracle数据库学习笔记5的相关文章

Oracle数据库学习笔记(一)

Oracle以其跨平台操作系统和硬件平台.稳定性.安全性.性能优越而著称于世.主要包括两个方向: 1).数据库管理员方向,主要学习对Oracle本身进行管理,提升性能,优化数据存储结构: 2).数据库程序员方向,在Oracle基础上对Oracle进行程序开发. PL/SQL是Oracle公司对关系型数据库的标准语言SQL的过程化语言扩展,特征包括:变量定义.控制结构.自定义的子程序.对象类型. PL/SQL程序的最基本的组成单元是PL/SQL块,分为:匿名块.命名块.命名块又可分为子程序.包.触

Oracle数据库学习笔记

创建表的同时插入数据:create table zhang3 as select * from zhang1;create table zhang3(id,name) as select * from zhang1; 将查询数据插入到某个表中:insert into zhang3 select * from zhang1;insert into zhang3(id,name) select * from zhang1; 有关完整性约束,表名,列名的两个视图:user_constraints, u

Oracle数据库学习笔记1(11g版本的安装&amp;PL/SQL工具的安装和使用)

1.安装Oracle11g 1.1 .口令就是数据库登录密码,学生党用口令就设置简单点了,违反Oracle口令设置规则也可以继续下一步 1.2 Oracle默认给三个账户用户scott(普通用户),需要在安装界面的时候把锁定取消,后面给上口令密码.SYS用户:超级管理员,权限最高,它的角色是DBA.默认密码是change_on_install.具有创建数据库的权限.我安装的时候口令统一设置了****.SYSTEM用户:系统管理员,权限很高,它的角色是DBA operator,默认密码manage

Oracle 数据库学习笔记(一)

在连接数据库是出现如下错误(创建了两个库一个是orcl,另一个是prod): SQL> conn / as sysdba Connected to an idle instance. SQL> startup ORA-00119: invalid specification for system parameter LOCAL_LISTENER ORA-00132: syntax error or unresolved network name 'LISTENER_PROD' 根据错误提示,大

Oracle数据库学习笔记(二)

Oracle对SQL处理过程:语法检查.语义检查.对SQL语句进行解析.执行SQL,返回结果. PGA是独立于SGA的一块内存区域,当用户进程连接到Oracle服务器时,Oracle服务器会为每个服务器进程分配相应的PGA,当服务器进程结束时,Oracle会自动释放PGA所占用的内存空间. PGA由排序区.回话信息.游标状态.堆栈空间等4部分组成.Oracle后台进程:数据写进程.日志写进程.系统监控.进程监控.检查点进程.归档进程. 数据的完整性:实体完整性.域完整性.引用完整性.自定义完整性

Oracle数据库学习笔记4

--trunc(数字,小数点的位数)截取 --round(数字,四舍五入要保留的位数) select ename,sal*0.1234567 s1, round(sal*0.1234567,2) s2, round(sal*0.1234567) s3 from emp; --sysdate:系统时间,精确到秒 --systimestamp:系统时间,精确到毫秒 --计算员工入职多少个月 select * from emp; --months_between select ename,hireda

Oracle数据库学习笔记2

create tablespace jym datafile 'D:\newer' size 2M autoextend on;       创建一个表空间 drop tablespace; 删除一个表空间 (必须先执行这个命令才能删除创建上面在D盘的newer文件,不然启动Oracle会报错) create user zhang identified by 123456; 创建一个用户 grant connect to zhang; 授权给zhang用户连接服务器的权限 grant selec

Oracle数据库学习笔记1—SQL

什么是SQL? SQL是结构化查询语言(英语:Structural Query Language,缩写:SQL),是一种特殊目的之编程语言,用于数据库中的标准数据查询语言. SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言.首先要在脑袋中有个"声明"的概念,SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果. SQL语法不按套路出牌. SQL有以下的几个分类:

oracle 触发器 学习笔记

触发器 是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们. 功能: 1. 允许/限制对表的修改 2. 自动生成派生列,比如自增字段 3. 强制数据一致性 4. 提供审计和日志记录 5. 防止无效的事务处理 6. 启用复杂的业务逻辑 开始 create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old