Oracle打開SQL文件,外鍵個(gè)人理解,nvl,decode函數(shù),創(chuàng)建自定義數(shù)據(jù)庫(kù)等【詩(shī)書畫唱】
內(nèi)容概括:
Oracle創(chuàng)建自己命名的數(shù)據(jù)庫(kù)的方法?
decode
目前一般使用可以不同用戶登錄,一起管理的系統(tǒng)自帶的ORCL數(shù)據(jù)庫(kù)
例子
講義
dual:廢表,不存在的表
自連接:一個(gè)表查兩次
作業(yè)
1、創(chuàng)建一個(gè)學(xué)生信息表stuinfo,包含學(xué)號(hào),姓名,生日(日期)。請(qǐng)通過(guò)一個(gè)sql語(yǔ)句顯示【姓名】的學(xué)號(hào)是【學(xué)號(hào)】,生日是【轉(zhuǎn)換成字符串的生日字段】。
2、創(chuàng)建一個(gè)商品表,包含編號(hào),商品名稱,商品價(jià)格,商品類型(食品,書籍和電器)。通過(guò)一個(gè)sql語(yǔ)句給商品類型是書籍的商品打1折,給商品類型是食品的商品打2.5折,給商品類型是電器的商品便宜500元。
3、創(chuàng)建一個(gè)成績(jī)表scoreinfo,包含編號(hào),科目,成績(jī)(成績(jī)可以為空)。顯示這個(gè)表中的所有成績(jī),當(dāng)成績(jī)?yōu)榭諘r(shí),顯示-1。
關(guān)于空值處理函數(shù)nvl的介紹
關(guān)于外鍵的添加和自己的理解
個(gè)人對(duì)為什么Oracle要授權(quán)才可以操作的情況的理解
Oracle中打開自己寫好并且保存好的SQL代碼的文件的方法(gif圖演示)
各種函數(shù)的運(yùn)用舉例(運(yùn)用舉例是我認(rèn)為很好的學(xué)習(xí)理解記憶等的方法)
目前一般使用可以不同用戶登錄,一起管理的系統(tǒng)自帶的ORCL數(shù)據(jù)庫(kù)

作業(yè) START
1、創(chuàng)建一個(gè)學(xué)生信息表stuinfo,包含學(xué)號(hào),姓名,生日(日期)。
請(qǐng)通過(guò)一個(gè)sql語(yǔ)句顯示【姓名】的學(xué)號(hào)是【學(xué)號(hào)】,
生日是【轉(zhuǎn)換成字符串的生日字段】。
? ? ? ? ? ? ? ? ? ? ? ?
create table stuinfo(
? ? id number primary key,
? ? name varchar2(30) not null,
? ? brithday date
);
insert into? stuinfo values(1,'詩(shī)書畫唱',to_date('2020-06-06','yyyy-mm-dd'));
insert into? stuinfo values(2,'三連',to_date('2020-07-07','yyyy-mm-dd'));
insert into? stuinfo values(3,'關(guān)注',to_date('2020-09-09','yyyy-mm-dd'));
select * from stuinfo
答:
select concat(concat(concat(name,'的學(xué)號(hào)是'),concat(id,',生日是'))?
,to_char(brithday,'yyyy-mm-dd'))txt from stuinfo;
2、創(chuàng)建一個(gè)商品表,包含編號(hào),商品名稱,商品價(jià)格,
商品類型(食品,書籍和電器)。
通過(guò)一個(gè)sql語(yǔ)句給商品類型是書籍的商品打1折,
給商品類型是食品的商品打2.5折,給商品類型是電器的商品便宜500元。
? ? ? ? ? ? ? ? ? ? ? ?
create table sp(
? ? id number primary key,
? ? name varchar2(30) not null,
? ? price number(10,2),
? ? type varchar2(30) check(type='食品' or type='書籍' or type='電器')
);
select * from sp
insert into? sp values(1,'辣條',0.50,'食品');
insert into? sp values(2,'《殺死一只知更鳥》',18.5,'書籍');
insert into? sp values(3,'冰箱',1000.00,'電器');
答:
select name,type,price,decode(type,'書籍',price*0.1,'食品',price*0.25,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '電器',price -500,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? price) from sp;
3、創(chuàng)建一個(gè)成績(jī)表scoreinfo,包含編號(hào),科目,
成績(jī)(成績(jī)可以為空)。顯示這個(gè)表中的所有成績(jī),當(dāng)成績(jī)?yōu)榭諘r(shí),顯示-1。
? ? ? ? ? ? ? ? ? ? ?
create table scoreinfo(
? ? id number primary key,
? ? km varchar2(30) not null,
? ? cj number(4,1)
? ?
);
insert into scoreinfo values(1,'Java',null);
insert into scoreinfo values(2,'python',100.0);
drop table scoreinfo
答:
select id,km,cj,nvl(cj,-1)? as result from scoreinfo;
--Decode函數(shù)使用示例:
create table emp(
? ? id number primary key,
? ? ename varchar2(30) not null,
? ? job varchar2(30),
? ? salary number(10,2)
);
insert into emp values(1,'John','項(xiàng)目經(jīng)理',15000);
insert into emp values(2,'Tom','開發(fā)人員',18000);
insert into emp values(3,'Kite','開發(fā)人員',18000);
insert into emp values(4,'巴菲特','CEO',40000);
insert into emp values(5,'Mop','后勤',6000);
--如果是CEO,保持原來(lái)的工資,如果是開發(fā)人員,加薪10%
--如果是項(xiàng)目經(jīng)理,加薪5%,如果是后勤,加薪500
select ename,job,salary, decode(job,'CEO',salary,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '開發(fā)人員',salary*1.1,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '項(xiàng)目經(jīng)理',salary*1.05,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '后勤',salary+500,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? salary)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? from emp




