Oracle数据库学习总结

一.基本的select语句

1.基本查询语法:

select  字段名1,字段名2  from 表名;

如:select ename,empno from emp;

 

2.可以对字段进行基本运算有:

A  对于NUMBER 类型的有: + - * /

B  对于DATE类型的有:+ , - ;

另外,可以使用括号改变运算的优先级。

 

3.空值不参与运算,对null进行运算是无效的,但在字符连接时可以使用。

 

4.字段别名的使用:

select 字段名1 as  别名1字段名2 as 别名2  from  表名;

如:select ename as “姓名”,empno as “员工号” from emp;

 

5.过滤重复列,使用关键词distinct来实现:

       如:select distinct deptno from emp; 过滤emp表中deptno部门号相同的.

 

6.查询表结构: desc 表名 如:

PL/SQL file-> new -> command window ->

SQL> desc emp;

 

 

二.表数据的过滤与排序

 

1.数据过滤

使用where限制数据的查询:

select 列名 from where 列名 运算符号 值;

如:select ename ,empno,sal from emp where sal >2000;

查询工资大于2000的员工的信息。

 

1)字段中的信息大小写的问题:值必须区分大小写。

2)复杂运算符

      两者之间:between...and

      如:select ename sal from emp where sal between 2500 and 5000;

      范围之内:in (set)

      如:select ename sal from emp where deptno in(20,30);

      是否存在:is null,

      如:select ename,empno,job from emp where mgr is not null;

      模糊查询:like

      如:select enaem ,job from emp where ename like ‘%A%’;

3)逻辑运算:

  not :如果为真,结果为假;如果为假,结果为真,即取反操作;

    and :只有两个值都为真时,结果才为真;

    or :只要有一个为真时,结果就为真。

默认条件下优先级为not and or 为从高到底

 

2.排序数据

 order by:

1)两种方式:

ASC:升序

如:select ename ,sal ,job from emp where sal >2000 order by sal ASC;

DESC:降序

如:select ename ,sal ,empno from emp where sal >2000 order by sal DESC;

 

2默认情况下是ASC也可以按别名来排序的,既可以省略ASC

 

三.函数

<A>单行函数

1.函数类别:

单行:返回单个结果:substr,length

多行:返回多个结果,any,all

 

2.单行函数分类:

1)字符类:转换大小写:

1lower:转换为小写

2upper:转换为大写

3initcap:首字母大写

 

(2)字符处理类:

1concat:连接两个不同的列,concat只能接受两个参数

2substr:截取子串

3length:提取长度

4instr:返回索引

5lpad:左补齐和rpad:右补齐

6trim两边滤空

7replace:替换

 

(3)数字转换类:

1round:四舍五入

2trunc:截取

3mod:取余

 

4)日期类函数:

1Oracle的内置函数sysdate: 可以查询系统当前日期与时间

2)日期+-1,都代表一天的时间

 

5).日期运算函数

1months_between:表示两个日期的月份之差

2add_months:表示给指定的日期加一个月数

3next_day:表示以当前时间为基准,下一个"目标日"的日期

4last_day:计算当前日期的最后一天

5round:对日期进行四舍五入

6trnuc:表示对日期进行截取

7to_char:函数将日期转换为字符类型

 

 

3 转换函数:

1.TO_CHAR:

可以对数字类型进行类型转换,转换的同时,你可以指定转换后的格式

2.TO_NUMBER:

作用是用来将一个指定的字符串类型的数字,转换为数字格式

(格式必须要匹配).

3.TO_DATE:

将字符串类型的日期,转换为日期类型

 

4 .关于通用函数:

(1) NVL:当修饰的字段的内容为null,运算结果为指定的值

      如:NVL(expr1,expr2);

(2) NVL2:如果第一个表达式的值不为null,显示表达式2的值,否则(null)显示表达式3的值

如:NVL2(expr1,expr2,expr3);

(3) NULLIF:如果前后两个表达式的内容相等的,那就返回null,否则,返回第一个表达式的值

     如:NULLIF(expr1,expr2);

(4) COALESCE函数:用来匹配多个字段的值,如果表达式1的值为null,显示表达式2的值,如果表达式2也为空,显示表达式3的值,依次类推

     如:COALESCE(expr1,expr2,expr3,…,expr);

 

5.条件表达式:

1case:表达式语句

 

2decode:函数decode()

 

<B>分组函数

1.统计数据

1)取最大值:max

2)取最小值:min

3)取平均值:avg

4)取记录数:count

5)求和:sum

2.分组函数和distinct关键词的搭配

组函数名(distinct 字段名)

3.组函数与空值

空值不参与运算,直接被过滤掉

4.分组数据

group by子句的使用

(1)使用group by规则

aselect后面的字段必须在group by子句中出现

b)在组函数(count,max,min)中出现的字段除外

(2)关于group by条件分组的问题

agroup by可以和where来搭配where只能在group by的前面From EMP 后面不能有where

bwhere子句中不能包括组函数条件的表达只能使用having来表示

