日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle数据库语句大全

發布時間:2023/12/20 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle数据库语句大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle數據庫語句大全

Oracle數據庫是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直處于領先地位的產品。下面是Oracle數據庫建表、修改表、查詢語句。

--創建表

--語法:create table table_name(
-- ? ? ? ? ? ?column_name datatype,
-- ? ? ? ? ? ?...
-- ? ? ? ? ? ?);
create table emp(
? empno number(10) primary key ,--主鍵
? ename varchar2(20) not null unique,--不能為空,唯一
? job varchar2(10) default '匿名',--默認值,用單引號
? mgr number(10),
? hiredate date,--默認格式DD-MM-YY
? sal number(10,2),
? comn number(10,2),
? deptno number(10)
);
create table dept(
? deptno number(10) primary key,
? daname varchar(20) not null unique,
? loc varchar2(20)
);
commit;--提交
rollback;--回滾


--查詢表
select *from emp;
--查詢具體的列
select ename , job , mgr from emp;
--查看表的結構
desc emp;


--復制表
create table emp_copy as select*from emp;
--已經存在一張表的結構,卻復制其他表的數據
insert into emp_copy select *from emp;


--增加表字段
alter table emp_copy add (stjobdate date);
--修改字段
alter table emp_copy modify(stjobdate varchar2(20));
--刪除字段
alter table emp_copy drop(stjobdate);
--修改列名
alter table emp_copy rename column ename to empname;
alter table emp rename column comn to comm;


--插入記錄
--語法:insert into table_name(column1,column2,...) values(value1,value2,...);
insert into emp values(8001,'jodon','selesman',7698,to_date('2016-12-13','yyyy-mm-dd'),1250,1400,30);
insert into dept values(40,'OPERATIONS','BOSTON');
insert into dept(deptno,daname) values(50,'AILEN');


--修改記錄
--語法:update table_name set column1=value1,column2=value2,... where 條件;
update emp set empno=1000,ename='Obama' where empno=8001;


--可以按指定條件刪除表中指定的記錄,可以表的結構仍存在,優點支持事務,刪除后仍能恢復
--語法:delete table_name where 條件;
delete from emp where empno=8000;
--剪切表:刪除所有表中的記錄,性能比delete高,同時維護索引,刪除后無法恢復
--語法truncate table_name;
truncate table emp_copy;


--刪除表:刪除表結構和數據
drop table emp_copy;
--恢復刪除表
flashback table emp_copy to before drop;


--列的別名:可用as作為標識符,也可以直接空格加雙引號
select empno as "員工編號",ename "員工姓名" from emp;


--where條件
select empno,job from emp where ename='SMITH';
select ename,sal from emp where job='CLERK';


--運算符:
--1、算術運算符:+ - * / ?注意:表達式中只要有一個為空,整個表達式結果返回空:null + 1000 =null
--2、比較運算符:> >= < <= = 不等于:!= <>
--3、邏輯運算符:not and or [not]in [not]like between...and
--4、連接運算符:||
select 4+3 from dual;
select ename "姓名",sal "薪水" from emp where sal<>800;
select ename "姓名",sal "薪水" from emp where empno in(7369,7566,7839);--in()查詢與括號指定的記錄
select ename "姓名",sal "薪水" from emp where sal not between 800 and 1500;
select ename "姓名",sal "薪水" from emp where ename not like 'SMITH';
select 'abc'||'def' from dual;--連接:abcdef
select empno||':'||ename "編號與姓名" from emp;


--運算符優先級:
--1、算術運算符
--2、連接運算符
--3、比較運算符
--4、is[not] null,[not] like,[not]in
--5、[not]between...and
--6、not and or?
select ename "員工姓名",sal "員工薪水" from emp where (sal>800) or (not (sal<=1500));


--獲取唯一不重復的記錄:distinct
select distinct job from emp;


--null值判斷:is null 或者 is not null; 錯誤:column=null;
select *from emp where mgr is not null;


--排序:order by column1,column2,...;必須放在select語句的最后!兩種:(默認)升序:asc 降序:desc
select ename,sal ?from emp order by sal desc,ename;
select ename "姓名",sal "工資" from emp order by "工資" desc,"姓名";--用別名排序
select ename,sal ?from emp order by 2 desc,1;--用列的順序排序


--模糊查詢[not]like
--通配符:%:任意0-n個任意字符 ? _:任意一個字符
select *from emp where ename like '%S%';--含有S字符
select *from emp where ename like 'S%';--S字符在前
select *from emp where ename not like '%S';--S字符后
select *from emp where ename like '_L%';--第二個字符為L


--字符串函數
--大小寫轉換
select lower(ename) from emp;--小寫
select upper(ename) from emp;--大寫
select lower('AAA') from dual;--aaa
select initcap('AAA') from dual;--首字母大寫:Aaa
select concat('aaa','bbb') from dual;--連接字符:aaabbb
select lpad('abcde',10,'*') from dual;--左邊填充:*****abcde
select rpad('abcde',10,'*') from dual;--右邊填充:abcde*****
select trim('=' from '====abc==defg===') from dual;--兩邊壓縮:abc==defg
select ltrim('====abc==defg===','=') from dual;--左邊壓縮:abc==defg===
select rtrim('====abc==defg===','=') from dual;--右邊壓縮:====abc==defg
select length(ename)from emp;--獲取字符串的長度
select substr(ename,2,3) "姓名" from emp;--從指定的列第2個字符開始截取3個字符
select instr('abcdef','cd')from dual;--獲取子字符串所在的位置
select chr(65)from dual;--獲取字符
select ascii('a')from dual;--獲取奧斯卡碼(ASCII)
select replace('abcfdefdhifjk','f','*') from dual;--將f替換成*:abc*de*dhi*jk


