查询和单行函数:

范围查询:
数字/日期
betteen 小 and 大

SELECT * FROM EMP WHERE SAL BETWEEN 6000 AND 10000;

模糊查询:

LIKE :

配合通配符使用:_ :一个字符 %:任意字符

SELECT * FROM EMP WHERE EMPNO LIKE '7%';


如果有null 结果为空

排序:
:null默认是最大值

SELECT EMPNO,ENAME,SAL,COMM FROM EMP ORDER BY 1 ASC;


把null排序放在最后语法:

SELECT EMPNO,ENAME,SAL,COMM FROM EMP ORDER BY COMM DESC NULLS LAST;

多列排序:
函数:

单行字符函数
:一次性操作一行


字符函数 数值函数 日期函数 转换函数 通用函数
字符函数: lower upper initcap

SELECT 'HELlo wOrLd' 一,LOWER('HELlo wOrLd') 二,UPPER('HELlo wOrLd')三,INITCAP('HELlo wOrLd') FROM DUAL;


双行函数:一次操作多行 多行变一行
Substr(str begin len):从1开始数

SELECT SUBSTR('HELLO WORLD',3,3) FROM DUAL;


Length字符数/lengthb字节数
英文/数字
如果中文/符号:

utf-8编码格式下L一个汉字/符号 占三个字节

gbk:一个汉子/符号 占两个字节

SELECT LENGTH('HELLOWORLD') ,LENGTHB('HELLOWORLD') FROM DUAL;


查看当前编码格式:

SELECT * FROM NLS_DATABASE_PARAMETERS;


Instr

SELECT INSTR('helloworld','ll') FROM DUAL;


ipad/rpad:填充


SELECT LPAD('hello',10,'*')左,RPAD('hello',10,'*') FROM DUAL;


Trim:去掉任意空格

SELECT TRIM('    hello world      ') FROM DUAL;SELECT TRIM ('X' FROM 'XXXXXXhello worldXXXXXX') FROM DUAL;


替换:replace

SELECT REPLACE('你个垃圾','垃圾','**') FROM DUAL;


数字函数
数值函数:
Round(数字,n位数) 四舍五入,保留n为小数

SELECT ROUND(67.183,2)一,ROUND(67.183,1)二,ROUND(67.183,0)三,ROUND(67.183,-1)四,ROUND(67.183,-2) FROM DUAL;


Trunc(数字,n位数)舍尾,取整

SELECT TRUNC(67.183,2)一,TRUNC(67.183,1)二,TRUNC(67.183,0)三,TRUNC(67.183,-1)四,TRUNC(67.183,-2) FROM DUAL;


Mod求余

SELECT MOD(123,5) FROM DUAL;


日期函数
Sysdate 当前日期
SYSTIMESTAMP 函数:精确到微秒

SELECT SYSTIMESTAMP FROM DUAL;

格式化:日期》字符
to_char(日期,格式)

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;


日期+-数字(默认是天)
日期-日期
计算员工工龄:入职日期 天 星期 月 年

SELECT ENAME,HIREDATE,(SYSDATE-HIREDATE),(SYSDATE-HIREDATE)/7,(SYSDATE-HIREDATE)/30,(SYSDATE-HIREDATE)/365 FROM EMP;


Months_between(日期1,日期2)


add_months(日期,月数)

SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL;


当前最大是第几天 last_day

SELECT LAST_DAY(SYSDATE) FROM DUAL;


下一个星期n是哪天 next_day

SELECT NEXT_DAY(SYSDATE,'星期六') FROM DUAL;

对年 月四舍五入

SELECT ROUND(SYSDATE,'MONTH'),ROUND(SYSDATE,'YEAR') FROM DUAL;


EXTRACT(time)函数:返回指定 time 时间当中的年、月、日、分等日期部分。

