Sql查詢和Sql函數
Orcal的數據類型:
|
數據類型 |
取值範圍 |
說明 |
字符型 |
Varchar2 |
4000 |
|
Nvachar2 |
1000 |
Unicode |
|
char |
2000 |
|
|
nchar |
1000 |
|
|
long |
2G |
|
|
數字型 |
Number(p,s) |
38十進制 |
P精度,s保留小數位數 |
Flaot |
126(2進制) |
|
|
日期型 |
公元前4712/1/1到公元9999/12/31(漏洞千年危機) |
|
|
|
Timestarmp |
|
|
--字符型
create table stl(
`name` char(10),
address varchar2(50)
);
insert into stl values('在','哈兒');
select * from stl;
--數值類型
create table st2(
id int,
ids number(10),
fen number(5,2)
);
insert into st2 values(18,1001,100.32);
select * from st2;
--時間(查詢顯示均以自帶格式爲準)
create table st3(
id int primary key,
birthday date
);
insert into st3 values(1002,sysdate);--系統時間
insert into st3 values(1004,'06-2月-2020');--自帶格式
insert into st3 values(1003,to_date('2020-2-3','yyyy-mm-dd'));--自定義格式
select * from st3;
- Orcal的sql查詢:
查詢中可以作運算:查詢員工表編號爲1001,1002,的名字和薪水,並且薪水+100
Select name salary+100 from empoly where empoId in(1001,1002);
查詢某列存在的:查詢員工表有薪水的
Select * from employ where salary is not null;
查詢時合併列:將員工表的工資合薪水合成一列:
Selet (sal|| comm) 薪水 empoly;
創建一張表(t2)並別一張表(t1)的信息複製過來
Create table t2 as select * from t1;
Orcal的函數:
分組函數:Group by和having
例:統計每個部門的平均工資,篩選出平均工資高於2000的
Select avg(salary) from employ group by department having avg(sal)>2000;
聚合函數:avg(),sum(),min(),max(),count(*)求總人數(分頁)
日期函數:
當天時間3個月後的今天
Select add_months(sysdate,3) from dual;
查詢當前2個月時間相差的月份數
Select months_between(sysdate,'11-11月-2020') from dual;
返回某個時間值的當月的最後一天,
Select last_day(sysdate) from dual;
返回當天時間這個周的最後一天是什麼時候(1-7之間,星期六爲第7天)
Select next_day(sysdate,7)from dual;
注:oracl存在虛擬表,這裏會用到dual表
分析函數:row_number(),rank(),dense_rank()
返回連續的排位,不倫值是否相等
Select row_number() over(order by salary) as emp_index,salary from employ;
具有相等值的行排位相同,序數隨後跳躍;
Select rank() over(order by salary) as emp_index,salary from employ;
具有相等值的行排位相同,序號是連續的;
Select dense_rank() over(order by salary) as emp_index,salary from employ;
Orcal的分頁:
顯示前10條記錄
Select employ.*,rownum 別名from employ where rownum<=10
顯示第6條到第10條記錄
Select *from(Select employ.*,rownum 別名 from employ where rownum<=10) Where rn>=6;
Java中的寫法:
Select *from(Select employ.*,rownum 別名 from employwhere rownum<=“+pageSize+pageNo+”)
Where rn>=”+pageSize*(pageNo-1)+1+”;
常用僞列:Rownum
僞列:只能作查詢,不能修改,增加,刪除