`
lfc_jack
  • 浏览: 145778 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

oracle常用sql语句大全

 
阅读更多
[b] 1.解锁用户
	请输入用户名:sys
	输入口令:sys as sysdba 
 	alter user scott accout unlock;
	    用户已更改.
	SQL> commit;
	SQL> conn scott/tiger
	更改scott口令
	新口令:tiger
	重新键入新口令:tiger
		增加权限 用sys登陆完 grant create table, create view to scott; conn scott/root 


 2.查看表结构
 	desc tbname


 3.从表中查询数据
	select * from tbname;


 4.字段运算后再查询
	select ename, sal*12 from emp;


 5.纯数字运算查询
	select 2*3 from dual;  dual是oracle无意义的表


 6.查询当前系统的日期
	select sysdate from dual;


 7.双引号保持原来的格式
	select ename, sak*12 "anuual sal" from emp;


 8.查询数字时,把为空值的换为0,oracle中空值运算结果都为null
 	select ename, sal*12 + nvl(comm, 0) from;  nvl(,) 如果字段comm为空值时,用0代替
	select ename, sal, comm from emp where comm is null;(is not null)(选出comm为空的数据)

	
 9.字符串连接(把两个字段查询出来的数据作为一条字符串输出)两个单引号代替一个
	select ename||sal from emp; select ename || 'ds''fsdf' from emp; 


10.去掉重复的值(也会去掉多个字段组合重复的值)

	select distinct ziduan from tbname;


11.条件 where
	select * from tbname where ziduan > 'CBA' ; =, <, 不等于号<>,


12.条件 between and (包含800和1500)
	select ename, sal from emp where sal between 800 and 1500;
	select ename, sal from emp where sal >= 800 and sal <= 1500;



13.条件 in (谁的薪水值=800或1500或2000)
	select ename, sal comm from where sal in (800, 1500, 2000); 也可以not in ('df', 'dfsd')


14.条件 or
	select ename, sal from emp where deptno = 10 or sal > 1000;
15. 模糊查询 %零个或多个,下横线_代表一个
	select ename from emp where ename like '%All%';



16. 转义字符 \ 可以制定转义字符 escape
	select ename from emp where ename like '%\%%';  like '%$%%' escape '$';


17.排序 order by 默认升序asc

	select empno, ename from emp order by deptno asc, ename desc;先按deptno,再按ename


18.函数 转化为小写lower()
	select lower(ename) from emp;
19.函数 截子串substr(ename,2,3) 从字符串ename中第2个开始截,一个截3个字符


		select substr(ename,2,3) from emp;
20.函数 把数字转化为相应的字母,相反 ascii('A')
	select chr(65) from dual;   



21.函数 四舍五入 round(23.652)
	select round(23.652) from dual;  24
	select round(23.652, 2) from dual;  23.65  2代表舍到小数点后2位
	select round(23.652,-1) from dual; 20     可以是负数


22.函数 把数字或字母或日期转化为特定的格式 to_char(sal,'$99,999.9999'), $换成L,显示¥
	select to_char(sal, '$99,999.9999') from emp; 百千等位没有的不显示
	select to_char(sal, '$00,000.0000') from emp; 没有的位用0补齐
	select to_char(hircdate, 'YYY-MM-DD HH24:MI:SS') from emp; 转化为特定的日期,24位24进制



23.函数 把特定的字符转化为日期 to_date('', '')
	select ename, hiredate from emp where hiredate > to_date('1981-2-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS');


24.函数 把特定的字符转化为数字 to_number('$1,250.00', '$9,999.99')
	select sal from emp where sal > to_number('$1,250.00', '$9,999.99');



25.组函数 取最大max(),最小min(),平均avg(),函数可以组合使用
	select to_char(avg(sal), '99999999.99') from emp;


26.组函数 总和 sum()
	select sum(sal) from emp;


27.组函数 求出总共多少条数据 count(*),count(ename), 凡是不是空值的字段一共有几个
	select count(*) from emp;
	select count(distinct ziduan) from tbname; distinct去掉重复



28.函数 分组查询 group by
	select avg(sal), deptno from emp group by deptno;
	select deptno, job, max(sal) from emp group by deptno, job;


29.分组查询,多条输入,一条输出
	查询出薪水最高的人的名字(可能不止一个人)
	select ename from emp where sal = (select max(sal) from emp);
	查询出每个组中薪水最高的人的名字
	select ename from emp where sal in (select max(sal) from emp group by deptno);
	group by使用规则,要查询的字段如果没出现在组函数中则必须出现在group by中,否则出错


30.取出按部门编号分组后每个部门的平均薪水
	select avg(sal) from emp group by deptno;



31.where语句是处理单条语句,有此语句先执行where语句再进行分组(有group by的话)
	having 用来对分组进行限制 此处代替where
	查询出部门平均薪水大于2000的平均薪水和部门编号
	select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;



32.完整的select语句,按此顺序执行

	select * from emp
	where sal > 1000
	group by deptno
	having avg(sal) > 2000
	order by


33.查询出薪水大于平均薪水人的名字
	select ename, sal from emp where sal > (select avg(sal) from emp);




34.查出按部门分组后,每个部门中薪水最高的人的名字,部门编号 join 表连接,on后是连接条件
	select ename, sal from emp join (select max(sal) max_sal, deptno from emp group by deptno) t on (emp.sal = t.max_sal and emp.deptno = t.deptno);
	join表连接,on后面是连接条件,此语句等于如下语句
	select ename, sal from emp where (deptno,sal) in (select deptno, max(sal) from emp group by deptno);



35.把自己的名字和他经理人的名字取出来(自链接)
	select t1.ename, t2.ename from emp t1, emp t2 where t1.mgr = t2.empno;


36.SQL1999 cross join 交叉连接
	select ename,dname from emp, dept; 1992版的
	select ename,dname from emp cross join dept;1999版的



36.SQL1999等值连接 老版用where难分辨哪个是过滤条件哪个是表连接条件,用新版的on,后可加where过滤
	select ename,dname from emp,dept where emp.deptno = dept.deptno; 1992版
	select ename,dname from emp join dept on (emp.deptno = dept.deptno); 1999版
	select ename, grade from emp e join salgrade s on (e.sal between s.losal and s.hisal);



37.sql1999三表链接加where过滤
	select ename, dname, grade from emp e join dept d on (e.deptno = d.deptno) join salgrade s on (e.sal between s.losal aand s.hisal) where ename not like '_A%';



38.外链接 左外链接 left join 会把左边这张表多余的数据显示出来(和另外一张表对应不上的数据)同理right join右外连接,full join 全外连接
	select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);



39.部门平均薪水的的等级
	select deptno, avg_sal, grade from (select deptno, avg(sal) avg_sal from emp group by deptno) t join salgrade s on (t.avg_sal between s.losal and s.hisal);



40.部门平均的薪水等级
	select deptno, avg(grade) from(select deptno, sal, grade from emp e join salgrade s on (e.sal between s.losal and s.hisal)) group by deptno;


41.雇员中哪些人是经理人
	select ename from emp where empno in (select mgr from emp);



42.不用组函数求最高薪水
	select distinct sal from emp where sal not in (select distinct e1.sal from emp e1 left join emp e2 on (e1.sal < e2.sal));



43.平均薪水最高的部门编号与名称
	select dname from dept where deptno = (
	select deptno from (select deptno avg(sal) avg_sal from emp group by deptno) where avg_sal = (sel	ect max(avg_sal) from (select deptno avg(sal) avg_sal from emp group by deptno)));



44.平均薪水的等级最低的部门的部门名称
	select dname from dept where deptno = (
	select deptno from  (select deptno, avg(sal) avg_sal from emp group	 by deptno) t join salgrade s on (t.avg_sal between s.losal and s.hisal) where	 grade = (
	select min(grade) from (select grade, deptno from (select deptno, avg(sal) avg_sal from emp group by deptno) t join salgrade s on (t.avg_sal betwe	en s.losal and s.hisal))));




45.创建视图 create view v$name as 重复使用的语句. 视图就是一个子查询,就是一张表
	create view v$name as select * from emp; 以v$开头
	select * from v$name;



46.插入语句
	insert into tbname values (50, 'ganbe', 'bj');
	insert into tbanme (zd1, zd2) values (50, 60);
	insert into dept2 select * from dept;



47.备份表
	create table emp2 as select * from emp;



48.伪字段 rownum 默认从第一行往后排列序号1,2,3等,必须< = 号;
	select empno, ename from emp where rownum <=5;
	select roenum r, ename from emp where r > 10; 这样可 〉 于号;



49.薪水最高的前5人
	select ename, sal from (select ename, sal from emp order by sal desc) where rownum <= 5;



50.部门为10的员工薪水翻一倍
	update emp set sal = sal*2, name ename = ename||"-" where deptno = 10;


51.还原没提交的修改 rollback
	rollback;



52.提交 commit 遇到ddl语句事物自动执行 commit,正常断开连接时自动提交
	commit;




53.Oracle有事物回滚机制
	事物 transaction



54.约束 自定义名字 非空约束
	create table stu (id number(6), name varchar2(20) constraint stu_name_ nn not null);


55.唯一 约束 unique 可以插空置
	标级约束 几个字段的组合唯一约束 不在字段后面,另起一行
	constraint syu_name)email_uni unique(email,name)


56.主键约束 非空唯一 primary key,可以组合 主键
	id number(4),
	另起一行的话 primary key(id)



57.外键约束 牵扯到两张表、两个字段references(参考),被参考的字段必须是主键
	表级别:constraint ysname foreign key (benziduan) references ckbiao(waizd)



58.修改现有表的表结构
	alter table tbname add(ziduan varchar2(100)) 添加
	alter table tbname drop(ziduan) 删除
	alter table tbname modify(ziduan varchar2(100)) 修改 字段类型容量不能改小


59.去掉约束
	alter table tbname drop constraint yueshuname;


60.添加约束
	alter table tbname add constraint yueshuname foreign key (class) references class (id);


61.删除表
	delete from tbname;


62.oracle默认的一个表user_tables 装的当前用户下有多少表,(数字字典表)
	select table_name from user_tables


63.oracle有多少个数字字典表都放在表 dictionary 中
	select table_name from dictionary;


64.索引 index
	create index syname on tbname(ziduan1,ziduan2);


65.删除索引
	drop index syname;


66.序列 oracle独特的 自动递增
	create sequence sename;
	drop sequence sename;删粗序列
	select sename.nextval from dual;查询的结果会递增


67.三范式
	不存在冗余数据
	第一范式要求:要有主键,列不可分
	第二范式要求:不能存在部分依赖 (分割为n张表)
	第三范式要求:属性不能依赖其它属性


68.PL_SQL 语言   斜杠/执行
	set serveroutput on;
	begin
		dbms_output.put_line('HelloWorld');
	end;


69.PL_SQL 语言 declare 声明变量 以v_开头
	declare
		v_name varchar(20);
	begin
		v_name := 'myname';   := 赋值符号
		dbms_output.put_line(v_name);
	end;
	/

69.PL_SQL 语言 异常
		declare
		v_num number := 0;
	begin
		v_num := 2/v_num;
		dbms_output.put_line(v_num);
	exception
		when others then
			dbms_output.put_line('error');
	end;

70.PL_SQL 语言 常用变量的类型
	binary_integer: 整数,主要用来计数而不是用来表示字段类型
	number:数字类型
	char: 定长字符串
	varchar2: 变长字符串
	date: 日期
	long: 长字符串,最长2GB
	boolean: 布尔类型,可以取值为 true、false和null值,默认null


71.PL_SQL 语言 constant
	相当于java中的 fianl;


72.PL_SQL 语言 -- 单行注释


73.PL_SQL 语言 %type 属性
	v_empno emp.empno%type; 变量v_empno的类型随表emp中字段empno的类型变化而变化


74.Table变量类型 相当于java中的数组,type表示定义了一种新的数据类型
	declare
		type type_table_emp_emono is table of emp.empno%type index by binary_integrt;
		v_empnos type_table_emp_empno;
	begin
		v_empnos(0) := 7369;
		v_empnos(2) := 7339;
		v_empnos(-1) := 9999;
		dbms_output.put_line(v_empnos(-1));
	end;


75.Record变量类型 相当于java中的类
	declare
		type type_recors_dept is record
			(
			 	deptno dept.deptno%type,
				dname dept.dname%type,
				loc dept.loc%type
			 );
			v_temp type_record_dept;
	begin
		v_temp.deptno := 50;
		v_temp.dname := 'aaaa';
		v_temp.loc := 'bj';
		dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);
	end;



76.使用%rowtype声明record变量
	declare
		v_temp dept%rowtype;
	begin
		v_temp.deptno := 50;
		v_temp.dname := 'aaaa';
		v_temp.loc := 'bj';
		dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);
	end;



77.PL_SQL语句的运用,select语句中必须有关键字into,并且只有一条数据
	declare
		v_ename emp.ename%type;
		v_sal emp.sal%type;
	begin
		select ename.sal into v_ename.v_sal from emp where empno = 7369;
		dbms_output.put_line(v_ename || ' ' || v_sal);
	end;
	同上
	declare
		v_emp emp%rowtype;
	begin
		select * into v_emp from emp where empno = 7369;
		dbms_output.put_line(v_emp.ename || ' ' || v_emp.sal);
	end;


87.PL_SQL语句的运用 insert
		declare
		v_deptno dept.deptno%type := 50;
		v_dname dept.dname%type := 'aaaa';
		v_loc dept.loc%type := 'bj';
	begin
		insert into dept2 values (v_deptno, v_dname, v_loc);
		commit;
	end;


88.PL_SQL语句的运用
	dbms_output.put_line(sql%rowcount || '条记录被影响')


89,PL_SQL语句的运 ddl语句在PL_SQL语句中前加 excute immediate
	begin
		execute immediate 'create table tbname (nnn varchar2(20) default ''aaa'')';


90.PL_SQL语句 if语句 取出7369的薪水,如果<1200,则输出'low',如果<2000则输出'middle',否则输出'high'
	declare
		v_sal emp.sal%type;
	begin
		select sal into v_sal from emp where empno = 7369;
		if (v_sal < 1200) then
			dbms_output.put_line('low');
		elsif (v_sal < 2000) then
			dbms_output.put_line('middle');
		else
			dbms_output.put_line('high');
		end if;
	end;



91.PL_SQL语句 循环语句
	declare
		i binary_integer := 1;
	begin
		loop
			dbms_output.put_line(i)
				i := i + 1;
				exit when (i >= 11);
		end loop;
	end;

	declare
		j binary_integer := 1;
	begin
		where j < 11 loop
			dbms_output.put_line(j);
			J := J + 1;
		end loop;
	end;

	begin
		for k in 1..10 loop
			dbms_output.putline(k);
		end loop;
		for k in reverse 1..10 loop
			dbms_output.put_line(k);
		end loop;
	end;


92.PL_SQL语句 异常
	declare
		v_temp number(4);
	begin
		select empno into v_temp from emp where deptno = 10;
	exception
		when too_many_rows then
			dbms_output.put_line('太多记录了');
		when others then
			dbms_output.put_line('error');
	end;

	no_data_found  没找到数据




93.PL_SQL语句 游标(指针) cursor
	declare
		cursor c is
			select * from emp;
		v_emp c%rowtype;
	begin
		open c; --开始执行select语句
			fetch c into v_emp; --fetch提取游标数据
			dbms_output.put_line(v_emp.eename);
		close c;
	end;

	循环
		loop
			fetch c into v_emp;
			exit when (c%notfound);
			........;
		end loop;
	for循环
		declare
			cusor c is
				select * from emp;
		begin
			for v_emp in c loop
				dbms_output.put_line(v_emp.ename);
			end loop;
		end;



94.PL_SQL语句 带参数的游标
	declare
		cursor c(v_deptno emp.deptno%type, v_job emp.job%type)
		is
			select ename, sal from emp where deptno = v_deprno and job = v_job;
		--v_temp c%rowtype;
	begin
		for v_temp in c(30, 'CLERK') loop
		 dbms_output.put_line(v_temp.ename);
		end loop
	end;




95.PL_SQL语句 可更新的游标
	declare
		cursor c
		is
			select * from emp2 for update;
			--v_temp c%type;
			begin
				for v_temp in c loop
					if(v_temp.sal < 2000) then
					 update emp2 set sal = sal * 2 where current of c; --current当前的
					elsif(v_temp.sal = 5000) then
						delect from emp2 where current of c;
					end if;
				end loop;
		commit;
	end;






96.存储过程procedure
	创建存储过程
	create or replace procedure p
	is
		cursor c
		is
			select * from emp2 for update;
			--v_temp c%type;
			begin
				for v_temp in c loop
					if(v_temp.sal < 2000) then
					 update emp2 set sal = sal * 2 where current of c; --current当前的
					elsif(v_temp.sal = 5000) then
						delect from emp2 where current of c;
					end if;
				end loop;
		commit;
	end;
	执行此存储过程
	exec p;










97.带参数的存储过程 默认in
	create or replace procedure p
		(v_a in number, v_b number, v_ret out number, v_temp in out number)
	is
	begin
		if(v_a > v_b) then
			v_ret := v_a;
		else
			v_ret := v_b;
		end if;
		v_temp := v_temp + 1;
	end;
	调用
	declare
		v_a number := 3;
		v_b number := 4;
		v_ret number;
		v_temp number := 5;
	begin
		p(v_a, v_b, v_ret, v_temp);
		dbms_output.outline(v_ret);
		dbms_output.putline(v_temp);
	end;       答案 4,6





98.函数 调用方式和系统函数调用方式一样
	create or replace function sal_tax
		(v_sal number)
		return number
	is
	begin
		if(v_sal < 2000) then
			return 0.10;
		elsif(v_sal < 2750) then
			return 0.15;
		else if;
	end;




99.触发器 必须在表上,在什么时间,等 for each row 每处理一行触发一次。删除触发器 drop trigger trig;
	create or replace trigger trig
		after insert or delete or update on emp2 for each row
	begin
		if inserting then
			insert into emp2_log values (USER, 'insert', sysdate);
		elsif updating then
			insert into emp2_log values (USER, 'update', sysdate);
		elsif deleting then
			insert into emp2_log values (USER, 'delete', sysdate);
		end if;
	end;






100. update 执行会有前后两个状态 NEW, OLD
	create or replace trigger trig
		after update on dept
		for each row
	begin
		update emp set deptno =: NEW.deptno where deptno =: OLD.deptno;
	end;
[/b]
分享到:
评论

相关推荐

    ORACLE常用SQL语句大全.pdf

    Oracle 常用 SQL 语句大全 本文档总结了 Oracle 中常用的 SQL 语句,包括数据库的创建、删除、备份、表的创建、删除、修改、索引的创建、视图的创建等基本操作,以及一些高级查询运算符的使用。 一、数据库操作 ...

    oracle常用sql语句大全 注释完整 放心使用

    本资料集包含了Oracle数据库中常用SQL语句的大全,注释完整,非常适合初学者和有经验的开发者参考使用。 1. **数据查询(SELECT语句)**: - `SELECT * FROM table_name;`:查询表table_name中的所有列。 - `...

    oracle常用SQL语句(汇总版).docx

    Oracle 常用 SQL 语句汇总 Oracle 是一个功能强大且复杂的关系数据库管理系统,它提供了多种 SQL 语句来管理和操作数据库。在本文中,我们将详细介绍 Oracle 中常用的 SQL 语句,包括数据控制语句(DML)、数据定义...

    ORACLE常用SQL语句大全.doc

    ORACLE常用SQL语句大全.doc

    ORACLE常用SQL语句大全.docx

    ORACLE 常用 SQL 语句大全 本文档总结了 ORACLE 中常用的 SQL 语句,包括创建数据库、删除数据库、备份数据库、创建表、删除表、增加列、删除列、添加主键、创建索引、创建视图等基本操作。同时,也涵盖了高级查询...

    Oracle sql语句大全

    基本涵盖了所有oracle操作语法, 工作学习当中都能用的上 我现在还在用, 已经有快10年了, 欢迎下载, 希望可以帮到你

    Oracle-Sql语句资料oracle+110个常用函数经典SQL语句大全.zip

    Oracle_Sql语句资料oracle+110个常用函数经典SQL语句大全,可供学习参考。

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

    Oracle常用的SQL语句维护

    本文将深入探讨Oracle中常用的SQL语句以及与数据库表空间相关的维护知识。 首先,让我们了解如何在Oracle中创建表空间。表空间是Oracle数据库中存储数据的逻辑单位,它由一个或多个数据文件组成。创建表空间的SQL...

    ORACLE 常用SQL语句

    ORACLE 常用 SQL 语句 ORACLE 是一种关系数据库管理系统,它提供了多种 SQL 语句来操作和管理数据库。下面将 Introduced 13 种常用的 ORACLE SQL 语句,涵盖字符串处理、数据搜索和修改等方面。 1. ASCII 函数 ...

    Oracle数据库sql语句 跟踪器

    Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...

    oracle常用sql语句

    oracle常用sql语句

    压测Oracle的SQL语句的性能情况

    本文将深入探讨如何利用压力测试工具来评估和优化Oracle数据库中的SQL语句性能。 标题"压测Oracle的SQL语句的性能情况"暗示了我们关注的是在高负载情况下,Oracle数据库处理SQL查询的能力。压力测试(Pressure ...

    Oracle常用SQL语句复习

    本篇将基于"Oracle常用SQL语句复习"这一主题,深入探讨Oracle SQL的基本语法和常用操作,帮助读者巩固和提升Oracle数据库操作技能。 1. **数据查询基础** - `SELECT`语句是SQL中最基本的查询命令,用于从一个或多...

    Oracle数据库SQL语句大全

    Oracle数据库SQL语句大全

    Oracle数据库Sql语句详解大全

    Oracle数据库Sql语句详解大全,提供给大家快速查询复习哦!

    oracle常用SQL语句下载

    Oracle SQL是用于管理和操作Oracle数据库的强大工具,它包含多种用于数据查询、操作、定义和控制的语句。本文将深入探讨Oracle SQL中的常见查询和计算功能。 首先,SQL(Structured Query Language,结构化查询语言...

    Oracle常用SQL语句

    Oracl 常用SQL语句 Oracle基础语句

    oracle的SQL语句的一些经验总结

    Oracle SQL语句是数据库管理员和开发人员在处理Oracle数据库时不可或缺的工具。它允许用户查询、更新、插入和删除数据,以及执行各种复杂的数据库操作。以下是对"Oracle的SQL语句的一些经验总结"中可能涉及的关键...

Global site tag (gtag.js) - Google Analytics