如:

select ename,max(sal),min(sal),avg(sal) from emp group by ename having sal>2000 order by ename ASC;

 

四.子查询

1.语法要求:

1)子查询总是先于主语句的运行

2)必须有(),表示是一个整体

3)习惯上,把子查询放在条件的右边

4)单行操作符只能接受一个值

2.子查询的分类:

1)单行:运算符

2)多行:in any,  all

 

五.多表连接

1.查询的时候,可以from多个表这样会产生一个笛卡尔集

2.需求:取关联数据用where语句实现

3.语法格式:

1select 字段 from 1,2 where 1.=2.列;

2)可以为表定义一个别名,但是不能使用as(字段重命名可以使用)

3)不同的连接条件可以使用andor

4.使用不等值连接

连接条件:一个表中的记录,在另一个表中能够找到匹配的记录即可

5.外连接:把不满足条件的数据显示出来

1)左外连接

2)右外连接

6.自连接

从同一个表中联合查询

7.SQL99 新标准下的多表连接

 1)交叉连接: CROSS JOIN

其结果是笛卡尔集,是没加任何条件所产生出来的数据集合

 2)自然连接:NATURAL JOIN

默认情况下,以两个表中有相同名称的列来进行连接查询

 3)使用using子句来查询

1  join  2  using(字段名)

 4)使用on子句

指定连接具体条件

 5)多个表连接查询

   1  join  2  on  条件  join  3  on   条件  .......

 6)外连接:

 左外连接:LEFT OUTER JOIN

 右外连接:RIGHT OUTER JOIN

 全连接:FULL OUTER JOIN

 

六.数据处理

1.插入数据:  INSERT  INTO

1)表后面()内表示的是字段名称 与values()内表示是字段所对应的值

 (2)值要与列所表示的数据类型对应

(3)没有指定值的列默认为null查询的时候,可以使用is null来提取

 (4)写入的数据只在当前窗口内是有效的,打开一个新的SQL Window就无效,如果需要持久性保存下来需要进行事务处理

 

事务操作:

1)提交commit

2rollback

3)回滚到指定的点

 

如:

INSERT INTO emp(empno,ename,job,sal)  VALUES(7878,’ali’,’manager’,5000);

   Commit;

5)在sql,可以用"&变量名称"来定义表名,字段名,值等信息

6)从其他表中拷贝数据

1)字段类型要对应

2)字段个数要对应

7)使用循环的向表中插入数据,如:

INSERT  INTO   emp (empno,ename,job,sal)

VALUES(‘&员工号’,’&姓名’,’&职称’,’&工资’);

Commit;

 

2.修改数据: UPDATE

1)语法:

update 表名 set 字段= where 条件

2)要求

1)不同的字段用逗号隔开

2)如果没有指定条件,默认更新所有的记录

3)在更新语句中可以使用子查询

4)关于更新时发生的数据关联问题,如果一个字段的值的来源是另外一个表,其值不能随意指定。

  如:UPDATE emp set comm = 200 where comm. Is null;

 

3.删除数据: DELETE

(1)语法:delete 表名 where 条件;

(2)可以使用子查询执行delete操作

(3)关于删除的完整性约束: 如果一个字段被另外一个表的字段引用,那个这个值就不能删除

 如:DELETE emp where sal <1500;

     DELETE emp where deptno=(select deptno from emp where empno is null);

 

七.创建和管理数据

1.表的分类:

1)系统表

2)自定义表

3)数据字典表

2.表的命名规则:

1)表名长度必须在30位以内

2)表名要避开关键词

3)表名最好是有特定意义,如:员工表 emp,部门表 dept

 

3.表的创建:

1)语法:

Create Table 表名(

列名1 字段数据类型,

列名2 字段数据类型,

列名3 字段数据类型,

.....

);

:

create table student(

name varchar2(20),

age number(5),

class varchar2(10),

stuid number(4));

commit;

2)你可以在创建表的同时,指定默认值,设置主键等;

 

4.查看其他用户的表

1)可以以sys身份可以看到scott用户下的表

    如:select * from scott.emp;

2scott不能看sys用户下的表的信息

 

5.字段类型的定义

1char---定长字符串

2varchar2----变长字符串

3number(n):表示整数位不能大于n,小数位可以任意

4number(m,n):表示总长度为m,其中小数位为n,整数为为m-n

5Date类型可以使用to_date把字符串类型转换为date类型

 

6.使用子查询来创建表

create table 表名 as 子查询语句

如:

create table new_emp as select * from emp

 where sal between 2000 and 5000;

 Commit;

7.更新表的结构

1)追加列

Alter Table 表名 Add (列名  字段数据类型)

2)修改列

Alter Table 表名 Modify (列名  字段数据类型)

3删除列

Alter Table 表名 Dorp (列名  字段数据类型)

 

8.对表进行重命名

使用rename  原表名  to  新表名;

如:rename emp to new_emp;

 

