zoukankan      html  css  js  c++  java
  • ETL复习--2020年3月24日--数据类型、数据增删改

    --2020年3月24日 AM

    1、DDL 数据定义语言
    创建对象

     

    1.1
    Oracle数据类型主要有:字符串、数值、日期

    mssql:float、medical、int(bight,int,smallint,tinyint)

    char(18):固定字长,例如性别、身份证号

    varchar(10):可变字长,按实际存储长度计算字长,可存空字符串

    varchar2(10):可变字长,不可存储空字符串,Oracle中常用

    SQL中每个汉字占2-3个字节,英文、数值占1个字节,空格占空间,但不占字节

    varchar2 和 nvarchar2 的区别:
    varchar2 最多存放4000字节的数据,最多可以可以存入4000个字母,或最多存入2000个汉字
    (数据库字符集编码是GBK时,varchar2最多能存放2000个汉字,数据库字符集编码是UTF-8时,那就最多只能存放1333个汉字)
    nvarchar2(size),size最大值为2000,单位是字符,而且不管是汉字还是字母,每个字符的长度都是2个字节。
    所以nvarchar2类型的数据最多能存放2000个汉字,也最多只能存放2000个字母。并且NVARCHAR2不受数据库字符集的影响。

    1.2
    字符串转换日期

    select to_date('2020-02-02','yyyy-mm-dd') from dual;
    select to_date('2020-02-02152526','yyyy-mm-ddhh24miss') from dual;

    sqlsever对于时间分类较多:date smalldate time smalltime timestamp

    day 也可表示星期
    select to_char(hiredate,'day') from emp;

    1.3 大对象类型

    lob:用于存储大对象类型。例如文本信息长度超过4000、二进制文件等,
    最大容量为4GB,
    lob 分类:
    clob:用于存储大型文本数据。(例如:备注信息);
    blob:用于存储二进制数据。(例如:图片文件);
    bfile:作为独立文件存在的二进制数据。

    1.4
    null:字符串与 is null、is not null 做判断

    Oracle中没有布尔型,可利用字符串或数值 (1/0) 进行替代表示

    1.5
    建表

    create table t_1 (
    id number,
    numid number,
    name varchar2(30),
    "sex" char(2),
    --sqlsever中使用 [ ] 进行强制转换
    fdate date
    );

    1.6
    约束
    1) 主键约束 (primary key [PK]) 不能重复,不能为 null。
    联合主键 多个字段一同控制,不完全相同即不触发联合主键约束
    2) 外键约束 (foreign key [FK]) 可以为 null。
    3) 唯一约束 (unique [UK]) 不能重复的,但是可以为null。
    4) 非空约束 (not null ) 只能在列级定义。
    5) 检查约束 (check [CK]) (condition) ) 。

    create table t_1 (
    id number primary key,
    numid number not null,
    name varchar2(30) unique,
    sex char(2) check (sex in ('男','女')),
    fdate date
    );

    insert into t_1 values (1,1,1,'男',null);

    1.7
    修改表结构

    alter table t_1 modify name not null;

    drop table t_1;

    练习题:
    1.创建student表,要求列与emp表相同,EMPNO主键约束,ENAME非空约束,SAL检查约束大于零。

    create table student (
    EMPNO number primary key,
    ENAME varchar2(30) not null,
    JOB varchar2(30),
    MGR varchar2(30),
    HIREDATE date,
    SAL number check (sal>0),
    COMM number,
    DEPTNO number
    );

    2.修改deptno列属性为字符串类型。

    alter table student modify deptno varchar2(10);

    3.删除emp表。

    drop table emp;

    --PM

    2、DML 数据操作语言
    行级处理

    create table emp1 as select * from emp;

    2.1 insert

    insert into emp1 (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7799, mike, uiou, 3211, null, 12320, null, 80);

    insert into emp1 (EMPNO, ENAME)
    values (7799, mike);

    insert into emp1
    values (7799, mike, uiou, 3211, null, 12320, null, 80);

    insert into emp1 select * from emp;--插入结果集,Oracle中如此写

    2.2 update

    update emp1 set ename = 'xxx' where empno=7369;
    --update基于select,select无结果,update也无法执行

    update emp1 set ename = 'xxx',comm=950 where deptno=20;
    --一条update语句可对一条数据的多个字段同时更新

    2.3 delete

    delete from emp1;--有事务控制,可回滚找回

    delete from emp1 where comm is null;

    truncate table emp1;--较delete更为直接,无法回滚找回,但耗时有优势

    练习题:
    1.列出至少有一个员工的部门编号和员工人数。

    select deptno,count(ename) from emp group by deptno having count(ename)>=1;

    2.列出最低薪金大于1500的所有工作。

    select job from emp where sal>1500;

    5.列出在每个部门工作的员工数量、平均工资。

    select deptno,count(ename),avg(sal) from emp group by deptno;

    6.列出各个部门的MANAGER(经理)的最低薪金。

    select deptno,min(sal) from emp where job='MANAGER' group by deptno;

    7.列出所有员工的年工资,按年薪从低到高排序。

    select ename,sal*12 from emp order by 2;

    8.查询出emp表中职位是经理(MANAGER),部门平均薪水在2000以上的部门编号和员工人数。

    select deptno,count(ename) from emp where job='MANAGER' group by deptno having avg(sal)>2000;

    9.查询部门总工资在4000以上的部门最高和最低薪水。

    select deptno,max(sal),min(sal),sum(sal) from emp group by deptno having sum(sal)>4000;

    10.查询部门20的员工,每个月的工资总和及平均工资。

    select ename,sum(sal),avg(sal) from emp where deptno=20 group by ename;

    11.查询每个部门每个岗位的工资总和。

    select deptno,job,sum(sal) from emp group by deptno,job;

    12.查询部门人数大于2的部门编号,最低工资、最高工资,部门人数。

    select deptno,min(sal),max(sal),count(ename) from emp group by deptno having count(ename)>2

    13.查询部门平均工资大于2000,且人数大于2的部门编号,部门人数,部门平均工资,并按照部门人数升序排序。

    select deptno,count(ename),avg(sal) from emp group by deptno having count(ename)>2 and avg(sal)>2000 order by count(ename);

    14.查询部门平均工资在2500元以上的部门编号及平均工资。

    select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;

    15.查询员工岗位中平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。

    select job,avg(sal) from emp group by job having avg(sal)>2500 order by avg(sal) desc;

    16.查询岗位不为SALESMAN,工资和大于等于2500的岗位及 每种岗位的工资和。

    select job,sum(sal) from emp where job!='SALESMAN' group by job having sum(sal)>=2500;

    17.写一个查询,显示每个部门最高工资和最低工资的差额。

    select max(sal)-min(sal) from emp group by deptno;

    18.求出每个部门中相同职位的员工人数 和平均工资。

    select deptno,count(job),avg(sal) from emp group by deptno,job having count(job)>1;

     

  • 相关阅读:
    最权威的 Android Oreo 新特性详解
    【送书福利】第一次送书活动(总共10本)
    【资源篇】Python那么火,你还不知道如何人门?
    不忘初心,方得始终 ,让我们一起学习成长,感谢有你!
    搭建环境篇 | 运行第一个Java Web 项目
    为什么我们需要看技术公众号文章?
    手把手教学APK反编译实现源码阅读
    分享一款 Google Pixel 2 独家动态壁纸
    了解CoordinatorLayout,在项目中运用
    jdk 与 jre的区别
  • 原文地址:https://www.cnblogs.com/iGK-park/p/13047143.html
Copyright © 2011-2022 走看看