--數值函數
--1、abs絕對值
--2、ceil ?只產生大于或等于指定值的最小整數
--3、floor 只產生小于或等于指定值的最大整數
--4、mod ? 求余
--5、power 求指數
--6、sqrt ?求平方根
--7、round 截斷保留,四舍五入
--8、trunc 截斷保留,不四舍五入
select abs(-3)from dual;
select ceil(10.5)from dual;
select floor(10.5)from dual;
select mod(5,2)from dual;--余1
select power(2,3)from dual;--
select sqrt(4)from dual;
select round(5.55,1)from dual;--小數點后面1位被截斷,并四舍五入:5.6
select round(5.5,0)from dual;--小數點截斷,并四舍五入,保留整數:6
select trunc(15.5,-1)from dual;--小數點前面1位被截斷,并不四舍五入:10


--日期函數
--1、sysdate
--2、last_day()本月最后一天
--3、add_months(d,n)
--4、months_between(f,s)
--5、current_timestamp
--6、extract 找出日期或間隔值得字段值
--日期格式:
YY,YYYY
Q 季度
MM 月份數
WW 當年第幾周
W 本月第幾周
DDD 當年第幾天
DD 本月第幾天
D 本星期第幾天
DY 本星期第幾天縮寫
--時間格式:
24小時制:HH24:MI:SS
12小時制:HH12:MI:SS
select sysdate from dual;--系統時間
select current_timestamp from dual;--系統時間戳
select last_day(sysdate) from dual;
select add_months(sysdate,3) from dual;
select months_between(sysdate,hiredate),sysdate,hiredate from emp;?
select extract(month from sysdate) "This Month" from dual;--找到當前系統時間的月份


--nvl函數:判定空值
--1、nvl格式:nvl(expr1,expr2):如果expr1為空,則返回expr2
--2、nvl2格式:nvl2(expr1,expr2,expr3):如果expr1不為空,則返回expr2;如果expr1為空,則返回expr3
--3、nullif函數:nvullif(expr1,expr2):如果expr1,expr2相等則返回空(null),否則返回第一個值expr1
--4、coalesce函數:coalesce(expr1,expr2,expr3,...exprn):返回expr1,expr2,expr3,...exprn中第一個部位null的值
select sal,comm,sal+nvl(comm,0) "工資總和" from emp;
select sal,comm,sal+nvl2(comm,10000,0) "工資總和" from emp;
select sal,comm,sal+nullif(sal,comm) "工資總和" from emp;
select coalesce(null,null,11,22,null,33)from dual;


--轉換函數
--1、數值轉為字符串
--2、字符串轉為數值
--3、日期到字符串
--4、字符串到日期
select 'aaa'||123 from dual;
select to_char(123) from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;
select to_number('1234') from dual;
select to_date('2016-12-12','yyyy-mm-dd')from dual;--格式要匹配


--多行函數
--1、count()計數
--2、max()最大值
--3、min()最小值
--4、sum()求和
--5、avg()求平均值
select count(*) 總人數 from emp;--不忽略null
select count(comm) 總人數 from emp;--count(列名)會忽略null
select count(*) "總人數",max(sal) "最高薪水", min(sal) "最低薪水" ,sum(sal) "薪水總和",trunc(avg(sal),2) "平均薪水" from emp;?


--分組查詢 group by?
--select 之后的非參數列必須出現在group by 列的之后
select deptno "部門編號",count(*) "部門總人數",max(sal) "部門最高薪水", min(sal) "部門最低薪水" ,sum(sal) "部門薪水總和",trunc(avg(sal),2) "部門平均薪水"
? from emp?
? ? group by deptno;
? ??
--連接查詢
--笛卡爾積:行乘列加
select *from emp,dept;


--等值查詢
--內連接:where , ?a inner join b on 條件;內連接可以省略inner
select * from emp,dept where emp.deptno = dept.deptno;
select * from emp inner join dept on emp.deptno = dept.deptno;


--給表取別名:在表后面空格+別名
select * from emp e,dept d where e.deptno = d.deptno;


--全外連接outer join on
select dname,ename from dept d full outer join emp e on e.deptno = d.deptno;
--左外連接left outer join on ?右連接right outer join on ?全外連接:full outer join on
select dname,ename from dept d left outer join emp e on e.deptno = d.deptno;--左連接
select ename,dname from dept d left join emp e on e.deptno = d.deptno;--右連接


--n張表連接,n-1個條件
select *from emp e,dept d,salgrade s?
? where e.deptno=d.deptno and e.sal between s.losal and s.hisal;


--自連接:自己連接自己
select e1.ename "員工姓名",e2.ename "直接領導"from emp e1 left join emp e2
? on e1.mgr=e2.empno;


--子查詢
select * from emp where deptno=(select deptno from emp where ename='SMITH');
select * from emp where sal>(select sal from emp where ename='SMITH');


--all ?any ? exists存在
select ename from emp where
exists(select *from emp where sal>2000);

總結

以上是生活随笔為你收集整理的Oracle数据库语句大全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。