SELECT EXTRACT(YEAR FROM TIMESTAMP '2021-3-16 19:53:44') AS YEAR,EXTRACT(MONTH FROM TIMESTAMP '2021-3-16 19:53:44') AS MONTH,EXTRACT(DAY FROM TIMESTAMP '2021-3-16 19:53:44') AS DAY,EXTRACT(HOUR FROM TIMESTAMP '2021-3-16 19:53:44') AS HOUR,EXTRACT(MINUTE FROM TIMESTAMP '2021-3-16 19:53:44') AS MINUTE,EXTRACT(SECOND FROM TIMESTAMP '2021-3-16 19:53:44') AS SECONDFROM DUAL;

第三章单行函数和多表查询


3.1 SQL函数
SQL函数可以完成如下功能:
执行数据计算。
修改单个数据项。
格式化显示的日期和数字。
进行数据类型转换。
根据行分组操纵输出。
 SQL函数分类关系图:

3.2字符.数字函数

Concat函数:
CONCAT(string1,string2)函数用于将两个字符串连接在一起

SELECT CONCAT('Oraol','.com') FROM DUAL;
SELECT CONCAT('A','B') FROM DUAL;


CONCAT函数将只允许您将两个值连接在一起。如果需要连接多个值,那么我们可以嵌套多个CONCAT函数调用。

SELECT CONCAT(CONCAT('A','B'),'C') FROM DUAL;


CONCAT函数向结果字符串添加单引号

Oracle || 运算符

string1 || string2 [ || string_n ]

||运算符将多个字段连接在一起时,连接空格字符。

SELECT 'Dave' || ' ' || 'Anderson' FROM dual;-- Result: 'Dave Anderson'

连接单引号:

SELECT 'LET '' S' || '--LEARN ORACLE' FROM DUAL;

Oracle数值型函数

​
1.ABS(x) 求数值x的绝对值
2.COS(x)求数值x的余弦
3.ACOS(x)求数值x的反余弦
4.CEIL(x)求大于或等于数值x的最小值
5.FLOOR(x)求小于或等于数值x的最大值
6.Log(x,y)求x为底y的对数
7.Mod(x,y)求x除以y的余数
8.Power(x,y)求x的y次幂
9.Sqrt(x)求x的平方根​

3.3转换函数

SQL语言提供了三种函数,实现从一种数据类型数据转换到另一种类型,它们分别是TO_CHAR、TO_NUMBER和TO_DATE。
数字转换为字符格式元素:

9    数字宽度(9的个数决定显示宽度)    2468
0    显示前导0    099999
$    美元符号    $999999
L    本地货币符号    L9999
.    指定小数点位置    999999.99
,    指定逗号位置    999,999
MI    将负数右边显示负号    -2468
PR    将负数加上括号    9999PR
EEEE    科学计数法    99.99999EEEE
V    乘n个10,n由V后 9 的个数决定    999999V99

Oracle聚合函数

count    取得记录数
sum    求和
Avg    取平均
Max    取最大的数
min    取最小的数

取得所有的员工数

SELECT COUNT(*) FROM EMP;

当一行数据所有字段全部为空的场合,count 方法有效 !
Distinct 可以去除重复的纪录。
 comm 字段有 null 值,无法计算,sum 会忽略掉,正确的做法是将 comm 字段转换成 0。

SELECT SUM(SAL+NVL(COMM,0)) FROM EMP;

取得最晚入职得员工

SELECT MAX(TO_CHAR(SYSDATE,'YYYY-MM-DD')) FROM EMP;

Convert函数

可以将字符串从一个字符集转换为另一个字符集

字符集

字符集    描述
US7ASCII    美国 7 位 ASCII 字符集
WE8DEC    西欧 8 位字符集
WE8HP    惠普西欧 Laserjet 8 位字符集
F7DEC    DEC 法语 7 位字符集
WE8EBCDIC500    IBM 西欧 EBCDIC 代码第 500 页
WE8PC850    IBM PC 代码第 850 页
WE8ISO8859P1    ISO 8859-1 西欧 8 位字符集

