• oracle基础知识


    1.安装oracle教程 

        Oracle 11g服务器安装详细步骤——图文教程 : https://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html?qq-pf-to=pcqq.group

    2.SQL语言的组成
      DDL(数据定义语言):维护(定义、修改、删除)SQL模式对象.
      DML (数据操纵语言) :包括数据查询和数据更新(增、删、改,查).
      DCL (数据控制语言) :对数据的访问控制(授予权限、取消权限).
      TCL (事务控制语言) :对事务的控制(提交、回滚、保存点)

      注意:Truncate Table和Delete的区别

        1、截断表是将表中所有记录删除,但保留表结构,并且不写日志
        2、trancate table 是DDL语言 清空表不可回滚,delete from  table_name 是DML语言可带条件 可回滚

    3.数据类型 包括字符、数值、日期时间、RAW 和 LOB 等

      注意:varchar和varchar2 区别 varchar2 一般是2个字节 更加适合扩展,varchar 是中文2个字节,英文数字1个字节

      Oracle 中伪列就像一个表列,但是它并没有存储在表中
        伪列可以从表中查询,但不能插入、更新和删除它们的值
          常用的伪列有ROWID (表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行)

        和ROWNUM(是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数)用于分页 oracle中无 limit关键字

    4.数据完整性:

      实体完整性   约束方法:唯一约束、主键约束

      域完整性  约束方法:限制数据类型、检查约束、默认值、非空约束

      引用完整性  约束方法:外键约束

      自定义完整性  约束方法:规则、存储过程

    --scott解锁
    alter user scott account unlock;
    alter user scott identified by 123456;
    --获取当前系统日期
    select sysdate from dual;
    select systimestamp from dual; 
    --查询所有数据
    select * from emp;
    --查询伪列
    select rowid,emp.* from emp
    select rownum,emp.* from emp
    --创建表
    create table java10182(
           jid int primary key,--主键约束
           jname varchar2(10) not null,--非空约束
           jsex char(5) check(jsex in('男','女')),--检查约束
           jaddress varchar2(30) default '山东淄博',--缺省(默认值)约束
           jbirth date
           
    )
    create table grade2(
          gid number primary key,
          jid int,
          math number,
          foreign key(jid) references java10182(jid)--外键约束
    )
    --新增数据
    insert into java10182 values(1,'小红','男','山东济南',to_date('1989-02-28','yyyy-mm-dd'));
    insert into java10182 (jid,jname,jsex)values(4,'小绿','女');
    select *from java10182;
    update java10182 set jname='xiao'where jid=3;
    --添加约束
    ALTER TABLE  java10182  Add  constraint  uk_jname Unique(jname);
    --复制表结构
    create table emp0201 as select *from emp where 1=2;
    select *from emp0201;
    select *from emp0202;
    --插入来自其他表中数据
    insert into emp0201 select *from emp where deptno=20;
    --复制表的部分数据
    create table emp0301 as select empno,ename,job,sal,comm from emp order by sal;
    select *from emp0301;
    --用系统管理员身份创建用户
    create user xiaolv identified by 123456;--创建用户名
    --赋予用户连接数据库权限
    grant connect,resource to xiaolv;
    select *from scott.java1018;
    --赋予权限
    GRANT SELECT ON  scott.java1018
         TO xiaolv   WITH  GRANT  OPTION;
    --取消权限
    REVOKE  SELECT ON  scott.java1018
         FROM xiaolv;
    --内连接查询
    select *from dept;
    select *from emp;
    select *from dept join emp on emp.deptno=dept.deptno;
    select *from dept , emp where emp.deptno=dept.deptno;
    --给表起别名
    select *from dept d , emp e where d.deptno=e.deptno;
    --左外连接
    select *from dept d left join  emp e on d.deptno=e.deptno;
    --右外连接
    select *from  emp e right join dept d  on d.deptno=e.deptno;
    --全外连接
    select *from  emp e full join dept d  on d.deptno=e.deptno;
    

     5.基本SQL查询 和MySQL差不多

      注意:利用现有的表创建表
    语法:
              CREATE  TABLE <new_table_name> 
              AS
              SELECT column_names  FROM  <old_table_name>;

    --复制表结构
    create table emp0201 as select *from emp where 1=2;
    select *from emp0201;
    select *from emp0202;

    Mysql中可用 create table 表名1 like 表名2
    --插入来自其他表中数据
    insert into emp0201 select *from emp where deptno=20;
    --复制表的部分数据
    create table emp0301 as select empno,ename,job,sal,comm from emp order by sal;
    select *from emp0301;

     6.操作符及SQL函数

    SQL 支持的操作符包括算术、比较、逻辑、集合和连接操作符
    SQL 函数可大致分为:
    单行函数:日期、字符、数字、转换、其他
    聚合函数
    分析函数

    算术操作符包括加(+)、减(-)、乘(*)、除(/)

    比较操作符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等

    逻辑操作符包括与(AND)、或(OR)和非(NOT),NOT通常和AND,OR联合使用

    集合操作符将两个查询的结果组合成一个结果
    union操作符返回两个查询的不重复的所有行。
    intersect 操作符只返回两个查询的公共行。
    minus 操作符返回从第一个查询结果中排除第二个查询中出现的行。

    连接操作符用于将多个字符串或数据值合并成一个字符串||

    SQL 操作符的优先级从高到低的顺序是:
    算术操作符           --------最高优先级
    连接操作符
    比较操作符
    NOT 逻辑操作符
    AND 逻辑操作符
    OR   逻辑操作符   --------最低优先级

    SQL 函数(具体看下编代码)

    SQL 函数可大致分为:
    单行函数:日期、字符、数字、转换、其他
    聚合函数
    分析函数

    --查询james的部门名称
    select *from emp;
    select *from dept
    select dname from emp join dept on dept.deptno=emp.deptno where ename='JAMES';
    select dname from dept where deptno in( select  deptno from emp where ename='JAMES');
    --查询Smith的经理
    select ename from emp where empno in( select  mgr from emp where ename='SMITH');
    --查询emp表中平均工资
    select deptno,avg(sal)as s from emp group by deptno
    select max(s) from (select deptno,avg(sal)as s from emp group by deptno)
    select deptno from (select deptno,avg(sal)as s from emp group by deptno) where s in(select max(s) from (select deptno,avg(sal)as s from emp group by deptno))
    --分页
    select rownum,emp.* from emp where rownum>=1 and rownum<=4;
    select rownum,emp.* from emp where rownum>=5 and rownum<=8;
    select *from(select rownum as s,emp.* from emp)where s>=1 and s<=4;
    select *from(select rownum as s,emp.* from emp)where s>=5 and s<=8;
    --当前页 r=(n-1)*条数+1 n*tiaoshu
    --查询每个人的工资 (sal+2000)
    select ename, sal+2000 as s from emp;
    --连接操作符
    select '姓名为'||ename||'工作为'||job||'的人的工资为'||sal as Str from emp
    --字符函数
    --首字母大写
    select initcap('nihao')from dual
    --转小写
    select empno,lower(ename),lower(job) from emp
    --转大写
    select upper('nihao')from dual
    --ltrim 去掉左边开头有xyz组合的
    select Ltrim('xadyminyxz','xyz') from dual
    --lrtrim 去掉右边开头有xyz组合的
    select rtrim('xadyminyxz','xyz') from dual
    --逐值替换
    select ename,decode(deptno,'20','开发部','30','产品部','10','运维部')as deptno from emp
    --截取当前系统日期的年份
    select extract(year from sysdate) from dual;
    select extract(month from sysdate) from dual;
    select extract(day from sysdate) from dual;
    --获取emp中每个人的工作年限
    select lower(ename),extract(year from sysdate)-extract(year from hiredate)as edate from emp;
    
    Select TO_CHAR(0.123,'$0.9999') FROM DUAL;
    
    SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS')
    FROM dual; 
    SELECT lower(ename),TO_CHAR(hiredate,'YYYY"年"fmMM"月"fmDD"日"')as edate FROM emp;
    --求每个员工的总工资
    select ename ,sal+nvl(comm,0) as 总工资 from emp;
    select ename ,sal+nvl2(comm,1000,0) as 总工资 from emp;
    
    
    select nullif(100,100) from dual;
    select nullif(100,200) from dual;
    select nullif(200,100) from dual;
    --分析函数
    select emp.*,Row_NUMBER()over(order by sal desc,comm desc )as enum from emp;
    select emp.*,Row_NUMBER()over(order by sal desc,comm asc )as enum from emp;
    select emp.*,Row_NUMBER()over(order by sal desc,comm)as enum from emp;
    select emp.*,RANK()over(order by sal desc)as enum from emp;
    select emp.*,dense_rank()over(order by sal desc)as enum from emp;
    select deptno,sal,avg(comm) from emp group by deptno,sal;
    select deptno,sal,comm  from emp;
    

      

  • 相关阅读:
    hdu6354 杭电第五场 Everything Has Changed 计算几何
    hdu6351 Beautiful Now 杭电第五场 暴力枚举
    牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
    百度之星资格赛 调查问卷 bitset模板(直接将字符串转化成二进制数组并可以计算出十进制值)
    百度之星资格赛 子串查询 线段树
    牛客多校第五场 F take 期望转化成单独事件概率(模板) 树状数组
    牛客多校第五场 E room 二分图匹配 KM算法模板
    牛客第五场多校 J plan 思维
    idhttp提交post
    centos6.2 shutdown now关机进入单用户模式
  • 原文地址:https://www.cnblogs.com/zqy6666/p/12578561.html
Copyright © 2020-2023  润新知