SQL基础(十四)阶层查询
ORACLE 10g新增了阶层查询操作符PRIOR,CONNECT_BY_ROOT[@more@] ■PRIOR 阶层查询的CONNECY BY condition的条件式需要用到PRIOR来指定父节点, 作为运算符,PRIOR和加(+)减(-)运算的优先级相同。 ■阶层查询 语法:START WITH condition CONNECT BY NOCYCLE condition START WITH 指定阶层的根 CONNECT BY 指定阶层的父/子关系 NOCYCLE 存在CONNECT BY LOOP的纪录时,也返回查询结果。 condition ... PRIOR expr = expr 或者 ... expr = PRIOR expr 例: CONNECT BY last_name != 'King' AND PRIOR employee_id = man
SQL基础(十三)正则表达式
ORACLE 10g新增了正则表达式 REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE[@more@]■REGEXP_LIKE模糊匹配操作符REGEXP_LIKE(source_string, pattern[, match_parameter]) source_string 支持字符数据类型(CHAR、VARCHAR2、CLOB、NCHAR、NVARCHAR2 和 NCLOB,但不包括 LONG)。pattern 参数是正则表达式的另一个名称。match_parameter 允许可选的参数(如处理换行符、保留多行格式化以及提供对区分大小写的控制)。 检索 tTest 表中的那些 code 列值包含了任意非数字字符的行。SELECT codeFROM tTestWHERE REGEXP_LIKE(code, '
SQL基础(十二)MERGE语句
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。[@more@]通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。■语法MERGE [hint] INTO [schema .] { table | view } [t_alias] USING [schema .] { table | view | subquery } [t_alias] ON ( condition ) WHEN MATCHED THEN UPDATE SET {column={expr|DEFAULT},} where_clauseDELETE where_clauseWHEN NOT MATCHED THEN INSERT (column,) VALUES ({expr|DEFAULT},) where_clauseLOG ERRORS INTO [schema
SQL基础(十一)分析函数
分析函数ROW_NUMBER,LAG/LEAD,RANK/DENSE_RANK[@more@](一)ROW_NUMBERROW_NUMBER抽取前n条,后n条,中间n条记录。CREATE TABLE cxck.tTEST(TYPE NUMBER(3,0),ID NUMBER(3,0),CODE VARCHAR2(10));通过ORDER BY抽取检索结果的第5到第10条记录SELECT ID,CODE FROM (SELECT ID,CODE,ROW_NUMBER() OVER (ORDER BY ID) NUMFROM tTEST) WHERE NUM BETWEEN 5 AND 10;通过PARTITION BY,ORDER BY抽取查询结果的第5条到第10纪录。SELECT ID,CODE FROM (SELECT ID,CODE,ROW_NUMBER() OVER (PARTITION BY TYPE ORDER BY ID) NUMFROM tTEST) WHERE
SQL基础(十)SQL*Plus 命令
SQL*Plus 命令 - describe、variable、execute、spool[@more@]■执行参数 sqlplus.exe cxck/cxck | |_ 密码 |_ 用户名 ■连接命令 connect cxck/cxck@host名; | | |_ 数据库别名 | |_ 密码 |_ 用户名 ■结束命令 exit; ■显示模式表一览 select * from tab; ■显示表结构 describe t订货; |_ 表或者视图 ■执行SQL,执行PL/SQL,编译 start sqlfile; |_ SQL 文本文件(缺省后缀: .sql) @sqlfile; |_ SQL 文本文件(缺省后缀:
SQL基础(九)PL/SQL
PL/SQL declare、begin、DBMS_SQL、dbms_output[@more@]■基本篇set serveroutput on;declarecursor c1 is select * from cxck.t订货where 产品号 = 'a001' order by 订货号;-- rec c1%rowtype;begindbms_output.put_line ('start...');for rec in c1 loopdbms_output.put_line (rec.订货号 || ' ' || rec.产品号);end loop;dbms_output.put_line ('end');exceptionwhen OTHERS thendbms_output.put_line ('** error **');end;/■动态的 SQLdeclaretbl in varchar2 default 'cxck.test';cid integer;begincid := DBMS_SQL.OPEN_CURSOR;DBM
SQL基础(八)自定义函数
自定义函数 create or replace function[@more@]■自定义函数Oracle 可以象VB的function,sub那样创建函数。语法参考PL/SQL的使用手册。■自定义函数例/* 比较两个数值的大小 */create or replace function cxck.numCompare (dt1 in number, dt2 in number) return number isdt number;begindt := dt1 - dt2;dt := sign(dt);return dt;end;//* 使用例1 numCompare() */select cxck.numCompare(10, 20) from dual;/* 使用例2 numCompare() */set serveroutput on;variable rcd number;execute :rcd := numCompare(10, 20);print rcd;
SQL基础(七)数据操作
数据操作 insert,update,where,having,distinct[@more@]基本上Oracle、SQL-Server、MDB可以通用。■追加纪录/* 基础篇 */insert into cxck.t订货 (订货号, 产品号, ...)values ('000001', 'a001', ...);/* 子查询追加 */insert into cxck.t订货1select * from cxck.t订货 where 产品号 = 'a001';■修改纪录/* 基础篇 */update cxck.t订货 set 产品号 = 'a001', 订货数 = 100where 订货号 = '000001';/* 子查询修改 */update cxck.t订货 set产品号 = select 产品号 from ...where 订货号 = '000001';/* 复数列子查询修改 */update cxck
SQL基础(六)创建表
创建表 create table、select、union、rename[@more@]基本上Oracle、SQL-Server、MDB可以通用。■基础篇create table cxck.t订货 (订货号 char (15) primary key,产品号 varchar2(18),订货数 number (9),客户号 char (4),操作员 char (7),更新日期 char (10),更新时间 char (8));■复制创建create table cxck.t订货1 asselect * from cxck.t订货 where 订货号 = '@';create table cxck.t订货1 asselect * from cxck.t订货;create table cxck.t订货1 asselect 订货号, 产品号 from cxck.t订货;** 只复制表结构和数据。** 不复制primary key
SQL基础(五)关键字
关键字 char、varchar2、number、long、raw[@more@]■注释-- 单行注释/* 复数行注释开始*/ 复数行注释结束■数据类型char() 最长2000个字符的固定长字符型varchar2() 最长4000个字符的可变长字符型number() 可指定精度和小数位的数值型long 最长2GB个字符的可变长字符型date 日期型(可以精确到秒)raw(255) 最长255个bytes的2进制型long raw 最长2GB个bytes的2进制型■算术运算符+ 加算- 减算* 乘算/ 除算|| 字符串结合■比较运算符< 小于<= 小于等于> 大于>= 大于等于= 等于<> 不等not 否定is null 空between 范围>=
SQL基础(四)数据查询
数据查询 select、where、group by、order by[@more@]■select查询表或者视图的数据。【例】select * from cxck.t产品where 产品号 = 'a001'查询where 指定的产品号等于a001的所有列的数据。【例】select 产品号, 出库数 from cxck.t产品where 产品号 = 'a001'查询产品号为 a001 的产品号和出库数。【例】select 产品号, 出库数 from cxck.t产品where 产品号 >= 'a001' and 产品号 <= 'a999'order by 产品号查询产品号在a001 ~ a999 之间的产品号和出库数,并按 order by 指定的产品号升序排列。order by 产品号 desc 时,降序排列
SQL基础(三)数据的操作
数据的操作 insert、update、delete、commit、rollback[@more@]■insert追加表或者单一视图的数据。【例】insert into cxck.t产品 (产品号,入库数,出库数,订货数,操作员,更新日期,更新时间) values ('a001',10,20,30,'cxck','19990409','111200')【例】insert into cxck.t产品 values ('a001',10,20,30,'cxck','19990409','111200')如果不指明项目名,就必须按着表定义的列顺序追加数据。■update更新表或者单一视图的数据。【例】update cxck.t产品 set出库数 = 出库数 + 200,操作员 = 'cxck',更新日期 = '19990409',更新时间 = '111600'
SQL基础(二)视图的操作
视图的操作 create view、select、drop view[@more@]■create view【例】create view cxck.v产品1 as select产品号,入库数,出库数,入库数 - 出库数 as 库存数,订货数,操作员,更新日期,更新时间from cxck.t产品 「入库数 - 出库数」是计算公式。「as 库存数」定义了库存数的项目名。view 可以使用where指定检索条件。但是不能使用order by进行排序。【例】create view cxck.v订货1 as select订货号,t订货.产品号 as 产品号,t订货.订货数 as 订货数,v产品1.订货数 as 累计订货,库存数,t订货.客户号 as 客户号,客户名,t订货.操作员 as 操作员
SQL基础(一)表操作
表操作create table、alter table、drop table[@more@]■SQL 命令create table 创建表create view 创建视图alter table 修改表insert 追加数据update 修改数据delete 删除数据commit 提交rollback 回滚select 检索数据drop view 删除视图drop table 删除表■create table【例】create table cxck.t产品 (产品号 varchar2(18) primary key,入库数 number (9, 0),出库数 number (9, 0),订货数 number (9, 0),操作员 char (5),更新日期 char (8),更新时间 char (6))「cxck.」scheme。「primary key」唯一非空。【数据类型】varchar2() 可变长