作業(yè) END
關(guān)于空值處理函數(shù)nvl的介紹 START
OraclePL/SQL中的一個(gè)函數(shù)。
格式為:
NVL(string1,replace_with)
功能:如果string1為NULL,則NVL函數(shù)返回replace_with的值,否則返回string1的值,如果兩個(gè)參數(shù)都為NULL,則返回NULL。
注意事項(xiàng):string1和replace_with必須為同一數(shù)據(jù)類型,除非顯式的使用TO_CHAR函數(shù)進(jìn)行類型轉(zhuǎn)換。
例:NVL(TO_CHAR(numeric_column),'somestring')其中numeric_column代指某個(gè)數(shù)字類型的值。
例:nvl(yanlei777,0)>0
NVL(yanlei777,0)的意思是如果yanlei777是NULL,則取0值
通過(guò)查詢獲得某個(gè)字段的合計(jì)值,如果這個(gè)值為null將給出一個(gè)預(yù)設(shè)的默認(rèn)值

關(guān)于空值處理函數(shù)nvl的介紹?END
有if-then-else判斷功能的DECODE函數(shù)的科普 START


有if-then-else判斷功能的DECODE函數(shù)的科普 END
關(guān)于外鍵的添加和自己的理解?START


【外鍵的話,是保存副表的內(nèi)容的完整性的。比如副表(我理解我為補(bǔ)充表)
比如類型表,如果是組合查詢時(shí)的下拉框的話,就是查詢類型表。使用了
外鍵把主表的信息表和類型表聯(lián)系起來(lái)后,就是
主表的typeid的數(shù)值中只會(huì)出現(xiàn)副表中出現(xiàn)的加了主鍵的編號(hào)id列
<int類型,有主鍵>出現(xiàn)的數(shù)值,添加數(shù)據(jù)到信息表的時(shí)候,
有一列typeid<int類型,無(wú)主鍵>,
防止操作員添加了無(wú)type表的id值到typeid列中,那么就是無(wú)效的數(shù)據(jù),
加了外鍵后,這種無(wú)效的數(shù)據(jù)是添加不到信息表里的。)】
【直接創(chuàng)建完整約束的表(寫項(xiàng)目的時(shí)候,一般就是用這種方法建表。
同時(shí)建表的時(shí)候,一般用管理員的身份創(chuàng)建表的時(shí)候,不用授權(quán),但是
普通用戶要。這是為了安全,2個(gè)不同的公司,互相合作時(shí),交互時(shí)授權(quán)后
才能訪問(wèn)更安全)】
create table spInformation?
(
id number primary key,
name varchar2(30),
price number(9,2),
typeid int
);
create table spType
(id number primary key,
name varchar2(30));
--刪除表
drop table spInformation;
drop table spType;
--加外鍵
【表創(chuàng)建成功后再添加外鍵約束
添加外檢約束 :alter table 從表表名 add constraint?
外鍵約束名稱 foreign key(列名) references 主表名稱(主鍵列名)】
alter table spInformation add constraint
?FK_spInformation foreign key(typeid) references spType(id);
——————————————————————————————————————————————————————
---建基本的表(一般是不會(huì)去用這種方法建表的):
create table spInformation?
(
id number,
name varchar2(30),
price number(9,2),
type varchar2(30)
);
create table spType
(id number primary key,
name varchar2(30));
--查詢表
select * from spInformation;?
select * from spType;?
--通過(guò)sql語(yǔ)句給商品信息表的id添加主鍵約束
alter table spInformation?
add constraint PK_id primary key(id);
--name添加唯一約束
ALTER TABLE spInformation
ADD CONSTRAINT unique_spInformation
UNIQUE (name)?
--id添加外鍵約束
【表創(chuàng)建成功后再添加外鍵約束
添加外檢約束 :alter table 從表表名 add constraint?
外鍵約束名稱 foreign key(列名) references 主表名稱(主鍵列名)】
alter table spType add constraint
?FK_spInformation foreign key(id) references spInformation(id);
--價(jià)格添加檢查約束(1-99999999元)
Alter table spInformation
Add constraint CK_spInformation check(99999999>price and price>=1)
--在商品信息表和商品類型表中輸入數(shù)據(jù)進(jìn)行測(cè)試。
insert into spInformation values(1,'詩(shī)書畫唱牌商品',999.99,'名牌類');
insert into spType values(1,'名牌類');
--select * from user_tablespaces ;
--select * from user_tablespaces ;




