集合运算
集合运算
并集(UNION/UNION ALL)UNION 并集去重
UNION ALL 并集不去重
Union可以对两个或多个结果集进行连接,形成“并集”。子结果集所有的记录组合在一起形成新的结果集。
限定条件:
要是用Union来连接结果集,有4个限定条件。
子结果集要具有相同的结构。
子结果集的列数必须相同。
子结果集对应的数据类型必须可以兼容。
每个子结果集不能包含order by子句。
语法格式:
1select_statement union [all] select_statement
all代表最终的结果集中将包含所有的行,而不能删除重复行。
例子:
12345select * from emp union select * from emp; --去重SELECT Name FROM Person_1UNIONSELECT Name FROM Person_2;
语法:SELECT 语句UNIONSELECT 语句UNION ALLSELECT 语句…
1234567SELECT * FROM EMPUNIONSELECT * FROM ...
进阶查询
进阶查询排序 order by
基本语法:select 字段 from 表 where 条件 order by 字段 asc/desc;asc 代表:升序排列–默认值,可以省略desc 代表:降序排列
书写顺序 执行顺序select fromfrom wherewhere selectorder by order by –order by 的书写顺序跟执行顺序都在最后
12345select * from emp order by deptno asc;select * from emp order by sal;select * from emp order by sal desc;SELECT * FROM emp FOR UPDATE
思考题
1.除了数值型,order by 还能排什么类型
1234567三种类型都可以--以升序为例,数值型从小到大,日期型从过去到未来,字符型首字母A<Z<a<z,如果首字母相同依此比较--数值跟字符都有时 数值 < 大写字母 &l ...
SQL函数学习
SQL函数学习[TOC]
函数
函数都有返回值–有几个数据返回几个值(分组函数除外)
函数都带括号
函数类型:
数值型函数字符型函数日期型函数分组函数(聚合函数) 一组数据返回一个值
数值型函数1.取绝对值 abs(数值)
不论正数负数,返还的值都是正数,0返还0,空值返还空值
1234567select abs(123) from dual;--返回123select abs(-123) from dual;--返回123select abs(0) from dual;--返回0select abs(comm) from emp;--返回空值select abs(1.23) from dual;--返回1.23select abs(-1.23) from dual;--返回1.23
2.判断正负值 sign(数值)
正数返回1,负数返回-1,0返还0,空值返还空值
1234567select sign(123) from dual;--返回1select sign(-123) from dual;--返回-1select sign(0) from ...
PLSQL包
PLSQL包例题:输入两个任意数,用函数返回两数之和,用存储过程打印两数之积
123456789101112131415161718192021222324252627282930create or replace function fun_0831_a(a number,b number) return number isd number;begin d:=a+b; return d;end;declarea number:=&值1;b number:=&值2;c number;begin c:=fun_0831_a(a,b); dbms_output.put_line(c);end;select fun_0831_a(12,12) from dual;create or replace procedure pro_0831_a(a number,b number) isv number;begin v:=a*b; dbms_output.put_line(v);end;begin pro_0831_a(&数1,&数2);end;call ...
PLSQL函数
函数
==函数== 带有括号,带有返还值(一个返回值)
==普通函数== Oracle系统自带的函数
函数的创建语法create or replace function 函数名(参数 参数类型 数据类型) return 返回值的数据类型 is/as–声明部分begin 执行语句; return 返回值;end;
调用方法1.select 函数名() from 表名; ==看不到打印与出参==
exec 函数名/execute 函数名 ==只能在命令提示行中执行—缺点看不到打印结果==
begin end 程序块调用declare 声明一个变量,用来承接返回值 ==类型要与return返回值的数据类型一致==begin 变量名 := 函数名(参数);end;
无参数的函数例:定义一个函数,打印一串文字
123456789101112 ...
PLSQL触发器
PLSQL触发器现有如下题目:
有表student(s_no, s_name, s_age, s_grade),其中s_no-学号,也是主键,是从1开始向上排的(例如:第一个学生学号是1,第二个是2,一次类推);s_name-学生姓名;s_age-学生年龄;s_grade-年级;这张表的数据量有几千万甚至上亿。一个学年结束了,我要让这些学生全部升一年级,即,让s_grade字段加1。这条sql,写出来如下:update student set s_grade=s_grade+1;但是我们直接运行这条sql,会因数据量太大会把数据库undo表空间撑爆,从而发生异常。那我们来写个存储过程,进行批量更新,我们每10万条提交一次。
12345678910111213create or replace procedure pro_student is zongrenshu number; xuehao number :=0;begin select count(1) into zongrenshu from student;--统计学员总人数 while xuehao < ...
异常处理
异常处理
因为PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行,所以我们需要异常处理语句
概念:异常情况处理 exception 是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误
异常分类:1.语法错误引发的报错2.程序运行错误引发的报错1234567891011121314151617语法错误案例,异常处理无法解决语法错误begin dbms_output.put_line('贾晶晶声音有点小')--报错原因:没写分号end;begin dbms_output.put_line(贾晶晶声音有点小);--报错原因:字符串没使用单引号end;程序运行错误declare v_emp emp%rowtype;begin select * into v_emp from emp;--错误原因:返回内容超出一条 dbms_output.put_line(v_emp.empno);end;我们所说的异常处理,指的都是程序运行错误
异常处理的分类1.预定义异常
–有错误编码,也有错误名称
or ...
条件查询
条件查询条件查询 where –哪儿基本语法:select 字段 from 表名 where 条件;
书写顺序 执行顺序select fromfrom wherewhere select
例子:
12345678910select * from emp where 1 = 1;select * from emp where 1 = 2;--在where中的条件,如果成立,及输出想要的内容,不成立不输出内容,但不会报错;查询姓名为史密斯的员工的所有信息select * from emp where ename = 'SMITH';select * from emp where ename = 'smith';--where查询的值 严格区分大小写select * from emp where 'SMITH';--错误,查找值时,前面要跟上对应的列名查询薪资为3000的员工的所有信息select * from emp where sal = 3000;
一. 逻辑运算 ...
视图
视图含义:将查询的结果动态保存到数据库中的一张虚拟表上。
特点:占用空间小,查询速度快,能像普通表一样使用,能动态获取结果。视图只有逻辑定义。每次使用的时候,只是重新执行SQL。
关键词:VIEW
完整语法:
1234567CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_nameASSELECT 查询[WITH READ ONLY CONSTRAINT]
语法详解:
OR REPLACE:如果视图已经存在,则替换旧视图。
FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。
视图分 ...
窗口函数
窗口函数语法:SELECT 聚合函数(字段) OVER(分组,排序),字段 FROM 表
–窗口函数的分组 PARTITION BY
1SELECT ENAME,SAL,MAX(SAL) OVER(PARTITION BY DEPTNO) "MAX_SAL" FROM EMP;
相当于字段,可以取别名。
聚合函数和窗口函数的==区别==:
1.聚合函数针对一组数据时只会返回一个值,窗口函数针对一组数据会返回相同数量的值。
2.聚合函数分组的关键词为GROUP BY,窗口函数分组的关键词为PARTITION BY
123456789101.查询每个部门的最高薪资SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO;2.查询每个部门最高工资员工的姓名和薪资SELECT ENAME,SAL FROM EMP WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO) ;SELECT ENAME,SAL FROM EMP WHERE SAL IN (SE ...