Oracle打开SQL文件,外键个人理解,nvl,decode函数,创建自定义数据库等【诗书画唱】
内容概括:
Oracle创建自己命名的数据库的方法
decode
目前一般使用可以不同用户登录,一起管理的系统自带的ORCL数据库
例子
讲义
dual:废表,不存在的表
自连接:一个表查两次
作业
1、创建一个学生信息表stuinfo,包含学号,姓名,生日(日期)。请通过一个sql语句显示【姓名】的学号是【学号】,生日是【转换成字符串的生日字段】。
2、创建一个商品表,包含编号,商品名称,商品价格,商品类型(食品,书籍和电器)。通过一个sql语句给商品类型是书籍的商品打1折,给商品类型是食品的商品打2.5折,给商品类型是电器的商品便宜500元。
3、创建一个成绩表scoreinfo,包含编号,科目,成绩(成绩可以为空)。显示这个表中的所有成绩,当成绩为空时,显示-1。
关于空值处理函数nvl的介绍
关于外键的添加和自己的理解
个人对为什么Oracle要授权才可以操作的情况的理解
Oracle中打开自己写好并且保存好的SQL代码的文件的方法(gif图演示)
各种函数的运用举例(运用举例是我认为很好的学习理解记忆等的方法)
目前一般使用可以不同用户登录,一起管理的系统自带的ORCL数据库

作业 START
1、创建一个学生信息表stuinfo,包含学号,姓名,生日(日期)。
请通过一个sql语句显示【姓名】的学号是【学号】,
生日是【转换成字符串的生日字段】。
create table stuinfo(
id number primary key,
name varchar2(30) not null,
brithday date
);
insert into stuinfo values(1,'诗书画唱',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,'关注',to_date('2020-09-09','yyyy-mm-dd'));
select * from stuinfo
答:
select concat(concat(concat(name,'的学号是'),concat(id,',生日是'))
,to_char(brithday,'yyyy-mm-dd'))txt from stuinfo;
2、创建一个商品表,包含编号,商品名称,商品价格,
商品类型(食品,书籍和电器)。
通过一个sql语句给商品类型是书籍的商品打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、创建一个成绩表scoreinfo,包含编号,科目,
成绩(成绩可以为空)。显示这个表中的所有成绩,当成绩为空时,显示-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函数使用示例:
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','项目经理',15000);
insert into emp values(2,'Tom','开发人员',18000);
insert into emp values(3,'Kite','开发人员',18000);
insert into emp values(4,'巴菲特','CEO',40000);
insert into emp values(5,'Mop','后勤',6000);
--如果是CEO,保持原来的工资,如果是开发人员,加薪10%
--如果是项目经理,加薪5%,如果是后勤,加薪500
select ename,job,salary, decode(job,'CEO',salary,
'开发人员',salary*1.1,
'项目经理',salary*1.05,
'后勤',salary+500,
salary)
from emp




作业 END
关于空值处理函数nvl的介绍 START
OraclePL/SQL中的一个函数。
格式为:
NVL(string1,replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL,则返回NULL。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换。
例:NVL(TO_CHAR(numeric_column),'somestring')其中numeric_column代指某个数字类型的值。
例:nvl(yanlei777,0)>0
NVL(yanlei777,0)的意思是如果yanlei777是NULL,则取0值
通过查询获得某个字段的合计值,如果这个值为null将给出一个预设的默认值

关于空值处理函数nvl的介绍 END
有if-then-else判断功能的DECODE函数的科普 START


有if-then-else判断功能的DECODE函数的科普 END
关于外键的添加和自己的理解 START


【外键的话,是保存副表的内容的完整性的。比如副表(我理解我为补充表)
比如类型表,如果是组合查询时的下拉框的话,就是查询类型表。使用了
外键把主表的信息表和类型表联系起来后,就是
主表的typeid的数值中只会出现副表中出现的加了主键的编号id列
<int类型,有主键>出现的数值,添加数据到信息表的时候,
有一列typeid<int类型,无主键>,
防止操作员添加了无type表的id值到typeid列中,那么就是无效的数据,
加了外键后,这种无效的数据是添加不到信息表里的。)】
【直接创建完整约束的表(写项目的时候,一般就是用这种方法建表。
同时建表的时候,一般用管理员的身份创建表的时候,不用授权,但是
普通用户要。这是为了安全,2个不同的公司,互相合作时,交互时授权后
才能访问更安全)】
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;
--加外键
【表创建成功后再添加外键约束
添加外检约束 :alter table 从表表名 add constraint
外键约束名称 foreign key(列名) references 主表名称(主键列名)】
alter table spInformation add constraint
FK_spInformation foreign key(typeid) references spType(id);
——————————————————————————————————————————————————————
---建基本的表(一般是不会去用这种方法建表的):
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;
--通过sql语句给商品信息表的id添加主键约束
alter table spInformation
add constraint PK_id primary key(id);
--name添加唯一约束
ALTER TABLE spInformation
ADD CONSTRAINT unique_spInformation
UNIQUE (name)
--id添加外键约束
【表创建成功后再添加外键约束
添加外检约束 :alter table 从表表名 add constraint
外键约束名称 foreign key(列名) references 主表名称(主键列名)】
alter table spType add constraint
FK_spInformation foreign key(id) references spInformation(id);
--价格添加检查约束(1-99999999元)
Alter table spInformation
Add constraint CK_spInformation check(99999999>price and price>=1)
--在商品信息表和商品类型表中输入数据进行测试。
insert into spInformation values(1,'诗书画唱牌商品',999.99,'名牌类');
insert into spType values(1,'名牌类');
--select * from user_tablespaces ;
--select * from user_tablespaces ;




