zoukankan      html  css  js  c++  java
  • oracle数据库入门sql语句

    数据库:

    命名规范问题 依然是 _流。看来也确实应该抽空 来处理一下 今天吧,不行时间不能浪费。要更加专注。累了 就睡,醒来 就 好好 弄东西。白天 哪怕累一些,强度 大一些,晚上也可以抽空出去。溜溜弯儿。

     

    雷哥 问了一个 问题:

    Char 跟 varchar 有什么区别。如果 char 里面 定了4位。存了 一个 汉字,就是 两位。但是 在数据库空间依然是 4位。后面用空格补齐。但是 varchar 里面 假设定了 4位的长,存了一个 汉字 占了两位,这时候 在数据库中就只占2两位。所以 在空间的利用率上varchar 更胜一戳。但是 char 会 在比对时 占用的时间更少。

     

    1、Int 跟 double 跟 number 的区别

    2、Varchar2 跟 varchar 的区别。

    3、Blob 和 clob 两个是否存在?如何应用?

    在 orcl 里面存在 blob  和 clob blob 最大单条记录可以存放4G的内容。都是 2进制的形式。通常情况下 我们把这样的内容单独存到一个 文件中,通过地址的链接来进行索引,这样做是为了数据的安全性来考量的。Blob 主要用于存储 声音 和图片类型的文件。对于 clob 同样最大 单条记录是 4g。用于存储文本信息的内容。通常我们也是通过 链接来获得当前文件,如果 需要 对数据库进行一定的安全性的考量可以 把文件封装在 clob里面,但是 通常 我们都比较少用这两个 在orcl里面存在的数据类型。

     

    Create table employee_tb(

    Employee_id number,

    Employee_name varchar2(20),

    Employee_gender char(4),

    Employee_age number,

    Employee_salary number(9,2),

    Employee_hiredate date

    );

     

    取命令行 可以显示 表结构 采用 desc employee_tb;

    SQL> desc employee_tb;

    Name              Type         Nullable Default Comments 

    ----------------- ------------ -------- ------- -------- 

    EMPLOYEE_ID       NUMBER       Y                         

    EMPLOYEE_NAME     VARCHAR2(20) Y                         

    EMPLOYEE_GENDER   CHAR(1)      Y                         

    EMPLOYEE_AGE      NUMBER       Y                         

    EMPLOYEE_SALARY   NUMBER(9,2)  Y                         

    EMPLOYEE_HIREDATE DATE         Y     

     

     

    这个 number(9,2) 也是 需要 注意的一点,就是 在于这个 数字的数字位有9位,小数数字有两位,所以 对应的 前面一共有七位,也就是 这是个 百万级的数字。

     

    Create table department_tb(

    Department_id number,

    Department_name varchar2(20)

    );

     

    1、今日任务:

    对了 在这个里面 什么区分大小写 什么不区分大小写来着?可能略有不同跟在mysql里面。这个 点要重新搞一下。

     

    删除表格:

    Select * from stu_tb3;

    Drop table stu_tb3;

     

    2、今日任务: 不在可选 现在 想到了 还不赶紧弄,等以后 这就会像雪球一样压垮我,去 查看那个 stanford的视频 查看  命名规范。

     

    修改表格 

    修改表的结构

    添加一个字段:

    Alter table employee_tb add department_id number;

    Select * from emp_tb;

    修改字段类型(当心丢失精度) 所以 一定要谨慎。

    Alter table employee_tb modify employee_age varchar2(10);

    Alter table employee_tb modify employee_age int;

    删除字段:

    Alter table employee_tb drop column employee_age; [在 orcl里面必须这样删除一个 字段,就是 说 这个 column 关键字 不能省略。]

    3、今日任务:在mysql里面 和 orcl里面 这个 都能带着 这个 column关键字么?如果 是的话,或许写一个 这样的差异集合 会比较好。

     

    表的操作;

    Select * from employee_tb;

    Insert into employee_tb (employee_id,employee_name,employee_hiredate) values(3,'zhangsan','1-1-2016');[差异:在添加日期的时候,这个 日期算是被阉割了,也就是说 当插入日期的时候:就是要以这样的标准书写:

    比如今天是2016年 1月 8日。那么如下则为今天这样一个 日期的书写:8-1-2016]

     

    Update employee_tb set employee_name='wangwu' where employee_id=2;

    Delete from employee_tb where employee_id=2

     

    在 orcl里面的 事务概念:mysql里面没有说 那估计就是没有了。

    在执行的时候 先写一个 commit; 表示开启了一个 事务,然后比如我们删除了一条记录,这个时候执行 rollback。就会回跟到我们事务开始的位置。这是整段的事务提交和回滚。也可以通过 savepoint a;这样的 语句 存储一个节点。然后 部分回滚, 利用语句 rollback to a;

    例程:

    设:

    Create table employee_tb();

    Insert into employee_tb();

    Commit:

    Delete from employee_tb;//没有记录了。

    Rollback//刚刚的一条记录回来了。

    Commit;//事务提交。从此以后不再可以 有回滚的节点了。并且此时表中有一条记录。

     

    断点模式:

    Create table employee_tb();

    Insert into employee_tb();

    Commit;

    Savepoint point1;

    Insert into employee_tb();//数据库中有2条记录

    Rollback to point1;//回到断点1,数据库中仅有1条记录。

    Insert into employee_tb();

    Savepoint point2;

    Insert into employee_tb();

    Insert into employee_tb();

    Rollback to point2;//回到断点数据库中有2条记录。

     

    Rollback;//数据库中有 1条记录。

    Commit; 所有断点清空,数据库中最后仅有 1条记录。

     

    表约束:

    约束的目的: 保证数据表数据的完整性

    每个字段的数据类型和长度也是一种约束。

    Not null unique check(比如年龄只在 18-60之间,这样一层意思。) primary key foreign key

     

    我们的表里面至少存在一个 主键的约束

    约束的添加方式:

    1、在创建表的同时,直接在字段后面添加

    2、在创建表的所有字段后面添加约束

    3、在创建表完成之后添加约束。

    非空约束  not null 唯一性约束

    Create table student_tb(

    Student_id number not null,

    Student_name varchar2(20) unique

    );

    // 主键约束 primary key

    Create table student1_tb(

    Student_id number primary key,

    Student_name varchar2(20) unique

    );

     

    Create table student2_tb(

    Student_id number primary key,

    Student_name varchar2(20),

    Student_gender char(4) defalult '',

    Student_age number check (student_age between 18 and 60)

    );

     Select * from student_tb

     

    对于 orcl 来讲,

    Student_gender char1) default ''   是不可行的 也就是 一个汉字 是两列。

     

    在创建表的同时,的在所有字段后面添加约束

    Create table student3_tb(

    Student_id number,

    Student_name varchar2(20),

    Constraint pk_stu3_tb_id primary key(student_id),

    Constraint un_stu3_tb_name unique (student_name)

    );

     

    在创建表以后添加约束:

    Select * from employee_tb;

    非空约束

    Alter table employee_tb modify employee_name varchar2(20) not null;

    主键约束

    Alter table employee_tb add constraint pk_employee_tb_id primary key (employee_id);

    主键约束

    Alter table department_tb add constraint pk_department_tb_id primary key (department_id);

    外键约束  (的前提是 主键约束)

    Alter table employee_tb add constraint fk_employee_tb_department_id foreign key (dept_id) references department_tb (department_id)

     

    4、今日任务 orcl 里面的主键自增。

     

    数据查询:

    基本查询

    查询所有字段

    Select * from emp;//scott用户下面自动就有一个emp表,里面拥有各种类型的数据格式。

    查询指定字段:

    Select empno,ename,job from emp;

    Select distinct job emp;

    Select distinct job,empno from emp;

    Select empno as "编号"ename as empname from emp;[区别 在mysql里面可以允许这个别名用: "" ''  或者 什么都不填 三种形式,而 对于 orcl  只有 加"" 和什么都不填两种形式

    Select empno ,ename,sal*12 as "年薪" from emp;

    在 数据库里面有一个函数,如果为空就怎样。ifnull() mysql】和 nvl(comm,0)orcl

    Select empno,ename,(sal+nvl(comm,0))*12 as "年薪" from emp;

    【如果不如此,会导致在没有值的列 返回一个 null null+number 然后* 12 返回一个 null,这就不合适了,所以 在这里面,就是用了一个 nvl函数 ,一旦为空,就怎样。】

    Select * from emp

     

    今天就讲到这里了。

     

     

     

     

     

     

    Nullable 是 可以为空的意思。

     

     

     

     

     

     

    对于主键并没有过多的描述。只有一个非空的表示。但是可以在查看表里面,得到一些描述。

     

     

     

     

    这是合理的 并且也只有这两种书写方式。

    orcl 加双引号 或者不加 

    Mysql 双引号 单引号  或者不加

     

     

     

    查询年薪。

     

    这样的话 感觉会很悲剧。奖金拿不到 甚至连 工资都没了。

    所以 有一个 zai orcl里面的函数: 

     

     

    这个是nvl是 如果没有值的话,就把结果当 0

    这个函数在 mysql里面 是 ifnull

     

     

  • 相关阅读:
    npm 全局执行 update 、 outdated 出现 npm-debug.log 404 错误的问题
    python 爬虫爬取内容时, xa0 、 u3000 的含义
    SCNU ACM 2016新生赛决赛 解题报告
    SCNU ACM 2016新生赛初赛 解题报告
    【记录】Ubuntu下安装VirtualBox
    Ubuntu16.04 LTS下apt安装WireShark
    Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
    Ubuntu在wps-office等qt5程序下不能切换中文fcitx输入法的问题
    Ubuntu管理开机启动服务项 -- 图形界面的Boot-up Manager
    解决Ubuntu下Firefox+OpenJDK没有Java插件的问题
  • 原文地址:https://www.cnblogs.com/letben/p/5185897.html
Copyright © 2011-2022 走看看