数据库 DBMS(数据库管理系统)

数据库管理系统

关系型数据库 Relational
外键管理,数据存在数据库里

分布式文件存储型数据库 Document

key-value存储系统 key-value

后缀 .DBF
字符类型 三个: 定长 , 不定长 char varchar2 long
数字类型 number
日期类型:date

1.表的操作

  1. 创建表
  2. 赋值表

2.约束管理

not null 非空
unique 唯一字段 , 可以有多个unique,只能有一个primay key
primary key 主键 (有约束名称) 表中唯一主键
foreigm key 外键
check

alter table 表名 drop constraint 主键名 删除约束
主键约束和外键约束

not null 表级约束 ,行级约束

2.1外键

子表和父表示相互依存的关系,相互影响

主-从关系

1.先创建父表在创建子表
2.删除外键表先删除子表在删除父表
3.先insert父表,在insert子表
4.先drop子表,在drop父表(父表先存在,子表先灭亡)

子表添加insert 的数据受父表的影响,父表没有的外键子表不能加
有外键的表是子表

添加外键(表外) alter table t_suduent add constraint fk_cid foreign key(cid) references t_class(cid)

3.函数

  1. to_char
    转换为给定格式的字符串

select to_char(sysdate,‘yyyy-mm-dd’) from dual ;
select to_char(12345,‘99.999’) from dual ;

– 数据转换为自定字符串
select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual ; – 系统日期转换

错误:select to_char(2021-10-10,‘yyyy-mm-dd’) from dual ; – 无法数字转换为字符

select to_char(12345,’$99,999’) from dual ; – 数字转换为规定格式

select to_number(‘888’,‘999’) from dual ; --字符转换为数字

select to_date(‘2021-10-10’,‘yyyy-mm-dd’) from dual ; --自定义时间转换

3.2数字处理数据函数

1.ceil:往上取整,于小数位大小无关
2.floor:往下取整,与小数位大小无关
3.mod:求余
4.round :四舍五入
5.trunc(m,n) : 截取

select ceil(123.123) from dual ; --取大于、等于数值number的最小整数 向上取整

select floor(123.523) from dual ; --取小于、等于数值number的最大整数 向下取整

select mod(123,23) from dual ; --求余,不四舍五入

select round(123.123) from dual ; – 进行四舍五入

select trunc(123.123 , 0) from dual ; – 给定数值截取,从小数开始 不四舍五入

3.3升序和降序 sal , desc

select * from emp order by empno ; – 排序,默认升序排序 sal 升序 , desc 降序排序

select * from emp order by empno desc ;

– 首先sal升序排序,如果sal相同,然后再以mepno降序排序,
select * from emp order by sal,empno desc ;

select * from emp where deptno in(20,30) order by sal,empno desc ;

3.4聚合函数

1.AVG
2.count
3.max
4.min
5.sum

– 所有员工的平均工资

select avg(sal) from emp ;

–平均奖金 , 人数总数,有null就不算进去总数。
select avg(comm) from emp ;

– 奖金总和
select sum(sal) from emp ;

– 工资总和

select sum(comm) from emp ;

– 最大数,最小数
select max(sal),min(comm) from emp ;

–计算不为null所有记录 count
select count(sal) from emp;
select count(comm) from emp;

–查询有多少个员工
select count(empno) from emp ; --还要查看有多少个主键
select count(*) from emp ;
select count(1) from emp ;

4.表的查询

伪表 :dual
伪列: rownum rowid

理解:一个完整的查询语句 select , from ,where(left join) , group by , having , order by ;

4.1基本查询:select 字段名 from 表名

select empo,ename,job,mar form emp ; – 按字段查询 按列查询
select * from emp ; – 全部查询

4.2条件查询 where ,,,

select * from emp where sal>2000 ;

select * form emp where sal > 2000 and deptno == 20 ;

4.3逻辑运算

like

– 查询姓名为A开头的员工信息 like

