zoukankan      html  css  js  c++  java
  • oracle基础知识2

    什么是连接:

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

    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’;

  • 相关阅读:
    【Atcoder】CODE FESTIVAL 2017 qual C D
    【BZOJ】4756: [Usaco2017 Jan]Promotion Counting
    【Luogu】P3933 Chtholly Nota Seniorious
    【BZOJ】1914: [Usaco2010 OPen]Triangle Counting 数三角形
    【算法】计算几何
    【BZOJ】1774: [Usaco2009 Dec]Toll 过路费
    【BZOJ】2200: [Usaco2011 Jan]道路和航线
    【BZOJ】1833 [ZJOI2010]count 数字计数
    【BZOJ】1731: [Usaco2005 dec]Layout 排队布局
    【BZOJ】1577: [Usaco2009 Feb]庙会捷运Fair Shuttle
  • 原文地址:https://www.cnblogs.com/ling-1024/p/8688168.html
Copyright © 2011-2022 走看看