分享
 
 
 

ORACLE SQL and SQL*PLUS 学习

王朝oracle·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

前言: 关系数据库的简单介绍

1970.Dr.E.F.codded 创建了关系数据库的模型(类似现在常用的二维表格)

关系数据库由许多数据对象组成, 被关系操作SQL命令管理着, 数据之间有完整性的约束条件.

RDBMS ( relational database management system )

ORDBMS ( object relational database management system )

ORACLE RDBMS常称为ORACLE SERVER

它的内核是用C语言写的.

ORACLE的简单介绍

ORACLE公司是一家提供综合技术产品、方案、服务的数据库公司

ORACLE数据库设计成可大量存储数据,快速查询数据,保证数据的安全和一致性,

跨网络的分布式管理及客户-服务器的配置等。

ORACLE SQL语法符合ANSI 1986标准

SQL 和数据库交流的命令式语言

SQL*PLUS ORACLE的一种工具, 用来运行SQL和PL/SQL语句

PL/SQL ORACLE的过程化编程语言

一、选择行

1. 简单的SELECT 语句

SELECT [DISTINCT] {*,COLUMN [ALIAS], ……} FROM table_name;

字段的非唯一的结果集

DISTINCT 字段名1 [ ,字段名2]

数字类型字段名之间可以进行算术运算

+ - * / 等

例如: (字段名1*字段名2)/3

合并字段内容的连接字符 ||

字段名1 || 字段名2

字段可以有别名

SELECT 字段名1 [AS] '字段名1 解释' FROM table;

2. 处理NULL

NULL 未定义,不可操作,什么都不是

NULL != 0 NULL!='空格'

和NULL的任何运算都返回NULL

ORACLE里未定义的变量值都为NULL

NVL函数可把NULL转换成其它类型的符号

NVL(EXPR1, EXPR2)函数

解释: IF EXPR1=NULL RETURN EXPR2

ELSE RETURN EXPR1

编程技巧: NVL函数在多条件模糊查询的时候比较有用

nvl('+input_value+','0')='0' or filed_name like '%+input_value+%'

NVL函数可返回多种数据类型:

返回日期 NVL(start_date,'2002-02-01')

返回字符串 NVL(title,'no title')

返回数字 NVL(salary,1000)

3. 使用SQL*PLUS(1)

登录SQL*PLUS的方法

用户名,密码,数据库连接字符串

数据库连接字符串可以用net8 easy configuration建立本地网络服务名配置,

也可以手工编辑$ORACLE_HOME/network/admin/tnsnames.ora文件。

在UNIX系统下不要用

$sqlplus username/password@dbname

这样别的用户用$ps命令能看出用户的密码

SQL> desc table; 显示表结构

SQL> select * from tab; 查看用户下所有的表

SQL> set pause on; 可以使大量结果集在用户按“Enter”(回车)后翻页

SQL> set pagesize 100; 设定SQL语句返回结果集一页的行数100, 默认值是14

SQL> set linesize 100; 设定SQL语句返回结果集一行的宽度100, 默认值是80

3. 使用SQL*PLUS(2)SQL*PLUS里的编辑命令

最近一条SQL命令语句存在ORACLE内存(sql buffer)里,但SQL*PLUS命令却不会存进去。

SQL*PLUS里的编辑命令:

A[PPEND] text 把text增加到当前行后面

C[HANGE] /old/new/ 把当前行old符号替换成new符号,new为空,删除old符号

CL[EAR] BUFF[ER] 从sql buffer里删除所有的行

DEL n 删除sql buffer里第n行

I[NPUT] text 在sql buffer后面插入text

L[IST] n 显示sql buffer里第n行

n 使第n行为当前行

n text 第n行替换成text

0 text 在第一行前面插入一行

3. 使用SQL*PLUS(3) SQL*PLUS里的文件命令:

SAV[E] filename [REP[LACE] | APP[END] ]

把sql buffer里的SQL命令存到OS下一个文件filename,默认的文件名后缀为.sql.

REP[LACE]替换filename里的SQL命令

APP[END] 把sql buffer里的SQL命令添加到filename后

GET filename 从filename里把SQL命令读到sql buffer

STA[RT] filename 运行上次保存到文件filename里的SQL命令

@filename 运行上次保存到文件filename里的SQL命令

EDIT 打开编辑窗口,编辑sql buffer里的SQL命令

EDIT filename 打开编辑窗口,编辑文件filename里的SQL命令

SPO[OL] filename [OFF | OUT] 把SQL命令结果输出到OS下一个文件filename OFF结束输出到文件,

OUT结束输出到文件并打印文件

4. SQL*PLUS里规定字段的显示格式

规定数字的显示格式

SQL>column 字段名 format 99999999999;

SQL>column 字段名 format 999,999,999,999;

规定字符串的显示宽度

SQL>column 字段名 format a数字 [word_wrapped];

说明: 一行只显示数字位的长度, 超过长度折行,加word_wrapped后, 单词不会折行

规定long字符的显示宽度

SQL>set long 200;

规定字段名的显示内容

SQL> column 字段名 heading '字段名显示内容';

SQL> set heading off; 查询时不显示字段名称

规定字段的对齐方向

SQL> column 字段名 justify [left | right | center];

清除字段的格式

SQL> column 字段名 clear;

5. SQL*PLUS里规定字段的显示格式例子

SQL> column last_name heading 'Employee|Name' format a15;

SQL> column salary justify right format $99,999.99;

SQL> column start_date format a10 null 'Not Hired';

说明:如果start_date为null, 显示字符串'Not Hired'