select * from emp where ename like ‘A%’ ; – %代表n个任意字符

–查询姓名为S结尾的员工信息
select * from emo wgere ebane like ‘%S’ ;

–查询姓名包含字符为A的员工信息

select * from emp where ename like ‘%A%’ ;

–查询姓名第二个字符为A的员工信息

select * from emp where ename like ‘_A%’ ; – _为任意一个字符

is null , is not null

– 查询奖金是0 的员工信息
select * form emp where comm = 0 or comm is null ;

– 查询奖金不为0 的员工信息
select * from emp where comm > 0 or comm is not null ;
select * from emp where comm != 0 or comm is not null ;

4.4|| 拼接

连接操作符

4.5集合操作符 union , union all
  1. union
    取得两个结果的并集(拼接),自动去掉重复是行

2.union all
与union 相似, 但不会去掉重复的行

  1. intersect 交集

  2. mins差集

4.6分组查询 group by , order by

– select 聚合函数 , group by 后出现的表达式
– having 聚合函数 , group by 后出现的表达式
– order by 聚合函数 , group by 后出现的表达式

– 分组查询 ————、

– 查询每个部门的最高工资 group by

select max(sal) from emp ; – 先分组在查询
select deptno 部门编号, max(sal) from emp group by deptno ;

–查询每个部门的平均工资

select deptno 部门编号,avg(sal) from emp group by deptno ;

– 查询每个部门的平均工资大2000的部门编号以及平均工资 having 过滤 对之前的数据进行过滤
– group by – having – order by 顺序不能改变
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000 order by deptno; – 完整的语句

– 自定义理解

select deptno 部门,max(sal) from emp group by deptno,job order by deptno; – 先分组,后求最大值

– 显示员工最高工资超过3000的部门的id 及其员工最高工资,并按照工资降序排序

select deptno, max(sal) from emp group by deptno having max(sal) > 3000 order by max(sal) ;

链接查询 left join , right join , inner join , cross join

左链接,右链接 , 内连接 ,交叉连接 ,

– select 要查的列名, from 表1 left join 表2 on 连接条件 , 左链接

select * from student left join couse on class.cid = student.cid ;

– 右链接
– 左链接和右链接 区别 ; 左链接包含了左表所有的行null , 右链接包含了右表所有的行
select * from student right join couse on class.cid = student.cid ;

–内链接 inner join

select ename,job,loc from emp inner join dept on emp.deptno = dept.deptno ;

–交叉链接 (笛卡尔积)class join

select * from student cross join course
select * from student,course

子查询(嵌套查询)

两种嵌套查询方式:
1.可以使用where and 条件选择总表
2.使用链接链接两个表

自己理解:left join 之类的连接不能和where 一起出现

– 查看员工的编号 ,姓名 , 工资, 部门 , 以及工资登记
select empno,ename,sal,dname,grade from emp left join dept on emp.deptno = dept.deptno left join salgrade on sal between losal and hisal ;

–查看员工编号,姓名以及领导的姓名
select * from emp e left join emp ee on e.mgr = ee.empno ; --取别名

– 子查询(嵌套查询),在查询里面在查询
select * from emp where sal = (select max(sal) from emp) ;

–列出与scott 从事相同工作的所有员工及部门名称
select job from emp where ename = ‘SCOTT’ ;

select e.* from emp e where job = (select job emp where ename = ‘SCOTT’);

–显示各个部门的部门编号,部门名称,部门地址员工和

分页显示 rownum , rowid

select * from (select rownum rn from (select empno,ename,job from emp ) e where rownum< 10)) where rn > 5 ; – 显示的数据是 第5 到 第10 的数据

–原理改写成公式如下
select * from (select rownum rn from (select empno,ename,job from emp ) e where rownum< pagesize*pagno)) where rn > (pageno-1)*pagesize; – 显示的数据是 第5 到 第10 的数据

–pagesize每页显示多少条数据 , pageno 第几页数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值