文章目录
1 数据库类型
1.1 关系型数据库(表)
关系模型来组织数据的数据库,关系模型指的就是二维表格模型。关系型数据库就是二维表及其之间的联系所组成的一个数据组织。
优点:容易操作,便于维护
缺点:海量数据的话查询效率低,网站访问并发高,数据库扩展升级不易
十大关系型数据库:
Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,
Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP
1.2 非关系型数据库
非关系型 k-v(键值对)
适用范围:例如淘宝主页的数据(经常访问,不常修改,这样效率高)
优点:用户根据需要添加字段,而且仅需要根据id取出相应的value就可以完成查询;易于升级可扩展
缺点:只适合逻辑简单的存储,复杂的还是需要通过关系型数据库
2 数据库知识点
2.1 主键
唯一+非空
主键的作用:表中建议添加主键,可以根据主键精确的定位和区分 表中数据的唯一
表设计的规范要求中: 建议为每一张表都添加一个主键
2.2 三范式
作用:
最终的目的避免数据重复冗余,
1NF->列不可再分,最小原子 (避免重复) ;
2NF ->主键依赖 (确定唯一);
3NF->消除传递依赖(建立主外键关联 拆分表)
2.3 主外键关系
确定主从表
从表: 关联|依赖主表的主键字段
主表: 被关联|依赖的表
实现: 从表中设置一个字段–>依赖主表的主键字段,这个字段成为外键
2.4 表与表之间的关系
表与表之间的关系:
一对一 用户 身份证
一对多 学生与班级 -->通过主外键 学生表中添加外键字段班级编号->关联班级表的主键班级编号
多对多 店铺与商品 ->通过中间表建立练习 设置字段为2张表的主键字段
2.5 分析订单模块
订单模块: 订单表 商品表 用户表 店铺表 物流表
店铺表和商品表之间关系? 处理
订单表与用户表之间关系? 处理
3 select查询
3.1 格式
select (distinct) 要查询的数据(*|字段1,字段2…) from 数据来源; *和具体字段不能同时查询
当想要查询数据的时候,先分析
查询的数据:
数据的来源:
条件:
3.2 语法
3.2.1 查询所有的员工编号和员工名称,员工上级的编号
select empno , ename , mgr from emp;
3.2.2 去重(distinct)
distinct 去重只能对结果集中完全重读的数据进行去重
select distinct deptno,ename from emp;//不能
查询出所有员工所在的部门的部门标号,每个部门编号只出现一次
select distinct deptno from emp;
3.2.3 伪例
select 表达式 from 表名;
表达式作为字段名 , 表达式的值作为字段结果
select 1+1 from emp;
select distinct 123+456 from emp;
3.2.4 取别名
给字段去别名
select 查询字段1 别名,查询字段2 (as) 别名 … from 数据来源;
查询所有员工的名称(别名为:名字),员工编号(编号)
"" 原封不动显示,不是字符串
select ename as 员工名称,empno "员工 编号" from emp;
select ename "empName", sal empSal from emp;
如果别名为英文,默认变为大写,如果想要原封不动显示请在前后添加一对""
3.2.5 字符串 ’ '可以当做伪列存在
select 'haha' from emp;
3.2.6 字符串拼接 ||
查询所有的员工名字,给他们来一个同一前缀sxt-
select 'SXT-'||ename “ename” from emp;
3.2.7 虚表
–虚表 : dual 没有字段没有数据
select * from dual;
select distinct 123*789 from emp;
select 123*789 from dual;
select sysdate from dual;
3.2.8 默认值null
给每一个员工在原来的基础上+1块钱奖金
null值与数字运算,结果还是null
select empno,ename,sal, comm, comm+1 from emp;
null值与字符串拼接,结果是原串
select empno,ename,sal,comm,comm||'1' from emp;
nvl 处理null值 nvl(字段,值)
如果参数1字段为null,函数最终的结果为参数2指定值,如果字段不为null,结果为当前字段值
select empno 员工编号,ename 员工姓名,sal 薪资, comm奖金,nvl(comm,0)+1 from emp;
3.2.8 集大成
查询所有员工的名字, 工种, 年薪(不带奖金)
查询所有员工的名字,工种,年薪(带12月奖金的)
查询所有员工的名字, 工种, 年薪(带一次奖金的)
select 'SHSXT-'||ename "ename",job job,sal 月薪,nvl(comm,0) 奖金,sal*12 年薪,sal*12+nvl(comm,0)*12 全奖金年薪,sal*12+nvl(comm,0) 单月奖金年薪 from emp;