数据库
三范式:三条标准 (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;