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*pageit
分頁方法 (先按要求排序----而後編號---再查詢出行)