SQL Basic Example

Oracle11gscott用户数据查询
本文提供了一系列针对Oracle11g中scott用户的四张表(dept、emp、bonus、salgrade)的数据查询示例,包括基本查询、分组查询、连接查询、集合查询及子查询等,展示了SQL语言的强大功能。

对Oracle 11g scott用户下的4张表进行数据查询

 

SET linesize 500;
SET pagesize 100;

DESC dept;

DESC emp;

DESC bonus;

DESC salgrade;

--基本查询
SELECT * FROM dept;

SELECT * FROM emp;

SELECT * FROM bonus;

SELECT * FROM salgrade;

SELECT deptno, dname FROM dept;

SELECT DISTINCT deptno, job FROM emp;

SELECT ename, hiredate FROM emp
WHERE hiredate > '01-JAN-82';

SELECT ename, hiredate FROM emp
WHERE hiredate > TO_DATE('1982-01-01', 'YYYY-MM-DD');

SELECT deptno, sal, job, ename FROM emp
WHERE deptno = 20 AND (sal > 2500 OR job = 'CLERK');

SELECT deptno, sal, job, ename FROM emp
WHERE deptno IN(20, 30) AND job NOT IN('CLERK', 'SALESMAN');

SELECT sal, hiredate, comm, ename FROM emp
WHERE sal BETWEEN 2500 AND 3500
	AND hiredate BETWEEN TO_DATE('1981-01-01', 'YYYY-MM-DD') AND TO_DATE('1981-12-31', 'YYYY-MM-DD')
	AND comm IS NULL;

SELECT ename, sal, deptno FROM emp
WHERE ename LIKE 'A%' OR ename LIKE '_A%';

SELECT ename, job, TO_CHAR(hiredate, 'YYYY-MM-DD'), sal * 1.2
FROM emp
WHERE hiredate > TO_DATE('1982-01-01', 'YYYY-MM-DD');

SELECT rowid, rownum, ename, sal, deptno FROM emp
WHERE ename LIKE 'A%' OR ename LIKE '_A%';

SELECT deptno, ename, sal, comm FROM emp
WHERE sal BETWEEN 1500 AND 3000
ORDER BY deptno DESC, ename;

SELECT DISTINCT deptno , job FROM emp
WHERE deptno = 20
ORDER BY job;

--分组查询
SELECT empno, sal , comm
FROM emp WHERE deptno = 30;

SELECT avg(sal), avg(distinct sal), max(sal), min(sal), sum(sal), 
	count(*), count(sal), count(distinct sal), count(comm)
FROM emp WHERE deptno = 30;

SELECT deptno, avg(sal), max(sal) FROM emp
GROUP BY deptno
ORDER BY avg(sal);

SELECT deptno, job, avg(sal), max(sal) FROM emp
GROUP BY deptno, job;

SELECT deptno, job, avg(sal), max(sal) FROM emp
GROUP BY rollup(deptno, job);

SELECT deptno, job, avg(sal), max(sal) FROM emp
GROUP BY cube(deptno, job);

SELECT deptno, avg(sal), max(sal) FROM emp
WHERE deptno <= 50
GROUP BY deptno
HAVING avg(sal) > 2000;

--连接查询
SELECT deptno FROM dept WHERE deptno < 30;

SELECT deptno, ename FROM emp WHERE job = 'CLERK';

SELECT d.deptno, e.deptno, e.ename 
FROM dept d, emp e
WHERE d.deptno < 30 AND e.job = 'CLERK';

SELECT d.deptno, d.dname, e.ename, e.sal
FROM dept d, emp e
WHERE d.deptno = e.deptno AND d.deptno = 20;

SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal AND e.deptno = 30;

SELECT empno, ename, mgr FROM emp
WHERE deptno = 30;

SELECT e.ename, m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno AND e.deptno = 30;

--集合查询
SELECT empno, ename, mgr FROM emp WHERE deptno = 30
UNION ALL
SELECT empno, ename, mgr FROM emp WHERE job = 'MANAGER';

SELECT empno, ename, mgr FROM emp WHERE deptno = 30
UNION
SELECT empno, ename, mgr FROM emp WHERE job = 'MANAGER';

SELECT empno, ename, mgr FROM emp WHERE deptno = 30
MINUS
SELECT empno, ename, mgr FROM emp WHERE job = 'MANAGER';

SELECT empno, ename, mgr FROM emp WHERE deptno = 30
INTERSECT
SELECT empno, ename, mgr FROM emp WHERE job = 'MANAGER';


--子查询
SELECT ename, deptno, sal FROM emp
WHERE sal = (SELECT max(sal) FROM emp);

SELECT ename, deptno, sal, job FROM emp
WHERE job IN(SELECT distinct job FROM emp WHERE deptno = 20);

SELECT ename, deptno, sal, job FROM emp
WHERE job NOT IN(SELECT distinct job FROM emp WHERE deptno = 20);

SELECT ename, deptno, sal, job FROM emp
WHERE sal > ALL(SELECT sal FROM emp WHERE deptno = 20);

SELECT ename, deptno, sal, job FROM emp
WHERE sal > ANY(SELECT sal FROM emp WHERE deptno = 20)
ORDER BY deptno;

SELECT ename, deptno, sal, job FROM emp
WHERE (deptno, job) = (SELECT deptno, job FROM emp WHERE ename = 'SMITH');

