SQL PL/SQL语法手册
目录
第一部分SQL语法部分.............................................................................................................. 错误!未定义书签。
一、CREATE TABLE语句 ..................................................................................... 错误!未定义书签。
二、CREATE SEQUENCE语句.............................................................................. 错误!未定义书签。
三、CREATE VIEW语句......................................................................................... 错误!未定义书签。
四、INSERT语句:..................................................................................................... 错误!未定义书签。
五、UPDATE语句:................................................................................................... 错误!未定义书签。
六、DELETE语句:.................................................................................................... 错误!未定义书签。
七、TRUNCATE语句: ............................................................................................. 错误!未定义书签。
八、各类FUNCTIONS:............................................................................................ 错误!未定义书签。
1. 转换函数: ...................................................................................................... 错误!未定义书签。
2. 日期函数........................................................................................................ 错误!未定义书签。
3. 字符函数........................................................................................................ 错误!未定义书签。
4. 数值函数........................................................................................................ 错误!未定义书签。
5. 单行函数: ...................................................................................................... 错误!未定义书签。
6. 多行函数........................................................................................................ 错误!未定义书签。第二部分PL/SQL语法部分........................................................................................................ 错误!未定义书签。
一、PL/SQL语言简介.............................................................................................. 错误!未定义书签。
二、变量说明............................................................................................................. 错误!未定义书签。
三、PL/SQL控制程序流 ......................................................................................... 错误!未定义书签。
四、存储过程............................................................................................................. 错误!未定义书签。
五、存储函数............................................................................................................. 错误!未定义书签。
六、PACKAGE........................................................................................................... 错误!未定义书签。
七、触发器 ................................................................................................................. 错误!未定义书签。
八、应用实例............................................................................................................. 错误!未定义书签。
第一部分SQL语法部分
一、Create table 语句
语句: CREATE TABLE [schema.]table_name
( { column datatype [DEFAULT expr] [column_constraint] ...
| table_constraint}
[, { column datatype [DEFAULT expr] [column_constraint] ...
| table_constraint} ]...)
[ [PCTFREE integer] [PCTUSED integer]
[INITRANS integer] [MAXTRANS integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[ RECOVERABLE | UNRECOVERABLE ]
[ PARALLEL ( [ DEGREE { integer | DEFAULT } ]
[ INSTANCES { integer | DEFAULT } ]
)
| NOPARALLEL ]
[ CACHE | NOCACHE ]
| [CLUSTER cluster (column [, column]...)] ]
[ ENABLE enable_clause
| DISABLE disable_clause ] ...
[AS subquery]
表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小.除了列名和描述外,还可以指定约束条件,存储参数和该表是否是个cluster的一部分.
Schema 用来指定所建表的owner,如不指定则为当前登录的用户.
Table_name 用来指定所创建的表名,最长为30个字符,但不可以数字开头(可为下划线),但不可同其它对象或Oracle的保留字冲突.
Column 用来指定表中的列名,最多254个.
Datatype 用来指定列中存储什么类型的数据,并保证只有有效的数据才可以输入.
column_constraint 用来指定列约束,如某一列不可为空,则可指定为not null.
table_constraint 用来指定表约束,如表的主键,外键等.
Pctfree 用来指定表中数据增长而在Oracle块中预留的空间. DEFAULT为10%,也就是说该表的每个块只能使用90%,10%给数据行的增大时使用.
Pctused 用来指定一个水平线,当块中使用的空间低于该水平线时才可以向该中加入新数据行.
Parallel 用来指定为加速该表的全表扫描可以使用的并行查询进程个数.
Cache 用来指定该表为最应该缓存在SGA数据库缓冲池中的候选项.
Cluster 用来指定该表所存储的cluster.
Tablespace 用来指定用数据库的那个分区来存储该表的数据.
Recoverable|Unrecoverable 用来决定是否把对本表数据所作的变动写入Redo 文件.以恢复对数据的操作.
As 当不指定表的各列时,可利用As子句的查询结果来产生数据库结构和数据.
例:
1) create table mytab1e(mydec decimal,
myint inteter)
tablespace user_data
pctfree 5
pctused 30;
2) create table mytable2
as ( select * from mytable1);
二、create sequence语句
语句: CREATE SEQUENCE [schema.]sequence_name
[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE integer | NOCACHE]
[ORDER | NOORDER]
序列用来为表的主键生成唯一的序列值.
Increment by 指定序列值每次增长的值
Start with 指定序列的第一个值
Maxvalue 指定产生的序列的最大值
Minvalue 指定产生的序列的最小值
Cycle 指定当序列值逵到最大或最小值时,该序列是否循环.
Cache 指定序列生成器一次缓存的值的个数
Order 指定序列中的数值是否按访问顺序排序.
例:
1) create sequence myseq
increment by 4
start with 50
maxvalue 60
minvalue 50
cycle
cache 3;
2)
sql> create sequence new_s;
sql>insert into new (new_id,last_name,first_name)
values(new_s.nextval,’daur’,’permit’);
三、create view语句
语句: CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [schema.]view_name
[(alias [,alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
视图实际上是存储在数据库上旳select语句.每次在sql语句中使用视图时,表示该视图的select语句就用来得到需要的数据.
Or replace 创建视图时如果视图已存在,有此选项,新视图会覆盖旧的
视图.
Force 如有此选项,当视图基于的表不存在或在该模式中没有创建视图的权限
时,也可以建立视图.
As subquery 产生视图的select查询语句
With check option 如果视图是基于单表的且表中所有的非空列都包含在视图中
时,该视图可用于insert和update语句中,本选项保证在每次插入或更新数据后,该数据可以在视图中查到
例:
1)create or place view new_v
as
select substr(d.d_last_name,1,3),
d.d_lastname,d.d_firstname,b.b_start_date,b.b_location
from new1 d,
new2 b
where d.d_lastname=b.b_lastname;
四、INSERT语句:
1.语法
INSERT INTO [schema.]{table | view | subquery }[@dblink]
[ (column [, column] ...) ]
{VALUES (expr [, expr] ...) | subquery}
[WHERE condition]
2.插入单行
使用VALUES关键词为新行的每一列指定一个值.如果不知道某列的值,可以使用NULL关键词将其值设为空值(两个连续的逗号也可以表示空值,也可使用NULL关键词)
插入一行时试图为那些NOT NULL的列提供一个NULL值,会返回错误信息.
举例:
插入一条记录到DEPARTMENT表中
INSERT INTO DEPARTMENT
(DEPARTMENT_ID,NAME,LOCATION_ID)
VALUES (01,’COMPUTER’,167)
3.插入多行
将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.
举例:
INSERT INTO ORDER_TEMP
SELECT A.ORDER_ID,B.ITEM_ID,https://www.doczj.com/doc/cb8084845.html,,E.FIRST_NAME||'.'||https://www.doczj.com/doc/cb8084845.html,ST_NAME,
A.ORDER_DATE,A.SHIP_DATE,D.DESCRIPTION,
B.ACTUAL_PRICE,
B.QUANTITY,B.TOTAL
FROM SALES_ORDER A, ITEM B, CUSTOMER C,
PRODUCT D, EMPLOYEE E
WHERE MONTHS_BETWEEN(TO_DATE(A.ORDER_DATE),TO_DATE('01-7月
-91'))>0
AND A.CUSTOMER_ID=C.CUSTOMER_ID
AND C.SALESPERSON_ID=E.EMPLOYEE_ID
AND A.ORDER_ID=B.ORDER_ID
AND B.PRODUCT_ID=D.PRODUCT_ID
4.从其它表复制数据:
要快速地从一个表向另一个尚不存在的表复制数据,可以使用CREATE TABLE语句定义该表并同时将SELECT语句检索的结果复制到新表中.
CREATE TABLE EMPLOYEE_COPY
AS
SELECT *
FROM EMPLOYEE
1.语法
UPDATE [schema.]{table | view | subquery}[@dblink] [alias]
SET { (column [, column] ...) = (subquery)
| column = { expr | (subquery) } }
[, { (column [, column] ...) = (subquery)
| column = { expr | (subquery) } } ] ...
[WHERE condition]
UPDATE语句更新所有满足WHERE子句条件的数据行.同样,该语句可以用SELECT语句检索得到.但SELECT必须只检索到一行数据值.否则报错.而且每更新一行数据,均要执行一次SELECT语句.
举例:
UPDATE EMPLOYEE_COP
SET SALARY=
SALARY-400
WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,'YYMMDD'))<850101
UPDATE ITEM_COP A
SET A.ACTUAL_PRICE=
(
SELECT B.LIST_PRICE
FROM PRICE B,SALES_ORDER C
WHERE A.PRODUCT_ID=B.PRODUCT_ID AND
A.ORDER_ID=C.ORDER_ID AND
TO_NUMBER(TO_CHAR(C.ORDER_DATE,'YYYYMMDD')) BETWEEN
TO_NUMBER(TO_CHAR(B.START_DATE,'YYYYMMDD')) AND
NVL(TO_NUMBER(TO_CHAR(END_DATE,'YYYYMMDD')),29991231)
)
1.语法
DELETE [FROM] [schema.]{table | view}[@dblink] [alias] [WHERE condition]
DELETE语句删除所有满足WHERE子句条件的数据行.
举例:
DELETE FROM item
WHERE ORDER_ID=510
七、TRUNCATE语句:
1.语法
TRUNCATE [schema.]table
八、各类Functions:
1.转换函数:
1.1. 函數:TO_CHAR
语法:
TO_CHAR(number[,format])
用途:
将一个数值转换成与之等价的字符串.如果不指定格式,将转换成最简单的字符串形式.如果为负数就在前面加一个减号.
Oracle为数值提供了很多格式,下表列出了部分可接受的格式:
语法:
TO_CHAR(date[,format])
用途:
将按format参数指定的格式将日期值转换成相应的字符串形式.同样,Oracle提供许多的格式模型,用户可以用它们的组合来表示最终的输出格式.唯一限制就是最终的掩码不能超过22个字符.下表列出了部分日期格式化元素.
Oracle为数值提供了很多格式,下表列出了部分可接受的格式:
语法:
TO_DATE(string,format)
用途:
根据给定的格式将一个字符串转换成Oracle的日期值.
该函数的主要用途是用来验证输入的日期值.在应用程序中,用户必须验证输入日期是否有效,如月份是否在1~12之间和日期中的天数是否在指定月份的天数内.
1.4. 函數:TO_NUMBER
语法:
TO_NUMBER(string[,format])
用途:
该函数将一个字符串转换成相应的数值.对于简单的字符串转换数值(例如几位数字加上小数点).格式是可选的.
2.日期函数
2.1. 函數:ADD_MONTHS
语法:
ADD_MONTHS(date,number)
用途:
在日期date上加指定的月数,返回一个新日期.如果给定为负数,返回值为日期date之前几个月的日期.number应当是个整数,如果是小数,正数被截为小于该数的最大整数,负数被截为大于该数的最小整数.
例如:
SELECT TO_CHAR(ADD_MONTHS(sysdate,1),
'DD-MON-YYYY') "Next month"
FROM dual
Next month
-----------
19-FEB-2000
2.2. 函數:LAST_DAY
语法:
LAST_DAY(date)
用途:
返回日期date所在月份的最后一天的日期.
例如:
SELECT SYSDATE, LAST_DAY(SYSDATE) "Last",
LAST_DAY(SYSDATE) - SYSDATE "Days Left"
FROM DUAL
SYSDATE Last Days Left
--------- --------- ----------
19-JAN-00 31-JAN-00 12
2.3. 函數:MONTHS_BETWEEN
语法:
MONTHS_BETWEEN(date1,date2)
用途:
返回两个日期之间的月份.如果两个日期月份内的天数相同(或者都是某个月的最后一天),返回值是整数.否则,返回值是小数,每于1/31月来计算月中剩余天数.如果第二个日期比第一个日期还早,则返回值是负数.
例如:
SELECT MONTHS_BETWEEN(TO_DATE('02-02-1992', 'MM-DD-YYYY'),
TO_DATE('01-01-1992', 'MM-DD-YYYY'))
"Months"
FROM DUAL
Months
----------
1.03225806
SELECT MONTHS_BETWEEN(TO_DATE('02-29-1992', 'MM-DD-YYYY'),
TO_DATE('01-31-1992', 'MM-DD-YYYY'))
"Months"
FROM DUAL
Months
----------
1
2.4. 函數:NEXT_DAY
语法:
NEXT_DAY(date,day)
用途:
该函数返回日期date指定若天后的日期.注意:参数day必须为星期,可以星期几的英文完整拼写,或前三个字母缩写,或数字1,2,3,4,5,6,7分别表示星期日到星期六.例如,查询返回本月最后一个星期五的日期.
例如:
SELECT NEXT_DAY((last_day(sysdate)-7),'FRIDAY')
FROM dual
NEXT_DAY(
---------
28-JAN-00
2.5. 函數:ROUND
语法:
NEXT_DAY(date[,format])
用途:
该函数把一个日期四舍五入到最接近格式元素指定的形式.如果省略format,只返回date 的日期部分.例如,如果想把时间(24/01/00 14:58:41)四舍五入到最近的小时.下表显示了所有可用格式元素对日期的影响.
例如:
SELECT to_char(ROUND(sysdate,'HH'),'DD-MON-YY HH24:MI:SS')
FROM dual
TO_CHAR(ROUND(SYSDATE,'HH'),'DD-MON-YYHH24:MI:SS')
-----------------------------------------------------------------
24-JAN-00 15:00:00
2.6. 函數:TRUNC
语法:
TRUNC(date[,format])
用途:
TRUNC函数与ROUND很相似,它根据指定的格式掩码元素,只返回输入日期用户所关心的那部分,与ROUND有所不同,它删除更精确的时间部分,而不是将其四舍五入.
例如:
SELECT TRUNC(sysdate)
FROM dual
TRUNC(SYS
---------
24-JAN-00
FLOOR函数:求两个日期之间的天数用;
select floor(sysdate - to_date('20080805','yyyymmdd')) from dual;
3.字符函数
3.1. 函數:ASCII
语法:
ASCII(character)
用途:
返回指定字符的ASCII码值.如果为字符串时,返回第一个字符的ASCII码值.
例如:
SELECT ASCII('Z')
FROM dual
ASCII('Z')
----------
90
3.2. 函數:CHR
语法:
CHR(number)
用途:
该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符.该函数通常用于向字符串中添加不可打印字符.
例如:
SELECT CHR(65)||'BCDEF'
FROM dual
CHR(65
------
ABCDEF
ORACLE常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..) 根据已有的表创建新表: A:select * into table_new from table_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle> 5、说明:删除表 drop table tablename
6、说明:增加一个列,删除一个列 A:alter table tabname add column col type B:alter table tabname drop column colname 注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、添加主键: Alter table tabname add primary key(col) 删除主键: Alter table tabname drop primary key(col) 8、创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、创建视图:create view viewname as select statement 删除视图:drop view viewname 10、几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、几个高级查询运算词 A:UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B:EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C:INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、使用外连接
Oracle With 语句语法及示例 1、一个完整的Oracle With 语句实例: insert into sms_tmp_stop_circlenum_zsdx –将下面查询的结果插入到临时表中 WITH selectdata --Oracle With开始的查询语句 AS (SELECT TRUNC(createtime) senddate,agentid,srcnum, ROUND(SUM(CASE WHEN result='4' THEN 1 ELSE 0 END)/COUNT(*)*100,2) AS ratio FROM ZSDX_SMS_OTHERSEND_DETAILS WHERE agentid LIKE 'zsdx%' AND createtime>=TO_DATE('2010-12-30 00:00:00','yyyy-mm-dd hh24:mi:ss') AND createtime
Oracle的历史 ?Oracle 公司( 甲骨文) 创始人: Larry Ellison 32岁,公司提供数据库服务. ?公司成立于1977 年, 83 年公司更名为Oracle ,原名为”软件开发实验室”. ?Oracle 数据库适用于大型企业 ?竞争对手 –微软的SQLServer –IBM 的DB2 ?目前的版本 – 2.0~7.0 , 8.0 , 8i , 9i , 10g Oracle的服务: 我的电脑右键选择管理--服务和应用程序—服务
或 sqlplus 用户名@orcl 如果用户是管理员要在sqlplus 用户名/密码@主机字符串as sysdba “/”是用户名和密码分隔符号 “@”是密码和数据库的分隔符号 “orcl”是数据库的名称,在安装时指定 常用命令(互动) connect 切换用户 show user 显示当前用户 set linesize 1000 设置行显示长度 set pagesize 1000 设置分页长度 desc dept 查看表结构 select table_name from user_tables 查询当前用户的表 / 运行上一条SQL语句 clear screen 清除屏幕 edit 编辑 spool d:/a 保存输出结果到某个位置 spool off 保存结束 quit 退出 list 查看最后一条语句 @ 文件名.sql 运行外部文件中的SQL语句
课程目标: 1. 了解数据库系统在项目开发中的地位 2. 了解目前主流数据库系统 3. 熟练掌握查询命令 4. 熟练掌握数据操作方式 5. 熟练使用数据库内置函数 6. 掌握pl/sql程序设计语法结构 7. 掌握视图 8. 掌握存储过程 9. 掌握用户自定义函数 10. 掌握触发器 了解: 1.数据库组件: 1.1 实施应用集群 1.2 Oracle OLAP 1.3 数据挖掘 1.4 应用程序接口 1.5 网络组件 1.6 SQL Plus 1.7 企业管理器OEM
2. 几个版本间的差异: 2.1 增加了服务器参数文件SPFILE 2.2 使用了OMF免去了手工管理数据库文件的繁琐 2.3 支持多种数据库块大小 2.4 会话可以自动调整PGA的大小 2.5 引入了列表分区 课程内容: 1. 操作数据之前的准备工作: 1.1. 要保证有一个数据库: 1.2. 要保证创建一个表空间 create tablespace hbjr datafile 'E:\dbs\hbjr.dbf' size 100M; 1.3. 要创建一个用户,用户默认的表空间就是你创建的表空间 create user hbjr identified by orcl default tablespace hbjr; //授权限: grant dba to hbjr; 1.4. 用户/密码登录:
2. 表名/列字段名起名规范: 2.1 使用常规字母和数字 2.2 长度不要超过30 2.3 表名/列名不能重复 2.4 不能使用oracle的保留字 3. 数据类型 3.1 char:定长,存储单位--字节(bite) 3.2 varchar2:变长,存储单位--字节 3.3 nchar:定长,存储单位--字符 3.4 nvarchar2:变长,存储单位--字符 3.5 date:日期类型,7个字节,存储着--世纪,年,月,日,时,分,秒 3.6 timestamp:日期类型,11个字节,存储着--世纪,年,月,日,时,分,秒,毫秒 3.7 number:数据类型(数值类型) 3.8 clob:大字段类型,适合存储纯文本信息(例如:*.txt 文件)
--创建用户 create user han identified by han default tablespace users Temporary TABLESPACE Temp; grant connect,resource,dba to han; //授予用户han开发人员的权利 --创建表 create table classes( id number(9) not null primary key, classname varchar2(40) not null) --查询表select * from classes; --删除表drop table students; --修改表的名称rename alist_table_copy to alist_table; --显示表结构 describe test --不对没查到 --增加列alter table test add address varchar2(40); --删除列alter table test drop column address; --修改列的名称alter table test modify address addresses varchar(40; --修改列的属性alter table test modi create table test1( id number(9) primary key not null, name varchar2(34) ) rename test2 to test; --创建自增的序列 create sequence class_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE; select class_seq.currval from dual --插入数据insert into classes values(class_seq.nextval,'软件一班') commit; --更新数据update stu_account set username='aaa' where count_id=2; commit; --创建唯一索引create unique index username on stu_account(username); --唯一索引不能插入相同的数据
一、SELECT语句基础语法 SELECT [ALL |DISTINCT TOP N [PERCENT] WITH TIES SELECT_LIST #SELECT 子句,用于指定由查询返回的列。 [INTO [new_table_name]] #INTO子句,将检索结果存储到新表或视图中。 FROM {table_name|view_name} [(optimizer_hints)],... #FROM子句,用于指定引用的表或视图,需指定多个表或视图,用“,”分开即可。[WHERE search_condition] #WHERE子句,用于指定限制返回的行的搜索条件,若无此子句,则默认表中的所有行都满足条件。 [GROUP BY group_by_expression] #GROUP BY子句,指定用来放置输出行的组,并且如果SELECT子句中
一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1
oracle查询语句大全--基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba to username;//授权grant connect,resource,dba,sysdba to username; 3.connect username/password//进入。 4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。 5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql; 6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体. 使用C#描述应如下所示: https://www.doczj.com/doc/cb8084845.html,mandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) V ALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) V ALUES (2, \'2\'); end;"; 7.查询用户下的表的信息select distinct table_name from user_tab_columns; 8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum
Oracle创建表语句(Create table)语法详解及示例 创建表(Create table)语法详解 1. ORACLE常用的字段类型 ORACLE常用的字段类型有 VARCHAR2 (size) 可变长度的字符串, 必须规定长度 CHAR(size) 固定长度的字符串, 不规定长度默认值为1 NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数 最长38位. 不够位时会四舍五入. DATE 日期和时间类型 LOB 超长字符, 最大可达4G CLOB 超长文本字符串 BLOB 超长二进制字符串 BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的. 数字字段类型位数及其四舍五入的结果 原始数值1234567.89 数字字段类型位数存储的值 Number 1234567.89 Number(8) 12345678 Number(6) 错 Number(9,1) 1234567.9 Number(9,3) 错 Number(7,2) 错 Number(5,-2) 1234600 Number(5,-4) 1230000 Number(*,1) 1234567.9 2. 创建表时给字段加默认值和约束条件 创建表时可以给字段加上默认值 例如 : 日期字段 DEFAULT SYSDATE
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 创建表时可以给字段加上约束条件 例如: 非空 NOT NULL 不允许重复 UNIQUE 关键字 PRIMARY KEY 按条件检查 CHECK (条件) 外键 REFERENCES 表名(字段名) 3. 创建表的例子 CREATE TABLE DEPT( EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13)) ; CREATE TABLE region( ID number(2) NOT NULL PRIMARY KEY, postcode number(6) default '0' NOT NULL, areaname varchar2(30) default ' ' NOT NULL); 4. 创建表时的命名规则和注意事项 1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,# 2)大小写不区分 3)不用SQL里的保留字, 一定要用时可用双引号把字符串括起来. 4)用和实体或属性相关的英文符号长度有一定的限制 注意事项: 1)建表时可以用中文的字段名, 但最好还是用英文的字段名 2)创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 3)建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引 4)一个表的最多字段个数也是有限制的,254个. 5. 约束名的命名规则和语法
第一篇基本操作 --解锁用户alter user 用户account unlock; --锁定用户alter user 用户account lock; alter user scott account unlock; --创建一个用户yc 密码为a create user 用户名identified by 密码; create user yc identified by a; --登录不成功,会缺少create session 权限,赋予权限的语法grant 权限名to 用户;grant create session to yc; --修改密码alter user 用户名identified by 新密码; alter user yc identified by b; --删除用户 drop user yc ; --查询表空间 select *from dba_tablespaces; --查询用户信息 select *from dba_users; --创建表空间 create tablespace ycspace datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' size 2m autoextend on next 2m maxsize 5m offline ; --创建临时表空间 create temporary yctempspace tempfile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' size 2m autoextend on next 2m maxsize 5m offline ; --查询数据文件 select *from dba_data_files;
oracle查询语句大全oracle 基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba to username;//授权grant connect,resource,dba,sysdba to username; 3.connect username/password//进入。 4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。 5. 如何执行脚本SQL文件? SQL>@PA TH/filename.sql; 6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体. 使用C#描述应如下所示: https://www.doczj.com/doc/cb8084845.html,mandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) V ALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) V ALUES (2, \'2\'); end;"; 7.查询用户下的所有表select distinct table_name from user_tab_columns; 8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum
-- 表 create table test (names varchar2(12), dates date, num int, dou double); -- 视图 create or replace view vi_test as select * from test; -- 同义词 create or replace synonym aa for dbusrcard001.aa; -- 存储过程 create or replace produce dd(v_id in employee.empoy_id%type) as begin end dd; -- 函数 create or replace function ee(v_id in employee%rowtype) return varchar(15) is var_test varchar2(15); begin return var_test; exception when others then end -- 三种触发器的定义 create or replace trigger ff alter delete on test for each row declare begin delete from test; if sql%rowcount < 0 or sql%rowcount is null then rais_replaction_err(-20004,"错误") end if end create or replace trigger gg
alter insert on test for each row declare begin if :https://www.doczj.com/doc/cb8084845.html,s = :https://www.doczj.com/doc/cb8084845.html,s then raise_replaction_err(-2003,"编码重复"); end if end create or replace trigger hh for update on test for each row declare begin if updating then if :https://www.doczj.com/doc/cb8084845.html,s <> :https://www.doczj.com/doc/cb8084845.html,s then reaise_replaction_err(-2002,"关键字不能修改") end if end if end -- 定义游标 declare cursor aa is select names,num from test; begin for bb in aa loop if https://www.doczj.com/doc/cb8084845.html,s = "ORACLE" then end if end loop; end -- 速度优化,前一语句不后一语句的速度快几十倍select names,dates from test,b where https://www.doczj.com/doc/cb8084845.html,s = https://www.doczj.com/doc/cb8084845.html,s(+) and https://www.doczj.com/doc/cb8084845.html,s is null and b.dates > date(''2003-01-01'',''yyyy-mm-dd'')
Oracle数据库语句大全 一.入门部分 1.创建表空间 create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on; 2.删除表空间 drop tablespace schooltbs[including contents and datafiles]; 3.查询表空间基本信息 select *||tablespace_name from DBA_TABLESPACES; 4.创建用户 create user lihua identified by lihua default tablespace schooltbs temporary tablespace temp; 5.更改用户 alter user lihua identified by 123 default tablespace users; 6.锁定用户 alter user lihua account lock|unlock; 7.删除用户 drop user lihua cascade;--删除用户模式 8.oracle数据库中的角色 connect,dba,select_catalog_role,delete_catalog_role,execute_catalo g_role,exp_full_database,imp_full_database,resource 9.授予连接服务器的角色 grant connect to lihua; 10.授予使用表空间的角色 grant resource to lihua with grant option;--该用户也有授权的权限 11.授予操作表的权限 grant select,insert on user_tbl to scott;--当前用户 grant delete,update on https://www.doczj.com/doc/cb8084845.html,er_tbl to scott;--系统管理员 二.SQL查询和SQL函数 1.SQl支持的命令: 数据定义语言(DDL):create,alter,drop 数据操纵语言(DML):insert,delete,update,select 数据控制语言(DCL):grant,revoke 事务控制语言(TCL):commit,savepoint,rollback 2.Oracle数据类型 字符,数值,日期,RAW,LOB 字符型 char:1-2000字节的定长字符
ORACLE的基本语法集锦 -- 表 create table test (names varchar2(12), dates date, num int, dou double); -- 视图 create or replace view vi_test as select * from test; -- 同义词 create or replace synonym aa for dbusrcard001.aa; -- 存储过程 create or replace produce dd(v_id in employee.empoy_id%type) as begin end dd; -- 函数 create or replace function ee(v_id in employee%rowtype) return varchar(15) is var_test varchar2(15); begin return var_test; exception when others then end -- 三种触发器的定义 create or replace trigger ff alter delete on test for each row declare begin delete from test; if sql%rowcount < 0 or sql%rowcount is null then rais_replaction_err(-20004,"错误")
end create or replace trigger gg alter insert on test for each row declare begin if :https://www.doczj.com/doc/cb8084845.html,s = :https://www.doczj.com/doc/cb8084845.html,s then raise_replaction_err(-2003,"编码重复"); end if end create or replace trigger hh for update on test for each row declare begin if updating then if :https://www.doczj.com/doc/cb8084845.html,s <> :https://www.doczj.com/doc/cb8084845.html,s then reaise_replaction_err(-2002,"关键字不能修改") end if end if end -- 定义游标 declare cursor aa is select names,num from test; begin for bb in aa loop if https://www.doczj.com/doc/cb8084845.html,s = "ORACLE" then end if end loop; end -- 速度优化,前一语句不后一语句的速度快几十倍select names,dates
PL/SQL程序设计
目录 第一章PL/SQL 程序设计简介 (4) §1.2SQL与PL/SQL (4) §1.2.1 什么是PL/SQL? (4) §1.2.1 PL/SQL的好处 (4) §1.2.2 PL/SQL 可用的SQL语句 (5) §1.3运行PL/SQL程序 (5) 第二章PL/SQL块结构和组成元素 (6) §2.1PL/SQL块 (6) §2.2PL/SQL结构 (6) §2.3标识符 (6) §2.4PL/SQL变量类型 (7) §2.4.1 变量类型 (7) §2.4.2 复合类型 (9) §2.4.3 使用%ROWTYPE (11) §2.4.4 LOB类型* (11) §2.4.5 BIND 变量 (12) §2.4.6 INDEX BY TABLES (12) §2.4.7 数据类型的转换* (13) §2.5运算符和表达式(数据定义) (14) §2.5.1 关系运算符 (14) §2.5.2 一般运算符 (14) §2.5.3 逻辑运算符 (14) §2.6变量赋值 (14) §2.6.1 字符及数字运算特点 (15) §2.6.2 BOOLEAN 赋值 (15) §2.6.3 数据库赋值 (15) §2.6.4 可转换的类型赋值 (15) §2.7变量作用范围及可见性 (16) §2.8注释 (17) §2.9简单例子 (17) §2.9.1 简单数据插入例子 (17) §2.9.2 简单数据删除例子 (18) 第三章PL/SQL流程控制语句 (19) §3.1条件语句 (19) §3.2CASE表达式 (20) §3.3循环 (20) §3.3标号和GOTO (22) §3.4NULL语句 (22) 第四章游标的使用 (24)
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键. 1--设置每行显示多少字符set linesize 300; 2 设置每页显示多少条记录set pagesize 30; 3 用户名的切换: 如conn system/tiger Conn sys/change_on_install as sysdba(注意超级用户在后面加as sysdba) 4 在超级用户下查找普通用户的表是查不到的必须这样查找如select * from scott.emp(普通用户下的emp表) 5 查看当前是那个用户身份登录: show user; 6 查看有多少张表: select * from tab;(注意不同用户下的表是不同的) 7查看表的结构: desc emp(emp为表名) 8 取出重复的列(DISTINCT): 如S ELECT DISTINCT JOB EMP(去掉job的重复的值) 9字符串的链接操作用: || 10 查询有奖金的员工: select* from emp where comm is not null; 11 查询没有奖金的员工信息: select * from emp where comm is null; 12 两个条件以上就得用and 如查询工资大雨1500和有奖金的员工select * from emp where sal>1500 and comm is not null; 13 表示两个条件有一个满足就可就用:or 如查询工资大于1500或者没有奖金的员工信息 Select * from emp where sal>1500 or comm is not null; 14取反可以用not 如查询员工工资不大于1500和有奖金的员工信息如: Select * from emp where not (sal>1500 or comm is not null); 15 在什么什么之间用between----and----如查询工资在1500和3000之间的员工信息: Select * from emp where sal between 1500 and 3000; 16 查询员工编号是2323, 4555, 2222的员工具体信息: 如 Select * from emp where empno in(2323,4555,2222);