数据库

数据库

三范式:三条标准 (Normal From)

1NF.列不可分割

​ 每一列都是不可分割的基本数据项,不能有多个值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIX2WhAI-1615814364943)(C:\Users\Win10\AppData\Roaming\Typora\typora-user-images\image-20210315173117925.png)]

2NF,添加主键(数据多,频繁操作,需要定义主键)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-74Ug12tF-1615814364945)(C:\Users\Win10\AppData\Roaming\Typora\typora-user-images\image-20210315173218517.png)]

3NF.必须满足2NF

​ 拆分表,递依赖,建立主外键关系,避免数据重复,拆成多个表格

主键约束:

​ 可以保证数据安全

主表:

​ 主键

从表:

​ 主键; 外键字段:关联主表中的主键字段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AimCBlgi-1615814364946)(C:\Users\Win10\AppData\Roaming\Typora\typora-user-images\image-20210315173746890.png)]

查询语句 select:代表一个结果集

select *|查询的数据1,数据2,数据3|数字|字符串|字符|计算 from 数据源;

select * from 数据源

​ *:数据源的所有字段

​ 不能与其他字段在select同时存在


去重 distinct

​ 当结果集中存在完全重复的数据,可以对结果集中的数据做去重

​ select distinct deptno from emp;

【注意: distinct只能对结果集中完全相同的数据(两条数据的所有字段值都相同)做去重】

别名 (空格)

为结果集中的每一个列|字段起别名

select 字段名1(空格) 别名,字段名2 (或者as) 别名 from 数据源 别名; as省略为空格

原封不动 " " 双引号

别名如果想要原封不动的显示 “” : 当别名中出现特殊符号比如空格|别名是小写英文想要显示为小写不想默认为大写,需要添加" "

【为数据源起别名时不能用as】

select 字段名(空格)别名 form 数据源 (空格不能用as)别名;

'字符串’的拼接 ||字段值

字符串用单引号 ’ ’

||作为字段值的连接

select ‘傻子’||ename from emp;

伪列

字段中 没有的 但可以查 1+5 可以运算数值

select 哈哈,1+5,asuufgha from 数据源;

虚表 dual

select * from dual;

虚表只有一个字段值

不用去重

可以用来运算

select distinct 987-123 from emp;
select 123*456 from dual;

查询日期

–sysdate
select sysdate from dual;


null 字段默认值

null 字段没有赋值,是null

理解: 年终奖 null 没有,没有这一项福利

​ 0 有,但是没拿到是0

-总结:
–null值与数字进行运算,结果还为null null*5 =null
–null值与字符串做运算,结果为字符串 null||字符串 =字符串

nvl 解决null的情况

nvl(参数1,参数2) 当参数1的值为null,nvl的结果为参数2,当参数1不为null,结果就为参数1

nvl(0,0 ) 直接等于数值1 不考虑数值2

nvl(null,0 ) 等于数值2

–查询每个员工的年薪 12月的薪资
select sal12 年薪资 from emp;

–查询每个员工的年薪 12月的薪资+一个月奖金
select nvl(comm,0)+sal*12 年薪资 from emp;

–查询每个员工的年薪 12月的薪资+十二个月奖金
select nvl(comm12,0)+sal12 年薪资 from emp;


dept部门表

deptno 部门编号

dname 部门名称

loc 地址

emp员工表

empno 员工编号

ename 员工名字

sal 工资

comm 奖金

hiredate 入职日期

mgr 上级 经理人

job 工种

salgrade 工资等级表

grade 等级

losal最低

hisal 最高

binus奖金表


sign(x)或者Sign(x)叫做符号函数,在数学和计算机运算中,其功能是取某个数的符号(正或负):

当x>0,sign(x)=1;

当x=0,sign(x)=0;

当x<0, sign(x)=-1;

在通信中,sign(t)表示这样一种信号:

当t≥0,sign(t)=1; 即从t=0时刻开始,信号的幅度均为1;

当t<0, sign(t)=-1;在t=0时刻之前,信号幅度均为-1


decode(X,A,B,C,D,E)

这个函数运行的结果是,当X = A,函数返回B;当X != A 且 X = C,函数返回D;当X != A 且 X != C,函数返回E。 其中,X、A、B、C、D、E都可以是表达式,这个函数使得某些sql语句简单了许多。

例:

–9)查询所有的工资等级信息,工资等级的上线调整为比原来+1000,最低下限不小于1000


decode(X,A,B,C,D,E)

这个函数运行的结果是,当X = A,函数返回B;当X != A 且 X = C,函数返回D;当X != A 且 X != C,函数返回E。 其中,X、A、B、C、D、E都可以是表达式,这个函数使得某些sql语句简单了许多。

例:

–9)查询所有的工资等级信息,工资等级的上线调整为比原来+1000,最低下限不小于1000
select hisal+1000 工资上限,decode(sign(losal-1000),-1,1000,0,1000,1,losal) 工资下限 from salgrade;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值