1:数据类型
1.1:字符串类型
变长;varchar2(10);nvarchar(8);
- 双字节; 两个字节的空间;
- 单字节;一个英文或数字在表中占有一个字节的空间;
定长;char(10); nchar(n);
- 单字节;
- 双字节;
1.2:数值
number
1.3:日期
date
2:表的约束
2.1:约束类型
1:非空约束 not null
2:主键约束 primary key
3:默认约束 default
4:唯一性约束 unigue
5:检查约束 check
6:外键约束 foreign key
例子:
id char(32) default sys-guid prinary key(主键加默认)
name varchar2(10) unique(唯一)
sex nchar() check(sex in ('男','女'))
sage number check(sage between 16 and 30)
2.2:主键约束
sid char(8) not null constraint pk-student 约束名称
简化:
sid char(8) primary key;
追加主键约束
alter table student add constraint 约束名 primary key(sid)
2.3:删除约束
alter table student drop constraint 约束名称
2.3:检查约束
保证列数据的安全性和有效性;
区间;约束列数据使其,限制在某个范围区间内;比较运算符;
2.4:追加约束(建表时没加,后期追加)
2.5:外键约束(foreign key)
外键约束通过用于多表之间,也偶尔用于特殊的单表中;
在一个A表中,用主键唯一的标识这一行记录;
在另一个B表中,要引用前一个表A中的记录;如何引用?用表A的主键代表,但此列在B表中,此列则为外键;两表中:主键名称和外键名称可以相同,也可以不同;但为了操作方便,名称定义为相同;
在具有主外键关联关系的两表中,外键所在的表(销售表)为子表或从表,主键所在表为父表或主表;对于销售表和商品表来说,先有商品表,即为主表,后有销售表,为从表;
1:主表和从表,现有主表才有从表,主键所在为主表,外键所在为从表
2:表中多对多,建两个表,在第三个表中设立两个外键
追加外键约束:
alter table stud_teach
add
foreign key(tid) references teachs(tid);
3:对表的操作
3.1:创建表
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lastName` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`gender` int(2) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
3.2:删除表
DROP TABLE IF EXISTS `department`;
3.3:增加数据
insert into 表名(id,name)values (12,'张三');
3.4:删除数据
delete from 表名 where id = 3;
3.5:修改数据
update 表名 set name = '李四' where id = 3;
3.6:查询数据
select * from 表名;
3.7:修改表名
alert table 表名 rename to 改后的表名;
3.8:给列改名
3.9:数据库操作的条件
- 区间条件;比较运算符; where id >100
- 范围条件;in子句; where name in('张三','李四','王五')
- 模糊条件;与java中的正则表达式极为类似;
3.10:模糊查询
like
任意的那个字符为‘_’
任意多个字符为‘%’
例:select * from emp where ename like 'A%'
多个模糊条件时用in
3.11:去重
select distinct job form emp;
select distinct job,name from emp;
3.12:分组
group by,分组函数通常和统计函数在一起使用;
having,对分组后的数据进行过滤;
order by 列名 排序,默认为升序,降序用desc
例子:
select deptno as 部门号,count(*) as 人数
form emp
group by deptno
having count(*) >4
order by 人数 desc
3.13:case
根据员工的薪水,将工资分为三个级别:低薪(小于2000)、中薪(2000-3000)和高薪(3000以上);输出emp表中所有员工的姓名,薪水和级别;
按照原薪水,涨工资:低薪*2,中薪*5,高薪*10;
3.14:多表联合查询
对于数据库中的单表查询,都是“等值查询”,即只有符合条件的记录才查询出来; 多表查询主要凭借主外键关联关系;
- 查询emp表中每个员工的姓名,部门编号,部门名称;
4:表的拷贝
4.1:全部拷贝
create table 目的表 as select * from 源表
4.2:表结构拷贝
create table 目的表 as select * from 源表 where 1<>1
4.3:拷过来的表没有约束,得自己加
5:一组统计函数
5.1:min(列名) 最小
5.2:max(列名) 最大
5.3:sum(列名) 求和
5.4:avg(列名) 求当前列平均值
5.5:count(列名) 用来统计查询结果有几条
6:存储过程和存储过程:
6.1:创建存储过程;
在ORACLE中有两类对象,一是函数,一是存储过程;做为函数,一定有返回值;做为ORACLE中的存储过程,没有返回值;两者综合起来,相当于java中的方法的功能;
6.2:函数
参数类型;
- 输入类型的参数;用关键字in表示,可以省略;只能将数据带入到函数中,而不能通过参数将数据带出去;java中方法的参数样式;
- 输出类型的参数;用关键字out表示;它只能将数据带出来;
输入、输出类型的参数;既可以将数据带进来,又可以带出去;
create or replace function plus(a in number,b in number)
return number
is
begin
declare
tt number:=0;
begin
tt:=a+b;
return tt;
end;
7:视图
在数据库中,视图是基于一个或多个表(也可以是视图)所生成的一条查询语句,返回结果为一个“虚拟表”;一个视图依赖于一张或多张表;视图不能独立存在;通过查询视图所看到的数据都来自于表本身;
视图可以指向整个单表,单表的部分列或部分行;多表的联合查询;
与表不同的是,视图没有固定的结构;当然也不能保存数据,通过视图所看到的所有内容,都来自于表; 视图是一种数据库对象,它也有创建、使用和删除的过程;
7.1:创建视图
create view v1
as
select empno 工号,ename 姓名,sal 薪水 from emp;
7.2:删除视图
drop view v;
7.3:使用
create view test as
(select id,LOGINID,lastname,sex from hrmresource where sex <> '')
select * from test
8:表的集合运算
aa表:
bb表:
8.1:并集
union all;内容完全相同的行记录也不例外;
union,会对相同项去重;
8.2:交集
8.3:差集
9:内外链接
9.1:标准内连接(inner join)
我们平时常用的where a.id = b.id 就是简易的内链接
9.2:标准外连接
- 全(外)连接;full join;两表当中不符合等值条件的记录都会显示出来;
- 左(外)连接;left join;左表中不符合条件的记录显示出来;
- 右(外)连接;right join;右表中不符合条件的记录会显示;
9.2.1:全连接
select e.empno,e.ename,e.sal,d.dname,d.loc,d.deptno
from emp e
full join
dept d
on
e.deptno=d.deptno;
9.2.2:左连接
9.2.3:右链接
select e.empno,e.ename,e.sal,d.dname,d.loc,d.deptno
from emp e
right join
dept d
on
e.deptno=d.deptno;
10:索引(index)
作用:提高查询效率
10.1:索引优缺点:
建立索引的优点:
1. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
3. 可以加速表和表之间的连接。
4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
索引有一些先天不足:
1. 建立索引,系统要占用大约为表的 1.2 倍的硬盘和内存空间来保存索引。
2. 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引
的一致性。
10.2:使用索引的原则
实践表明,不恰当的索引不但于事无补,反而会降低系统性能。因为大量的索引在进行插入、修改和删除操作时比没有索引花费更多的系统时间。
使用原则:
1. 在大表上建立索引才有意义。
2. 在 where 子句或是连接条件上经常使用的列上建立索引,很少或从不引用的字段不建索引。
3. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间.
4. 对于列中有许多空值,但经常查询所有的非空值记录的列,应该建立索引。
5. LONG 和 LONG RAW 列不能创建索引。
6. 索引只在返回较少比例的数据时才比全表扫描有效,大多数情况下认为结果集很大,一般大于 5%-15%就不使用索引查询。
7. != 将不使用索引, 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
8. ||是字符连接函数. 就象其他函数那样,停用了索引。
9. + 是数学函数. 就象其他数学函数那样,停用了索引。
10. like "%_" 百分号在前时,停用了索引。
11. 字符型字段为数字时在 where 条件里不添加引号时,停用了索引
12. 相同的索引列不能互相比较,这将会启用全表扫描。
10.3:创建索引
10.4:删除索引