IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 通用SQL和PL/SQL(Oracle)用法 -> 正文阅读

[大数据]通用SQL和PL/SQL(Oracle)用法

--通用SQL:	
--1.CASE..WHEN --行转列
	SELECT 
		MAX(CASE WHEN deptId = 10 THEN prn ELSE 0 END) '10',
		MAX(CASE WHEN deptId = 20 THEN prn ELSE 0 END) '20',
		MAX(CASE WHEN deptId = 30 THEN prn ELSE 0 END) '30',
		SUM(prn) '总人数'
	FROM
		(SELECT deptId, COUNT(perNum) prn FROM personTable GROUP BY deptId)
	
--2.递归函数(树结构)
	--2.1.查询7369上级领导:
		SELECT area_id,area_name,LEVEL,SYS_CONNECT_BY_PATH(area_name,'-') 
		FROM emp e 
		START WITH area_id = 7369 --从area_id=7369开始
		CONNECT BY area_id = PRIOR p_area_id; --(p_area_id是area_id上级区域编号)
	--2.2.查询7566下属:
		SELECT area_id,area_name,LEVEL,SYS_CONNECT_BY_PATH(area_name,'-') 
		FROM emp e 
		START WITH area_id = 7566 
		CONNECT BY PRIOR area_id = p_area_id; --(p_area_id是area_id上级区域编号)
			
--PL/SQL:
--1.基本语法
	DECLARE --声明变量赋值
		v_date DATE := sysdate;
    BEGIN
	    dbms_output.put_line(V_DATE);
    END;
    
--2.常用变量
--dbms_output输出包
--dbms_random随机包
--dbms_job定时任务包
--%ROWTYPE声明的对象和表一样
--%FOUND取出游标成功,也就是FETCH语句成功,该属性为 true,否则为false
--%NOTFOUND取出游标失败,也就是FETCH 语句失败,则该属性是 true,否则为 false
--%ISOPEN游标是开着的,则返回 true ,否则返回false
--%TYPE声明的变量和表字段变量属性一样
	DECLARE
		v_record DICT_NATION%ROWTYPE;
	BEGIN
		SELECT * INTO v_record FROM DICT_NATION dn WHERE dn.NATION_CODE = 1;
		dbms_output.put_line(v_record.nation_code);
		dbms_output.put_line(v_record.nation_name);
	END;
		
--3.异常处理
	DECLARE
		v_status DICT_NATION.status%TYPE;
		v_dict NUMBER:=80;
	BEGIN
		SELECT status INTO v_status FROM DICT_NATION WHERE NATION_CODE < v_dict;
		IF v_status < 2 THEN
		UPDATE DICT_NATION SET status = 0 WHERE NATION_CODE = v_dict;
		COMMIT;
		END IF;
	EXCEPTION
		WHEN no_data_found THEN dbms_output.put_line('未找到该信息');
		WHEN too_many_rows THEN dbms_output.put_line('返回多条数据,请使用游标');
		WHEN OTHERS THEN dbms_output.put_line('其他异常');
	END;
		
--4.循环结构
	--4.1.LOOP循环
		DECLARE
			v_counter NUMBER:=57;
		BEGIN
			LOOP
				INSERT INTO DICT_NATION (NATION_CODE,NATION_NAME,PY_CODE,STATUS) VALUES (V_COUNTER, '汉奸', 'HJ','1');
				V_COUNTER:=V_COUNTER +1;
				EXIT WHEN V_COUNTER  > 60;
			END LOOP;
			COMMIT;
		END;
		
	--4.2.WHILE LOOP循环
		DECLARE
			v_counter NUMBER:=61;
		BEGIN
			WHILE V_COUNTER  < 65 LOOP
				INSERT INTO DICT_NATION (NATION_CODE,NATION_NAME,PY_CODE,STATUS) VALUES (V_COUNTER, '汉奸', 'HJ','1');
				V_COUNTER:=V_COUNTER +1;
			END LOOP;
			COMMIT;
		END;
		
	--4.3.FOR..IN..LOOP循环
		DECLARE
			v_counter NUMBER;
		BEGIN
			FOR v_counter IN 66..70 LOOP 
				INSERT INTO DICT_NATION (NATION_CODE,NATION_NAME,PY_CODE,STATUS) VALUES (V_COUNTER, '汉奸', 'HJ','1');
			END LOOP;
			COMMIT;
		END;
		
--5.游标
	DECLARE  
		v_code DICT_NATION.NATION_CODE%TYPE;
		v_name DICT_NATION.NATION_NAME%TYPE;
		--声明游标并赋值
		CURSOR c_nation IS SELECT MIN(NATION_CODE), NATION_NAME FROM DICT_NATION GROUP BY NATION_NAME HAVING COUNT(NATION_CODE) >1;
	BEGIN
		OPEN c_nation;--开启游标
			LOOP--循环
				FETCH c_nation INTO v_code,v_name;--遍历游标赋值给声明变量
				EXIT WHEN c_nation%notfound;--判断循环退出条件
				DELETE FROM DICT_NATION WHERE NATION_NAME = v_name AND NATION_CODE > v_code;--执行循环满足条件的语句
			END LOOP;--循环结束
		CLOSE c_nation;--关闭游标
	END;
		
--6.存储过程
	--存储过程的定义
	CREATE PROCEDURE mp(n1 IN OUT NUMBER, n2 IN OUT NUMBER)--IN OUT及作为输入也做为输出参数
	AS 
		temp NUMBER;
	BEGIN
		temp := n1;
		n1 := n2;
		n2 := temp;
	END;
	--存储过程的执行
	DECLARE 
		a1 NUMBER := 2;
		a2 NUMBER := 5;
	BEGIN
		mp(a1, a2);--执行方法
		dbms_output.put_line(a1);
		dbms_output.put_line(a2);
	END;
		
--7.分析函数	
	--7.1.分析函数聚合函数+OVER(PARTITION BY(PARTITION BY不写默认所有数据聚合) ..)
		SELECT 
			deptId, deptName, userName, sal, 
			SUM(sal) OVER () sum_sal,--总工资
			SUM(sal) OVER (PARTITION BY (deptId)) sum_dept_sal,--部门总工资
			SUM(sal) OVER (PARTITION BY (deptId) ORDER BY sal) leiji_sum_dept_sal--部门累计总工资
		FROM user_table ORDER BY deptId
		
		--分析函数和聚合函数的不同
			--1.普通聚合函数用group by分组,每个分组返回一个统计值
			--2.分析函数有partition by分组,每组每行都可返回一个统计值
			
	--7.2.分析函数之等级函数
		SELECT 
			deptId, deptName, userName,
			RANK() OVER(ORDER BY sal DESC) rank1,--排序12245
			DENSE_RANK() OVER(ORDER BY sal DESC) densk_rank1,--排序12234
			ROW_NUMBER() OVER(ORDER BY sal DESC) row_rank2--排序12345
		FROM user_table	
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:28:20  更:2022-04-01 23:31:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 21:22:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码