oracle多表关联查询和子查询

一、多表关联查询

例子:

SQL> create table student1
(
sid varchar(3),
sname varchar(6),
sage number(3)); Table created. SQL> create table course1
(
sid varchar(3),
cname varchar(8),
cno number(3)); Table created.

student1表

SQL> select * from student1;

SID SNAME        SAGE
--- ------ ----------
01 李逍遥 21
02 林月如 20
03 拜月 100

course1表

SQL> select * from course1;

SID CNAME           CNO
--- -------- ----------
01 历史 12
02 化学 11
22 德语 18

1、内连接(inner join……on/join on):只连接匹配的行

SQL> select * from student1 inner join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01 李逍遥 21 01 历史 12
02 林月如 20 02 化学 11

2、左连接(left join……on):包含左边表的全部行,不管右边表的是否存在与它们匹配的行

SQL> select * from student1 left join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01 李逍遥 21 01 历史 12
02 林月如 20 02 化学 11
03 拜月 100

3、右连接(right join……on):包含右边表的全部行,不管左边表是否存在与它们匹配的行

SQL> select * from student1 right join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01 李逍遥 21 01 历史 12
02 林月如 20 02 化学 11
22 德语 18

4、全外连接(full outer join……on或者full join……on):包含左右两张表的全部行,不管另外一边表中是否存在与它们匹配的行

SQL> select * from student1 full outer join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01 李逍遥 21 01 历史 12
02 林月如 20 02 化学 11
22 德语 18
03 拜月 100

一般,我们测试中常用的是内连接搭配函数(数值函数、统计函数、聚合函数等等)查询使用

二、oracle中常用函数

1、数值函数

ceil(n)返回大于或者等于数值n的最小整数

SQL> select ceil(10.7) from dual;

CEIL(10.7)
----------
11

floor(n)返回小于等于数值n的最大整数

SQL> select floor(12.3) from dual;

FLOOR(12.3)
-----------
12

mod(m,n)m除以n的余数,若n=0,则返回m,若m=0也返回m

SQL> select mod(7,5) from dual;

  MOD(7,5)
----------
2 SQL> select mod(6,3) from dual; MOD(6,3)
----------
0 SQL> select mod(3,0) from dual; MOD(3,0)
----------
3 SQL> select mod(0,4) from dual; MOD(0,4)
----------
0

power(n,m)m的n次方

SQL> select power(12,11)from dual;

POWER(12,11)
------------
7.4301E+11

round(n,m)将n四舍五入,保留小数点后m位

SQL> select round(3.657879,2) from dual;

ROUND(3.657879,2)
-----------------
3.66

sign(n)若n=0,则返回0,否则n>0,则返回1,n<0返回-1

SQL> select sign(19) from dual;

  SIGN(19)
----------
1 SQL> select sign(0) from dual; SIGN(0)
----------
0 SQL> select sign(-23) from dual; SIGN(-23)
----------
-1

sqrt(n)n的平方根

SQL> select sqrt(36) from dual;

  SQRT(36)
----------
6

2、常用字符函数

initcap(char)把每个字符串的第一个字符转成大写

SQL> select initcap('xiaosheng') from dual;

