zoukankan      html  css  js  c++  java
  • oracle多表关联查询和子查询

    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)子

  • 相关阅读:
    ios学习-2015-7-9
    ios学习-2015-7-8
    ios学习-2015-7-7
    ios学习-2015-7-6
    ios学习-2015-7-5
    ios学习-2015-7-3
    ios学习-2015-7-2
    Selenium学习笔记之003:Web UI自动化知识点整理 分类: Selenium 2015-07-14 14:19 3人阅读 评论(0) 收藏
    Selenium学习笔记之002:IDE录制和回放 分类: Selenium 2015-07-12 17:13 19人阅读 评论(0) 收藏
    Selenium学习笔记之002:IDE录制和回放
  • 原文地址:https://www.cnblogs.com/xswt/p/11400359.html
Copyright © 2011-2022 走看看