oracle笔记整理2
生活随笔
收集整理的這篇文章主要介紹了
oracle笔记整理2
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
--創(chuàng)建員工信息表
create table employee
(
empno number(4) not null,--員工編號
ename varchar2(10), --員工姓名
job varchar2(9), --員工工種
mgr number(4), --上級經(jīng)理編號
hiredate date, --受雇日期
sal number(7,2), --員工薪水
comm number(7,2), --福利
deptno number(2) --部門編號
);select * from employee;
--插入數(shù)據(jù)
insert into employee(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(1,'張一','程序員',1,'2016-02-05',3000,2000,1);
insert into employee(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(2,'張二','開發(fā)人員',3,'2017-06-05',5000,2000,2);insert into employee(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(3,'張三','測試人員',1,'2014-11-05',8000,5000,2);insert into employee(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(4,'張四','運維人員',2,'2017-02-02',10000,2300,1);insert into employee(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(5,'張五','發(fā)布',3,'2016-02-05',6300,36000,3);
--將scott里面的emp數(shù)據(jù)導入此表
insert into employee select * from scott.emp;
commit;
select * from employee;
--創(chuàng)建部門表和上級經(jīng)理表
create table bumen
(
buno number(2),--部門編號
buname varchar2(50) --部門名稱
);
select * from bumen;
--往部門表里面插入數(shù)據(jù)
insert into bumen(buno,buname)
values(1,'開發(fā)部');
insert into bumen(buno,buname)
values(2,'測試部');
insert into bumen(buno,buname)
values(3,'設計部');
insert into bumen(buno,buname)
values(4,'運維部');
insert into bumen(buno,buname)
values(5,'管理部');insert into bumen(buno,buname)
values(7902,'財務部');
insert into bumen(buno,buname)
values(7968,'福利部');
insert into bumen(buno,buname)
values(7698,'獎金部');
insert into bumen(buno,buname)
values(7839,'娛樂部');
insert into bumen(buno,buname)
values(7566,'搬磚部');insert into bumen(buno,buname)
values(7788,'前臺部');
insert into bumen(buno,buname)
values(7566,'看看部');
insert into bumen(buno,buname)
values(7782,'2222部');
insert into bumen(buno,buname)
values(7902,'1111部');
insert into bumen(buno,buname)
values(7839,'物流部');
insert into bumen(buno,buname)
values(7788,'廢物部');commit;select * from bumen;--創(chuàng)建上級經(jīng)理表
create table jinli
(
jno number(4),--經(jīng)理編號
jname varchar2(50) --經(jīng)理名稱
);
commit;
select * from employee;
--給經(jīng)理表里面插入數(shù)據(jù)
insert into jinli(jno,jname)values(1,'穆雄雄');
insert into jinli(jno,jname)values(2,'成志龍');
insert into jinli(jno,jname)values(3,'杜永杰');
insert into jinli(jno,jname)values(4,'王帥帥');
insert into jinli(jno,jname)values(5,'張思淼');insert into jinli(jno,jname)values(7839,'李白');
insert into jinli(jno,jname)values(7499,'杜甫');
insert into jinli(jno,jname)values(7521,'王偉');
insert into jinli(jno,jname)values(7566,'王安石');
insert into jinli(jno,jname)values(7654,'馮鞏');insert into jinli(jno,jname)values(7698,'曾鞏');
insert into jinli(jno,jname)values(7782,'歐陽修');
insert into jinli(jno,jname)values(7788,'王杰');
insert into jinli(jno,jname)values(7844,'馬強');
insert into jinli(jno,jname)values(7876,'劉三單');insert into jinli(jno,jname)values(7876,'李安');
insert into jinli(jno,jname)values(7900,'曹春喜');
insert into jinli(jno,jname)values(7902,'付婷婷');
insert into jinli(jno,jname)values(7934,'孫中天');
insert into jinli(jno,jname)values(7369,'李昂');insert into jinli(jno,jname)values(7499,'金鐘管');
insert into jinli(jno,jname)values(7521,'張瑞前');
insert into jinli(jno,jname)values(7566,'五保前');
insert into jinli(jno,jname)values(7654,'張何婷');
insert into jinli(jno,jname)values(7369,'孫浩');
select * from jinli;
delete from jinli where jno>5--刪除編號重復的,保留一個
delete from employee where rowid not in
(
select max(rowid) from employee group by empno
having (count(empno)>1) --查詢編號重復的
union
select max(rowid) from employee group by empno
having (count(empno)=1) --查詢編號不重復的
);--刪除編號大于5的員工信息
delete from employee where empno >5;
select * from employee;
--添加約束
select * from bumen;--先設置主鍵(員工表)
alter table employee
add constraint pk_empno primary key (empno);
--給部門表添加主鍵
alter table bumen
add constraint pk_buno primary key (buno);
--給經(jīng)理表添加主鍵
alter table jinli
add constraint pk_jno primary key (jno);--員工編號作為主鍵,部門編號作為外鍵與部門表相關聯(lián)
alter table employee
add constraint fk_deptno foreign key(deptno) references bumen(buno);--給員工信息表里面添加兩列(電話,地址)
alter table employee
add(empTel_no varchar2(12),
empAdress varchar2(20)
);--刪除電話和地址列
alter table employee
drop(empTel_no,empAdress);--按照薪水從高到低顯示數(shù)據(jù)
select * from employee order by sal desc;--上級3(分頁查詢)
--查詢員工薪水從高到低的排序為3-5的記錄SELECT *
FROM (SELECT e.*,rownum rn FROM (SELECT * FROM employee ORDER BY sal DESC) e)
WHERE rn>=3 AND rn<=5;--網(wǎng)上找的分頁查詢
--分頁查詢1
select * from
(
select a.*,rownum rn from
(
select * from scott.emp
)
a
)
where rn between 3 and 5;--分頁查詢2
select * from
(
select a.*,rownum rn from
(
select * from scott.emp
)a
where rownum <=5
)
where rn >=3;--自己寫的分頁查詢
select * from (select a.*,rownum rn from (select * from employee order by sal desc) a) where
rn>=2 and rn<=5--使用分析函數(shù)對員工表進行查詢
--DENSE_RANK必須大寫
select * from (
select employee.*,DENSE_RANK( ) over (partition by deptno order by sal desc) "DENSE_RANK"
from employee )e
where DENSE_RANK=2;--上機5
--round函數(shù)(四舍五入)
/*如何使用 Oracle Round 函數(shù) (四舍五入)
描述 : 傳回一個數(shù)值,該數(shù)值是按照指定的小數(shù)位元數(shù)進行四舍五入運算的結果。SELECT ROUND(number, [ decimal_places ] ) FROM DUAL
參數(shù):
number : 欲處理之數(shù)值
decimal_places : 四舍五入 , 小數(shù)取幾位 ( 預設為 0 )
Sample :
select round(123.456, 0) from dual;????????? 回傳 123
select round(123.456, 1) from dual;????????? 回傳 123.5
select round(123.456, 2) from dual;????????? 回傳 123.46
select round(123.456, 3) from dual;????????? 回傳 123.456
select round(-123.456, 2) from dual;??????? 回傳 -123.46
*/
---日期四舍五入
select ename "姓名",to_char(round (hiredate,'yyyy'),'YYYY')||'年度' 入職年度 from employee;--列出至少有一個雇員的所有部門
--distinct(查找重復的列)
select distinct deptno from employee;
--列出薪金比張三多的員工
select * from employee where sal >(select sal from employee where ename='張三');
--列出所有職位為程序員的姓名及其部門的名稱
select ename,job,bumen.buname from employee,bumen where employee.deptno=bumen.buno and job='程序員';
--列出各種工作類別的最低薪金,顯示最低薪金大于15000的記錄
select job, min(sal) from employee group by job having min(sal)>1500;
--找出個月最后一天受雇的所有雇員
select * from employee where hiredate=last_day(hiredate);/*
oracle的日期函數(shù)last_day 意思是得到每月的最后一天,用這個函數(shù),我們可以得到各種不同的日期.
1:得到當前月第一天與最后一天
*/
select
to_char(trunc(sysdate,'MONTH'),'yyyymmdd')firstday
, to_char(last_day(trunc(sysdate,'MONTH')),'yyyymmdd') lastdayfrom dual;--2:得到上月第一天與上月最后一天
SELECT to_char( last_day(add_months(SYSDATE, -2)) + 1 ,'yyyymmdd') firstday
,to_char(last_day(add_months(SYSDATE, -1)),'yyyymmdd')
lastday
FROM dual;
--3:得到上上個月第一天與上上個月最后一天
SELECT
to_char( last_day(add_months(SYSDATE, -3)) + 1 ,'yyyymmdd')
firstday
,to_char(last_day(add_months(SYSDATE, -2)),'yyyymmdd')lastday
FROM dual;
--4:得到下個月第一天與下個月最后一天
SELECT to_char( last_day(add_months(SYSDATE, 0)) + 1 ,'yyyymmdd')
firstday
,to_char(last_day(add_months(SYSDATE, 1)),'yyyymmdd')lastday
FROM dual;/*
======================================================
簡答題p38
======================================================
*/
--1.創(chuàng)建訂單表
create table orders
(
order_id number(12) primary key,?????????? --訂單編號
order_date date not null,????????????????? --訂貨日期
order_mode varchar2(8) not null,?????????? --訂貨模式
customer_id number(6) not null,??????????? --客戶編號
order_status number(2),??????????????????? --訂單狀態(tài)
order_total number(8,2),?????????????????? --總定價
sales_rep_id number(6),??????????????????? --銷售代表id
promotion_id number(6)???????????????????? --推廣員id
)--創(chuàng)建客戶表
create table customers
(
customer_id number(6) not null,??????????? --客戶編號
cust_fiest_name varchar2(20) not null,???? --名
cust_last_name varchar2(20) not null,????? --姓氏
nls_languages varchar2(3),???????????????? --語言
nls_territory varchar2(30),??????????????? --地域
credit_limit number(9,2),????????????????? --信貸限額
cust_email varchar2(30),?????????????????? --郵箱
account_mgr_id number(6),????????????????? --客戶經(jīng)理
marital_status varchar2(30),?????????????? --婚煙狀態(tài)
gender char(1)???????????????????????????? --性別
)--修改字段
alter table customers modify (gender char(2));
alter table customers modify (nls_languages varchar2(10));select * from customers
insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('1','虎虎','王','漢語','山西呂梁','3000','wanghuhu@163.com',1,'未婚','男');insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('2','雄雄','穆','英語','山西呂梁','8000','muxiongxiong@163.com',2,'未婚','男');
insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('3','永杰','杜','俄語','中國北京','1568','duyongjie@163.com',1,'未婚','男');
insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('4','嬌嬌','宋','法語','山西太原','6000','songjiaojiao@163.com',3,'已婚','女');
insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('5','思淼','張','漢語','山東濟南','6320','zahngsimiao@163.com',3,'未婚','男');
insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('6','春熙','曹','法語','山東濟南','3600','caochunxi@163.com',2,'已婚','男');
insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('6','兒子','王','法語','AMERICA','56000','america@163.com',3,'已婚','男');insert into customers (customer_id,cust_fiest_name,cust_last_name,nls_languages,nls_territory,credit_limit,cust_email,account_mgr_id,marital_status,gender)values('8','孫子','Fssdfs','韓語','中國北京','6320','Fssdfs@163.com',4,'未婚','女');
select * from customers--往訂單里面添加數(shù)據(jù)
select * from orders;
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(1,'2017-02-09','網(wǎng)上下單',2,1,323.23,1,2);
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(2,'2016-11-09','上門購買',1,2,56.00,2,1);
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(3,'2017-12-20','熟人推薦',3,1,6000,1,2);
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(4,'2015-12-02','網(wǎng)上下單',5,2,365,2,2);
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(5,'2017-12-09','上門購買',3,1,3210,1,2);
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(6,'2014-11-11','網(wǎng)上下單',3,1,630,2,2);
insert into orders(order_id,order_date,order_mode,customer_id,order_status,order_total,sales_rep_id,promotion_id)
values(7,'2017-01-01','上門購買',2,1,6300,1,2);
commit;select * from orders;--1.查詢客戶表中所有不重復的分地域(distinct)
select distinct nls_territory from customers;--2.在訂單表中找出總定價在1000-6000之間的訂單號
select order_id 訂單編號,b.cust_fiest_name 顧客姓氏,c.ename 經(jīng)理名字 from orders a join customers b on a.customer_id=b.customer_id join employee c on b.account_mgr_id=c.empnowhere order_id in
(
select order_id from orders where order_total>=1000 and order_total<=6000
);--3.在顧客表(Customers)中找出所在地域為AMERICA的客戶經(jīng)理名稱(Employee表的ename列)和薪水(employee表的sal列)。
select c.ename,c.sal from customers a join employee c on a.account_mgr_id=c.empno
where nls_territory='AMERICA'--4.在顧客表(Customers)中找出所在地域為AMERICA、山東濟南、山西呂梁和中國北京的客戶編號及語言。
select customer_id,nls_languages from Customers
where nls_territory='AMERICA' or? nls_territory='山東濟南' or nls_territory='中國北京';--5.在顧客表(Customers)中找出姓氏首字母為”F”的客戶編號和郵箱。
select customer_id 客戶編號,cust_email 郵箱 from customers
where cust_last_name like 'F%';--6.查出所有客戶姓名和所下的訂單編號
select cust_last_name,cust_fiest_name,b.order_id from customers a
join orders b on a.customer_id =b.customer_id
where a.customer_id in
(
select customer_id from orders
);/*
2. 根據(jù)員工表(Employee表)編寫一個語句,只有當最低工資少于 5000 而且最高工資超過7000時,才顯示部門 ID 以及該部門支付的最低工資和最高工資。
*/select deptno 部門編號,max(sal) 最高工資,min(sal) 最低工資 from employee
group by deptno
having min(sal)<5000 and max(sal)>7000;/*
3. 根據(jù)員工表(Employee表)編寫一個語句,顯示各部門的每個工作類別中支付的最高工資
*/
select deptno,job,max(sal) from employee
group by deptno,job
order by deptno,job;select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') from dual;
select to_char(sysdate,'YYYY"年"MM"月"DD"日" HH24:MI:SS') from dual;
select * from dual;
select SYS_CONTEXT('USERENV','TERMINAL') from dual;--獲得主機名
select TO_DATE ('2013-1-1','yyyy-mm-dd') from dual;--將字符串轉換成日期類型
select to_date('21210213','yyyy-mm-dd') from dual; --將字符串轉換成日期類型--刪除重復的記錄,保留一條
select max(rowid) from student
group by sage,sname
having (count(sage||sname)>1);
union
select max(rowid) from student
group by sname,sage
having (count(sage||sname)=1);/*
創(chuàng)建自增長
*/
--新建一個表
create table grade
(
id number(2) not null primary key,
name varchar2(12)
)--創(chuàng)建一個序列
create sequence grade_add
start with 1?? --從1開始
increment by 1? --每次加1
nocycle --一直累加--創(chuàng)建一個觸發(fā)器執(zhí)行
create or replace trigger grade_c
before insert on grade for each row when (new.id is null)
begin
select grade_add.nextval into:new.id from dual;
end;insert into grade(name) values('12班');
insert into grade (name) values('13班');
insert into grade (name) values('14班');
insert into grade(name) values('15班');
insert into grade (name) values('16班');
insert into grade (name) values('17班');select * from grade;
?????? nice,有的人可能之前沒學過數(shù)據(jù)庫,比如說my sql ,sql server 等等,直接上來就是oracle,所以,推薦一部視頻,即使你沒有學過sql server什么的,或者學過沒深入理解的,那么,請點擊這里,?密碼: 3ydr,一共46節(jié)課,足足夠你學會oracle了,拿走不謝!!!
總結
以上是生活随笔為你收集整理的oracle笔记整理2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推流电脑为什么叫推流机?
- 下一篇: oracle基本笔记整理及案例分析1