数据库教程:oracle多表关联查询和子查询

oracle多表关联查询和子查询 一、多表关联查询 例子: student1表 course1表 1、内连接(inner join……on/join on):只连接匹配的行 2、左连接(left join……on):包含左边表的全部行,不管右边表的是否存在与它们匹配的行 3、右连接(right jo …


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('20020812','yyyymmdd')) from dual;    months_between(sysdate,to_date('20020812','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('123333') from dual;    to_number('123333')  -------------------               123333

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

5、聚合函数

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

sum(x):返回x的和

count(x):统计x个数

maxmin(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多表关联查询和子查询,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/797317.html

(0)
上一篇 2021年9月11日
下一篇 2021年9月11日

精彩推荐