zoukankan      html  css  js  c++  java
  • 多表连接查询和内置函数

    多表连接查询

    内连接

    内连接查询必须两个表中有一个共同数据,可以是外键或者其他的什么东西,内连接的查询是非常需要where条件判断的。

    内连接的两种写法
    select * from t_zhao_banji t, t_hq b where t.hqbh = b.hanqbh;
    select * from t_zhao_banji t inner join t_hq b on t.hqbh = b.hanqbh;

    这种还是属于等值连接。
    select * from t_zhao_banji t inner join t_hq b on t.hqbh < b.hanqbh;
    这样的查询就是数不等值连接

    外连接

    分为左连接和右连接,想在一些表中有一些数据并不能完全匹配,内连接在这种情况下会造成数据丢失,所以就衍生出了外连接,保证了表内数据的完整性。
    select * from t_zhao_banji t left inner join t_hq b on t.hqbh < b.hanqbh;
    select * from t_zhao_banji t right inner join t_hq b on t.hqbh < b.hanqbh;
    外连接还有一种特殊的用法,就是使用(+)
    使用方法是必须使用where字句,放在非主表的后面,不能出现inner join字段。

    全连接
    select * from t_zhao_banji t FULL inner join t_hq b on t.hqbh < b.hanqbh;

    自连接
    select * from t_zhao_banji a, t_ zhao_banji b where a.hqbh = b.hqbh;

    内置函数

    dual是oracle里面的一个虚拟的表,不能删除。
    取绝对值abs(-100)

    select abs(-100) from dual;
    函数名 返回结果 参数
    select mod(8,3) from dual;
    取余数

    select ceil(12.5) from dual
    大于等于12.5的最小整数。

    select floor(12.5) from dual;
    小于12.5的最大整数

    select round(12.456, 2)from dual;
    取小数点后面2位小数,结果为12.46

    select trunc(12.345,1) from dual;
    截取小数点后面一位,通常用来取一个整数。

    select length(xingm) from t_zhao_banji;
    输出一个字段的长度

    select xingm, substr(xingm,1,2) from t_zhao_banji;
    截取一个字段的长度,这个表示从第一个开始截取,截取两位,如果将1改为-1,则是从后面的第一个开始截取,正负号表示的是从左边开始还是从右边开始

    select concat('呵呵',concat('hdjdsf','hsdfjs')) from dual;
    select '呵呵'||'哈哈'||'嘿嘿' from dual;
    连接字符串的两种写法,函数可以进行嵌套。

    select instr('abcdefg', 'd') from dual;
    查找一个字符在一个字符串的中的位置,如果一个字符串中有多个符合条件的字符,则只会找到第一个。
    也可以指定一个范围去查找,多用于比较长的字符串,
    select instr('a*sfkaj*sgkjsfsfe', '*', 3) from dual; 代表从第三位开始,会忽略前面两个字符。

    转换大小写
    select upper('qwer'), lower('QWER') from dual;

    将首字母转换成大写
    select initcap(this is a test) from dual;

    替换字符串中的某一个字符。
    select replace('abcdefg', 'ab', '123') from dual;

    填充字符到一个字符串内,不写明内容的话就是填充空格
    select lpad('aa', 8) from dual; 添加到左边
    select rpad('aa', 8) from dual;添加到右边
    select rpad('aa', 8, 'qw') from dual;在字符的右边添加字符,输出结果是aaqwqwqw

    日期型函数
    取出系统时间
    select sysdate from dual;
    设定另一个时间,
    select add_months(sysdate, 5) from dual;这个代表的是以系统时间为标准往后加上5个月,如果是负数,则是往前推5个月
    select last_day(sysdate) from dual;
    以系统时间为标准的当月的最后一天,函数后面是可以写+和-的,
    比如
    select last_day(sysdate) + 1 from dual;代表的是当前系统时间的当月的最后一天的明天。


    转换函数
    cast(数据 as 数据类型)
    select cast('123' as number) from dual;
    字符串转换成数字
    select cast(123 as varchar2(5)) from dual;
    数字转换成字符串
    字符串和数字有一个比较显著的区别,就是在表的单元格当中,数字一般都是右对齐出现的,字符串都是左对齐出现的。

    将系统的时间转换成字符串
    select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;
    在这个语句中yyyy-mm-dd是年月日的表达形式,hh24:mi:ss是时间的表达形式,24代表的24小时计时法,不加24则是12小时

    将数字格式化
    select to_char(123.456, '9999.9') from dual;
    oracle中用9表示数字的格式,小数点前面的9的位数如果大于数字小数点前面的位数,则输出空格,小于则输出乱码。

    将数字转换成日期
    select to_date('2015-10-29 16:36:45', 'yyyy-mm-dd hh24:mi:ss') from dual;
    转换成日期的时候需要加上格式符'yyyy-mm-dd hh24:mi:ss'

    将字符转换成数字
    这里需要注意的是,如果后面的9的位数小于要转换成数字的位数则会报错,所以9的位数必须大于等于要转换成的数字的位数。
    select to_number('123.456', '999.999') from dual;

    null函数
    select nvl(nianl, 20) from t_zhao_banji;
    将表格中为空的值替换成20。
    nvl,常用在表中运算是运算结果为空,比如:
    select nvl(nianl, 0) + nvl(gongzi, 0) from t_zhao_banji;

    select nvl2(nianl, 20, 50) from t_zhao_banji;
    这个语句的含义是将不为空的值替换成20,为空的替换成50

    select nianl from t_zhao_banji where lnnvl(nianl < 30);
    lnnvl关键字的含义是符合括号内条件的会被去除,输出剩下的数据。

  • 相关阅读:
    go时间和日期转换
    go操作mysql
    Python常见错误处理
    C++ 常见问题
    CF605E Intergalaxy Trips
    均分纸牌详解
    P4447 [AHOI2018初中组]分组
    P4537 [CQOI2007]矩形
    P4823 [TJOI2013]拯救小矮人
    P5132 Cozy Glow之拯救小马国
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/4921689.html
Copyright © 2011-2022 走看看