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

      

  • 相关阅读:
    程序员:不要自称为码农
    SpringBoot对静态资源配置
    LeetCode 572. Subtree of Another Tree(子树)
    LeetCode 437. Path Sum III(统计路径和等于sum的路径数量)
    LeetCode 112. Path Sum(判断路径和是否等于一个数)
    LeetCode 617. Merge Two Binary Trees(归并两棵二叉树)
    LeetCode 226. Invert Binary Tree(翻转二叉树)
    Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 的解决办法
    linux-查询某软件的安装的目录
    WebService概念解释
  • 原文地址:https://www.cnblogs.com/zqy6666/p/12578561.html
Copyright © 2020-2023  润新知