oracle 数据库有服务端和客户端组成

数据库:

基本的概念:

数据库管理系统(Database Management System,DBMS):

管理(存储+操作(CRUD))数据的一个软件系统

关系型数据库管理系统(RDBMS):

数据库(Database):存放数据的磁盘,是RDBMS的一部分

市面上常见的数据库管理系统有哪些?

ORACLE, Sql Server, Sqlite(手机数据库), DB2, Access, mysql,sybase,h2...

SQL(Structure Query Language)结构化查询语言,

它是操作数据库管理系统的一个标准:主要对数据库进行CRUD的操作,

数据库的运算都是通过SQL来完成的;

create:创建

delete:删除

update:修改

retrieve:检索

市面上的主流数据库都遵守SQL规范:

注:不同的数据库对SQL的支持又有些不同;

sql根据命令功能的不同分为5个部分:

1.DCL(Data Control Language)数据控制语句:grant,revoke

2.DDL(Data Definition Language)数据定义语句:

create,alter,drop,truncate,comment on,rename to...

3.DML(Data Manipulating Language)数据操纵语句:insert,update,delete

4.DQL(Data Query Language)数据查询语句:select

5.DTL(Data Transaction Language)数据事务语句:commit,rollback,savepoint

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

Oracle www.oracle.com

...8i,9i,10g,11g,12c

安装注意点: 目录中不能由中文:建议把防火墙和360一些安全软件关闭;

oracle 数据库有服务端和客户端组成:

服务端:由一堆的数据库后台进程与监听器以及数据库所组成

最主要的两个服务:

OracleServiceXE Oracle数据库服务主服务(数据库实例名,仓库名)

OracleXETNSListener Oracle数据库监听器,监听客户端对数据库的访问连接

客户端:有多种

1.oracle自带一个命令行客户端:sqlplus

启动:运行cmd 打开cmd命令窗口输入sqlplus

2.PL/SQL Developer 第三方图形界面

3.Navicat 第三方图形界面

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

创建用户2步骤:

1.创建一个(普通)用户:

语法:create user 用户名 identified by 密码;

2.授权给一个用户:

角色:oracle中内置了3个角色:

DBA:  系统管理权限;

connect:  创建会话连接权限;

resource: 操作基本数据库对象的权限;

grant 权限,权限... to 用户名;

修改密码: alter user 用户名 identified by 新密码;

删除用户: drop user 用户名;(删除时注意权限问题)

账户解锁: alter user 用户名 account unlock;

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

sqlplus中常用命令:

1.切换用户:

conn 用户名/密码;

2.显示当前登录的用户名:

show user;

3.执行数据库脚本:

start 或者 @ *.sql(可以直接把脚本拖到命令窗口中)

例如:start D:/oralce_cn.sql;

数据库脚本:用于创建数据库对象的语句集合

目的:在数据库中创建储存数据的表格并且在表格中初始化数据

4.查看表的结构:这是sqlplus的命令,不是sql的命令

desc 表的名字;

5.清屏:

clear screen;

6.回忆记录:

方向键上下

7.编辑多行sql语句:

edit

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

基本查询:

表格(table):它是由行(rows)和列(column)组成的二维空间

它是数据库存贮数据的基本单位,将来我们的数据就是存贮在表中;

查询的本质:

1.要查什么:

2.去哪里查:

语法: select 列名 from 表格名;

注意:如果查询所有列,则用*代替!

例如:

-- 找出员工的所有的信息;

select * from s_emp;

-- 从s_emp表中查询出员工的名字,薪水,职位;

select first_name,salary,title from s_emp;

-- 从s_emp表中查出员工的姓氏,名字;

select first_name,last_name from s_emp;

-- 找出本公司的所有的职称(title);

select title from s_title;

select distinct title from s_emp;

-- 找出所有员工的姓名、工资、入职日期

select first_name,salary,start_date from s_emp;

-- 找出所有的客户名及他的电话号码

select name,phone from s_customer;

-- 找出员工姓名及他的职称

select first_name,title from s_emp;

-- 找出每个订单的费用、支付方式、出货日期

select total,payment_type,date_shipped from s_ord;

排重: distinct

select distinct title from s_emp;

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

列的数据类型:

1.数字类型,可以做所有的数学运算

number