6. 判断题(T/F)

(1). SQL command are always held in sql buffer. [T]

(2). SQL*PLUS command assit with query data. [T]

SQL*PLUS命令只控制SELECT结果集的显示格式及控制文件.只有SQL命令能访问数据库.

二、限制选择行

1. 按指定的规则排序

SELECT expr FROM table [ORDER BY {column, expr} [ASC | DESC] ];

默认的排序是ASC升序(由小到大)

还可以ORDER BY 字段名的位置[1]| [2] ASC| DESC;

当字段名很复杂或者是算术表达式时用字段名显示的位置排序很方便.

2. 用WHERE限制选择行(1)

比较操作符 = > < >= <= != <> ^= 与NULL比较不能用上面的比较操作符 ANY SOME

ALL

SQL操作符 BETWEEN … AND… IN LIKE IS NULL

NOT BETWEEN … AND… NOT IN NOT LIKE IS NOT NULL

逻辑操作符 AND OR NOT

3. 用WHERE限制选择行(2)

比较顺序(可以用括号改变它们的顺序)

(1). = < > >= <= in like is null between

(2). and

(3). Or

注意: char和varchar2的比较规则有不同:

char比较时会忽略字符串后面的空格. varchar2会计算字符串后面的空格

4. LIKE操作

% 零到任意多个字符 _ 一个字符

例如: 字段名 like 'M%' 字段名 like '%m%' 字段名 like 'job_'

如果要找含下划线的字符, 要加反斜线 例如:字段名 like '%X/_Y%' escape '/'

5. 日期字段的比较

举例:

日期字段 between to_date('2001-12-12','YYYY-MM-DD') and to_date('2002-02-01','YYYY-MM-DD')

日期字段> to_date('2001-12-12','YYYY-MM-DD') and日期字段<= to_date('2002-02-01','YYYY-MM-DD');

6. 不能用到索引的比较操作符

IS NULL

IS NOT NULL

LIKE '%m%'

三、单行函数

1. 数字函数

ABS 取绝对值 POWER 乘方 LN 10为底数取冪

SQRT 平方根 EXP e的n次乘方 LOG(m,n) m为底数n取冪

数学运算函数:ACOS ATAN ATAN2 COS COSH SIGN SIN SINH TAN TANH

CEIL 大于或等于取整数

FLOOR 小于或等于取整数

MOD 取余数

ROUND(n,m) 按m的位数取四舍五入值如果round(日期): 中午12以后将是明天的日期. round(sysdate,'Y')是年的第一天

TRUNC(n,m) 按m的位数取前面的数值如果trunc(日期), 确省的是去掉时间

2. 字符函数

CHR 按数据库的字符集由数字返回字符

CONCAT(c1,c2) 把两个字符c1,c2组合成一个字符, 和 || 相同

REPLACE(c,s,r) 把字符c里出现s的字符替换成r, 返回新字符

SUBSTR(c,m,n) m大于0,字符c从前面m处开始取n位字符,m等于0和1一样,

m小与0,字符c从后面m处开始取n位字符

TRANSLATE(c,f1,t1) 字符c按f1到t1的规则转换成新的字符串

INITCAP 字符首字母大写,其它字符小写

LOWER 字符全部小写

UPPER 字符全部大写

LTRIM(c1,c2) 去掉字符c1左边出现的字符c2

RTRIM(c1,c2)

TRIM(c1,c2) 去掉字符c1左右两边的字符c2

LPAD(c1,n,c2) 字符c1按制定的位数n显示不足的位数用c2字符串替换左边的空位

RPAD(c1,n,c2)

3. 日期函数

ADD_MONTHS(d,n) 日期值加n月

LAST_DAY(d) 返回当月的最后一天的日期

MONTHS_BETWEEN(d1,d2) 两个日期值间的月份,d1<d2 返回负数

NEXT_DAY(d) 返回日期值下一天的日期

SYSDATE 当前的系统时间

DUAL是SYS用户下一个空表,它只有一个字段dummy

4. 转换函数(1)

TO_CHAR(date,'日期显示格式')

TO_CHAR(number) 用于显示或报表的格式对齐

TO_DATE(char,'日期显示格式')

TO_LOB 把long字段转换成lob字段

TO_NUMBER(char) 用于计算或者比较大小

4. 转换函数(2)

to_date里日期显示格式

YYYY 年 YEAR YYY YY Y

Q 季度

MM 月 MONTH MON

W 星期 (week of month) WW, IW (week of year)

(说明:周计是按ISO标准,从1月1日的星期数到后面七天为一周,不一定是从周一到周日)

DD 日 DAY DY

HH24 小时 HH12 HH

MI 分钟

SS 秒

如果想固定日期的显示格式可以在数据库的参数文件initorasid.ora里新写一行参数 NLS_DATE_FORMAT=yyyy-mm-dd

hh24:mi:ss可以在UNIX环境变量或者NT的注册表里的设置 NLS_DATE_FORMAT=yyyy-mm-dd hh24:mi:ss

4. 转换函数(3)

如果想固定日期的显示格式可以用alter session命令改变

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

它的作用顺序如下:

initialization parameter

Environment variable

ALTER SESSION command

4. 转换函数 (4)

to_char(number)里数字显示格式

9 数字位

0 数字前面补0 to_char(-1200,'00000.00')

. 小数点的位置

, 标记位置的逗号 用在数字显示格式的左边

L 根据数据库字符集加货币符号 to_char(-1200,'L9999.99')

B 把数字0显示为空格,用在数字显示格式的右边

&n

[1] [2] [3] [4] [5] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有