码迷,mamicode.com
首页 > 数据库 > 详细

oracle基础知识2

时间:2018-04-01 21:55:30      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:sequence   like   分组函数   worker   分组   最大值   info   表名   查询   

什么是连接:

使用连接可以从多个表中查询数据。

Select  table1.column,table2.column from table1, table2 where table1.column=table2.column

在where子句中写连接的条件,是因为在多个表中有相同的列名

笛卡尔:若一个表有5行记录,另一个表有6行记录,则用笛卡尔计算:一共有5*6=30行记录。

连接的类型:等值连接,不等连接,自连接,外连接。

如果两个表中有相同的列可以使用等值连接把两个表连在一起

技术分享图片

使用等值连接的例子:select  emp.ename,emp.empno,dept.deptno,dept.loc from emp,dept  where  emp.deptno=dept.deptno

使用表名是为了指定列在哪个表,同时也可以区分不同表的同一列名,一般情况下,我们可以使用表的别名来简化查询,如:select e.ename, e.empno, d.deptno, d.loc from emp e, dept d where e.deptno=d.deptno

非等值连接

如:select e.ename, e.sal, s.grade from emp e,salgrade s  where e.sal between s.losal and s.hisal;

表的自连接:可以把一张表如emp表分成一个worker表和一个manager表,所以worker表中的mgr等于manager表中的empno。

如:select worker.ename, worker.mgr, ‘workers for’,manager.empno,manager.ename from worker,manmger where worker.mgr=manager.empno;

表的外连接:

外连接的运算符是(+)

外连接分为左连接和右连接

如:select table1.column, table2.column from table1, table2 where table1column(+)=table2.column

select table1.column, table2.column from table1, table2 where table1column=table2.column(+)

左连接是把加号放在等号的右边,输出的结果是由左边的和右边符合条件的共同组成

例子:select e.ename,d.depno,d.dname from emp e,dept d where e.deptno(+)=d.deptno

组函数:也叫做分组函数:分组函数就是运算一组记录,每一组返回一个值(结果)。

包括:group by(将数据进行分组) 和having(包括或者排除被分组的记录),除此之外还有avg,max,min,sum,count,方差,标准差等

数字类型的数据使用avg,sum函数,而min和max可以适用于任何类型的数据

如:Select  avg(sal),max(sal),min(sal) from emp where job like ‘SALES%’;

Select min (hiredate),max(hiredate) from emp;

Group by 后面可以跟多个列,如:group by deptno,job

Having 后面跟的是分组函数,where不能跟分组函数

如:select deptno,max(sal) from emp group by deptno having avg(sal)>2000;

嵌套组函数:如:select max(avg(sal)) from emp group by deptno

子查询的规则:子查询要用括号括起来,子查询放在比较运算符的右边,子查询中不要出现order by子句,对于多行子查询要用多行运算符,单行子查询用单行运算符,单行运算符:=,>,<,>=,<=,     多行子查询的运算符:in,any,all

技术分享图片

以上的子查询是错误的是因为子查询中会出现多个值,应该使用多行运算符,而等于号是单行运算符,所以以上的句子是错误的。

多行子查询中用的any与all的区别:<any,意思是小于最大值,>any是大于最小值

>all意思是大于最大值,<all是小于最小值。

Insert 语句的用法: insert into table (column,column,…) values(…..,….,….)

如:insert into dept (deptno,dname,loc) values(50,’sjuhduie’,’chain’);

Update语句 用法:update table set column=values  where 条件

如:update emp set deptno=20  where empno=7782;

技术分享图片

 

所有的记录被修改之后,只有commit之后才是真正的被修改成功了,rollback:相当于撤销,回到上一步执行的命令,而savepoint:是能回归到原先设定的位置。

数据库的对象:table ,view,sequence:序列,index:索引,synonym:同义词。

创建表:

create table 表名 as select * from 表名1,...  ---复制和表名1一样的表,包括数据

 

    create table 表名 as select * from 表名1,... where 1=2  ---复制和表名1一样的表,但没有数据

 

    create table 表名 as select 字段1,字段2... from 表名1,... ---复制表名1表中指定的字段,包括数据

  

create table 表名(新字段名1,新字段名2...) as select 字段1,字段2... from 表名1,... ---复制表名1表中指定的字段,包括数据,并且改变列名

创建一个新表 creat table 表名(column datatype),datatype是数据类型,可以都用varchar2(size)

其他用户的表不能直接访问,所以在使用其他用户的表时需要加上用户名作为前缀。如:select * from  scott.emp;

建表:如果自己重新创建一个名为dept的表,则如下:

select table dept (deptno number(2),

dname varchar2(14),

loc varchar2(12))

确认创建的表:describe dept

查询用户有哪些表:select * from user_tables;查询用户有哪些类型的对象:select distinct object_type from user_objects;

常见的数据类型:VARCHAR2(size),CHAR(size),NUMBER,DATE LONG等

使用子查询创建表:create table 表名 【column,column,..】as 子查询,如:

 

修改表结构

  1.增加字段

      alter table 表名 add 字段名 数据类型  [default 默认值]

  2.修改字段(数据类型以及默认值)

      alter table 表名 modify 字段名 数据类型 [default 默认值]

  3.修改字段名

      alter table 表名 rename column 旧列名 to 新列名

  4.删除字段

      alter table 表名 drop column 列名

 

修改表名

  rename 旧表名 to 新表名

 

删除表

  drop table 表名

在表中加注释:comment on table 表名 is ‘注释‘’;例如:comment table emp is ‘empioyyee information’;

 

oracle基础知识2

标签:sequence   like   分组函数   worker   分组   最大值   info   表名   查询   

原文地址:https://www.cnblogs.com/ling-1024/p/8688168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!