zoukankan      html  css  js  c++  java
  • ORACLE---Unit01: 数据库原理 、 SQL(DDL、DML)

    --SQL语句是不区分大小写的,但是为了增加可读性,可以将关键字全部大写,非关键子全部小写。
    SELECT SYSDATE FROM dual;

    --SQL语句根据功能有不同分类:
    --DDL语句(数据定义语言)
    --用于操作数据库对象。数据库对象包括:
    --表、视图、索引、序列

    --->1.创建表:
    CREATE TABLE employee_RR(
     id NUMBER(4),
     name VARCHAR2(20),
     gender CHAR(1),
     birth DATE,
     salary NUMBER(6,2),
     job VARCHAR2(30),
     deptno NUMBER(2)
    );

    --->2.查看表的结构:(两个地方会用到)
    DESC employee_RR

    --->3.删除表:
    DROP TABLE employee_RR;

    ---DEFAULT
    ---设置默认值
    ---在数据库中,无论字段是什么类型,默认值都是NULL,但是可以在创建表的时候,通过DEFAULT关键字为指定的列单独设置默认值。
    ---在数据库中,字符串使用单引号表示字面量,这一点与java不一致,需要注意!
    ---注:不同的数据类型,数字直接就写数字不需要单引号,而字符的自变量就写单引号。
    --      和Java中不一样的是,在数据库中,不论单一字符还是多字符的自变量,都是单引号。
    ---可以通过DEFAULT子句给列指定默认值(null)
    ---给gender列赋默认值‘M’,如果没有指定性别的员工,默认是男性。
    ---先将employee表删除,再创建表employee
    ---注:SQL语句虽然不区分大小写,但是字符串内容是区分大小写的。
    CREATE TABLE employee_RR(
           id NUMBER(4),
           name VARCHAR2(20),
           gender CHAR(1) DEFAULT 'M',
           birth DATE,
           salary NUMBER(6,2),
           job VARCHAR2(30),
           deptno NUMBER(2)
    ); 
    DROP TABLE employee_RR;


    ---NOT NULL约束
    ---非空约束要求指定字段在任何情况下值不允许为空。
    ---非空(Not Null)是一种约束条件,用于确保字段值不为空
    ---默认情况下,任何列都允许有空值 (注意:gender CHAR(1)NOT NULL DEFAULT 'M',为错误,不允许这样)
    ---(注意:not null是可以看得到的。)
    ---当某个字段被设置了非空约束条件,这个字段中必须存在有效值
    ---当执行插入数据的操作时,必须提供这个列的数据
    ---当执行更新操作时,不能给这个列的值设置为NULL
    --->NOT NULL约束
    --->NOT NULL约束可以确保指定的字段不允许NULL.
    CREATE TABLE employee_RR(
           id NUMBER(4),
           name VARCHAR2(20)NOT NULL,
           gender CHAR(1) DEFAULT 'M',
           birth DATE,
           salary NUMBER(6,2),
           job VARCHAR2(30),
           deptno NUMBER(2)
    );
    DESC employee_RR

    ---二.修改表
    ---修改表可以修改表的名字和表的结构
    ---2.1修改表名:
    ---RENAME old_name TO new_name
    ---在建表后如果希望修改表名,可以使用RENAME语句实现
    ---语法如下,将改变表名old_name为new_name:
    ---RENAME old_name TO new_name;
    ---修改表名employee为myemp
    ---RENAME employee TO myemp;

    RENAME employee_RR TO myemployee_RR

    DESC employee_RR
    DESC myemployee_RR

    ---2.2:修改表结构
    ---添加新字段,删除现有字段,修改现有字段
    ---就是改变表当中的字段,增删改。添加新的字段,或几个字段。
    ---增加列
    ---给表增加列可以使用ALTER TABLE的ADD子句实现。
    ---语法:
    ---ALTER TABLE table_name ADD();
    ---列只能增加在后面,不能插入到现有的列中
    ---给表增加一列hiredate,并设置默认值为当前日期
    ---2.2.1:添加新字段
    ---向myemp表中添加字段hiredate

    ALTER TABLE myemployee_RR ADD (hiredate DATE DEFAULT sysdate);
    DESC myemployee_RR

    ---2.2.2:删除字段
    ---将myemp表中的hiredate删除

    ALTER TABLE myemployee_RR DROP (hiredate);
    DESC myemployee_RR

    ---2.2.3:修改现有字段
    ---修改字段可以修改字段的类型,长度添加默认值或者约束条件。
    ---但是修改字段尽量在表中没有数据的情况下进行,否则尽量不要修改字段类型,
    ---改长度也尽量只增不减,否则可能修改失败。
    --->可以修改字段的类型,长度,默认值,非空

    --修改列 MODIFY
    --建表之后,可以改变表中列的数据类型、长度和默认值
    --修改仅对以后插入的数据有效
    --如果把长度由大改小,有可能不成功
    --语法:
    --ALTER TABLE table_name MODIFY
    --修改表myemp的列job,并增加默认值的设置
    --ALTER TABLE myemp
    --MODIFY(job VARCHAR2(40) DEFAULT'CLERK');
    注意:尽量不要修改表结构,修改也是数据空的表,不然说明前期工作分析不足。
    1、字段类型不要改,因为表里已经有数据了。如果之前是字符串改为date,就会失败
    2、长度尽量大的扩,不要小的缩。
    --ALTER TABLE myemployee_RR MODIFY (job NUMBER(10,2)NOT NULL);

    ALTER TABLE myemployee_RR MODIFY(job VARCHAR2(40))
    DESC myemployee_RR

    -----DML语句(数据操作语言)
    ---DML用于对表中数据进行增、删、改操作
    ---1.INSERT:插入数据
    --INSERT INTO myemployee_RR(id,name,job,deptno)VALUES(1,'ROSE',11,10);
    INSERT INTO myemployee_RR(id,name,job,deptno)VALUES(1,'ROSE','CLERK',10);
    COMMIT
    SELECT * FROM myemployee_RR

    --COMMIT--〉已提交  执行按钮右边第五个铁桶钩也是COMMIT(F11) //再右边是ROLLBACK回滚
    --ROLLBACK--〉回退完成。

    --INSERT语句中的字段名可以忽略,但是忽略后就是全列插入。
    INSERT INTO myemployee_RR VALUES(2,'rose','M',SYSDATE,5000,'CLEAK',20)
    SELECT * FROM myemployee_RR

    ---插入日期类型数据
    ---可以直接给定字符串,但是格式必须是:'DD-MON-RR',由于月用得是简拼,
    ---不同语言地区这里会有出入:
    ---英语地区是以英文字母缩写形式,如'01-SEP-03'
    ---而中文环境下为:'01-9月-03'。所以不建议使用。
    ---可以使用TO_DATE函数,这是数据库的一个内置函数,可以将一个字符串
    ---按照指定的日期格式转换为DATE值。

    INSERT INTO myemployee_RR(id,name,job,deptno,birth)VALUES
    (3,'mark','CLERK',20, TO_DATE('1990-09-13','YYYY-MM-DD'))

    SELECT * FROM myemployee_RR

    ---UPDATE语句
    ---更新表中的记录
    ---语法如下:
    ---UPDATE table_name
    ---SET column= value()
    ---如果没有where子句,则全表的所有数据都会被更新修改,务必小心

    ---2.UPDATE,更新数据,将rose的性别改为'F',更新职员rose的薪水为8600
    ---修改的时候通常要使用WHERE子句来添加过滤条件,这样仅会将满足条件的记录
    ---进行修改,若不添加过滤条件则是全表更新,这样的情况实际比较少。
    UPDATE myemployee_RR SET gender='F',salary=8600 WHERE name='rose'
    SELECT * FROM myemployee_RR

    ---3.DELECT,删除语句
    ---删除ROSE
    DELETE FROM myemployee_RR WHERE gender='M'
    DELETE FROM myemployee_RR WHERE name='rose'
    SELECT * FROM myemployee_RR


    ---DELETE 语句
    ---在DDL语句中的TRUNCATE语句,同样有删除表数据的作用。
    ---和DELETE语句的区别:
    --DELETE可以有条件删除,TRUNCATE将表数据全部删除
    --DELETE是DML语句,可以回退,TRUNCATE是DDL语句,立即生效,无法回退
    --如果是删除全部表记录,且数据量较大,DELETE语句效率比TRUNCATE语句低。
    --删除全部记录
    --DELETE FROM myemp;
    --或者
    --TRUNCATE TABLE myemp

    **************************************************************************************************************************************************************************

    CREATE TABLE emp_RR(
       empno NUMBER(4,0),
       ename VARCHAR2(10),
       job VARCHAR2(9),
       mgr NUMBER(9),
       hiredate DATE,
       sal NUMBER(7,2),
       comm NUMBER(7,2),
       deptno NUMBER(2,0)
    );

    DESC emp_RR

    CREATE TABLE dept_RR(
       deptno NUMBER(2,0),
       dname VARCHAR2(14 BYTE),
       loc VARCHAR2(13 BYTE)
    );

    DESC dept_RR
    DROP TABLE dept_RR;


    INSERT INTO emp_RR(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
    VALUES(7369,'SMITH','CLERK',7902,to_date('1980-12-17','YYYY-MM-DD'),800,NULL,20);
    INSERT INTO emp_RR VALUES(7499,'ALLEN','SALESMAN',7698,TO_DATE('1981-2-22','YYYY-MM-DD'),1600,300,30);
    INSERT INTO emp_RR VALUES(7521,'WARD','SALESMAN',7698,TO_DATE('1981-2-22','YYYY-MM-DD'),1250,500,30);
    INSERT INTO emp_RR VALUES(7566,'JONES','MANAGER',7839,TO_DATE('1981-4-2','YYYY-MM-DD'),2975,NULL,20);
    INSERT INTO emp_RR VALUES(7654,'MARTIN','SALESMAN',7698,TO_DATE('1981-9-28','YYYY-MM-DD'),1250,1400,30);
    INSERT INTO emp_RR VALUES(7698,'BLAK','MANAGER',7839,TO_DATE('1981-5-1','YYYY-MM-DD'),2850,NULL,30);
    INSERT INTO emp_RR VALUES(7782,'CLARK','MANAGER',7839,TO_DATE('1981-6-9','YYYY-MM-DD'),2450,NULL,10);
    INSERT INTO emp_RR VALUES(7788,'SCOTT','ANALYST',7566,TO_DATE('1987-4-19','YYYY-MM-DD'),3000,NULL,50);
    INSERT INTO emp_RR VALUES(7839,'KING','PRESIDENT',NULL,TO_DATE('1981-11-17','YYYY-MM-DD'),5000,NULL,10);
    INSERT INTO emp_RR VALUES(7844,'TURNER','SALESMAN',7698,TO_DATE('1981-9-8','YYYY-MM-DD'),1500,0,30);
    INSERT INTO emp_RR VALUES(7876,'ADAMS','CLERK',7788,TO_DATE('1987-5-23','YYYY-MM-DD'),1100,NULL,20);
    INSERT INTO emp_RR VALUES(7900,'JAMES','CLERK',7698,TO_DATE('1981-12-3','YYYY-MM-DD'),950,NULL,30);
    INSERT INTO emp_RR VALUES(7902,'FORD','ANALYST',7566,TO_DATE('1981-12-3','YYYY-MM-DD'),3000,NULL,20);
    INSERT INTO emp_RR VALUES(7934,'MILLER','CLERK',7782,TO_DATE('1982-1-23','YYYY-MM-DD'),1300,NULL,10);

    SELECT * FROM emp_RR;

    INSERT INTO dept_RR(DEPTNO,DNAME,LOC) VALUES(10,'ACCOUNTING','NEW YORK');
    INSERT INTO dept_RR VALUES(20,'RESEARCH','DALLAS');
    INSERT INTO dept_RR VALUES(30,'SALES','CHICAGO');
    INSERT INTO dept_RR VALUES(40,'OPERATIONS','BOSTON');

    SELECT * FROM dept_RR;

    **************************************************************************************************************************************************************************

  • 相关阅读:
    android cts 命令的说明
    k8s认证授权和dashboard部署
    Pod对象的基本概念
    k8s创建自定义资源
    flannel网络插件介绍
    go语言包的介绍
    安装k8s的自动代码生成器
    k8s的pv和pvc概念
    Es索引匹配查询
    shell实现自动化部署项目
  • 原文地址:https://www.cnblogs.com/sneg/p/7801087.html
Copyright © 2011-2022 走看看