关于外键的添加和自己的理解 END
个人对为什么Oracle要授权才可以操作的情况的理解 START
【直接创建完整约束的表(写项目的时候,一般就是用这种方法建表。
同时建表的时候,一般用管理员的身份创建表的时候,不用授权,但是
普通用户要。这是为了安全,2个不同的公司,互相合作时,交互时授权后
才能访问更安全)】
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));
个人对为什么Oracle要授权才可以操作的情况的理解 END
Oracle中打开自己写好并且保存好的SQL代码的文件的方法(gif图演示) START

Oracle中打开自己写好并且保存好的SQL代码的文件的方法(gif图演示) END
讲义 START

dual:废表,不存在的表
自连接:一个表查两次
讲义 END
例子 START
各种函数的运用举例(运用举例是我认为很好的学习理解记忆等的方法):
--四舍五入
select round(3.29,1) from dual;
--截尾
select trunc(3.29,1) from dual;
--取余数
select mod(8,2) from dual;
select mod(3,7) from dual;
--转换大小写
select lower('Hello,WORLD') from dual;
select upper('Hello,WORLD') from dual;
--连接两个字符串
select concat('app','le') from dual;
--将product表中的商品名称和价格拼接成一个字符串
select concat(pname,price) txt from product;
--显示Product表中的商品名称和商品价格,商品价格保留一位小数
select pname,round(price,1) from product;
--截取字符串
--第一个数字表示需要截取的字母的下标(从1开始的)
--第二个数字表示截取几个字母
select substr('apple',3,2) from dual;
--截取userinfo表中的act的前两个字母
select substr(act,1,2) from userinfo;
--获取字符串的长度
select length('abc') from dual;
--显示userinfo表中所有act的长度
select length(act) from userinfo;
--填充
--第二个参数表示填充完以后的字符串的长度
--如果长度不够,就在左边填充指定的字符
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;
--显示当前日期
select sysdate from dual;
--日期和字符串的转换
--将当前日期显示为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
--将字符串转换成日期
--往userinfo表中插入一条数据
insert into userinfo
values(8,'test',888,to_date('1990-12-4','yyyy-mm-dd'));
--空值处理函数
select nvl(price,0) from product;
create table score(
id number primary key,
sname varchar2(30) not null,
subname varchar2(30),
score number
);
--分支处理函数,相当if elseif else
--显示score表中的所有成绩,如果是HTML,就减少5分,
--如果是C语言就加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','项目经理',15000);
insert into emp values(2,'Tom','开发人员',18000);
insert into emp values(3,'Kite','开发人员',18000);
insert into emp values(4,'巴菲特','CEO',40000);
insert into emp values(5,'Mop','后勤',6000);
--如果是CEO,保持原来的工资,如果是开发人员,加薪10%
--如果是项目经理,加薪5%,如果是后勤,加薪500
select ename,job,salary, decode(job,'CEO',salary,
'开发人员',salary*1.1,
'项目经理',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,'小华','计算机系');
insert into stuinfo values(2,'小红','舞蹈系');
insert into stuinfo values(3,'小丽','舞蹈系');
insert into stuinfo values(4,'小明','舞蹈系');
insert into stuinfo values(5,'小黑','计算机系');
insert into stuinfo values(6,'KKK','音乐系');
--查询跟小红在同一个系的所有的同学
--方法一:嵌套查询
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是同一个JOB的员工的姓名
select b.ename from emp a, emp b where a.job=a.job and
a.ename='Tom'
例子 END
目前一般使用可以不同用户登录,一起管理的系统自带的ORCL数据库 START

目前一般使用可以不同用户登录,一起管理的系统自带的ORCL数据库 END
Oracle创建自己命名的数据库的方法 START
推荐:https://blog.csdn.net/yong5241200/article/details/11880383(这篇文章中的方法我没用,推荐的原因就是让读者知道有这么一回事)
oracle database configuration assistant