number(4) 代表整数 最大能存9999

number(7,2) 代表double类型  整数长度为5 小数位为2.

2.字符型,可以做拼接的运算

注:字符串在数据库中用‘‘

varchar2(20) 代表字符串最长为20;

char(20) 代表定长20;

3.日期类型,可以做加减运算

Date 年月日时分秒

Timestamp 年月日时分秒,还有小数位,如3.2秒

4.大数据类型

clob character large object 大字符型对象,最大可存4G

blob binary large object 大二进制对象,最大可存4G

注:大数据类型不支持查看结果

如:

sql具有运算的能力

--从员工表中查询出员工名字和他的年薪

select first_name 姓名,salary*12 年薪 from s_emp;

select first_name "姓   名",salary*12 "年   薪" from s_emp;

sql具有字符串拼接能力并且可以给列取名

-- 从s_emp表中查出员工的姓名;

select first_name||‘ ‘||last_name 全名 from s_emp;

--字符串拼接(***是**入职的,工资是***,职称是***)

select first_name||‘ ‘||last_name||‘是‘||start_date||‘入职的,工资是‘||salary||‘,职称是‘||title  描述 from s_emp;

注意:

oralce数据库中:字符串使用‘‘包裹,""可以取别名,以及用来保存格式,还可以区分大小写

""的作用给我们的查询出的列起个别名 并保持格式

别名不一定需要"";如果要保持格式必须有""

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

空值置换函数(nvl)

--查询所有员工的名字,年薪(不考虑提成)

select first_name,salalry*12 from s_emp;

null和所有的值进行运算最后都为null;

空值置换函数nvl(commission_pct/100,0)

如果commission_pct/100的值为null 则表达式的值为0

如果commission_pct/100的值不为null 则表达式的值为commission_pct/100

--查询所有员工的名字,年薪(考虑提成)

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

注:nvl()中的两个值要为同一数据类型

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

条件查询:

where字句用来过滤查询的数据,它对字面量大小写是敏感的

出现在where后面的运算符有:

1.比较运算符:

> , < , >= , <= , =  , 不等于(<> != ^= )

--查出在41部门的员工名字,工资;

select first_name,salary from s_emp where dept_id=41;

--查出工资高于1500的员工的信息;

select * from s_emp where salary>1500;

-- 找出工资大于1200元的员工全名、工资、职称

select first_name||‘ ‘||last_name 全名,salary 工资,title 职称

from s_emp where salary>1200;

2.逻辑运算符:

and,or,not

--查出41部门工资高于1200的员工名字,工资;

select first_name,salary from s_emp where dept_id=41 and salary>1200;

--查出在41,50,42部门的员工名,薪水;

select first_name,salary from s_emp where dept_id=41 or dept_id=42 or dept_id=50;

3.其他运算符:

in(list) list是一个列表,多个值使用逗号隔开

not in()

between ? and ? 在指定的范围之内,是全闭空间

is null

is not null

模糊匹配:like

通配符:

_ 通配任意单个字符

% 通配任意多个字符

--查出在41,42,50部门的员工名,薪水;

select first_name,salary from s_emp where dept_id in(41,42,50);

--找出工资在1200到1500之间的员工名

select * from s_emp where salary>=1200 and salary<=1500;

select * from s_emp where salary between 1200 and 1500;

--找出工资大于1500并且没有提成的员工;

select * from s_emp where salary>1500 and commission_pct is null;

注意:查询数据时条件是否为null,我们使用关键字is或者is null,千万不能使用=/!=

--查出名字是以M打头的员工;

select * from s_emp where first_name like ‘M%‘;

--查出姓名中第三个字母是e的员工;

select * from s_emp where first_name like ‘__e%‘;

如果我们要通配的字符中本身就有_或%,则

需要通过关键字escape来转义;

select * from s_emp where first_name like ‘/_A%‘ escape ‘/‘;

练习:

-- 找出没有提成率的员工

select * from s_emp where commission_pct is null;

-- 找出有提成率的员工

select * from s_emp where commission_pct is not null;

-- 找出费用超过10000元的订单编号及支付方式

select id,payment_type from s_ord where total>10000;

-- 找出工资在950(含)至1200(含)元的员工姓名、职称

select first_name,title from s_emp where salary between 950 and 1200;