函数使用示列:

SELECT CONVERT('A B C D E F G H I','US7ASCII','WE8ISO8859P1') FROM DUAL;

Dump函数

可以返回一个 varchar2 值,这个值包含了数据类型代码、字节长度和表达式的内部表示形式
Dump()函数的使用示例:

SELECT DUMP('TECH',10) FROM DUAL;
SELECT DUMP('TECH',16) FROM DUAL;
SELECT DUMP('TECH',1016) FROM DUAL


Oracle行转列

SELECT * FROM (数据查询集)PIVOT
(  SUM(Score/*行转列后 列的值*/) FOR  coursename/*需要行转列的列*/ IN (转换后列的值))

列转行_unpivot

一行当中的列的字段按照行的唯一值转换成多行数据
如何实现列转行:
1.利用 union all 进行拼接,具体代码如下:

2.利用 Oracle 自带的列转行函数 unpivot

分析函数


它可以对数据进行分组,然后分析统计,最后返回这个统计值
Oracle 分析函数不同于分组统计(group by),group by 只能按照分组字段返回一个固定的统计值,但是不能在原来的数据行上带上这个统计值,而 Oracle 分析函数正是 Oracle 专门解决这类统计需求所开发出来的函数。
Oracle 分析函数都会带上一个开窗函数 over()

1、Analysis_function:指定分析函数名,常用的分析函数有 sum、max、first_value、last_value、rank、row_number 等等。
2、over():开窗函数名,partition by 指定进行数据分组的字段,order by 指定进行排序的字段,windos 指定数据窗口(即指定分析函数要操作的行数)
需求:在原始数据上附带上每门课的最高成绩和最低成绩。
代码如下:

