数据库(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;

Oracle数据库之一的更多相关文章

  1. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  2. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  3. Oracle数据库该如何着手优化一个SQL

    这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...

  4. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

  5. Oracle数据库升级(10.2.0.4->11.2.0.4)

    环境: RHEL5.4 + Oracle 10.2.0.4 目的: 在本机将数据库升级到11.2.0.4 之前总结的Oracle数据库异机升级:http://www.cnblogs.com/jyzha ...

  6. 混合框架中Oracle数据库的还原处理操作

    在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...

  7. Oracle数据库的链接数目超标

    测试场景:Oracle数据库的链接数目超标,iServer是否自动连接. 测试步骤:(1)设置了最大连接数为85,oracle后台进程有83:(2)开启3台iserver(A,B,C)A,B发布tes ...

  8. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  9. Oracle数据库11g各版本介绍及功能比较

    .标准版和企 业版.所有这些版本都使用相同的通用代码库构建,这意味着企业的数据库管理软件可以轻松地从规模较小的单一处理器服务器扩展到多处理器服务器集 群,而无需更改一行代码.Oracle数据库11g企 ...

  10. Oracle数据库,数据的增、删、改、查

    oracle数据库中,数据的增.删.改.查,通过SQL语句实现 SQL:结构化查询语言: 特点:不区分大小写:字符串用单引号引起来:语句结束用分号表示结束: 行注释,在语句的最前面加"--& ...

随机推荐

  1. 疑难杂症rendering(对角线上的线)

    postprocess全屏特效 对角线有条线 明显和buffer有关因为线由小的东西组成 就像之前没清空buffer产生的马赛克 beginscene时 clearmask 设0 ---------- ...

  2. 宠物AI(个人觉得有问题)

    //宠物AI流程 .刚开始添加宠物 Monster被动State:EnumMonster被NULL MonsterStat:EnumPet跟随 .附近有怪物就改成攻击模式(相关的收尾工作) void ...

  3. yii无限极分类

    /** * 获取菜单Tree * * @return multitype: */ public function getMenuAllList() { $resArr = $this->getT ...

  4. HDU1014Uniform Generator

    Uniform Generator Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   ...

  5. sencha Touch 2.4 学习之 XTemplate模板

    XTemplate模板 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...

  6. .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

  7. .NET4.0下网站应用法度用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的设备办法)

    .NET4.0下网站应用法度用UrlRewriter.dll重写无后缀路径 在IIS中新建网站(端标语8111) 直接运行http://localhost:8111/ 设备办法: 二.添加通配符脚本映 ...

  8. PHP 使用 Redis

    PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP. 接下来让我们安装 PH ...

  9. SELINUX设为Disable 影响java SSH工具包Jsch 0.1.49.jar的一个案例

    最近项目中遇到一个典型事件,当RHEL 的SELINUX设为DISABLE时 使用JAVA的Jsch 库调用SSH命令时将随机返回空字符串,我使用的版本是0.1.49,最新版本0.1.51未测试. 关 ...

  10. 解决Notice错误,性能竟然提升了1000多倍!

    先说PHP的deprecated错误的性能问题 最近刚刚完成了一个项目,在测试完基本功能后,我们就发布到线上.结果上线不久就发现产生了大量的错误,如下图: 一看都是PHP的Deprecated错误,是 ...