-- 找出名字中含有字母a的员工

select * from s_emp where first_name like ‘%a%‘;

-- 找出名字中第二个字母是a的员工

select * from s_emp where first_name like ‘_a%‘;

-- 找出2月份入职的员工名、入职时间、工资

select first_name,start_date,salary from s_emp where

start_date like ‘%2月%‘;

-- 查询出职称是Stock Clerk的员工全名、工资,并按工资的降序排序

select first_name||‘ ‘||last_name,salary from s_emp where

title=‘Stock Clerk‘ order by salary desc;

select first_name||‘ ‘||last_name,salary from s_emp where

title=‘Stock Clerk‘ order by 2 desc;

注意:order by 2表示按照查询结果的第二列来排序!

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

排序字句:

order by 列名 asc(升序,默认可不写) | desc (降序)

--找出6月份入职的员工全名,工资,职称,并按工资降序排序

select first_name||‘ ‘||last_name 全名,salary,title from s_emp where start_date like ‘%6月%‘ order by 2 desc;

--查询出职称中带VP的员工名字,工资,并按工资的降序排序

select first_name,salary,title from s_emp where title like ‘%VP%‘ order by 2 desc;

--查询出年薪低于25000的员工名,职称,并按年薪升序排序

select first_name,title,salary*12*(1+nvl(commission_pct/100,0))

from s_emp where salary*12*(1+nvl(commission_pct/100,0))<25000 order by

3;

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

dual是一张虚拟的表格,没有任何的意义,只是为了充当构建完整的select语句

如:查询当前数据库系统时间

select sysdate from dual;

单行函数(single function):

多行函数(组函数)

oracle中提供了大量的函数

处理方式的不同分为:

1.数字函数:

round(列|值|表达式,有效位数); 四舍五入

trunc(列|值|表达式,有效位数); 直接截取

mod(列|值,列|值); 求模(余)

abs(列|值) 求绝对值

例如:

select round(3.1415926,3) from dual;

select trunc(3.1415926,3) from dual;

select mod(10,3) from dual;

select abs(-10) from dual;

--查询出订单表中总金额(取整)

select round(total,0) from s_ord;

2.字符函数

length(列|值|表达式); 求长度

例如:

select length(‘abc‘) from dual;

select first_name,length(first_name) from s_emp;

upper(列|值|表达式); 转大写字母

lower(列|值|表达式); 转小写字母

initcap(列|值|表达式); 每个单词首字母大写

例如:

select upper(‘abc‘) from dual;

select lower(‘ABC‘) from dual;

select initcap(‘hello world‘) from dual;

lpad(列|值,宽度,填充字符);  从左边补不足宽度个填充字符

rpad(列|值,宽度,填充字符);  从右边补不足宽度个填充字符

例如:

select lpad(‘abc‘,10,‘de‘) from dual;

ltrim(列|值,截取字符); 从左边截取字符

rtrim(列|值,截取字符); 从右边截取字符

例如:

select rtrim(‘abcdededededede‘,‘de‘) from dual;

select rtrim(‘abcdededeedede‘,‘de‘) from dual;

select rtrim(‘abcdededeadedede‘,‘de‘) from dual;

replace(列|值,被置换的字符,置换的字符) 置换指定字符

select replace(‘hello world!‘,‘o‘,‘*‘) from dual;

translate()转换指定字符

select translate(

‘I l6o9ve y8o7u!‘,

‘abcdefghijklmnopqrstuvwxyz0123456789‘,

‘abcdefghijklmnopqrstuvwxyz‘

) from dual;

select replace(‘abcdededeadedede‘,‘de‘,‘‘) from dual;

或者

select translate(‘abcdededeadedede‘,‘abcde‘,‘abc‘) from dual;

instr()查找指定字符串在长字符串中所在的位置

--select instr(‘go,go,quickly!‘,‘go‘) from dual;

--select instr(‘go,go,quickly!‘,‘go‘,2) from dual;

--select instr(‘go,go,quickly!‘,‘go‘,-1) from dual;

--select instr(‘go,go,quickly!‘,‘go‘,-1,2) from dual;

注意:数据库字符串下标从1开始计数

substr()

select substr(‘hello world!‘, 3) from dual;

select length(substr(‘hello world!‘,3,4)) from dual;