9.删除表的内容

  1delete删除表中一部分  如:delete emp where empno=7865;

  2truncate清空表的内容 如:truncate table emp;

  3drop 全部删除  如:drop table emp;

区别:

   Delete 删除表中的一部分数据,可以使用Rollback回滚,放弃修改;

   Truncate 删除的是表中所有的数据,并且不可以回滚,一旦执行数据就会掉失

   所以,在删除时一定要确认数据是否要删除。

 

10.注释

1)对表的注释

        COMMENT ON TABLE 表名  IS  '注释内容'

2)对列的注释

COMMENT ON COLUMN EMP.ENAME IS '注释内容'

12.plsql工具中导出表的信息

 TOOLS---EXPORT TABLES---SQL INSERTS

 

八.表的约束

1.数据完整性的约束条件:

1)非空 :not null约束

2)唯一:unique约束

3)主键:not null+unique

4)外键:值是外来的

5)检查:值是符合条件

2.注意事项

1)可以给约束起个名字,也可以是使用默认的名字

2)创建的两种时机:创建表的同时/修改表的定义的时候

3)约束的定义位置:表级/列级

4)在字典表中可以查看到这些约束信息

3.not null约束

 定义位置:not null只能在列级

4.unique唯一约束

1)表级(自定义名称)

constraints uni_名称 unique(字段名)

2)列级(使用系统默认名称)

字段名 unique

5.主键约束

1)列级:字段名 primary key

2)表级:,constraints pk_id primary key(id)

3)主键==not null+unique

4)联合主键:要求多个字段每一项都不能为null,并且合起来的值不能重复

6.外键约束

语法:

constraints 自定义名称 FOREIGN KEY (字段名)

references 表名(字段名)

7.关于外键的删除级联设置

1on delete cascade:级联删除

2on delete set null(不引用)

8.CHECK约束

可以表级也可以是列级

9.约束的添加

    语法:

alter table 表名 add primary key (字段名称)

10.删除已存在的约束

ALTER TABLE 表名 drop constraints 约束名

11.级联删除约束

在删除约束的同时,也删除跟该字段有关系的约束设置

12.有效化和无效化约束

使用disableenable关键词

13.从数据字典中查询

1select * from user_constraint     查询对应的表

2select * from user_cons_colunmns  查询对应的列

 

九.视图

1.创建格式: 在创建视图的时候,可以使用别名

create or replace view 视图名词 as 数据集合(通常是一个查询语句)

如:create or replace view new_emp as select empno,ename sal job from emp;

    Select * from new_emp;

2.修改视图:

replace

create or replace view myview as select...

 

3.视图创建的规则

视图的内容可以是任意的集合

 

4.删除视图:

drop view 视图名称

如:drop view new_emp;

删除视图是对基础表不会产生任何的影响

 

5.TOP-N分析:

1)语法:rownum 运算符 行编号

2ROWNUM=1不会为null

 

十.其它数据库对象

1.序列:

1) 特点:

1)共享的

2)提供有规律的数值

3)提取方式:

序列名.nextval

select seq.nextval from emp

INSERT INTO EMP(EMPNO) VALUES(MYSEQ.NEXTVAL)

  

2)查询已定义的序列

SELECT * FROM USER_SEQUENCES

3)使用序列的约束

1nextval 下一个值

2currval  表示当前值

3currval的值必须在nextval被指定后才有效

4)删除序列

drop sequence myseq

2.索引:

(1)作用:提交数据的查询效率,尤其对一些数据量很大的表

(2)定义方式:

1)自动创建:

主键,唯一性约束

2)手动创建

如:CREATE INDEX ENAME_IDX ON emp(ename)

3)索引的创建时机问题:

要创建索引的的情况:

1列经常被用来做条件查询的时候

2)表数据量很大的时候

不要创建索引的情况:

1)表很小

2)列不经常作为连接条件或出现在WHERE子句中

3)查询的数据大于2%4%

4)表经常更新

3.同义词

1)目的:为了缩短对名称长度的引用

2)创建格式:

CREATE SYNONYM  同义词名词 for 对象(scott.emp)

        如:

CREATE SYNONYM SN_EMP FOR  SCOTT.EMP

CREATE SYNONYM SN_DEPT FOR SCOTT.DEPT

SELECT * FROM SN_EMP E,SN_DEPT D WHERE E.DEPTNO=D.DEPTNO

4.集合操作符

(1)合并集合语法:

查询语句1     UNION 查询语句2

如:

SELECT * FROM EMP WHERE SAL>2000

UNION

SELECT * FROM EMP WHERE JOB='MANAGER'

(2)注意事项:

1)不同的表合并时,要注意字段个数要对应

2)类型要对应

3)显示的字段是第一个表的字段列名为新的集合的列名

(3)使用union all保留重复的记录

(4intersect交集

(5)不保留重复的minus

 

(6)分页查询:

使用rownum限定

如:

SELECT * FROM (

       SELECT ENAME,EMPNO,JOB,ROWNUM RN FROM EMP

) WHERE RN BETWEEN 3 AND 9

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值