常用orcale代码块,方便自己快速查询和套用

--插入
insert into student
(student_no,STUDENT_NAME,student_age,student_sex,student_score) VALUES
('001','张三',20,'1',80);
--修改
update student set student_age=30 where STUDENT_NAME='张三';
--数据全部删除(可恢复)
DELETE from student;
--数据全部删除(不可恢复)
TRUNCATE TABLE student;
--更新-张三的姓名后面加一个单引号,  单引号-可当转义字符
update student set student_name='张三''' where student_name='张三';
--字符串的拼接||
'姓名是:'||student_name||',年龄是:'||student_age
--将一张表复制到另一张表
create table 新表名称 as select * from 源表名称; --新表不存在
insert into 目标表 select * from 源表           --新表已存在
update table_name set B =  A;      --同一张表中,将A字段的值赋给B字段
insert into 目标表(字段1,字段2,...) select 源表字段1,字段2... from 源表;
--将一张表的字段数据插入到另一张表的字段数据中查询
--查询所有
select * from employees;
--查询 姓名和薪水,重命名
select NAME as 姓名 from employees;
--条件查询
select * from EMPLOYEES where DATE>TO_DATE('1999-01-01','yyyy-mm-dd');
--多条件查询  -AND,OR
select * from EMPLOYEES WHERE job_id = 'IT_PROG' and SALARY>5000;
--查询 -(不等于  !=,<>)
select * from EMPLOYEES WHERE job_id != 'IT_PROG';
--集合范围查询-(某列在某个范围内,可以用in,不在范围内用not in)
select * from EMPLOYEES WHERE DEPARTMENT_ID in(30,60,100);
--区间范围查询-BETWEEN 左区间 and 右区间;
select * from EMPLOYEES WHERE SALARY BETWEEN 4000 and 5000;
--查询-判断一个列是否为空用is null, is not null
select * from EMPLOYEES WHERE manager_id is null;
--字符串拼接后重命名
select '姓名:'||NAME||',岗位:'||JOB_ID as 基本信息 from employees;
--模糊查询 like 'J%' %表示出现任意数量的任意字符 _表示出现一个任意字符
select * from EMPLOYEES where EMAIL like'%EE%';
--exists 检查子查询的结果是否为真,如果为true则执行外面的SQL语句
--exists不返回数据只返回true 或false系统函数
--统计函数:sum(列名) ,avg(列名),count(列名)个数,min(列名),max(列名),
--count列名建议采用唯一约束的列,或者非空的列,count函数会忽略值为空的行。
select count(employee_id) from employees;
select count(*) from employees;--不建议用*,解析所有的列,效率低
--(select部分如果出现了统计函数,select部分就不能出现其他列)
select  count(employee_id) from employees where department_id=60;
--avg(列名),min(列名),max(列名),
select   max(salary),min(salary),avg(salary)  from employees;
--空值处理函数  nvl(列名,参数)--如果列名对应的行为null,就显示右边参数值
select  first_name,nvl(commission_pct,0)   from employees  ;
--decode 函数 decode(参数,值一,结果一,值二,结果二,..,缺省值)缺省可以不要
select decode(salary,3000,'低收入',5000,'中等''其他')as 档次 from employees;
--Count 函数和distinct关键字:distinct去重
select count(distinct LAST_NAME) from EMPLOYEES;
select distinct department_id
from EMPLOYEES where department_id is not null;
--sign('参数')根据某个值是0、正数还是负数,分别返回0、1、-1,
--case条件语句
case(条件)
when 值1 then 返回值1
when 值2 then 返回值2
else 缺省值
– 写法二:
case when 条件1 then 返回值1
when 条件2 then 返回值2
else 缺省值
end;
--NULL
1. null 的意义(1) 表示 '未知' 或 '没有任何意义'(2) null 等同于 '' -- 请注意,'' 之间不能含有空格!
2. null 比较(1) 不能进行 '值比较': =、<>  -- 无返回结果(2) 只能进行 '逻辑比较':is null、is not null、exists、not exists
3. null 计算(1) 计算规则:null + 任何数 = null(2) null 计算时,建议先判空,如:nvl、nvl2、decode日期函数
--日期转字符串
select to_char(sysdate,'yyyy-MM-DD')from dual;
--生成guid唯一
SYS_GUID ()函数
--字符串转日期
select to_date('1987/06/17','yyyy/MM/dd')from dual;
--oracle 两个时间相减
MONTHS_BETWEEN(date2,date1)--给出date2-date1的月份
select months_between('19-12月-1999','19-3月-1999') mon_between from dual;
--两日期直接相减是相差天数字符串处理
select trim('    a  b   cd     ')from dual; --去除左右空格
select ltrim('    a  b   cd     ')from dual;--去除左空格
select rtrim('    a  b   cd     ')from dual;--去除右空格
select   instr('oracle wdp','wdp') from dual;
--instr函数返回要截取的字符串在源字符串中的位置分组
--按照department_id进行分组,显示department_id和相同department_id总人数
select nvl(department_id,0),count(*) as 数量
from EMPLOYEES group by nvl(department_id,0) order by 数量 asc;
---round(avg(salary),0)
select nvl(department_id,0),round(avg(salary),0)as 平均工资
from employees group by nvl(department_id,0)order by 平均工资 desc;
-- having
select department_id,round(avg(salary),0) from employees
group by department_id having round(avg(salary),0)>4000 ;保留小数
--ROUND(A/B,2)四舍五入
--TRUNC(A/B,2)非四舍五入
--TO_CHAR(A/B,‘FM99990.99’)
--注意model是‘9999999990.99’,小数点前面还有一个0
--否则data是0的时候就会显示  .00  而不是0.00组合查询
--条件嵌套查询
select name from EMPLOYEES where salary>
(select avg(salary) from EMPLOYEES where department_id=30)
and department_id=30;
--表嵌套查询
select t.COUNTRY_NAME from (
select a.COUNTRY_NAME,a.COUNTRY_ID from COUNTRIES a where a.REGION_ID=
(select b.REGION_ID from REGIONS b where b.REGION_NAME='Europe'))t
where t.COUNTRY_NAME like'F%';
--查询出每个部门中,高出本部门平均工资的员工的雇员号和姓名
select first_name,EMPLOYEE_ID from EMPLOYEES a,
(select DEPARTMENT_ID, avg(salary)as pj
from EMPLOYEES group by DEPARTMENT_ID)b--每个部门平均工资
where salary>b.pj and a.DEPARTMENT_ID=b.DEPARTMENT_ID;序列
--创建语法
create sequence 序列名称
[start with 初始量]
[increment by 递增量]
[maxvalue 最大值| nomaxvalue]
[minvalue 最小值| nominvalue]
[cycle | nocycle]
[cache 缓存个数| nocache];
--例子如下:
CREATE SEQUENCE  mysequence
START WITH 1  INCREMENT BY  2
MINVALUE 10 MAXVALUE 2000;
--使用序列
序列名.nextval
-- 查看用户下定义了哪些序列信息
SELECT * FROM user_sequences
ORDER BY sequence_name;
--删除序列
drop sequence 序列名;索引
--创建索引index_employees_name 给 first_name
create index index_employees_name on copy_employees(first_name);
alter index index_old rename to index_new;--重新命名索引
alter index index_name coalesce;--合并索引
alter index index_name rebuild;--重新构造
drop index index_name; --删除索引
--查看索引
select t.INDEX_NAME,--索引名字t.index_type,--索引类型t.TABLESPACE_NAME,--表空间t.status,--状态t.UNIQUENESS--是否唯一索引from all_indexes T where  t.INDEX_NAME='index_name'; 视图
create view student_view as select * from STUDENT;Oracle存储过程
--创建存储过程语法
create or replace procedure 存储过程名
as
begin----------------------------
end;
注:在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别;在视图(VIEW)中只能用AS不能用IS;在游标(CURSOR)中只能用IS不能用AS。
--调用存储过程declare --(可省略)beginmyDemo01; --在此处也可使用myDemo01();完成存储过程的调用end;--其他方法call myDemo01();--call 存储过程名可完成调用,注意括号不能少
--带有参数的存储过程
--in代表输入,out用于输出,参数默认类型是in类型。
create or replace procedure myDemo04(name out varchar,age in int)
as
begindbms_output.put_line('age='||age);select 'ex_sunqi' into name from dual;
end; --创建
declarename varchar(10);age int;
beginmyDemo04(name=>name,age=>25); --调用dbms_output.put_line('name='||name); --输出
end;
--变量声明 --在begin之前进行
1、格式:变量名 数据类型(大小) V_TEST varchar2(20);V_NUM  number;
2、%TYPE格式:变量名 表名.字段名%TYPE V_NAME DFGZ_PKG.NAME%TYPE;
3、%ROWTYPE格式:变量名 表名%ROWTYPE  V_TOTALL_ROW  V_TOTALL_ROW%ROWTYPE;
--变量赋值
1、:=
--赋值方法1:不能直接跟sql语句,不会执行。要使用sql返回结果可以用2、3
2、into eg: select name into V_NUM  from student where id='1';
--赋值方法2:查询字段实用1、2,查询整行适用3
3、v_sql := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410)'execute immediate v_sql INTO V_ORGSEQ;
--处理异常
create or replace procedure myDemo03
as
age int;
beginage:=1/0;dbms_output.put_line(age);--异常exception when others thendbms_output.put_line('error'); --输出error
end;
--循环--前100 个数
declare
total int:=0;
i int:=1;
begin
loop
total:=total+i;
i:=i+1;
exit when i>100;
end loop;
dbms_output.put_line('和为:'||total);
end;
--while 循环
create or replace procedure myDemo5
asn_count number := 0;
beginwhile n_count < 5 loopdbms_output.put_line(n_count);n_count := n_count + 1;end loop;
end;
--FOR循环
create or replace procedure myDemo06
as
beginFOR USE in (select * from T_USER_INFO) loopif (USE.id<3) thendbms_output.put_line(USE.USER_NAME);end if;end loop;
end;
--基本增删改查
create or replace procedure
mydemo07(ID in int, user_name in varchar,pssword in varchar)
as
begininsert into T_USER_INFO VALUES(ID,user_name,pssword);--UPDATE  T_USER_INFO t SET t.USER_NAME='sunqi' WHERE t.ID=ID ;--DELETE  T_USER_INFO t WHERE t.ID=ID ; commit; --提交
end;
-- if-else语句
begin
if score<60 and score>=0 thendbms_output.put_line('不及格');elsif score>=60 and score<=100 thendbms_output.put_line('及格');elsedbms_output.put_line('输入错误!');end if;
end;pl/sql
set serveroutput on;
--设置环境变量serveroutput为打开,使pl/sql程序能在SQL*plus中输出结果
--pl/sql程序基本格式--输出hellword
declare
begin
dbms_output.put_line('Hello Oracle!');
end;游标
1. 游标是什么?用来存储多条查询数据的一种数据结构('结果集'),它有一个 '指针',从上往下移动('fetch'),从而能够 '遍历每条记录'
2. 优缺点(1) 提高 sql '执行效率'(2) 牺牲 '内存'
--依次在控制台输出所有学生的信息
--存储过程中使用游标
declare
cursor cc is select * from student;
--定义航记录的类型
record student%rowType;
begin
--打开游标open cc;
--使用游标loop
--从游标一行一行取记录fetch cc into record;exit when cc%notfound;dbms_output.PUT_LINE('姓名是:'||record.STUDENT_name);end loop;--显示游标必须手动关闭if cc%isopenthen close cc;end if;
end;
--核心:先后顺序 = 先 fetch ... 再 exit when *%notfound
--游标4大属性
属性            返回值类型     作用
sql%isopen      布尔型         判断游标是否 '开启'
sql%found       布尔型         判断游标是否 '获取' 到值
sql%notfound    布尔型         判断游标是否'没有获取'到值(用于 "退出循环")
sql%rowcount    整型          '当前' 成功执行的数据行数(非 "总记录数")
显示游标详见参考链接,不常用未摘录。函数
create or replace function mtrim(str varchar)
return varchar
asv_str varchar(20);
beginselect replace(str,' ','') into v_str from dual;return v_str;
end;
--测试
select mtrim('   a  bc  d    e f    ') from dual;dual
--Oracle中的dual表是一个单行单列的虚拟表。
--Dual表是oracle与数据字典一起自动创建的一个表
--这个表只有1列:DUMMY,数据类型为VERCHAR2(1)
--只有一个数据'X', Oracle有内部逻辑保证dual表中永远只有一条数据。
--主要用来选择系统变量或求一个表达式的值。
--是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中
--查看当前连接用户
select user from dual;
--查看当前日期、时间
select sysdate from dual;触发器
create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
beginpl/sql语句
end
--插入触发器
create or replace trigger t1
before insert on person for each row
begindbms_output.put_line('Hello'||:NEW.id||:NEW.name);if :NEW.name like 'J%' thenRAISE_APPLICATION_ERROR(-20000,'限制写入以J开始的串');--在触发器中,不能写commit或是rollbackend if;
end;
--同时使用insert,update,delete类型的触发器:
create or replace trigger trigger1before insert or update or deleteon persondeclarebegindbms_output.put_line('hello');end;
--以下都会引发上面的触发器
set serveroutput on;
insert into person values(1,'Jack');
set serveroutput on;
update person set name='Tom';
set serveroutput on;
delete from person;

