zoukankan      html  css  js  c++  java
  • Oracle数据库之一

    数据库(oracle)

    SQL --结构化查询语言,所有数据库基本通用

    数据库是数据的仓库,用于存储数据。

    内存、文件和数据库区别

     内存中的数据是非持久的,关机之后就会消失。

     文件和数据库中的数据都是持久的,关机也存在

     文件和数据库的优缺点:

      文件的优点就是方便快捷,缺点就是对很多的操作(比如查询)没有很好的支持

      数据库的优点就是针对性强,支持非常庞大的对数据的操作。

      主流的开发基本都使用数据库存储数据。

     

    数据库的简介:

      主流数据库(DB):

      Oracle公司(甲骨文)--Oracle(市场占有率超过50%)

      IBM公司(国际商务机器)--DB2

      微软 --SQL Server

      Oracle Sun公司 -- mysql

    主流的数据库 基本都是关系型数据库

     关系主要通过表体现。

     表 就是 二维表格格式,其中每一行叫一条记录,每一列叫一个字段

     数据的操作 使用SQL语句,包括5类:

     1 Select 查询语句

     2 数据定义语句 DDL语句(建表等)

     3 数据操作语句 DML语句(数据的增删改)

     4 数据处理语句(和DML结合使用)

     5 数据控制语句 DCL语句(授权)

    DBA -- 数据库管理员(大型数据库都有DBA)

    SQL语句不区分大小写,“”,‘’之中除外

    Oracle数据库版本:

    8i 9g 10g 11g

    8i和后面版本差别比较大,9 10 11区别不大。

    安装时,建议装10g,9g的删除问题比较多。

    SQL命令自身不包括“;”,但“;”可以让语句运行起来

    查看表的字段信息

     desc 表名

    讲课两个基本表:部门表 s_dept  员工表s_emp

     desc s_dept;

     desc s_emp;

     

    s_dept表:

     Name             Null?     Type

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

     ID               NOT NULL  NUMBER(7)

     NAME          NOT NULL  VARCHAR2(25)

     REGION_ID                 NUMBER(7)

     

    s_emp表:

    Name                    Null?      Type

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

     ID                    NOT NULL   NUMBER(7)

     LAST_NAME      NOT NULL  VARCHAR2(25)

     FIRST_NAME                     VARCHAR2(25)

     USERID                            VARCHAR2(8)

     START_DATE                   DATE

     COMMENTS                      VARCHAR2(255)

     MANAGER_ID                   NUMBER(7)

     TITLE                              VARCHAR2(25)

     DEPT_ID                         NUMBER(7)

     SALARY                          NUMBER(11,2)

     COMMISSION_PCT           NUMBER(4,2)

    常见字段类型:

     number(n) --长度为n个整数

     number(n,m)--长度n,并且有2位小数的数

     char(n)--长度固定为n的字符串(定长字符串),不足部分补空格

     varchar2(n)--长度最大为n的字符串

     date--日期类型

     

    Select 查询语句

    select [distinct]*/字段列表  from 表名/子查询

    select后面跟你想看的字段,用*代表全部

    from后面跟数据从哪里来,一般都是表明

     

    select * from s_dept;

    select * from s_emp;

     

    练习:

    从s_emp表中,显示ID、姓名和工资

    select id,first_name,last_name,salary from s_emp;

     

    select dept_id from s_emp;

    select distinct dept_id from s_emp;

    distinct 作用就是过滤重复结果(显示中的所有字段都重复才算作重复)

    select id,dept_id from s_emp;

    select distinct id,dept_id from s_emp;

     

    计算年收入:

    select id,first_name,last_name,salary*12 from s_emp;

    number类型 支持算数+ - * /

    date类型支持 + -

     

    显示的名称可以用别名改变,别名可以区分大小写

    select id,first_name,salary*12 income from s_emp;

    select id,first_name,salary*12 年收入 from s_emp;

    select id,first_name,salary*12 "income" from s_emp;

     

    练习

     已知,Oracle数据的当前时间sysdate,计算一下每位员工在公司的天数,要求显示字段:

      id、last_name、入职日期、在公司的天数

    在公司的天数用days显示

    select id,last_name,start_date,sysdate-start_date "days" from s_emp;

     

    ||可以连接字符串。字符串的字面值用''表示

    select id,first_name||last_name name name from s_emp;

    select id,first_name||' '||last_name name from s_emp;

     

    select id,salary,commission_pct from s_emp;

     

    计算员工的真实的月收入(包括销售提成)

    select id,salary*(1+commission_pct/100) from s_emp;

     

    关于NULL

     空值不是0,也不是''。空值的类型不确定,但是任何的字段类型都可以是空值。

     空置进行数学运算时,结果一定为NULL。

    SQL 中,对于空值有特殊的处理--函数nvl。

     nvl(字段,缺省值)

    如果字段为NULL,结果取缺省值。如果字符不是NULL,结果就是字段值

    select id,salary*(1+nvl(commission_pct,0)/100) from s_emp;

     

    查询的子句where子句用于加上查询条件

    select id,first_name,salary from s_emp where salary>1500;

    select id,first_name from s_emp where first_name = 'Mark';

     

    部门在41并且工资超过1200的员工

    select id,first_name,salary,dept_id from s_emp

    where dept_id = 41 and salary>1200;

     

    select id,first_name,salary,dept_id from s_emp

    where dept_id = 41 or salary>1200;

     

    where中的运算符:

    = > >= < <=

    between...and...

    in()

    like

    is NULL

    and 代表并且关系

    or  代表或者关系

    not 代表逻辑非

     

    注:and的优先级比or高,因此如果有3个条件算or的话,用()提升优先级

    select id,first_name,salary,dept_id from s_emp

    where salary>1200 and dept_id = 41 or dept_id =42;

     

    select id,first_name,salary,dept_id from s_emp

    where salary>1200 and (dept_id = 41 or dept_id =42);

     

    between...and... 在xxx之间(双闭区间)

    select id,first_name,salary,dept_id from s_emp

    where salary between 1200 and 1400;

     

    select id,first_name,salary,dept_id from s_emp

    where salary between 1400 and 1200;

     

    select id,first_name,salary,dept_id from s_emp

    where first_name between 'A' and 'M';

     

    in(a,b,c,d) 在()中的一个值 a/b/c/d

     

    select id,first_name,salary,dept_id from s_emp 

    where dept_id in(41,42);

     

    select id,first_name,salary,dept_id from s_emp 

    where dept_id not in(41,42);

     

    注:not in效率很低,尽量少用。

     

    is null 判断是否为NULL

    NULL 用 = != 无法判断,只能用is null

    select id,first_name,salary,dept_id,commission_pct from s_emp 

    where commission_pct = NULL;(错误)

     

    select id,first_name,salary,dept_id,commission_pct from s_emp 

    where commission_pct != NULL;(错误)

     

    select id,first_name,salary,dept_id,commission_pct from s_emp 

    where commission_pct is null;

     

    select id,first_name,salary,dept_id,commission_pct from s_emp

    where commission_pct is not null;

     

    like 像...一样,用于模糊查询

    like后 跟字符串 '' ,在''中,用

    %代表0-n个任意字符(常用)

    _代表1个任意字符

    select id,first_name,salary,dept_id from s_emp 

    where first_name like 'A%';

     

    练习:

    显示所以first_name包括a的员工信息

    select id,first_name,salary,dept_id from s_emp 

    where first_name like '%a%' or first_name like '%A%';

     

    order by 子句 --对查询结果排序

    order by 后面可以跟 字段名/别名/位置编号

    排序分 升序(从小到大)和降序,order默认升序,降序需要在后面加上desc

    select id,first_name,salary,dept_id from s_emp 

    order by salary;

     

    select id,first_name,salary,dept_id from s_emp 

    order by salary desc;

     

    select id,first_name,salary sal,dept_id from s_emp 

    order by sal;

     

    select id,first_name,salary,dept_id from s_emp 

    order by 3;

    排序时支持多个排序的条件,但主排序条件相等时才进行其他排序条件的比较。

    此时如果有desc只对前面的一个有效。

    select id,first_name,salary sal,dept_id from s_emp 

    order by salary,dept_id;

    select id,first_name,salary sal,dept_id from s_emp 

    order by salary,dept_id desc;

    select id,first_name,salary sal,dept_id from s_emp 

    order by salary desc,dept_id desc;

     

     

  • 相关阅读:
    django 自定义用户身份验证
    登录验证算法
    Scrapy
    爬虫性能相关
    Beautifulsoup模块
    selenium模块
    Cookie&Session
    Django Admin 本质
    JavaScript自执行函数和jquery扩展方法
    JS作用域与词法分析
  • 原文地址:https://www.cnblogs.com/marshhu/p/3258394.html
Copyright © 2011-2022 走看看