INITCAP('
---------
Xiaosheng

lower(char)整个字符串小写

SQL> select lower('SQL') from dual;

LOW
---
sql

replace(char,str1,str2)字符串中所有str1换成str2

SQL> select replace('xiaosheng','xiao','ting') from dual;

REPLACE('
---------
tingsheng

substr(char,m,n)取出从m字符开始的n个字符串的子串

SQL> select substr('xiaosheng',1,5) from dual;

SUBST
-----
xiaos

length(char)求字符串的长度

SQL> select length('meiyou ,dengwzhuceyige ') from dual;

LENGTH('MEIYOU,DENGWZHUCEYIGE')
-------------------------------
23

||并置运算符

SQL> select 'xiao'||'sheng' from dual;

'XIAO'||'
---------
xiaosheng

3、日期型函数

sysdate返回当前日期和时间

SQL> select sysdate from dual;

SYSDATE
------------
23-AUG-19

last_day本月的最后一天

SQL> select last_day(sysdate) from dual;

LAST_DAY(SYS
------------
31-AUG-19

add_months(d,n)当前日期d后推n个月

SQL> select add_months(sysdate,2) from dual;

ADD_MONTHS(S
------------
23-OCT-19

months_between(d,n)日期d和n相差月数

SQL> select months_between(sysdate,to_date('','YYYYMMDD')) from dual;

MONTHS_BETWEEN(SYSDATE,TO_DATE('','YYYYMMDD'))
------------------------------------------------------
204.373818

next_day(d,day):表示d后第一周指定day的日期

SQL> select next_day(sysdate,'Monday') from dual;

NEXT_DAY(SYS
------------
26-AUG-19

day格式有:Monday、tuesday、Wednesday、thursday、friday、saturday、Sunday

4、特殊格式的日期型函数

Y或Y或YYY:表示年的最后一位或者两位、三位

SQL> select to_char(sysdate,'YYYY') from dual;

TO_C
----
2019 SQL> select to_char(sysdate,'Y') from dual;#可以看出是从最后一位开始取值 T
-
9

Q:表示季度,1-3个月为一个季度

SQL> select to_char(sysdate,'Q') from dual;

T
-
3

MM:表示月份数

SQL> select to_char(sysdate,'MM') from dual;

TO
--
08

RM:表示将月份转换成罗马的日期格式

SQL> select to_char(sysdate,'RM') from dual;

TO_C
----
VIII

month:表示用英文字符表示月份(比如august指的是8月)

SQL> select to_char(sysdate,'month') from dual;

TO_CHAR(SYSDA
-------------
august

ww:表示当年的第几周

SQL> select to_char(sysdate,'ww') from dual;

TO
--
34

w:表示本月的第几周

SQL> select to_char(sysdate,'w') from dual;

T
-
4

DDD:表示当年第几天,一月一日是当年的第一天:001,二月一日是当年的第32天:032

SQL> select to_char(sysdate,'DDD') from dual;

TO_
---
235

DD:表示当月第几天

SQL> select to_char(sysdate,'DD') from dual;

TO
--
23

D:表示周内第几天

SQL> select to_char(sysdate,'D') from dual;

T
-
6 ----因为西方是把周日算成一周的第一天

DY:表示周内第几天缩写

SQL> select to_char(sysdate,'DY') from dual;

TO_CHA
------
FRI ----周五的缩写

hh12:表示12小时制小时数

hh24:表示24小时制小时数

Mi:表示分钟数

ss:表示秒数

TO_CHAR(
--------
02:53:13 ---12小时制 SQL> select to_char(sysdate,'hh24:Mi:ss') from dual; TO_CHAR(
--------
14:53:53 ---24小时制

to_number():将字符串数字化

SQL> select to_number('') from dual;

TO_NUMBER('')
-------------------
123333

to_char():表示将数字转换为字符串

5、聚合函数

avg(x):返回x的平均值

sum(x):返回x的和

count(x):统计x个数

MAX\MIN(x):返回x最大值或x最小值

median(x):返回x的中间值

stddev(x):返回x的标准差

【注意:使用聚合函数的注意事项】

(1)可以使用distinct去除重复数据,一般放在from前面

(2)如果查询中包含了聚合函数,选择的列不在聚合函数中,那么这些列就必须在group by 字句中,否则就会报错

(3)having字句可以用来过滤行组,可以放在group by 子句之后

三、子查询

子查询:指查询中嵌套查询,常放在列、表、条件上

语法:

select (子查询) from(子查询) where(子查询)group by(子查询)having(子查询)order by (asc/desc)子

oracle多表关联查询和子查询的更多相关文章

  1. oracle 两表关联查询

      oracle 两表关联查询 CreationTime--2018年7月4日17点27分 Author:Marydon 情景描述 查询学生表student,sname,sex,age信息及所在班级c ...

  2. mysql查询语句 和 多表关联查询 以及 子查询

    原文地址: http://blog.csdn.net/github_37767025/article/details/67636061 1.查询一张表: select * from 表名: 2.查询指 ...

  3. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  4. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  5. Python 41 多表查询 和 子查询

    1.查询             完整的查询语句             select [distinct] {* | 字段 | 聚合函数 | 表达式}from 表名                 ...

  6. MYSQL - 外键、约束、多表查询、子查询、视图、事务

    MYSQL - 外键.约束.多表查询.子查询.视图.事务 关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生 ...

  7. Server Sql 多表查询、子查询和分页

    一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...

  8. Python-数据库连表查询、子查询

    连表查询 [实例]通过例子来熟悉连表查询的概念 # 第一步:建表 # 建立英雄职业分类表格 create table classification( id int, name varchar(20) ...

  9. ORACLE复杂查询之子查询

    子查询分为两类:标准子查询和相关子查询. 一.标准子查询:子查询先于主查询独立执行,返回明确结果供主查询使用. 子查询只执行一次,不依赖于主查询. 例如: 其中子查询能够返回结果:2450.所以断定其 ...

随机推荐

  1. 决策单调性优化DP学习笔记

    用途 废话,当然是在DP式子满足某些性质的时候来优化复杂度-- 定义 对于\(j\)往大于\(j\)的\(i\)转移,可以表示成一个关于\(i\)的函数\(f_j(i)\),也就是\(dp_i=\ma ...

  2. linux中清理旧内核

    执行update的时候会自动升级内核,开机启动的时候会好多内核选项.所以我们要清理不需要内核. 查看当前系统使用的内核版本 uname -a Linux localhost.localdomain 3 ...

  3. Allure自动化测试报告之修改allure测试报告logo

    1.安装allure 2.进入 /usr/local/Cellar/allure/2.10.0/libexec/config 3.在allure.yml添加 - custom-logo-plugin ...

  4. C语言中怎样定义能够保存16进制整数的变量

    可以通过int 或long int存储,16进制整数说到底还是整数,16进制只是一种记数方式.例如,int x=0x16;十六进制(hexadecimal)只是计算机中数据的一种表示方法,规则是“逢十 ...

  5. 三十三、DNS资源记录类型和请求流程

    DNS分布均衡(Load balance)的实现 在上级数据库中写两条记录(同一个名字对应对个IP时),DNS会自动将请求基于轮循方式,分给每个DNS服务器 例如: 第一次将请求给第一个DNS,第二次 ...

  6. Hadoop namenode连接journalnode限制导致集群启动失败

    错误1:刚搭建的新集群,启动journalnode以后,格式化namenode节点,出现如下错误 注意其中划红线的地方. 出现这个错误的原因是journalnode节点还没有准备好,而namenode ...

  7. Spring Boot :Failed to instantiate SLF4J LoggerFactory Reported exception:

    Spring Boot出现以下错误: Failed to instantiate SLF4J LoggerFactory Reported exception: Failed to instantia ...

  8. 综述类文章(Peng 等)阅读笔记Cross-media analysis and reasoning: advances and directions

    综述类文章 Cross-media analysis and reasoning: advances and directions Yu-xin PENG et al. Front Inform Te ...

  9. SurfaceView概述和基本使用

    Android屏幕刷新一遍时间间隔为16ms,如果view能够在16ms内完成所需要执行的绘图换作,那么在视觉上,界面就是流畅的,否则就会出现卡顿现象,在很多情况下,这些逻辑处理又是必须的,为了解决这 ...

  10. IO流概述

    作用: 处理设备之间的数据传输的 I: Input(输入) , O: Output(输出) 什么是输入和输出? 我们说输入和输出问题是站在内存的角度而言 , 如果我们程序读取硬盘上的数据那么就是输入 ...