關(guān)于外鍵的添加和自己的理解?END
個(gè)人對(duì)為什么Oracle要授權(quán)才可以操作的情況的理解 START
【直接創(chuàng)建完整約束的表(寫項(xiàng)目的時(shí)候,一般就是用這種方法建表。
同時(shí)建表的時(shí)候,一般用管理員的身份創(chuàng)建表的時(shí)候,不用授權(quán),但是
普通用戶要。這是為了安全,2個(gè)不同的公司,互相合作時(shí),交互時(shí)授權(quán)后
才能訪問(wèn)更安全)】
create table spInformation?
(id number primary key,
name varchar2(30),
? ? ??
price number(9,2),
typeid int);
create table spType
(id number primary key,
name varchar2(30));
個(gè)人對(duì)為什么Oracle要授權(quán)才可以操作的情況的理解?END
Oracle中打開自己寫好并且保存好的SQL代碼的文件的方法(gif圖演示) START

Oracle中打開自己寫好并且保存好的SQL代碼的文件的方法(gif圖演示) END
講義 START

dual:廢表,不存在的表
自連接:一個(gè)表查兩次
講義?END
例子 START?
各種函數(shù)的運(yùn)用舉例(運(yùn)用舉例是我認(rèn)為很好的學(xué)習(xí)理解記憶等的方法):
--四舍五入
select round(3.29,1) from dual;
--截尾
select trunc(3.29,1) from dual;
--取余數(shù)
select mod(8,2) from dual;
select mod(3,7) from dual;
--轉(zhuǎn)換大小寫
select lower('Hello,WORLD') from dual;
select upper('Hello,WORLD') from dual;
--連接兩個(gè)字符串
select concat('app','le') from dual;
--將product表中的商品名稱和價(jià)格拼接成一個(gè)字符串
select concat(pname,price) txt from product;
--顯示Product表中的商品名稱和商品價(jià)格,商品價(jià)格保留一位小數(shù)
select pname,round(price,1) from product;
--截取字符串
--第一個(gè)數(shù)字表示需要截取的字母的下標(biāo)(從1開始的)
--第二個(gè)數(shù)字表示截取幾個(gè)字母
select substr('apple',3,2) from dual;
--截取userinfo表中的act的前兩個(gè)字母
select substr(act,1,2) from userinfo;
--獲取字符串的長(zhǎng)度
select length('abc') from dual;
--顯示userinfo表中所有act的長(zhǎng)度
select length(act) from userinfo;
--填充
--第二個(gè)參數(shù)表示填充完以后的字符串的長(zhǎng)度
--如果長(zhǎng)度不夠,就在左邊填充指定的字符
select rpad('hello',7,'@') from dual;
--在product表的price前面加上¥
select concat('¥',price) from product;
select lpad(price,(length(price) + 2),'¥') from product;
--去掉兩端的空格
select trim('? h? ?p? ?') from dual;
--顯示當(dāng)前日期
select sysdate from dual;
--日期和字符串的轉(zhuǎn)換
--將當(dāng)前日期顯示為yyyy-mm-dd
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
--將userinfo表中的生日顯示為yyyy-mm-dd的形式
select to_char(birth,'yyyy-mm-dd') from userinfo
--將字符串轉(zhuǎn)換成日期
--往userinfo表中插入一條數(shù)據(jù)
insert into userinfo?
values(8,'test',888,to_date('1990-12-4','yyyy-mm-dd'));
--空值處理函數(shù)
select nvl(price,0) from product;
create table score(
? ? id number primary key,
? ? sname varchar2(30) not null,
? ? subname varchar2(30),
? ? score number
);
--分支處理函數(shù),相當(dāng)if elseif else
--顯示score表中的所有成績(jī),如果是HTML,就減少5分,
--如果是C語(yǔ)言就加5分,如果spring就加10分
select subname,score,decode(subname,'HTML',score - 5,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'C',score + 5,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'spring',score + 10,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? score) from score;
create table emp(
? ? id number primary key,
? ? ename varchar2(30) not null,
? ? job varchar2(30),
? ? salary number(10,2)
);
insert into emp values(1,'John','項(xiàng)目經(jīng)理',15000);
insert into emp values(2,'Tom','開發(fā)人員',18000);
insert into emp values(3,'Kite','開發(fā)人員',18000);
insert into emp values(4,'巴菲特','CEO',40000);
insert into emp values(5,'Mop','后勤',6000);
--如果是CEO,保持原來(lái)的工資,如果是開發(fā)人員,加薪10%
--如果是項(xiàng)目經(jīng)理,加薪5%,如果是后勤,加薪500
select ename,job,salary, decode(job,'CEO',salary,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '開發(fā)人員',salary*1.1,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '項(xiàng)目經(jīng)理',salary*1.05,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '后勤',salary+500,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? salary)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? from emp
create table stuinfo(
? ? id number primary key,
? ? stuname varchar2(30) not null,
? ? deptname varchar2(30)
);
insert into stuinfo values(1,'小華','計(jì)算機(jī)系');
insert into stuinfo values(2,'小紅','舞蹈系');
insert into stuinfo values(3,'小麗','舞蹈系');
insert into stuinfo values(4,'小明','舞蹈系');
insert into stuinfo values(5,'小黑','計(jì)算機(jī)系');
insert into stuinfo values(6,'KKK','音樂系');
--查詢跟小紅在同一個(gè)系的所有的同學(xué)
--方法一:嵌套查詢
select id,stuname from stuinfo
where deptname=(select deptname from stuinfo
where stuname = '小紅')
--方法二:自查詢
select a.stuname from stuinfo a,stuinfo b
where a.deptname = b.deptname
and b.stuname = '小紅'
--查詢emp表中跟Tom是同一個(gè)JOB的員工的姓名
select b.ename from emp a, emp b where a.job=a.job and?
a.ename='Tom'
例子 END
目前一般使用可以不同用戶登錄,一起管理的系統(tǒng)自帶的ORCL數(shù)據(jù)庫(kù) START

目前一般使用可以不同用戶登錄,一起管理的系統(tǒng)自帶的ORCL數(shù)據(jù)庫(kù) END
Oracle創(chuàng)建自己命名的數(shù)據(jù)庫(kù)的方法 START
推薦:https://blog.csdn.net/yong5241200/article/details/11880383(這篇文章中的方法我沒用,推薦的原因就是讓讀者知道有這么一回事)
oracle database configuration assistant













