ITPub博客

首页 > 数据库 > Oracle > SQL 语句基础

SQL 语句基础

原创 Oracle 作者:jshecn 时间:2008-06-25 19:02:11 0 删除 编辑
1、SQL 语句基础
下面给出SQL语句的基本介绍。
1.1、SQL语句所用符号
[@more@]
1、SQL 语句基础
下面给出SQL语句的基本介绍。
1.1、SQL语句所用符号
操作符
用途
例子
+ -
表示正数或负数,正数可省去 +
-1234.56
+
将两个数或表达式进行相加
A=c+b
-
将两个数或表达式进行相减
34-12
*
将两个数或表达式进行相乘
12*34
/
除以一个数或表达式
18*11
NULL
空值判断
Where name is null;
||
字符串连接
‘101-’||tel_num
=
等于测试
Select * from emp where name=’赵元杰’;
!= 或<>或^=
不等于测试
Select * from emp where name !=’赵元杰’;

<

小于测试
Select * from emp where sal < 5000;

>

大于测试
Select * from emp where sal > 5000;
<=
小于等于测试
Select * from emp where sal <= 5000;
>=
大于等于测试
Select * from emp where sal >= 5000;
Not in
测试某值是否在一个指定的结果集中
Select name,addr from expert where local not in(‘北京’,’上海’);
ANY
将一个值与一组值进行比较,返回满足条件的结果。必须跟!=,<,>,<=,>=
select ename,sal from emp where sal<= any(select sal from emp where deptno=10)
SOME
同ANY,必须跟!=,<,>,<=,>=

ALL
将一个值与一组值比较,返回满足条件的所有列值。必须跟!=,<,>,<=,>=
Select name,sal from emp w here sal<= all
( 500,800,1200);
Not between
A and B
判断某个值是否界于两者之间。
Select name,sal from emp Where
sal between 500 and 1200;
[not]exists
判断某个列是否存在于一组值中。
select dname,deptno from dept where exists
(select * from emp where dept.deptno=emp.deptno)
A[not]like b

比较两个模式是否相似,当使用like 语句时Oracle不去访问索引。
Select * from emp
Where ename like ‘TH%’;
Is [not] null
测试值是否为空。
Select ename,deptno from emp
Where comm. Is null or comm.=0;
Not
对结果的否定。
Select * from emp Where sal not(sal<1000); 等价于select ename,sal from emp where sal>=1000;
AND
用于判断两个条件十分都满足。
Select * from emp where
Ename=’SIMTH’ and sal>=1000;
OR
用于判断两个条件中是否有一个满足。
Select * from emp where
Ename=’SIMTH’ or ename=’SCOTT’;
UNION
用于返回(组合)两个查询中所有唯一的行。
Select ename from emp union
Select ename from emp;
UNION ALL
用于返回(组合)两个查询中所有所有的行。

INTERSECT
用于返回两个查询中相同的行。
Select ename from emp1 intersect select ename from emp2;
MINUS
用于返回两个查询中的不同的行。

当我们可以用SQL*PLUS登录到SQL>下后,我们可以用DESC 显示某表的结构,也可以用select 语句简单查询表中的一些列的内容。
例:要查询EMP表中员工的姓名、工资及出生日期,则:
SQL>select ename, sal, hiredate from emp;
2、伪列及伪表

Oracle系统为了实现完整的关系数据库功能,系统专门提供了一组称为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象(如建表)时由我们完成的,而是在我们建立对象时由自动Oracle完成的。Oracle目前有以下的伪列:

CURRVAL and NEXTVAL 使用序列号的保留字

LEVEL 查询数据所对应的级

ROWID 记录的唯一标识

ROWNUM 限制查询结果集的数量

Oracle 还提供了一个DUAL 的伪表,该目的表主要是保证在使用SELECT 语句中语句的完整性而提供的,如:我们要查询当前的系统日期及时间,而系统的日期和时间并是放在一个指定的表里。所以在 from 语句后就没有表名给出。为了使用 from 后有个表名,我们就用DUAL代替。如:

例1:查询Oracle系统日期及时间:

SQL> select to_char( sysdate,'yyyy.mm.dd hh24:mi:ss') from DUAL;

TO_CHAR(SYSDATE,'YY

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

2001.06.02 07:28:09

例2:计算一下 5000+5000*0.1 的结果是多少,则:

SQL> select 5000+5000*0.1 from DUAL;

5000+5000*0.1

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

5500

3、SELECT语句
在关系数据库中,使用频率最高要算SELECT语句了。尽管SELECT 语句的使用非常简单,但确很有学问。下面简单介绍有关SELECT 语句的常用方法。
1.命令语法:
SELECT 的简单语法:
SELECT [DISTINCT | ALL] {* | column1[, column2]...}
FROM {table_1 | (subquery)} [alias]
[, {table_2 | (subquery)} [alias]]...
[WHERE condition]
[CONNECT BY condition [START WITH condition]
[GROUP BY expn] [HAVING expn]
[{ UNION [ALL] | INTERSECT | MINUS } SELECT . . . ]
[ ORDER BY [expn ] [ ASC | DESC]
[ FOR UPDATE [OF [user.]table | view] column ]
[NOWAIT]
详细语法结构需查阅最新ORACLE 原版《ORACLE8i SQL REFERENCE MANUAL》或《ORACLE9i SQL REFERENCE MANUAL》
4、SQL中的单记录函数
许多资料(包括Oracle 的资料)把Oracle的SQL语句中用到的函数分为单值函数和多值函数,单值函数又分为字符函数和数字函数。下面分别介绍它们。
4.1、单记录字符函数
ASCII
返回对应字符的十进制值
CHR
给出十进制返回字符
CONCAT
拼接两个字符串,与 || 相同
INITCAT
将字符串的第一个字母变为大写
INSTR
找出某个字符串的位置
INSTRB
找出某个字符串的位置和字节数
LENGTH
字符给出字符串的长度
LENGTHB
字节给出字符串的长度
LOWER
将字符串转换成小写
LPAD
使用指定的字符在字符的左边填充
LTRIM
左边裁剪掉指定的字符
RPAD
使用指定的字符在字符的边填充
RTRIM
右边裁剪掉指定的字符
REPLACE
执行字符串搜索和替换
SUBSTR
取字符串的子串
SUBSTRB
取字符串的子串(以字节)
SOUNDEX
返回一个同音字符串
TRANSLATE
执行字符串搜索和替换
TRIM
裁剪掉前面或后面的字符串
UPPER
将字符串变为大写
NVL
以一个值来替换空值
1、ASCII()
是字符串。返回与指定的字符对应的十进制数。
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;
A a ZERO SPACE
---------- ---------- ---------- ----------
65 97 48 32
SQL> select ascii('赵') zhao,length('赵') leng from dual;
ZHAO LENG
---------- ----------
54740 1
2、CHR([NCHAR])
给出整数,返回对应字符。如:
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
赵 A
3、CONCAT(,)
返回字符串c1与字符串c2合并后的值。例如:
SQL> select concat('010-','8801 8159')||'转23' 赵元杰电话 from dual;
赵元杰电话
-----------------
010-8801 8159转23
4、INITCAP()
返回字符串c1 并第一个字母变为大写。例如:
SQL> select initcap('simth') upp from dual;
UPP
-----
Simth
5、INSTR(,[,[,] ] )
在一个字符串中搜索指定的字符,返回发现指定的字符的位置。
C1: 被搜索的字符串
C2: 希望搜索的字符串
I: 搜索的开始位置,缺省是1
J: 出现的位置,缺省是1。
SQL> SELECT INSTR ('Oracle Training', 'ra', 1, 2) "Instring" FROM DUAL;
Instring
----------
9
6、INSTRB(,[,[,] ] )
除了返回的字节外 ,与INSTR 相同,
7、LENGTH( )
返回字符串 c 的长度。
SQL> l
1 select name,length(name),addr,length(addr),sal,length(to_char(sal))
2* from nchar_tst
SQL> /
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ ---------- ----------------
赵元杰 3 北京市海淀区 6 99999.99 8
8、LENGTHB( )
以字节返回字符串的字节数。
SQL> select name,lengthb(name),length(name) from nchar_tst;
NAME LENGTHB(NAME) LENGTH(NAME)
------ ------------- ------------
赵元杰 6 3
9、LOWER ( )
返回字符串并将所有字符变为小写。
SQL> select lower('AaBbCcDd') AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd
10、UPPER( )
与 LOWER 相反,将给出字符串变为大写。如:
SQL> select upper('AaBbCcDd') AaBbCcDd from dual;
AABBCCDD
--------
AABBCCDD
11、RPAD和LPAD(粘贴字符)
RPAD(string,Length[,'set'])

LPAD(string,Length[,'set'])

RPAD在列的右边粘贴字符;
LPAD在列的左边粘贴字符。
例1:
SQL>select RPAD(City,35,'.'),temperature from weather;
RPAD(City,35,'.') temperature
-------------------------- ----------------
CLEVELAND...... 85
LOS ANGELES.. 81
.........................
(即不够35个字符用'.'填满)
12、LTRIM(左截断)RTRIM(右截断) 函数
LTRIM (string [,’set’])
Left TRIM (左截断)删去左边出现的任何set 字符。
RTRIM (string [,’set’])
Right TRIM (右截断)删去右边出现的任何set 字符。
例1:
SELECT RTRIM (‘Mother Theresa, The’, ‘The’) “Example of Right
Trimming” FROM DUAL;
Example of Right
----------------
Mother Theresa,
13、SUBSTR Substr(string,start[,Count])
取子字符串中函数
对字串(或字段),从start字符 开始,连续取 count 个字符并返回结果,如果没有指count则一直取到尾。
select phone,substr(phone,1,3) || ‘0’ || substr(phone,4)
from telecommunication where master=’中国电信’;
14、SUBSTRB(string,start[,Count])
对字串(或字段),从start字节 开始,连续取 count 个字节并返回结果,如果没有指count则一直取到尾。
15、REPLACE (‘string’ [,’string_in’,’string_out’])
String: 希望被替换的字符串或变量。
String_in: 被替换字符串。
String_out: 要替换字符串。
SQL> select replace('Informaix中国公司','Informaix','IBM Informix')
2 IBM数据库 from dual;
IBM数据库
--------------------
IBM Informix中国公司
16、SOUNDEX( )
返回一个与给定的字符串读音相同的字符串(不管拼写是否一样)。
SELECT DPL_NAME FROM DENIED_PARTIES_LIST WHERE
SOUNDEX(DPL_NAME) = SOUNDEX(‘Saddam Hussain’) ;
DPL_NAME
----------------------------------------------
Al Husseni
Sadda Al Sada.
17、REPLACE (‘string’ [,’string_in’,’string_out’])
String:希望被替换的字符串或变量。
String_in: 被替换字符串。
String_out: 要替换字符串。
SELECT REPLACE (‘Oracle’, ‘Or’, ‘Mir’) “Example “ FROM DUAL;
Example
-------
Miracle
18、TRIM( [] FROM

TRIM可以使你对给定的字符串进行裁剪(前面,后面或前后)。

如果指定 LEADING, Oracle 从trim_char 中裁剪掉前面的字符;

如果指定TRAILING, Oracle 从trim_char 中裁剪掉尾面的字符;

如果指定两个都指定或一个都没有给出,Oracle从trim_char 中裁剪掉前面及尾面的字符;

如果不指定 trim_character, 缺省为空格符;

如果只指定trim_source, Oracle Oracle从trim_char 中裁剪掉前面及尾面的字符。

例子:将下面字符串中的前面和后面的‘0‘字符都去掉:

SELECT TRIM (0 FROM 0009872348900) "TRIM Example" FROM DUAL;

TRIM example

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

98723489
4.2、单记录数字函数
函数
说明
Value1 + value2
Value1 - value2

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/64991/viewspace-1006126/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    39
  • 访问量
    354976