select c.stuname,b.coursename,t.score,--获取组中成绩最大值max(t.score) over(partition by t.courseid) as score_max,--获取组中成绩最小值min(t.score) over(partition by t.courseid) as score_min,--分组窗口的第一个值 (指定窗口为组中第一行到末尾行)first_value(t.score) over(partition by t.courseid order by t.score desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as score_first,--分组窗口的最后一个值(指定窗口为组中第一行到末尾行)last_value(t.score) over(partition by t.courseid order by t.score desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as score_last,--分组窗口的第一个值 (不指定窗口)first_value(t.score) over(partition by t.courseid order by t.score desc ) as score_first_1,--分组窗口的最后一个值(不指定窗口)last_value(t.score) over(partition by t.courseid order by t.score desc ) as score_last_1from STUDENT.SCORE t, student.course b, student.stuinfo cwhere t.courseid = b.courseidand t.stuid = c.stuid

结果如下:

我们经常会利用 row_number 函数的排名机制(排名的唯一性)来过滤重复数据

内连接,外连接,自连接,层次连接


1.交叉连接

SELECT * FROM EMP , DEPT;
1.交叉连接(笛卡尔积);所有情况的组合,不推荐使用

3.内连接:多张表通过相同字段进行匹配,只显示匹配成功的;
A:

SELECT * FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO;

B:

SELECT * FROM EMP E
INNER JOIN DEPT D ON
E.DEPTNO = D.DEPTNO;

不等值连接:【一般不用】

SELECT * FROM EMP E,DEPT D WHERE E.DEPTNO != D.DEPTNO;


外连接:
左外连接:以左表为基准【左表数据全部显示】,去匹配右表数据,如果匹配成功 则全部显示;如果不成功,显示部分【无数据部分 用NULL填充】
右外连接:
全外连接:

单行函数和多表查询 例题代码可复制相关推荐

  1. oracle之单行函数之多表查询

    --多表查询 select employees.employee_id,employees.department_id,departments.department_name from departm ...

  2. oracle之单行函数之多表查询值之课后练习

    26. 多表连接查询时, 若两个表有同名的列, 必须使用表的别名对列名进行引用, 否则出错!27. 查询出公司员工的 last_name, department_name, cityselect la ...

  3. VLOOKUP函数制作多表查询(学生信息表/员工工资表)

    VLOOKUP函数制作多表查询(学生信息表/员工工资表) 一.vlookup函数定义 VLOOKUP函数是Excel中的一个纵向查找函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导 ...

  4. MySQL数据库的查询:常用查询语句、MySQL函数、多表查询、视图表

    文章目录 一.构造数据 二.常用的查询语句 1.SELECT:字段表达式 2.FROM 子句 3.WHERE 子句:按指定条件过滤 4.GROUP BY:分组查询 5.HAVING 6.ORDER B ...

  5. 【2020-2021春学期】数据库作业5:单表查询例题练习

    文章目录 单表查询 1.选择表中若干列 [例3.19]查询全体学生姓名和出生年份 [例3.20]查询全体学生姓名.出生年份.院系(用小写) 2.选择表中的若干元组 [例3.21]查询选修了课程的学生学 ...

  6. MySQL基础(3)----其他函数 约束 多表查询 子查询 组合查询

    1.其他函数 1.1.字符串函数  --- 操作字符串 常用函数: 函数 功能 CONCAT(s1, s2, ..., sn) 字符串拼接,将s1, s2, ..., sn拼接成一个字符串 LOWER ...

  7. MySQL单表查询例题

    一.单表查询 CREATE TABLE `worker` (  `部门号` int(11) NOT NULL,  `职工号` int(11) NOT NULL,  `工作时间` date NOT NU ...

  8. SQL 多表查询例题

    准备工作 1. 创建数据表 CREATE TABLE student( sno VARCHAR(10) PRIMARY KEY, sname VARCHAR(20),sage VARCHAR(2),s ...

  9. 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询

    [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 文章目录 [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 一.基础函数 二.聚合函数 1.COUNT 2.MAX/M ...

最新文章

  1. 再见,Python 2.x
  2. 冬奥闭幕式黑科技再次引爆全网,AR中国结、折柳寄情……还有212项科技藏在冬奥里...
  3. 三星S5 电信版(G9009D)Android 5.0系统,root教程【亲测可行】
  4. sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
  5. 使用SAT研究IBASE hierarchy读取性能
  6. 【dfs】【hash】有趣的英语角(2015特长生 T2/luogu 1019)
  7. 关于数组的 slice() 和 splice() 方法
  8. 如何利用PHP会话显示出当前在线的用户
  9. 显示所有大写字母python_python 输出所有大小写字母, range()以及列表切片
  10. 3.3 rsync同步之ssh隧道方式
  11. python-scrapy框架学习笔记
  12. WebWorker和Server-Sent Events和HTML5 WebSocket
  13. 用java画工作流流程图,java生成流程图
  14. AccessibilityService+OpenCV实现微信7.0.0抢红包插件
  15. 制作一个网站多少钱?2018最新网站制作明细表
  16. 查询一个表中的两个字段值相同的数据
  17. Nginx 启动报 bind() to 0.0.0.0:XXXX failed (13: Permission denied)
  18. 坚持技术长征,阿里云要定义下一代的云
  19. “WFCF”数据安全及隐私保护声明
  20. web 移动端电影项目 (Vue)

热门文章

  1. 进华科计算机 湖北省考生排名,全国考生最满意高校名单出炉,湖北华科居首,你的学校上榜了吗?...
  2. C++笔试题大全----下
  3. 记录一个网易云IM和直播功能中,服务器API的Java调用代码
  4. 进行域名解析时,递归和迭代查询方式是什么意思?
  5. 【指数编制系列二】数据标准化方法
  6. Livy REST API使用教程
  7. 常见的五大数据分析模型
  8. Mockito之使用Answer
  9. SDP offer-answer协商原则
  10. 统计学习方法——统计学习的分类