1.概述
数据库database
存取数据
txt,excel
优点:书存储量大,存取方便,易于管理,安全性高
数据库的分类:
oracle中大型数据
sql server
mysql
中小型数据库
开源免费
用于集群部署
db2:
处理海量的数据
mongodb
非关系型数据库
oracle版本
12c
11g
10g
grid网格技术
XE:10g简化的版本
服务端和客户端
CS,BS
客户端:sql plus
pl sql developer
浏览器
java程序jdbc
服务端
server
DBMS:数据库管理系统
内存
自动配置一个数据库实例
ORCL
自动配置一个数据库的实例
ORCL
db文件存放在硬盘里面
端口号:
oracle:1521
mysql:3306
2.常用指令
连接切换账户:
conn system
显式当前的账户
show user;
用户级别:
SYS
系统管理员,维护数据库的基本的信息
登录的dba的身份
SYSTEM:
普通管理
管理普通用户,设置普通用户的权限
可以使用normal身份,也可以使用dba身份
dba身份,normal身份
SCOTT:普通
更新用户密码
alter user system indetified by system;
查看当前数据库的信息
select * from v$database;
查看当前数据库下的用户
select * from dba_users;
创建用户
create user c##zhangsan identified by zhangsan;
在12C版本中,新创建用户要求加C##’
授权回收用户
grant create session to c##zhangsan;
授权和回收用户:
grant create session to c##zhangsan;
revoke create session from c##zhangsan;
授予和回收角色
grant resource to c##zhangsan;
revoke resource from c##zhangsan;
锁定账户
alter user c##lisi account lock;
解锁用户
alter user c##lisi account unlock;
alter user c##lisi account unlock;
常见的表的指令
表:数据管理的最基本的逻辑单元
列:column字段
行:row记录(数据)
创建表
create table stu(id number(3),name varchar2(5),sex char(1),addr varchar2(5))
查看表的结构:
desc stu;
添加数据
insert into stu values(101,'tom','m','即');
查询数据
select * from stu;
更新数据
update stu set sex='f' where id=101;
删除数据
delete from stu where id=101;
CRUD:增加,删除改查
查看当前用户下的表
select * from user_tables;
3.数据类型
data type
强数据类型
字符串:
char(size)
定长,
不会自动回收
size:1-2000字节
varchar2(size)
变长
DBMS在合适的时机回收剩余的字节空间
size:1-4000个字节
create table stu2(name varchar2(30),sex char(1),pid char(18),addr varchar2(100))
编解码:
查看数据库的编码格式
select userenv(‘language’) from dual;
–dual虚表:
编译:
字符-》字节码
UTF-8:1个中文占用3个字节
解码:字节码-》字符
解码:字节码-》字符
编译:字符-》字节码
编译:字符-》字节码
解码:字节码-》字符
解码:字节码-》字符
GBK:一个中文占用2个字节
UTF-8:一个中文占用3个字节
nchar(size)
size:代表字符长度
create table t4(name nchar(5));
long最多放2G字节
clob最多放4G字节
数值类型:
number(p,s)
number§
不超过p位的整数,小数位,四舍五入
number(p,s)
p>s>0
整数位:不超过p-s位
小数位s位
超过四舍五入
不足的时候用0补齐
s<0<p
整数位:不超过p-s位
对小数点左侧的s位清零(四舍五入)
小数位:
没有小数位,直接清零
number整数小数自适应
较少使用用
numeric(size)
等用number(size)
int帧数
日期date
SQL> select sysdate from dual;
SYSDATE
-----------
2020/12/22
SQL> insert into t3 values(to_date('1999-09-09','yyyy-mm-dd'));
insert into t3 values(to_date('1999-09-09','yyyy-mm-dd'))
ORA-00942: 表或视图不存在
SQL> select to_char(birthday,'yyyy-mm-dd') from t3;
select to_char(birthday,'yyyy-mm-dd') from t3
ORA-00942: 表或视图不存在
SQL> select to_char(birthday,'yyyy-mm-dd hh:mi:ss') from t3;
select to_char(birthday,'yyyy-mm-dd hh:mi:ss') from t3
ORA-00942: 表或视图不存在
二进制数据(图片,影音)
raw(size)
size:2000字节
long raw
blob
P4-SQL语法
SQL:结构化查询语言
structured query language
DCL数据控制语句
用户相关的指令
DDL:数据定义对表的结构的操作
DML:数据操作语句
对记录(数据)的操作(增删改)
DQL:数据查询语句占用DBMA7成以上的事件
TCL:事物操作
DDL:
创建表
SQL> create table emp(
2 id number(5),
3 name varchar2(60),
4 sex char(1),
5 birthday date,
6 photo varchar2(100),
7 salary number(7,2));
修改表:
添加字段
SQL> alter table emp add(dept varchar2(30));
修改字段的类型
SQL> alter table emp modify department varchar2(60);
删除字段
alter table emp drop column photo;
数据会一起丢失
重命名表
rename emp to employee;
删除表;
drop table employee;
DML:
添加记录:
insert into emp(id,name,sex) values(101,'zhangsan','f');
insert into emp values(101,'zhangsan','f',null,null,null);
修改记录:
update emp set birthday=to_date('1999-09-07','yyyy-mm-dd');
update emp set sex='m',id=102;
update emp set sex='f',id=103 where photo='abc.jpg'
删除记录
delete from emp;
delete from emp where id=102;
DQL
脚本:
创建表:
create table stus(
id number(5),
name varchar2(30),
sex char(1),
score number(5,2)
,
birthday date
)
插入数据
insert into stus values(101,'tom','m',560,to_date('1998-6-15','yyyy-mm-dd'));
insert into stus values(102,'mary','f',660,to_date('1999-6-15','yyyy-mm-dd'));
insert into stus values(103,'张三','m',760,to_date('1998-7-15','yyyy-mm-dd'));
insert into stus(id,name)values(104,'李四');
insert into stus(id,name) values(105,‘王五’);
基本的查询
select * from stus;
select name,score from stus;
select name,stus.* from stus;
whre条件查询
比较运算n
select * from stus where sex='f';
先执行where语句,再执行查询
其他比较运算符:>,<,>=,<=,!=’
null值不参与比较运算
null的值的比较
select * from stus where sex is null;
select * from stus where sex is not null;
逻辑运算
注入漏洞
select * from users where userName=''and password=''or '1'='1'
select * from stus where score between 560 and 660;闭区间
算数运算,加减乘除
select * from stus where id=101+1;
select * score+10 from stus where id=101;
关键字:
in
select * from stus where id in(101,103,107);
like模糊查询
select * from stus where name like '张%';--转义:%代表0个或者多个字符
distinct过滤重复数据
select distinct sex from stus;
as列的别名
select score*1.1 as ns from stus;
排序查询
select * from stus order by id;
select * from stus order by id asc;
select * from stus order by score desc;
select * from stus order by birthday asc;
--日期类型的排序
select * from stus order by sex,birthday dsec;
--多列排序
select * from stus where score is not null order by score desc;
--where语句和排序的一起使用
分组查询:
select sex,max(score),min(score),sum(score),avg(score) from stus group by sex;
--聚合函数(分组函数)
select count(*) from stus;
--查询记录的条数
select id,avg(score) from stus group by id having avg(score)>=600;
分组后的过滤,having
分页查询:select temp.* fromselect rownum as rn,stus. from stus) temp where rn》=3 and rn<=4;
实现分页的思路::把stus表当中隐藏列rownum转换称为一个临时表的普通列,进行比较运算
rownum不能使用>运算
分页算法:
pageSize*(pageNum-1)+1,pageSzie*pageNum
select temp.* from*select rownum as rn,t.* from*select * from stus wherescore is not nunll order by id desc)t) temp where rn=3 and rn<=4;
select id,avg(score) from stus griup by id having avg(score)is not null order by avg(score)desc;
根据id分组,过滤掉平均成绩为null,剩余的按照成绩降序排序
嵌套查询(子查询)
select * from stus where score=(select max(score) from stus);
单行子查询(单行单列)
合并查询
合并后的数据会自动过滤重复的值
select id from stus union select id from cla;
并集
select cid from stus intersect select id from cla;
交集
select id from stus minus select id from cla;
差集
transaction事务tx
一组DML语句(增删改)
commt:提交告知DBMS根据指令,修改的数据文件
rollback:回退回到上次提交的时间点
事务处理:一组DML语句,同时完成(一起提交),或者同时不完成(已经完成的指令要回退)
多表查询
create table cla(id number(3),name varchar2(30));
insert into cla values(1,'计算机1班');
insert into cla values(2,'计算机2班')
完全连接(笛卡尔积)
select * from stus cross join cla;
select * from stus,cla;
内连接
select * from stus inner join cla on stus.cid=cla.id;