数据库总结
数据库(Database,DB)
数据库管理系统(Database Management System,DBMS)
数据库管理员( Database Administrator, DBA )
数据库系统( Database System, DBS )
关系型数据库(Relationship Database, RDB)
关系型数据库管理系统(RDBMS)
常用SQL指令:
SELECT、INSERT、DELETE、UPDATE、CREATE、DROP
实体-关系模型(Entity-Relationship Model, E-R Model)
E-R模型三要素:实体、关系、属性
MYSQL:玲珑的小老鼠
经常在老猫不经意间偷走了市场.
MS SQL Server:笼中小麻雀
受限于Windows平台的性能,难于在企业开发中大展身手.
IBM DB2: 彪悍的大笨象
秉承了IBM一贯彪悍的性格,粗犷有余,细节不足.功能巨牛无比,使用起来,人人诅咒.
Oracle: 翱翔九天的凤凰
数据库市场上的领头凤,程序员的闺中密友.
SQL语句分类:
Select查询语句 eg: select * from table
DML语句(数据操作语言)
Insert、Update、Delete、Merge
DDL语句(数据定义语言)
Create、Alter、Drop、Truncate
DCL语句(数据控制语言)
Grant、Revoke
TCL事务控制语句
Commit 、Rollback、Savepoint
select * from table
删除重复行: 关键字(distinct)
select distinct(*) from table
给列起别名: AS
select name AS 'new_name' from table
连接:||
select name||age from table
比较运算符
between and
in() like is null
使用like时
% 代表零个或多个字符。
_ 代表一个字符。
order by 字句排序
ASC: 升序
DESC: 降序
多个排序
select * from table order by 1 desc,2 asc;
大小写控制函数
LOWER 小写 ; UPPER 大写 ;INITCAP 首字母大写
字符控制函数
函数 运行结果
CONCAT('Hello', 'World') HelloWorld 连接函数
SUBSTR('HelloWorld',1,5) Hello 截取函数
LENGTH('HelloWorld') 10 输出字符串长度
INSTR('HelloWorld', 'W') 6 输出w所在位置
LPAD(salary,10,'*') *****24000 左填充
RPAD(salary, 10, '*') 24000***** 右填充
TRIM('H' FROM 'HelloWorld') elloWorld 去掉h
数字函数
Round(45.631,2) 45.63 四舍五入
Trunc(465.23,1) 465.2 截断
Mod(50,20) 10 取余
日期函数
Months_between 两个日期相差的月数
Add_months 向指定日期加上若干个月 可以加负数
Next_day 指定日期的下一个日期
Last_day 本月的最后一天
Round 日期四舍五入
Trunc 日期截断
Sysdate 当前日期 两个日期相减返回相差天数
时间格式 : HH24:MI:SS
select to_char(sysdate,'HH24:MI:SS ') from dual; 14:20:20
to_date to_char to_number
Select to_date('2015126','yyyyMMdd') from dual;
select to_char(sal,'999,999,999') from emp;
通用函数
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
连接
组函数
avg() 平均
count() 计数
max() 最大值
min()最小值
sum()求和
多行比较操作符
in 等于列表中的任何一个
any 和子查询返回的任意一个比较
all 和子查询的所有值比较
DML数据操纵语言
向表中插入数据
inster into table values()
insert into wan values ('ktf',5000,to_date('1980-08-11 14:40:23 ','yyyy-mm-dd hh24:mi:ss'));
修改现存数据
update table set () where ();
update wan set age=35,time1=sysdate-10 where sal=800;
删除现存数据
delete from table
DDL数据定义语言
作用于创建,修改,删除,管理数据库对象
会自动提交当前事务
cteate table ,
create table wan1 (name varchar2(5) not null,age number(3) not null,sal number(5),time1 date);
alter table ,
alter table wan add(name varchar2(6))
alter table wan drop column name;
drop table,
drop table wan1;
modity. 修改现有列的属性
ALTER TABLE dept80 MODIFY (last_name VARCHAR2(30));
改变对象的名称
Rename wan To new_name;
约束
NOT NULL 非空
UNIQUE 唯一
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECK (sal>0)
添加约束
alter table wan
add constraint name not null ;
删除约束
alter table wan
drop constraint name;
视图(表)
--创建视图
create view waa as
select * from scott.emp;
--修改视图 or replace view
create or replace view waa(ename) as
select ename||'hfh' from scott.emp ;
--视图中有 group by ,distinct ,rownum 时 不能使用delete
create view wan as
select sal from scott.emp group by sal ;
delete from wan;
--只读视图 不可以修改
create view wa as
select * from scott.emp where sal>3000
with read only ;
insert into wa(empno) values (2); 不能插入数据
drop view waa; 删除视图
序列
自动提供唯一的数值
共享对象
主要用于提供主键值
代替应用代码
将序列值装入内存可以提高访问效率
-- 创建系列
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10 --增量
START WITH 50 --开始值
MAXVALUE 9999 --最大值
NOCACHE --不写入内存
NOCYCLE; --不循环 到最大值结束
select dept_deptid_seq.nextval from dual ; --查询下一个 先
select dept_deptid_seq.currval from dual ; --查询当前值 后
--修改序列 增量 最大值 循环与否
alter sequence dept_deptid_seq
increment by 20
maxvalue 300
cycle ;
-- 删除序列
drop sequence dept_deptid_seq;
索引
一种数据库对象
通过指针加速 Oracle 服务器的查询速度
通过快速定位数据的方法,减少磁盘 I/O
索引与表相互独立
Oracle 服务器自动使用和维护索引
-创建索引
create index suoyin
on wan(name); --在表的某一列创建索引
--删除索引
drop index suoyin;
用户和权限
系统权限:
CREATE SESSION(创建会话)
CREATE TABLE(创建表)
CREATE SEQUENCE(创建序列)
CREATE VIEW(创建视图)
CREATE PROCEDURE(创建过程)
--创建用户
create user scott --用户名
identified by tiger; --密码
-- 修改密码
alter user scott
identified by tiger;
--创建角色
create role zu;
--为角色赋予权限
Grant create table ,create session,create view,create procedure
To zu;
--将角色赋予用户
Grant zu To scott,num1,num2;
集合的操作
--并集 union 重复的只显示一次
--首先创建一个部门为20的表
CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20 ;
SELECT * FROM emp union SELECT * FROM emp20 ;
--并集 union all 重复的也显示
select * from emp20 union all select * from emp;
----交集 intersect 只显示重复的
select * from emp20 intersect select * from emp;
----差集 minus 显示对方没有的
select * from emp minus select * from emp20;