一些sql编写的注意点

oracle sql   高级查询和高效率开发sql

----1.基础语法: select....from..
----2.基本的一些数据的处理函数:
数据库

    =====字符串函数=====
    
    --->concat(p1,p2)    用来拼接两个字段
    --->||    用来拼接多个字段
    --->length(p)    字符长度
    --->upper、lower、initcap     大写,小写,首字母大写
    --->去除字符串两端的空格     TRIM() LTRIM() RTRIM()
    --->LPAD RPAD
            --LPAD 左补位  右对齐
            --RPAD  右补位  左对齐
    --->substr(str,a,b)从下标a开始截取字符串 str中 长度为b的字符串====a为正数表示从左边开始的第几个,a位负数,表示从右边开始的第几个
    --->instr(s1,s2[,n[,m]])    用来查询字符串s2在字符串s1中从下标为n开始,第m次出现的位置
    
    ====数字函数=========
    
    ---->round(n[,m])对数字n四舍五入    保留    m位小数,m默认为0,若是是-1表示四舍五入到十位
    ---->trunc(n[,m])对数字n             保存    m位小数,m默认为0,若是是-1表示保存到十位
    ---->round(a,b)    对数字a 取除以b的余数
    ---->ceil(n) 对数字n进行向上取整
    ---->floor(n) 对数字n进行向下取整
    
    ====日期类型========
    
    在日期格式的使用中凡是否是英文  数字 符号的其余字符所有要以双引号括起来
    
    ------date               
    ------timestamp            
                获取当前时间    sysdate 获取当前时间 默认格式--"DD-MM-RR"
                                systimestamp  获取当前时间    
    ------to_date(str1,format)    将日期类型的字符串str1以format形式的日期格式,转换成日期格式
                to_date('1992-09-01 23:22:11','YYYY“年”MM"月"DD“号” HH:mm:ss')
    ------日期类型的运算
                --将日期类型按照指定的字符串格式输出
                    to_char(sysdate,'YYYY-MM-DD HH24:mm:ss')
                --将日期加上一个数字,值就是在日期加减了指定的天数
                --两个日期的减法:值是两日期的天数差值
    ------获取某个月的最后一天
                LAST-DAY(date) 表示获取给定日期所在月的最后一天的值
                例如:select LAST_DAY(sysdate) from dual   输出---【2016/12/31 星期六 上午 9:59:48】
                      select LAST_DAY(to_date('2017-1-15','YYYY-MM-DD')) as lastDay from dual     输出【2017/1/31 星期二】
    ------获取两日期间的月数:months_between(date1,date2)
                例如:select floor(MONTHS_Between(sysdate,to_date('2015-07-01','YYYY-MM-DD'))) from dual
                    输入:【17】
    ------获取给定日期某个时间份量的值
                extract()
                例如:select extract(MONTH FROM SYSDATE) from dual 值为【12】
                
    ======一些特殊的运算======
    
    NULL与数字运算的结果是 null
    
    nvl(p1,p2)  若是p1为null 则函数的返回值是p2
    nvl2(p1,p2,p3) 若是p1不为Null 则值是拼、p2  不然值是p3
3.HQL语句
                            ===========查询条件的编写==============
        一些注意点:
            --1.在使用where条件时,and的优先级别要高于or的,若是非要让or先执行,则须要使用括号强行提升运算等级
            --2.like语句的通配符,    -   表示的是单一字符
                                    %   表示的是任意多个字符(0~多个)
            --3.如何判断某个值符合条件
                ---使用in(list) in not (list)     通常使用在子查询中
            --4.查询值是否在某个范围内时使用(between ...and)
            --5.ANY ALL使用
                    ---大于最大值    >ALL(List)
                    ---小于最小值    <ANY(LIst)
            --6.order by 排序
                    ---要注意的是若是在排序中发现有字符值为null时,那这个字段算最大值   asc 升序  默认为desc
            --7.distinct  去重函数
                    通常是要放在select关键词后面,distinct能够对某一个字段去重,也能够是对多个字段去重
            --8.聚合函数
                    ===============通常是用来统计结果的=================
                    min max count avg sum
4.group by 子句
            例如:查询出部门员工的平均工资高于2000的部门的平均工资
                    select avg(sal),deptno from emp  where avg(sal)>2000 group by deptno(错误)
                    --------注意点------
                        上面的查询看上去没什么问题,可是;
                        这个语句是错误的,问题在于,where的查询条件时机是在第一次查询数据表时加上去的,可是要在数据库中查询按这个聚合函数的条件查询数据那就彻底行不通了
                    修改成:
                    select avg(sal),deptno from emp where group by deptno 
                    having avg(sal)>2000;(正确)
5.having子句通常是跟在group by子句后面,一块儿联合使用的
oracle

6.关联查询                    函数

内链接         join....on......
外链接        LEFT|RIGHT|FULL join ...on.... 
天然链接    。。。通常使用来解决树状结构的状况
                (如在员工表中会有员工好也有员工上司号等
                )
spa

7.高级查询orm

子查询排序

exists关键字
通常使用在where子句中,起后面跟一子查询
no exists  
开发

8.分页查询字符串

常见的分页公式
start=(page-1)*pagesize+1
end=pagesize*page
it

分页方法  (先按要求排序----而后编号---再查询出行)  

相关文章
相关标签/搜索