SELECT ename, deptno, sal, job, mgr FROM emp
WHERE job IN(SELECT job FROM emp WHERE deptno = 20)
	AND mgr IN(SELECT mgr FROM emp WHERE deptno = 20)
ORDER BY deptno;

SELECT deptno, (
	SELECT max(sal) FROM emp b 
	WHERE b.deptno = a.deptno) maxsal
FROM emp a
ORDER BY deptno;

SELECT ename, deptno, sal, job FROM emp
WHERE EXISTS(
	SELECT 'x' FROM dept
	WHERE dept.deptno = emp.deptno AND dept.loc = 'NEW YORK');
	
SELECT distinct deptno, (
	SELECT max(sal) FROM emp b
	WHERE b.deptno = a.deptno) maxsal
FROM emp a
ORDER BY deptno;

 将以上语句放入一个sql文件中,如sqldemo.sql,在sqlplus中使用@ ${filepath}\sqldemo.sql命令执行查看结果。

 

 

本关任务:本关主题是通过读取外部数据源文本文件生成DataFrame,并利用DataFrame对象的常用Transformation操作和Action操作实现功能。已知学生信息(student)、教师信息(teacher)、课程信息(course)和成绩信息(score)如下图所示,通过Spark SQL对这些信息进行查询,分别得到需要的结果。     学生信息student.txt如下所示。 108,ZhangSan,male,1995/9/1,95033 105,KangWeiWei,female,1996/6/1,95031 107,GuiGui,male,1992/5/5,95033 101,WangFeng,male,1993/8/8,95031 106,LiuBing,female,1996/5/20,95033 109,DuBingYan,male,1995/5/21,95031     教师信息teacher.txt如下所示。 825,LinYu,male,1958,Associate professor,department of computer 804,DuMei,female,1962,Assistant professor,computer science department 888,RenLi,male,1972,Lecturer,department of electronic engneering 852,GongMOMO,female,1986,Associate professor,computer science department 864,DuanMu,male,1985,Assistant professor,department of computer     课程信息course.txt如下所示。 3-105,Introduction to computer,825 3-245,The operating system,804 6-101,Spark SQL,888 6-102,Spark,852 9-106,Scala,864     成绩信息score.txt如下所示。 108,3-105,99 105,3-105,88 107,3-105,77 相关知识 (1)创建SparkSession对象     通过SparkSession.builder()创建一个基本的SparkSession对象,并为该Spark SQL应用配置一些初始化参数,例如设置应用的名称以及通过config方法配置相关运行参数。 import org.apache.spark.sql.SparkSession val spark = SparkSession .builder() .appName("Spark SQL basic example") .config("spark.some.config.option", "some-value") .getOrCreate() // 引入spark.implicits._,以便于RDDs和DataFrames之间的隐式转换 import spark.implicits._ (2)显性地将RDD转换为DataFrame     通过编程接口,构造一个 Schema ,然后将其应用到已存在的 RDD[Row] (将RDD[T]转化为Row对象组成的RDD),将RDD显式的转化为DataFrame。 //导入Spark SQL的data types包 import org.apache.spark.sql.types._ //导入Spark SQL的Row包 import org.apache.spark.sql.Row // 创建peopleRDD scala> val stuRDD = spark.sparkContext.textFile("读取文件路径") // schema字符串 scala> val schemaString = "name age country" //将schema字符串按空格分隔返回字符串数组,对字符串数组进行遍历,并对数组中的每一个元素进一步封装成StructField对象,进而构成了Array[StructField] scala> val fields = schemaString.split(" ").map(fieldName => StructField(fieldName,StringType,nullable = true)) //将fields强制转换为StructType对象,形成了可用于构建DataFrame对象的Schema scala> val schema = StructType(fields) //将peopleRDD(RDD[String])转化为RDD[Rows] scala> val rowRDD = stuRDD.map(_.split(",")).map(elements => Row(elements(0),elements(1).trim,elements(2))) //将schema应用到rowRDD上,完成DataFrame的转换 scala> val stuDF = spark.createDataFrame(rowRDD,schema) (3)sql接口的使用     SparkSession提供了直接执行sql语句的SparkSession.sql(sqlText:String)方法,sql语句可直接作为字符串传入sql()方法中,sql()查询所得到的结果依然是DataFrame对象。在Spark SQL模块上直接进行sql语句的查询需要首先将结构化数据源的DataFrame对象注册成临时表,进而在sql语句中对该临时表进行查询操作。 (4)select方法     select方法用于获取指定字段值,根据传入的String类型的字段名,获取指定字段的值,以DataFrame类型返回。 (5)filter方法     filter方法按参数指定的SQL表达式的条件过滤DataFrame。 (6)where方法     where按照指定条件对数据进行过滤筛选并返回新的DataFrame。 (7)distinct方法     distinct方法用来返回对DataFrame的数据记录去重后的DataFrame。 (8)groupBy方法     使用一个或者多个指定的列对DataFrame进行分组,以便对它们执行聚合操作。 (9)agg方法     agg是一种聚合操作,该方法输入的是对于聚合操作的表达,可同时对多个列进行聚合操作,agg为DataFrame提供数据列不需要经过分组就可以执行统计操作,也可以与groupBy法配合使用。 (10)orderBy方法     按照给定的表达式对指定的一列或者多列进行排序,返回一个新的DataFrame,输入参数为多个Column类。
最新发布
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值