Oracle 笔记

一、安装数据库的注意事项

1、路径不能存在空格和中文
2、添加6.2的版本
3、主要包括安装数据库软件和建库

二、使用Oracle数据库的注意事项

1、在服务器端配置监听器(安装是自带),在客户端(Net Manager或Net Configuration Assistant)配置网络服务名
2、在服务器端启动数据库服务和监听服务

三、连接数据库的工具

解锁:alter user 用户名 account unlock;

1、SQL*PLus  登录:用户名[@网络服务名 as 登录身份]  如: sys@jbit as sysdba
   (1)查看当前连接数据库的用户
      show user;
   (2)切换用户
      conn 用户名/密码 [as sysdba]
  
      注:管理员加 as sysdba,普通用户不加

   (3)用户登录后查看用户下的表
      select * from tab;

      注:为了防止命令行中数据展示表格错乱的情况可以设计行宽和列宽
          set linesize 300;  --每行展示300个字符
          Col 列名 for a[数字];  --某一列占几个字符

   (4)查看表结构
      desc 表名;

2、PL/SQL Developer

四、Oracle常用的数据类型

字符类型:char/nchar、varchar2/nvarchar2,不建议使用varchar
数值类型:number,不建议使用integer、float、double
日期类型:date、timestamp
LOB类型:blob、clob(存放大文本,如新闻)、bfile

五、Oracle中的伪劣

rowid:存放一行数据的地址(唯一的)
rownum:行号

分页:每页显示5条数据、查询第三页的数据

方式一:

   select * from (select rownum r,a.* from a) b
   where b.r>10 and b.r<16

方式二:

   select * 
   from (select rownum rm, a.* from (select * from emp) a 
         where rownum < 16) b 
   where b.rm > 10

注:给表或列起别名时使用空格“ ”
    如果查询的列中包含行号和其他列,则其他列必须使用表名.类名

六、SQL语言的组成部分

DML(数据操作语言):对数据的增删查改
DDL(数据定义语言):建表、删表、修改表结构、截断表(truncate table)等操作
TCL(事物控制语言):commit、savepoint、rollback
DCL(数据控制语言):grant(设置权限)、revoke(撤销权限)

七、数据操作语言案例

1、不重复显示所有学员姓名和年龄(关键字:distinct)

  select distinct stuName,stuAge from stuInfo;

2、取出stuName,stuAge列不存在重复数据的记录

  select stuName,stuAge 
      
  from stuInfo
      
  group by stuName,stuAge 
      
  having(count(stuName||stuAge) <2);

3、删除stuName、stuAge列重复的行(保留一行)

  delete
      
  from stuInfo 
      
  where rowid  not in(
	select max(rowid)
	from stuInfo
	group by stuName,stuAge
	having(count(stuAge||stuAge)>1)

	union
	select max(rowid)

	from Stuinfo

	group by stuName,stuAge
	having(count(stuAge||stuAge)=1)     
      
);



  实现思路:查找重复的记录,只保留一行(rowid)
           查找不重复的记录(rowid)
           将重复且保留一行的记录和不重复的记录使用union关键字合并结果集
           删除结果集中没有的记录

八、事务控制语言案例

insert into dept values(50,'a',null);

insert into dept values(60,'b',null);
savepoint a;                          --设置保存点

insert into dept values(70,'c',null);

rollback to savepoint a;              --回滚到指定保存点处,表示直接滚回保存点之后的数据操作

commit;
                           --提交事务

九、DDL语句和mysql的基本一致

(1)表的修改
   添加语法:ALTER TABLE 表名称 ADD(列名1 类型 [DEFAULT 默认值],列名1 类型 [DEFAULT 默认值]...)
   修改语法:ALTER TABLE 表名称 MODIFY(列名1 类型 [DEFAULT 默认值],列名1 类型 [DEFAULT 默认值]...)
   修改列名: ALTER TABLE 表名称 RENAME COLUMN 列名1 TO 列名2 

(2)添加约束
   设置主键:constraint person_pk_pid primary key(列名)
   唯一约束:constraint person_name_uk unique(列名)或添加列时后面写 unique
   检查约束:constraint person_gender_ck check(gender in (1,2))或添加列时后面写check(gender in (1,2))
   外键约束:constraint order_detail_order_id_fk foreign key(子表的外键) references users(主表的主键)

十、SQL操作符

(1)算术操作符:+、-、*、/
(2)比较操作符:>、<、>=、<=、=、!=或<>、is null/is not null
(3)逻辑操作符:and、or
(4)连接操作符:||
(5)集合操作符
   1)并集(UNION)
     select empno from emp 
     UNION 
     select rempno from retireEmp;

   2)交集(INTERSECT,两张表关联的数据)
 select empno from emp  
     INTERSECT
     select rempno from retireEmp;
   
   3)减集(MINUS,两张表不关联的数据)
     select empno from emp  
     MINUS
     select rempno from retireEmp;

十一、函数

 (1)转换函数
    select TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS')

from dual;
注:fm去掉前面的零
select TO_CHAR(1210.7, ‘$9,999.00’) from dual;

    select TO_DATE('2005-12-06','yyyy-mm-dd') from dual;


    select TO_NUMBER('100') from dual;

 (2)转换空值的函数

    计算员工的年薪:(如果薪水为NULL,与任何数相加都是null)
    select ename,
           sal+NVL(comm,0) sal1,

           NVL2(comm,sal+comm,sal) sal2,
           DECODE(to_char(hiredate, ‘MM ’),
                  '01', '一月', '02', '二月',
                  '03', '三月','04','四月',
                  '05','五月','06','六月',

                  '下半年') mon

    from employee;
    

 (3)字符函数
    lower()、upper()、initcap()【首字符大写】
    concat()【连接】、substr("hello",1,3)【截取】
    length()、replace()
 (4)数值函数
    trunc():取整,也可指定小数保留的位数,如:trunc(123.11)
    round():四舍五入
    mod():取余数  
 (5)日期函数
    MONTHS_BETWEEN():获取两个日期之间的月数
    ADD_MONTHS():获取几个月后的日期
     

 (6)聚合函数
    count()、sum()、avg()、max()、min()  

 (7)分析函数【rank()、dense_rank()、row_number()】
    select ename, deptno, sal,
   		--按照每个部门分组,对薪水从大到小排序,每个部门序号从1开始,同一个部门相同薪水序号相同,
   		--且和下一条不同记录的排名之间空出排名
  		 RANK( ) OVER (PARTITION BY deptno ORDER BY sal DESC) "RANK",
   		--按照每个部门分组,对薪水从大到小排序,每个部门序号从1开始,同一个部门相同薪水序号相同,
   		--且和下一条不同记录的排名之间不空出排名
   		DENSE_RANK( ) OVER (PARTITION BY deptno ORDER BY sal DESC) "DENSE_RANK",
   		--按照每个部门分组,对薪水从大到小排序,每个部门序号从1开始,同一个部门相同薪水序号继续
   		--递增,顺序排名
   		ROW_NUMBER( ) OVER (PARTITION BY deptno ORDER BY sal DESC) "ROW_NUMBER"
from emp;       

十二、排序中的空值问题

 排序  order by  
 经验:当排序时存在null时就会产生问题  使用:nulls first ,  nulls last

 --查询雇员的工资从低到高
 select * from emp order by sal nulls first;(null值的数据在前)

 select * from emp order by sal desc nulls last ;(null值的数据在后)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值