参考链接:

orcale复制表参考: https://blog.csdn.net/Ruishine/article/details/116602134

orcale代码块以此做底板整理: https://github.com/Hannaseyes/ORACLE

索引参考: Oracle索引 - FreeIT教程

存储过程参考:Oracle存储过程详细教程_最初的节奏的博客-CSDN博客_oracle存储过程教程

loop循环:Oracle中loop循环语法_MaBanSheng的博客-CSDN博客_oracleloop循环

游标参考:Oracle 游标详解(cursor)_鱼丸丶粗面的博客-CSDN博客_oracle游标

orcale-sql学习总结相关推荐

  1. 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)

    Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...

  2. oracle pl sql示例,oracle PL SQL学习案例(一)

    oracle PL SQL学习案例(一) [示例1.1]  查询雇员编号为7788的雇员姓名和工资. 步骤1:用SCOTT/TIGER账户登录SQL*Plus. 步骤2:在输入区输入以下程序: /*这 ...

  3. Spark学习笔记(7)---Spark SQL学习笔记

    Spark SQL学习笔记 Spark SQL学习笔记设计到很多代码操作,所以就放在github, https://github.com/yangtong123/RoadOfStudySpark/bl ...

  4. spark代码连接hive_spark SQL学习(spark连接hive)

    spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...

  5. 刚装的系统没有sql server(mssqlserver)_数据库与SQL学习

    本篇是数据分析系统学习专栏的第四篇文章--数据库与SQL学习.如果想要了解写作初衷,可以先行阅读如何系统学习数据分析. 数据库和SQL的基本概念 推荐阅读:怎么简单地理解数据库的概念? 核心概念: 数 ...

  6. Oracle之PL/SQL学习笔记之有名块练习

    2019独角兽企业重金招聘Python工程师标准>>> Oracle之PL/SQL学习笔记之有名块练习 存储过程案例: 案例1: 根据雇员姓名跟新雇员工资,如果雇员不存在输出没有该雇 ...

  7. sql学习练习题_学习SQL:练习SQL查询

    sql学习练习题 Today is the day for SQL practice #1. In this series, so far, we've covered most important ...

  8. sql学习指南_SQL格式功能的全面指南

    sql学习指南 This article explains the usage of SQL Format function and performance comparison with SQL C ...

  9. 【LittleXi】sql学习笔记

    [LittleXi]sql学习笔记 数据类型 INT 整数型 VARCHAR 字符串 DECIMAL(a,b) 浮点型(a代表位数,b代表小数位位数) BLOB 图片.影片.档案 DATA 日期 XX ...

  10. Sql 学习查询多种条件(记录自己常用一些方法,本人学习用)

    Sql 学习查询多种条件(记录自己常用一些方法,本人学习用) 根据 PROCDEFID 对表 BO_ACT_MPDL_PROCESS 最后就行查重 查出多余重复的数据 1.in和exists 方式二: ...

最新文章

  1. 实验四-常用图像增强方法
  2. 从MEMS专利数量分析我国MEMS传感器产业现状
  3. python处理excel字典-使用Python代码处理Excel
  4. 【VM单机模拟系列】VMware P2V简单实现
  5. 如何解决远程桌面无法连接问题--远程桌面连接工具
  6. 框架:初识Mybatis
  7. CVPR 2021 | Facebook提出FP-NAS:搜索速度更快、分类精度更高、性能更好
  8. c++ assert()断言
  9. 计算机网络( 二十二)-数据链路层(补充)
  10. JS小技巧 ----- 关于 ... 运算符的使用场景
  11. 6.高级Magento模型EAV
  12. eclipse3.7.2+KEmulator搭建J2ME开发环境
  13. 计算机毕业设计PHP基于微信小程序寸金校园租车平台(源码+程序+uni+lw+部署)
  14. 成功实现 微信消息自动推送 解放双手版 进来看
  15. 心态-《生活的艺术》书中的精髓:中国人享受生活,所以有着独特的生活的艺术,享受生活首先要有闲暇时光,也要去感受生活,才会体验到生活的乐趣
  16. matlab 颗粒碰撞,Lsdyna颗粒碰撞图 - 仿真模拟 - 小木虫 - 学术 科研 互动社区
  17. 带你快速看完9.8分神作《Effective Java》—— 序列化篇(所有RPC框架的基石)
  18. mogodb 基础与副本集(详细)
  19. Java代码审计前置知识——Spring框架AOP和IoC
  20. 愚人节整人软件测试自学,愚人节被玩坏的五大整人APP 帮你问鼎愚人节最佳损友...

热门文章

  1. 鸿蒙王者荣耀想要转区吗,王者荣耀转区功能终于开放,大区互通实现,微信玩家将难以生存?...
  2. 【泛刷题】gym101471 world final 2017 (G~L)
  3. 内推|滴滴招聘:销售策略运营+产品与用户运营+商业经营分析,|李锦记招聘:数据分析师...
  4. Linux 网络编程笔记3 | 内存 系统调用
  5. Redux01 续集
  6. 企业成功认定国家专精特新的申报条件
  7. 马斯克透露:SpaceX本周三将发射60颗太空互联网卫星
  8. 计算机教室情侣,网络热词:情侣自习间
  9. 手机变砖进入sw模式刷bin的问题
  10. 如何用python写查询名字程序_用Python写个迷你出门问问|10几行代码搞定