数据库(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. pragma伪指令

    pragma伪指令 通过pragma伪指令告诉编译器如何对待特定的函数.对象或代码段.TMS320C28x C/C++编译器支持如下形式的pragma伪指令: CODE_SECTION(func,“s ...

  2. Codeforces Round #254DIV2

    C:万恶的一道题: 开始想用贪心做:每次去除一个点,相应的去除相连边,结果BUG了,想想也对,因为有一次去掉多个点的情况, 后来被送一助攻,队友给出一个猜想:可能枚举一条边即可产生最大值:然后小小证明 ...

  3. MySQL复制中slave延迟监控

    在MySQL复制环境中,我们通常只根据 Seconds_Behind_Master 的值来判断SLAVE的延迟.这么做大部分情况下尚可接受,但并不够准确,而应该考虑更多因素. 首先,我们先看下SLAV ...

  4. 【中国互联网不眠夜】Struts2漏洞百出,OneRASP鼎力相助

    Struts2是一款优秀的网站框架,在互联网上有十分广泛的应用,近期apache官方发布了高危漏洞通告Apache Struts 任意代码执行漏洞(CVE-2016-3081,S2-032),该漏洞风 ...

  5. 从CMO到龙泉寺弟子:佛法改变人生

    今天,移动精英开发社为大家请来了佛家弟子孫濟初师兄给大家分享学佛心得.濟初师兄根据自己的亲身经历,讲述了佛法对他人生的影响,以及他所获得的启示.本文系国内ITOM管理平台OneAPM授权转载. 孫濟初 ...

  6. uva 10817

    Problem D: Headmaster's Headache Time limit: 2 seconds The headmaster of Spring Field School is cons ...

  7. H5+ and mui学习记录

    基础 1.H5+ 定义实现了一些调用原生方法的对象 2.其他的原生方法可以通过Native.js调用 webview 3.webview是调用原生界面的H5+对象 4.单个webview只承载单个页面 ...

  8. iOS验证码倒计时(GCD实现)

    + (void)verificationCode:(void(^)())blockYes blockNo:(void(^)(id time))blockNo { __block ; //倒计时时间 d ...

  9. Windows Server2008+IIS7部署网站的日期格式问题

    最近部署一个ASP网站,发现网站的某个功能上的日历在原来的服务器上访问时是会根据特定日期来对该日进行加粗加红显示的,但部署到我公司机房的win2008服务器上访问时却没有这效果了. 于是通过本地部署, ...

  10. Linux:-bash: ***: command not found

    Linux:-bash: ***: command not found,系统很多命令都用不了,均提示没有此命令. 突然之间linux很多命令都用不了,均提示没有此命令. 这应该是系统环境变量出现了问题 ...