一、常用sql语句
聚合函数 COUNT(*)计算元组个数 COUNT(列名)对一列中的值计算个数 SUM(列名)求某一列值的总合 AVG(列名)求某一列值的平均值 MAX(列名) MIN(列名) --按照本门号从高到底,工资从高到底查询员工表 select * from personnel order by section desc,sal desc; --求各个部门工资的平均值 select s.name, avg(p.sal) from personnel p inner join section s on p.section = s.id group by s.name --求各个部门工资的和 select s.name, sum(p.sal) from personnel p inner join section s on p.section = s.id group by s.name --求工资大于财务部平均工资的员工的信息 select * from personnel where sal > (select avg(sal) from personnel where section = (select id from section where name = '财务部')) --查询寻所有部门4的工作岗位,在根据工作岗位查询所有在这些工作呢岗位工作呢的员工 select p.name,p.sal,j.name, s.name from personnel p inner join job j on p.job = j.id inner join section s on p.section = s.id where p.job in (select job from personnel where section = 4 group by job) --各部门工资大于部门平均工资的员工信息 select * from personnel p where sal > (select avg(sal) from personnel where p.section = section); --各部门工资大于部门平均工资的员工数量和部门编号 select count(*),p.section from personnel p where sal > (select avg(sal) from personnel where p.section = section) group by p.section; --排序 select * from personnel order by id desc --插入 insert into section (id,name) values(5,'市场部'); --删 delete section where id = 5; --改 update section set name = '尼玛' where id = 5; --分页 select * from (select e1.*, rownum r from (select * from employee) e1 where rownum < 5) where r > 2 --别名 select s.name as "部门",avg(sal) as "平均工资" from personnel p inner join section s on p.section = s.id group by s.name --建表 create table text( id number(6) primary key, name varchar2(20) not null, age number(6) not null, manager number(6) )tablespace users; --插入数据 insert into text (id,name,age,manager) values (106,'A',30,104); insert into text (id,name,age,manager) values (109,'B',19,104); insert into text (id,name,age,manager) values (104,'A',20,111); insert into text (id,name,age,manager) values (107,'D',35,109); insert into text (id,name,age,manager) values (112,'E',25,120); insert into text (id,name,age,manager) values (119,'F',45,null); //选修了java课程的学生的id和姓名 select s.studentid, s.name from student s inner join sc x on s.studentid = x.studentid where x.courseid = (select courseid from course where coursename = 'Java'); --查看熊敏选修了那几门课程 select c.coursename from course c inner join sc x on c.courseid = x.courseid where x.studentid = (select studentid from student where name = '熊敏'); --打印选课数大于3的学生的id和姓名 select stu.studentid, stu.name from student stu where (select count(*) from sc where studentid = stu.studentid) > 3; --:列出所有年龄比所属主管年龄大的人的ID 和名字? select em.id,em.name from text em where em.age > (select age from text where em.manager = id); --删除相同数据 delete from text t where t.id > (select min(x.id) from text x where t.name = x.name); --用exists代替in select * from employee e where e.section in (select id from section) order by id; select * from employee e where exists (select id from section s where e.section = s.id) order by id; --exists与in比较 select * from 表A where exists(select * from 表B where 表B.id=表A.id) --这句相当于 select * from 表A where id in (select id from 表B)
二、游标、触发器、存储过程、函数、包......
打开输出选项 set serveroutput on; 关闭输出选项 set serveroutput off; 一、游标的应用 实例1: declare id number;--申明变量接受游标里查出来的值 department varchar2(20); --申明一个游标:aaaa cursor aaaa is select studentid,name from student where name = '熊敏'; begin --打开游标 open aaaa; --判断是否返回记录 if aaaa%notfound then dbms_output.put_line('没有找到相应的记录'); else --从游标中读取数据 fetch aaaa into id,department; dbms_output.put_line(id || ',' || department); end if; close aaaa; end; 实例2: --游标循环读取数据 declare --申明 id number; --变量 name varchar2(20); cursor user_table is select studentid,name from student; --申明游标:user_table begin --开始 for user_tables in user_table loop --循环读取,user_tables为临时变量 id := user_tables.studentid; name := user_tables.name; dbms_output.put_line('学员编号:' || id || '学员姓名:' || name); end loop; end; --结束 二、创建和调用过程 --无参过程pro_01 create or replace procedure pro_01 is begin insert into job (id,name) values (4,'总经理'); end; --调用过程(在命令行中调) exec pro_01; --有参过程pro_02 create or replace procedure pro_02 ----申明五个个输入参数, ----输入字符串不让加长度 ( student_id in number, student_name in varchar2, student_sex in varchar2, student_age in number, student_department in varchar2 ) as begin insert into student values(student_id,student_name,student_sex,student_age,student_department); end; --调用 exec pro_02(7,'林文伟','男',23,'学习部'); 三、函数 --创建一个返回插入条数信息的函数 --申明5个参数的函数 --函数名function_insert_student --返回值run_number create or replace function function_insert_student ( student in number, stu_name in varchar2, sex in varchar2, age in number, department in varchar2 )return number as ret_number number :=0; begin insert into student values(student,stu_name,sex,age,department); ret_number := ret_number + 1; commit; return ret_number; end; --调用函数 declare --申明一个变量接受函数返回值 receive_number number; begin receive_number :=function_insert_student(9,'王正国','男',23,'学习部'); dbms_output.put_line('一共插入--' || receive_number || '条数据。'); end; 四、包 --创建包头 create or replace package pack_age as --申明过程 procedure my_procedure(studentid number,stu_name varchar2,sex varchar2,age number,department varchar2); --申明函数 function my_function(studentid number,stu_name varchar2,sex varchar2,age number,department varchar2) return number; end pack_age; --创建包体 create or replace package body pack_age as --实现过程 procedure my_procedure(studentid number,stu_name varchar2,sex varchar2,age number,department varchar2) is begin insert into student values (studentid,stu_name,sex,age,department); commit; end my_procedure; --函数的实现 function my_function(studentid in number,stu_name in varchar2,sex in varchar2,age in number,department in varchar2) return number as return_number number := 0; begin insert into student values (studentid,stu_name,sex,age,department); return_number := return_number + 1; commit; return return_number; end my_function; end pack_age; --包的调用 declare --申明变量接收函数的返回值 num_number number; begin pack_age.my_procedure(10,'黄广','男',23,'学习部'); num_number := pack_age.my_function(11,'黄云生','男',23,'学习部'); end; 五、视图 --创建视图 create or replace view my_view as select * from student; --调用视图 select * from my_view; 六、触发器 1、测试表结构 create table a( id number(6), s_name varchar2(30) ) create table b( id number(6), s_name varchar2(30) ) 2、--创建出发器-- bck_trg --单向表a插入数据的时候同时向表b里插入数据 --insert into b values (1,'熊敏') create or replace trigger bck_trg after insert on a for each row begin insert into b values (1,'熊敏'); end; --测试 insert into a values(1,'熊敏'); --复制表数据的写法 create or replace trigger tig_test after insert on a declare begin insert into b (select * from a where a.id=(select max(a.id) from a )); end tig_test; --将插入的信息插入到目标表 create or replace trigger tig_a after insert on a for each row declare -- 在这里申明变量 begin insert into b(id,s_name) values(:NEW.ID,:NEW.S_NAME); end tig_a; --将A表删除的数据插入到B表 create or replace trigger tig_a after delete on a for each row declare -- local variables here begin insert into b(id,s_name) values(:old.ID,:old.S_NAME); end tig_a;
相关推荐
oracle知识点笔记,语法,触发器,存储过程,存储函数,流程控制,游标,异常处理,记录类型,视图,控制用户权限,高级子查询,set运算符,基本的sql_Select语句等等
要将 Oracle DML 语句和 PL/SQL 程序迁移到 SQL Server 时,请按下列步骤执行: 1. 验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。进行任何必要的修改。 2. 把所有外部联接改为 SQL-92 标准外部...
7. 把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。 8. 用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。 9. 把 PL/SQL 触发器转换为 Transact-SQL 触发器。 10. 使用 SET SHOWPLAN 语句,...
7. 把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。 8. 用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。 9. 把 PL/SQL 触发器转换为 Transact-SQL 触发器。 10. 使用 SET SHOWPLAN 语句,优化...
本⽂⽬录: 1. PL/SQL 程序设计简介 2. PL/SQL块结构和组成元素 3. PL/SQL流程控制语句 4. 把游标说透 5. 异常错误处理 6. 把过程与函数说透 7. 程序包的创建与应⽤ 8. 把触发器说透
3、要求使用sqlplus,pl/sql或developer建立存储过程,触发器和程序包等代码,其中要求用到游标,异常,各种语句等对表中数据进行处理; 4、使用自己熟悉的开发语言,加入界面,连接数据库; 5、报告要有操作截图...
附录C SQL语句的语法...... 167 C.1 ALTER TABLE... 167 C.2 COMMIT... 167 C.3 CREATE INDEX... 168 C.4 CREATE PROCEDURE... 168 C.5 CREATE TABLE... 168 C.6 CREATE VIEW... 168 C.7 DELETE... 169 C.8 DROP......
汇总oracle一些常用SQL语句,比如:用户解锁、修改用户密码、锁表、视图恢复、定时任务、物化视图、触发器、带参游标、常用函数、执行计划、字符串/时间各种运算、HTTP请求、SQL优化等
sql语句.txt trancount.sql Trigger Test.sql trigger transaction.sql T_sql示例.sql UDF在层次型数据处理中的妙用.txt 《SQL 参考手册》中文版.chm 下线数.sql 下线的名字.sql 事务处理及回滚.sql 使用...
除了为读者提供编写SQL语句和开发PL/SQL块的方法外,本书还为应用开发人员提供了一些常用的PL/SQL系统包。通过使用这些PL/SQL系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合SQL和PL/SQL...
ORACLE__SQL语句教学 引言 3 第一章 数据库基础 6 第二章 Oracle入门 6 第三章 查询基础 11 第四章 单行函数 14 第五章 分组函数 19 第六章 多表查询 21 ... 第十九章 游标、函数 79 第二十章 存储过程 86 ...
除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql...
除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql...
2、SQL语句说明:.......................................... 3、数字和日期都可以使用数学运算符建立表达式。............. 4、定义空(NULL)值....................................... 5、别名...................
除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql...
①:存储过程 ②:函数 ③:自主事务处理 ④:包规范|包主体 十一.触发器|内置包 ①:触发器类型 ②:触发器原理 ③:new和old 两个行类型变量 ④:递归 ⑤:内置包 十二.导入导出 ①:导入导出/整个DB/表空间/表/...
│ 经典SQL语句收集(ORACLE).mht │ 融会贯通Oracle数据库的25条基本知识.txt │ 详细讲解Oracle服务器的常用命令行.mht │ └─资料 │ Ora 10G Err_Msg.chm │ Oracle10g_DBA.pdf │ Oracle10G官方文档CHM...
15.5.2 oracle中存储过程和函数的管理 324 第16章 sql触发器 325 16.1 触发器的基本概念 325 16.1.1 触发器简介 325 16.1.2 触发器执行环境 325 16.2 sql server中的触发器 326 16.2.1 sql server触发器的种类...
7.6.7 数学运算符与集合运算符的组合应用 7.7 SQL中的表达式 7.7.1 CAST表达式的应用 7.7.2 CASE表达式的应用 7.8 小结第8章 SQL函数 8.1 SQL函数基础 8.1.1 SQL语句函数 8.1.2 常用的SQL语句函数 8.2 日期函数和...