一:SQL语言的基本概念:
SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言作为数据输入与管理的接口。SQL语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。
二:SQL语言的分类:
数据定义语言(Date Definition Language ,DDL);
用于创建、修改和删除数据库对象,如CREATE TABLE , ALTER TABLE ,DROP TABLE 等。DDL 语句会自动提交事务
数据操纵语言(Date Manipulation language ,DML)
用于操纵数据库,包括 INSERT ,UPDATE, DELETE,SELECT等。DML语句不会自动提交事务;
数据控制语言(Data Control Language ,DCL)
用于执行授权和撤销权限的操作,包括GRANT(授予权限)RECOKE(撤销授权)
事务控制语言(Transactional Control Language,TCL)
用于维护数据的一致性,包括COMMIT(提交事务),ROLLBACK(滚回事务)和SAVEPOINT(设置保存点)三条语句;
三:Oracle的常用数据类型
- 字符类型:
- ? Char 固定长度(浪费空间),最大长度2000字节。例如:char(10),只用了2位,剩余的8位,用空格补全。
- ? Varchar2() 可变长度的字符串类型,最大长度为4000字节,例如:varchar2(20)只用了6位,剩余会正常利用,避免资源浪费。使用长度与字符集的选择有很大的关系;
- 一个utf-8的字符占据四个字节;4000自己只能存储1000个汉字;
- 数值类型:
- Number§ 表示整形,长度由实际业务需求而定
- Number(p,s) 表示小数类型,p表示精度(即数字的总长度),也就是小数的总长度,s表示小数点后精确到几位,例如:number(8,3)总长度位8,3表示精确到小数点后3位。
- 日期类型
- Date 长度为7 个字节,分别为,世纪,年,月,日,时,分,秒。一般该类型就能满足所有的需求
- Timpstamp 秒能够精确到小数点后6位,默认是6位;
- 大对象类型
- Clob当长度大于4000,就可以用clob类型,最大容量为4G。
- Blob存放二进制大对象数据类型,例如:图片,视频,音频等的二进制代码;
四:创建数据表
语法:
create table tb_表名称
(
字段名1 数据类型(长度) 约束,
字段名1 数据类型(长度) 约束,
字段名1 数据类型(长度) 约束,
字段名1 数据类型(长度) 约束
)
create table tb_student
(sid number primary key,sname varchar2(100) not null,ssex varchar2(2) check(ssex = '男' or ssex = '女'),sage number,saddress varchar2(100) default '湖南长沙',stel varchar2(20) unique
)
注意事项:Oracle中没有标识列(可以借助触发器以及序列实现标识列)
五:使用SQL命令对数据增删改查
新增操作 insert
单行插入
语法 :insert into tb_表名(字段1,...) values(值1)
insert into tb_student_0211(sid,sname,ssex,sage,saddress,stel)
values(1,'张三','男',19,'湖南郴州','17845456727');
多行插入
语法:insert into table select 值,值 from dual
union
select 值,值 from dual
insert into tb_student_0211(sid,sname,ssex,sage,saddress,stel)
select 2,'里斯','男',20,'湖南常德','16347326743' from dual
union all
select 3,'王五','男',20,'湖南常德','16347323743' from dual
注意:
- oracle中如果使用了select查询关键词 必须要接入from关键词 否则报错
- 如果接入了from关键词 还需要+ 表名
- 临时表(伪表) 临时显示需要查询的数据 ---临时表的名称dual
select 'sb' from dual;
select 'sb' from emp;
表的复制
语法: create table tb_表名 as select .....
?
?
?
#表的复制
create table tb_sb
as select * from tb_student_0211;
select * from tb_sb;
--不要数据
create table tb_sb2
as select * from tb_student_0211 where 1=0;select * from tb_sb2;--复制老表中的指定字段
create table tb_sb3
as select sid , sname from tb_student_0211;select * from tb_sb3;???
删除操作 delete truncate
- 删除学号为5的学员信息
delete from tb_student_0211 where sid = 5;
- 删除所有
delete from tb_student_0211;
- truncate截断表格中所有的数据
truncate table tb_student_0211;
select * from tb_student_0211;
修改操作 update
- 修改姓名为王五的所有信息
update tb_student_0211 set sname = '武则天',ssex = '女',sage = 10, saddress = '湖南',stel = '110' where sname = '伊丽莎白'
查询操作
- 查询所有
select * from emp;
- 起别名
select empno as 员工编号 , ename as 姓名 from emp; select empno 员工编号 from emp;
- 查询单个
select * from emp where empno = 7369
- 运算符的条件查询 > < =
select * from emp where sal >= 800 and sal <= 2000
- between....and
select * from emp where sal between 800 and 2000;
- in
select * from emp where sal in(800,1600,1250);
- 查询编号为7521工资相同的员工有哪些?
select * from emp where sal =
(
select sal from emp where empno = 7521
) and empno!=7521;
- | 拼接 类似"+"
select 'abc'||'ddd' from dual;
- 模糊查询like
- 查询姓名中含有h的有那些?
select * from emp where ename like '%H%'
六:伪列
伪列相当于表中的一个字段,在表创建的时候已经有了,默认隐藏的
Oracle中伪列就像一个表列,但是它并没有储存在表中。
伪列可以从表中查询,但不能插入,更新和删除它们的值
常用的伪列有rowid和rownum。
- rowid 标识编号,类似地址
select rowid,emp.* from emp;
select rowid,a.* from tb_student_0211 a;
- rownum 有序的编号
- rownum是查询返回的结果集中的行的序号,
- 可以使用它来限制查询返回的行数。
案例:获取工资最高的三位
select * from emp order by sal desc--排序
--编号
select rownum,a.* from
(
select * from emp order by sal desc
)a where rownum <= 3
案例:按照薪资降序 取第4位到第6位员工的信息
select rownum,a.* from
(
select * from emp order by sal desc
)a where rownum >=4 and rownum <=6
注意事项:查询语句中没有涉及伪列支持>< 涉及到伪列,>无效
问题:当伪列出现实现区间查询时,大于符号无效
解决方案:将伪列成为明列 只需要为这个伪列字段起个名字即可。
select b.* from
(
select rownum as rid ,a.* from
(
select * from emp order by sal desc
) a
) b where b.rid between 4 and 6;