ORACLE安装 和 删除
启动和关闭
SQL*PLUS windows下窗口版本
超级用户 system/manager
sys/change_on_install
普通用户
scott/tiger
DOS下的SQLPLUS版本
如何使用
命令show user
SQL语句
难点
约束 如何给表加约束???
SQL*PLUS环境命令
结束时可以写; 也可以不写
desc dept
show user
connect scott/tiger
set linesize 200
set pagesize 100
spool c:\aa.txt
SQL语句
结束时候一定要 有分号或者/
《1》DDL语句(数据定义语言)
create
alter
drop
truncate 开头的语句
建立表
create table class(--班级表
classid number(2) primary key,
cname varchar2(20) not null);
/*wdsadsadsad
asdsadsadsadsad
多行注释
*/
create table student( --学生表
xh number(4) primary key, --学号
name varchar2(10) not null, --姓名
sex char(2) check (sex in ('男','女')),--性别
birthday date,--生日
sal number(7,2), --奖学金
classid number(2) references class(classid) --班级
);
外键引用的列一定是主键或有unique约束的列
alter table student add (shengfenzheng number(18));
drop table student;
delete from student;
truncate table student; 删除记录的 速度快 数据不能恢复
《2》 DML语句(数据操作语言)
select
insert
delete
update
insert into student(xh,name,sex)
values (&xh,'&n','&sd');
insert into student(xh,name,sex)
values (&学号,'&姓名','&性别');
转义字符 \
打开转义 set escape on
insert into student(xh,name,sex)
values (1003,'JO\&HI','男');
《3》 TCL(事务控制语句)
commit; 提交 修改保存到数据库中
rollback; 回滚 取消内存中的改动
savepoint;保存点 分解事务的 把事务变小
事务何时存在 DML语句中除select以外都会有事务
《《《《《《《注意》》》》》 / 重复运行上一条SQL语句
commit; 结束上一个事务 并且开始一个新的事务
update student set sal = null where xh =1000;
savepoint c111;
insert into student(xh,name,sex) values (1004,'MIKE','男');
rollback to c111; --撤销了插入的数据
rollback; --从c111这个点回滚到事务的开始点
《SQLPLUS规则》
DML语句后跟上DDL语句 DML语句的事务会被自动提交
exit/quit命令 退出 SQLPLUS环境时也会自动提交事务
非法操作是不能提交事务的 ,只能导致事务回滚
《4》 DCL语句(数据控制语句)
grant 授予权限
revoke 撤销权限
权限 select ,insert,delete,update
connect ,resource
如何建一个自己的用户?
必须是超级用户才能建用户
--连接到超级用户
connect system/manager
--建立用户名zhangsan 密码m123
create user zhangsan identified by m123;
--授予必要的权限connect 你能够连接
resource 你能建表不受空间的限制
grant connect,resource to zhangsan;
--这个普通用户就建好了 和scott用户的权限是一样的
grant DBA to zhangsan; --张三的权限和System一样
--改张三的密码
<<1>> 自己改自己的密码
connect zhangsan/m123
密码改为了mm1
alter user zhangsan identified by mm1;
<<2>> 超级用户来改
connect system/manager
alter user zhangsan identified by mm1;
在scott/tiger这个用户下
grant select on dept to zhangsan;
在zhangsan下 可以使用select * from scott.dept;
看到结果
在scott/tiger这个用户下
revoke select on dept from zhangsan;撤销授权
在zhangsan下 可以使用select * from scott.dept;
看不到结果
ORALCE的函数
单行函数 返回值只有一个
分组函数 返回值是多条记录
group by
sum
avg
单行函数
字符函数
concat 连接 ||
<1>显示dname和loc中间用-分隔
select deptno,dname||'----'||loc from dept;
dual哑元表 没有表需要查询的时候 可以用它
select 'Hello World' from dual;
select 1+1 from dual;
查询系统时间
select sysdate from dual;
<2> initcap 首字母大写
select ename,initcap(ename) from emp;
<3> lower 转换为小写字符
select ename,lower(ename) from emp;
<4> upper 转换为大写
update dept set loc=lower(loc);
update dept set loc=upper(loc);
<5> LPAD 左填充
select deptno,lpad(dname,10,' '),loc from dept;
<6> RPAD 右填充
<7> LTRIM 去除左边的空格
RTRIM 去除右边的空格
ALLTRIM 去除两边的空格
<8>replace 替换
translate 转换
select replace(ename,'S','s') from emp;
select translate(ename,'S','s') from emp;
<9> ASCII 求ASC码
chr asc码变字符
select ascii('A') from dual;
select chr(97) from dual;
<10> substr 字符截取函数
select substr(ename,1,3) from emp;
从第1个位置开始 显示3个字符
select substr(ename,4) from emp;
从第4个位置开始显示后面所有的字符
<11> instr 测试字符串出现的位置
select ename,instr(ename,'S') from emp;
'S'第1次出现的位置
select ename,instr(ename,'S',1,2) from emp;
<12> length 字符串的长度
select ename,length(ename) from emp;
日期和 时间函数
<1> sysdate 系统时间
select sysdate from dual;
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
select to_char(sysdate,'DDD') from dual
<2> ADD_MONTHS 添加月份 得到一个新的日期
select add_months(sysdate,1) from dual;
select add_months(sysdate,-1) from dual;
<3> last_day 某月的最后一天
select last_day(sysdate) from dual;
select add_months(last_day(sysdate)+3,-1) from dual;
本月第3天的日期
<4> months_between 两个日期之间的月数
select months_between(sysdate,'2005-02-01') from dual;
转换函数
to_char 把日期或数字类型变为字符串
select to_char(sysdate,'hh24:mi:ss') from dual;
select to_char(sal,'L9,999') from emp;
L本地货币
to_number 把字符串变成数字
select to_number('19990801') from dual;
to_date 把字符串变成日期
select to_date('19800101','yyyymmdd') from dual;
select to_char(to_date('19800101','yyyymmdd'),
'yyyy"年"mm"月"dd"日"') from dual;
数字函数
ceil(x) 不小于x的最小整数
ceil(12.4) 13
ceil(-12.4) -12
floor(x) 不大于x的最大整数
floor(12.4) 12
floor(-12.4) -13
round(x) 四舍五入
round(12.5) 13
round(12.456,2) 12.46
trunc(x) 舍去尾数
trunc(12.5) 12
trunc(12.456,2) 12.45
mod(x,n) x除以n以后的余数
mod(5,2) 1
mod(4,2) 0
混合函数
求最大值
select greatest(100,90,80,101,01,19) from dual;
求最小值
select least(100,0,-9,10) from dual;
空值转换函数
select nvl(comm,0) from emp;
comm 类型和 值的类型是 一致的
复杂的函数
decode (if ... elseif .... elesif ... else结构)
sal=800 显示低工资
sal=3000 正常工资
sal=5000 高工资
只能做等值比较
select sal,decode(sal,800,'低工资',3000,'正常工资',5000,'高工资')
from emp;
判断正负
sign(x) x是正 1
x是负 -1
x是0 0
如何做大于小于的比较????
sal<1000 显示低工资
1000<=sal<=3000 正常工资
3000<sal<=5000 高工资
select sal,decode(
sign(sal-1000),-1,'低工资',
decode(sign(sal-3000),-1,'正常工资',
0,'正常工资',
1,decode(sign(sal-5000),-1,'高工资','高工资')
)) as 工资状态 from emp;