//从3号下标开始切割,保留4个字符

decode(),类似一个三目运算符

比较第一和第二个参数,如果相等取第三个参数,如果不相等取第四个参数

select decode(‘A‘,‘A‘,‘B‘,‘C‘) from dual;//B

select decode(1,1,2,3) from dual;//2

select decode(1,2,2,3) from dual;//3

case when 可以把它看成switch功能:

select name "部门名",

case region_id

when 1 then ‘北美‘

when 2 then ‘南美‘

when 3 then ‘中东/非洲‘

when 4 then ‘亚洲‘

when 5 then ‘欧洲‘

else ‘未知区域‘

end "区域名"

from s_dept;

练习:

--查出客户表(s_customer)中phone列最后一个-线后面的部分;

select phone,substr(phone,instr(phone,‘-‘,-1)+1) from s_customer;

--把图片表(s_image)中文件名(filename)列中后缀给查出来;

select distinct substr(filename,instr(filename,‘.‘,-1)+1) from s_image;

--模拟向银行中只显示姓名的第一个字符(奥巴马变成奥**):

--常规拼接

select substr(first_name,1,1)||rpad(‘*‘,length(first_name)-1,‘*‘)

from s_emp;

--replace

select replace(first_name,substr(first_name,2),

rpad(‘*‘,length(first_name)-1,‘*‘)) from s_emp;

--translate

select translate(first_name,substr(first_name,2),

rpad(‘*‘,length(first_name),‘*‘)) from s_emp;

--找出名字长度超过5的员工

select * from s_emp where length(first_name)>5;

--找出职称是 stock clerk的员工

select * from s_emp where title=initcap(‘stock clerk‘);

--请把员工的工资分为3等,超过2000元的为高等在1500和2000之间的为中等

低于1500的为低等

select first_name 姓名,

case

when salary<1500 then ‘低等‘

when salary between 1500 and 2000 then ‘中等‘

when salary>2000 then ‘高等‘

else ‘未分等级‘

end 工资等级

from s_emp;

特别注意:当when后面出现要比较的列,则case后面就千万不能再添加了!!!

--输出每个订单编号及支付方式,支付方式要么是现金,

要么是信用卡,否则就是未知。

select id,

decode(payment_type,‘CASH‘,‘现金‘,‘CREDIT‘,‘信用卡‘,‘未知‘)

from s_ord;

select id,

case payment_type

when ‘CASH‘ then ‘现金‘

when ‘CREDIT‘ then ‘信用卡‘

else ‘未知‘

end

from s_ord;

3.日期函数

oracle 默认的日期格式为:dd-mm-yy

dd 表示2位数的日

mm 代表2位数的月,如:06

yy 代表2位数年份

HH24/HH 代表小时

mi 代表分钟

ss 代表秒

fm 表示去掉前面的0,如:fm 06,以后值6

day 表示星期几

日期函数:

sysdate 当前日期

months_between(date1,date2) 2个日期之间的月数

add_months(date1,n) 在date1的基础上加上几个月

next_day(date1,‘星期几‘) 在date1的基础上下个星期几是什么时候

last_day(date) date日期所在月的最后一天是什么时候

修改当前会话语言环境:

alter session set nls_language = ‘american‘;//改为英文

alter session set nls_language = ‘simplified chinese‘;//改为简体中文

修改当前会话日期的格式:

alter session set nls_date_format=‘yyyy-mm-dd HH24:mi:ss day‘;

例如:

--查询当前日期下一个星期四是几号?

select next_day(sysdate,‘星期四‘) from dual;

--找出员工的工作月数:

select months_between(sysdate,start_date) from s_emp;

--查询员工的工作天数:

select first_name,sysdate-start_date from s_emp;

--计算一年前,当前,一年后的时间:

select add_months(sysdate,-12),sysdate,add_months(sysdate,12) from dual;

--当前日期前六个月的最后一天;

select last_day(add_months(sysdate,-6)) from dual;

--显示下个星期五是什么日期:

select next_day(sysdate,‘星期五‘) from dual;

4.转换函数

to_number(char), 把字符转换成数字

to_date(char[,fmt]),

把字符串转换成日期,如果不传fmt参数,则采用默认格式(dd-mm-yy)来解析

to_char 把数字或日期格式化为字符串

