您的位置:首页 > 数据库

一些sql编写的注意点

2016-12-26 16:44 225 查看
oracle 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子句后面,一起联合使用的

6.关联查询

内连接 join....on......
外连接 LEFT|RIGHT|FULL join ...on....
自然连接 。。。一般使用来解决树状结构的情况
(如在员工表中会有员工好也有员工上司号等


7.高级查询

子查询

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

8.分页查询

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

分页方法 (先按要求排序----然后编号---再查询出行)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql oracle