欢迎光临散文网 会员登陆 & 注册

Oracle打开SQL文件,外键个人理解,nvl,decode函数,创建自定义数据库等【诗书画唱】

2021-03-04 17:41 作者:诗书画唱  | 我要投稿

内容概括:


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




Oracle创建自己命名的数据库的方法 END






Oracle打开SQL文件,外键个人理解,nvl,decode函数,创建自定义数据库等【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律