ORACLE数据库入门再在屋里坐会 (7)

可以快速删除表的记录并释放空间,不使用事务处理,速度快且效率高,但无法回滚事务:truncate table table_name

5、其他create命令

create index:创建数据表索引

create procedure:创建存储过程

create function:创建用户函数

create view:创建视图

create trigger:创建触发程序

create sequence: 创建序列

6、SEQUENCE

在 oracle 中 sequence 就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

创建语法:

  create sequence sequence_marks

  increment by 1 --每次加几个

  start with 1 --从 1 开始计数

  nomaxvalue --不设置最大值

  nocycle --一直累加,不循环

  cache 10 --使序列号预分配,默认 nocache

例子: select sequence_marks.currval from dual insert into table_name values(sequence_marks.nextval)

删除 :drop sequence sequence_marks

DML语言 -> 数据操作语言 1、 INSERT 语句

Insert into table_name(column1,column2 … … .column_n) values (val1….)

插入多条:

insert into 表名(列名.....) select 列名.... from 源表名

insert into stu select 1,'abc' from dual union

select 2,'abcd' from dual;

2、UPDATE 语句

update table_name set column1=value,…. where [condition…]

3、DELETE 语句

Delete from table_name where [condition…]

DQL语言 -> 数据库查询语言 1、基本语法

SELECT column_list[*查询所有数据]

[ INTO new_table ]

FROM table_source

[ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

例子:

  SQL>select * from em--查询所有数据

  SQL>select ename,job from em--查询指定的字段数据

  SQL> select * from emp where sal>1000--加条件

2、聚合函数

注:以下例子数据来自ORACLE自带表“EMP”和“DEPT”

聚合函数对一组值执行计算并返回单一的值。聚合函数忽略空值。

聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。不能在WHERE 子句中使用组函数。

  AVG(expression): 返回集合中各值的平均值

查询所有人都的平均工资

  select avg(sal) from emp

  COUNT(expression): 以 Int32 形式返回集合中的项数

查询工资低于 2000 的人数

  select count(*) from emp where sal<2000

  MAX(expression): 返回集合中的最大值

查询最高工资

  select max(sal) from emp

  MIN(expression): 返回集合中的最小值

查询最低工资

  select max(sal) from emp

  SUM(expression): 返回集合中所有值的总和

查询部门编号为 20 的工资总和

  select sum(sal) from emp where deptno=20

3、排序函数

用于根据指定的列对结果集进行排序

ORDER BY 语句

查询所有信息并按工资排序

  select * from emp order by sal

  升序(asc)

查询所有信息并按工资升序排序

  select * from emp order by sal asc

  降序(desc)

查询所有信息并按工资降序排序

  select * from emp order by sal desc

  ROWNUM 与 ORDER BY[ROWNUM:伪列,只能使用<,<=,!=]

4、分组函数

分组函数作用于一组数据,并对一组数据返回一个值。

GROUP BY 子句

查询每个部门的平均工资

  select avg(sal) from emp group by deptno

  HAVING 子句

查询部门的平均工资大于 2000

  select avg(sal) from emp group by deptno having avg(sal)>2000

5、连接查询

连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。

1)内连接

内连接也叫连接,是最早的一种连接。还可以被称为普通连接或自然连接

  查询工资最高的 5 个人信息

    select e.*,rownum 编号 from (select * from emp order by sal desc) e

    where rownum<=5

    [或 rownum!=6]

  这自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

  等值连接:

    select * from emp inner join dept on emp.deptno=dept.deptno

    select * from emp,dept where emp.deptno=dept.deptno

  不等值连接:

    select * from emp inner join dept on emp.deptno!=dept.deptno

2)外连接

外连接分为三种:左外连接,右外连接,全外连接。对应 SQL:LEFT/RIGHT/FULL OUTER JOIN。通常我们省略 outer 这个关键字。

写成:LEFT/RIGHT/FULL JOIN。

  左外连接(left join): 是以左表的记录为基础的

    select * from emp left join dept on emp.deptno=dept.deptno

    select * from emp ,dept where emp.deptno=dept.deptno(+)

  右外连接(right join): 和 left join 的结果刚好相反,是以右表(BL)为基础的

    select * from emp right join dept on emp.deptno=dept.deptno

    select * from emp , dept where emp.deptno(+)=dept.deptno

  全外连接(full join): 左表和右表都不做限制,所有的记录都显示,两表不足的地方用 null 填充

    select * from emp full join dept on emp.deptno=dept.deptno

3)交叉连接

  交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合。一般情况下,交叉查询是没有实际意义的。

    select * from cross full join dept

6、常用查询

1)like 模糊查询【Oracle 通配符只支持%与_】

  查询姓名首字母为 S 开始的员工信息

    select * from emp where ename like 'S%'

  查询姓名第三个字母为 A 的员工信息

    select * from emp where ename like '__A%'

2)is null/is not null 查询

  查询没有奖金的雇员信息

    select * from emp where comm is null

  查询有奖金的雇员信息

    select * from emp where comm is not null

3)in 查询

  查询雇员编号为 7566、7499、7844 的雇员信息

    select * from emp where empno in(7566,7499,7844)

4)exists/not exists 查询(效率高于 in)

  查询有上级领导的雇员信息【查询原理:一条一条读写记录】

    select * from emp e where exists

    (select * from emp where empno=e.mgr)

  查询没有上级领导的雇员信息

    select * from emp e where not exists

    (select * from emp where empno=e.mgr)

5)all 查询

  查询比部门编号为 20 的所有雇员工资都高的雇员信息

    select * from emp where sal > all(select sal from emp where deptno=20)

6) union 合并不重复

  select * from emp where comm is not null

  union

  select * from emp where sal>3000

7)union all 合并重复

  select * from emp where comm is not null

  union all

  select * from emp where sal>3000

7、子查询

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwgw.html