一、常用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数据库的核心编程元素,包括存储过程、函数、触发器、异常处理、游标和存储包,这些都是数据库开发和管理中的关键概念。 首先,我们来详细了解存储过程。存储过程是一组预编译的SQL语句,...
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的功能来处理数据,包括函数、游标和触发器。在本文中,我们将深入探讨这些概念,并通过一些实际的例子来理解它们的用法。 1. **Oracle函数**:函数...
1. **存储过程与函数**:存储过程是预编译的SQL语句集合,用于执行特定任务。它们可以提高性能,减少网络流量,并提供模块化编程。函数则是返回值的存储过程,可以在SQL查询中直接使用。理解并熟练创建、调用和管理...
Oracle 教案:深入理解 Oracle 存储过程、游标与 SQL 语句及 PL/SQL Oracle 是全球领先的数据库管理系统提供商,不仅提供数据库产品,还包括中间件、云计算服务等全面的企业级解决方案。"Oracle"一词源于古希腊神话...
其次,存储过程(Stored Procedures)是一组为了完成特定功能的SQL语句集合,存储在数据库中并可由应用程序调用执行。它们提供了一种封装和重用SQL代码的方式,增强了代码的安全性,减少了网络通信量,提高了数据库...
本资料集包含了Oracle数据库中常用SQL语句的大全,注释完整,非常适合初学者和有经验的开发者参考使用。 1. **数据查询(SELECT语句)**: - `SELECT * FROM table_name;`:查询表table_name中的所有列。 - `...
以下是一些Oracle数据库中常用的SQL语句及其详细解释。 1. **数据查询(SELECT)** - `SELECT column1, column2 FROM table_name;` 用于从表中选择特定列的数据。 - `WHERE condition;` 添加条件过滤结果,如 `...
### Oracle PL/SQL编程 创建存储过程、函数、触发器等 #### 一、PL/SQL 概念回顾 PL/SQL(Procedural Language for SQL)是Oracle数据库中的一种过程化语言,它结合了SQL的强大数据操作能力和传统过程化语言的控制...
PL/SQL还支持多种SQL语句,如DML(数据操纵语言)的INSERT、UPDATE、DELETE、SELECT INTO,以及事务控制语句COMMIT、ROLLBACK和SAVEPOINT。不过,DDL(数据定义语言)如CREATE TABLE等需要以动态SQL的方式在PL/SQL中...
PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于编写存储过程、函数、包等数据库程序的编程语言。本压缩包集合了关于PLSQL的各种关键知识点,包括语法、异常处理、指针和...
4. **存储过程和函数**:存储过程是一组预编译的PL/SQL语句,可以在需要时调用。函数类似于存储过程,但必须返回一个值。了解如何创建、调用和管理这些对象是提高数据库性能的重要方法。 5. **包(PACKAGE)**:包...
本文件"oracle常用SQL语句(汇总版)"将对Oracle中的常用SQL语法进行详尽阐述。 1. 数据查询: - `SELECT`语句:这是SQL中最基本的查询语句,用于从表中检索数据。例如,`SELECT * FROM 表名;`将返回表中的所有记录...
在Oracle中,可以使用`EXECUTE`语句来调用存储过程和函数,也可以在SQL语句中直接嵌入函数。参数传递给这些程序单元,可以是IN(输入)、OUT(输出)或IN OUT(输入输出)类型。 六、游标和循环 游标是PL/SQL中处理...
1. **存储过程**:存储过程是一组预编译的SQL语句,它们封装在一起,可以作为一个单元进行调用。在Oracle中,创建存储过程可以提高性能,减少网络流量,并提高代码的安全性。通过存储过程,开发者可以实现复杂的业务...
- 包是PL/SQL中组织和管理相关程序单元(如过程、函数、变量)的一种方式。它包括包规范(声明部分)和包主体(实现部分)。包能提供更好的模块化、封装和重用性,也有助于提升性能,因为包内的对象可以被编译一次...
通过学习这些案例,你可以了解如何在实际应用中灵活运用Oracle游标,包括在存储过程、触发器等高级功能中。案例中的7-游标使用很可能是对各种游标操作的具体示例,如打开、关闭、提取数据、循环处理等,有助于加深...
其次,**存储过程**是包含一系列SQL语句和PL/SQL代码的可重用模块。它们可以有输入和输出参数,甚至可以返回结果集。存储过程有助于提高性能,因为它们可以在服务器端编译并缓存,减少网络通信。例如,你可以创建一...
Oracle PL/SQL是Oracle数据库系统中的重要组成部分,用于开发存储过程、函数、触发器等数据库对象,以及执行复杂的SQL操作。以下是对Oracle PL/SQL及其相关知识点的详细说明: 1. **Oracle数据库基础**:Oracle...
3. **过程**:过程是一组PL-SQL语句,不返回值但可以有参数。常用于封装业务逻辑。 三、游标和记录 1. **游标**:游标允许你逐行处理查询结果集,是PL-SQL处理大量数据的重要工具。 2. **记录**:PL-SQL中的记录...
4. **包(Packages)**:包是存储过程和函数的集合,可以包含公共变量、常量和类型定义,提供了更高级的代码组织和封装。 5. **索引优化**:合理创建和使用索引可以显著提升触发器和存储过程的执行效率,但过多的...