1.to_char(number,fmt); 格式化数字

2.to_char(date, fmt); 格式化日期

--把123字符串转换成123数字

select to_number(‘123‘) from dual;

--把1986-04-13字符串按照模板yyyy-mm-dd转换成日期

select to_date(‘1986-04-13‘,‘yyyy-mm-dd‘) from dual;

--把数字格式化为字符串的时候可以用的一些符号:

9  代表任意的数据

L  代表本地的货币符号

$  代表美元

0  代表0

.   代表.

,   代表,

--格式化输出员工的工资($1,500.00)

select to_char(salary,‘$999,999.99‘) from s_emp;

练习:

--把员工的入职日期格式化为年/月/日

select to_char(start_date,‘yyyy/mm/dd‘) from s_emp;

--找出5月份入职的员工

select * from s_emp where to_char(start_date,‘fmmm‘)=‘5‘;

--找出当月入职的员工

select * from s_emp

where to_char(sysdate,‘fmmm‘)=to_char(start_date,‘fmmm‘);

--查询出员工的姓名,入职日期,并按日的升序排序

select first_name,start_date from s_emp

order by to_number(to_char(start_date,‘fmdd‘));

--找出每个员工的名字和它的薪水(如:$2,500.00)

select first_name,to_char(salary,‘$999,999.99‘) from s_emp;

时间: 2024-12-28 08:22:23

oracle 数据库有服务端和客户端组成的相关文章

SVN1.6服务端和客户端安装配置指导

本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1.软件下载下载SVN1.6服务器程序.http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91[注意]如果之前已经安装了TortoiseSVN客户端,必须选择与之配套的SVN服务端版本,否则会出现各种问题,可以从Tor

zabbix服务端与客户端搭建搭建

#zabbix作用:数据采集(存储),邮件报警,数据展示 服务端 预安装 #确保iptables策略允许,selinux关闭 #确保mysql.php.httpd已安装 #同步时间 #确保服务端与客户端时间一致且为正确 crontab -e */30 * * * *  /usr/sbin/ntpdate time.nist.gov; hwclock -w yum源配置 base源要使用网络源,避免依赖包版本不一致 将zabbix源移到samaba的koorey家目录下 确保epel vim za

关于ntp(时间同步协议)服务端和客户端的配置说明

本文主要写了一些在Linux(CentOS)服务器上配置ntp的经验,事件缘由来源于配置Zabbix监控ntp服务时的测试配置. NTP时间同步协议的服务端(ntpd服务)和客户端(ntpdate服)不能同时运行,即在运行ntpd服务后不能运行ntpdate服务,否则ntpdate服务会提示启动失败,而且日志中也会提示"the NTP socket is in use, exiting",如下图所示. 但客户端运行时,服务端可以运行,但服务端运行时,客户端不能运行,要运行客户端服务,就

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

用Java实现HTTP Multipart的服务端和客户端

今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个程序里,我们的业务场景很简单.在服务端有一个随机数生成器,可以生成随机的Integer和Guid,客户端通过服务,可以请求一个或多个随机数.同时,客户端可以向服务端发送一个或多个随机数,这些随机数会被加入到一个队列中,被其他的客户端通过请求获得.以下是我们的随机数Bean的定义: [java] vi

C# Socket服务端和客户端互相send和receive

服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat

CnetOS 6.6 rsync 的服务端和客户端配置

CentOS 6.6 rsync 的服务端和客户端配置 基本信息 系统版本 主机名 IP地址 角色 CentOS  6.6 backup 10.0.0.10 rsync服务端 CentOS  6.6 lamp01 10.0.0.8 rsync客户端 CentOS  6.6 lnmp02 10.0.0.9 rsync客户端 服务端配置 创建rsync配置文件,并写入配置内容(默认rsync文件是不存在的,需要创建) [[email protected] ~]# touch/etc/rsyncd.c

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

grpc(3):使用 golang 开发 grpc 服务端和客户端

1,关于grpc-go golang 可以可以做grpc的服务端和客户端. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同.也需要使用protobuf的配置文件. 但是golang下面的类库非常的简单,而且golang的性能也很强悍呢. 有些简单的业务逻辑真的可以使用golang进行开发. 性能强悍而且,消耗的资源也很小.java感觉上已