oracle 经典SQL语句大全
ORACLE常用SQL语句大全
ORACLE常用SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表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 tablename6、说明:增加一个列,删除一个列A:alter table tabname add column col typeB: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注:索引是不可更改的,想更改必须删除重新建。
oracle常用sql语句
oracle常用sql语句SQL(StructuredQueryLanguage)是关系型数据库的标准语言,用于在数据库中存储、操作和管理数据。
在数据库开发和管理中,SQL 是必不可少的工具。
本文将介绍一些轮cle常用的SQL语句,希望能对大家有所帮助。
一、查询语句1、SELECT语句SELECT语句是最常用的查询语句,用于从一个或多个表中检索数据。
其语法如下:SELECT column1, column2, ... FROM table_name WHERE condition;其中,column1、column2等表示要检索的列名,table_name表示要检索的表名,condition表示查询条件。
例如,要从一个名为“students”的表中检索所有学生的姓名和年龄,可以使用以下语句:SELECT name, age FROM students;2、WHERE语句WHERE语句用于筛选符合条件的数据。
其语法如下:SELECT column1, column2, ... FROM table_name WHERE condition;其中,condition可以是一个或多个条件组合而成的表达式。
例如,要从一个名为“students”的表中检索所有年龄大于18岁的学生的姓名和年龄,可以使用以下语句:SELECT name, age FROM students WHERE age > 18;3、ORDER BY语句ORDER BY语句用于按照指定的列对结果进行排序。
其语法如下: SELECT column1, column2, ... FROM table_name ORDER BY column_name [ASC|DESC];其中,column_name表示要排序的列名,ASC表示升序排列,DESC 表示降序排列。
例如,要从一个名为“students”的表中检索所有学生的姓名和年龄,并按照年龄从小到大进行排序,可以使用以下语句: SELECT name, age FROM students ORDER BY age ASC;二、插入语句INSERT语句用于向表中插入新的数据。
oracle常用sql语句
system rollback segment:为system表空间的对象来使用的。
non-system rollback segment:分公共的和私有的两种。
deferred rollback segment:仅在表空间被take offline的使用到。
/ --再执行。
修改后,加一个in参数:
create or replace procedure abc(testin in varchar2 )
is
vjob varchar(9);
v_count number:=0;
vtotal date:=sysdate +7;
c_tax constant nw.emp_id;
end if;
end;
/
================================================================================================
快速掌握pl/sql过程设计
v_valid boolean not null:=true;
begin
dbms_output.put_line(‘hello‘ || to_char(vtotal));
end abc;
/
--这里加入了过程内部需要的变量,可以看作是匿名块多了一个过程名而已。
begin
abc;
end;
综上,对于回滚段的掌握,这些可以应付大多数的应用,深入的内容则要多看oracle文档,多多实践。
对dba的要求:希望各位dba对概念和规则性的知识点可以达到背诵的地步。
oracle常用SQL语句(汇总版)
Oracle数据库常用sql语句ORACLE 常用的SQL语法和数据对象一.数据控制语句(DML) 部分1.INSER T (往数据表里插入记录的语句)INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名;字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()还有很多种日期格式, 可以参看OR ACLE DOC.年-月-日小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SSINSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包.INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号CREATE SEQUENCE 序列号的名称(最好是表名+序列号标记) INCREMENT BY 1 START WI TH 1 MAXVALUE 99999 CYCLE NOCACHE;其中最大的值按字段的长度来定, 如果定义的自动增长的序列号NUMBER(6) , 最大值为999999 INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL2.DELETE (删除数据表里记录的语句)DELETE FROM表名 WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用TRUNCATE 命令, 它可以释放占用的数据块表空间TRUNCATE TABLE 表名;此操作不可回退.3.UPDATE (修改数据表里记录的语句)UPDATE表名SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;值N超过定义的长度会出错, 最好在插入前进行长度校验..注意事项:A. 以上SQL语句对表都加上了行级锁,确认完成后, 必须加上事物处理结束的命令COMMIT 才能正式生效,否则改变不一定写入数据库里.如果想撤回这些操作, 可以用命令ROLLBACK 复原.B. 在运行INSERT, DELETE 和UPDATE 语句前最好估算一下可能操作的记录范围,应该把它限定在较小(一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段.程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理.二.数据定义(DDL) 部分1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)ORACLE常用的字段类型有CHAR 固定长度的字符串VARCHAR2 可变长度的字符串NUMBER(M,N) 数字型M是位数总长度, N是小数的长度DATE 日期类型创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面创建表时可以用中文的字段名, 但最好还是用英文的字段名创建表时可以给字段加上默认值, 例如DEFAUL T SYSDATE这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间创建表时可以给字段加上约束条件例如不允许重复UNIQUE, 关键字PRIMAR Y KEY2.AL TER (改变表, 索引, 视图等)改变表的名称AL TER TABLE 表名1 TO 表名2;在表的后面增加一个字段AL TER TABLE表名ADD 字段名字段名描述;修改表里字段的定义描述AL TER TABLE表名MODIFY字段名字段名描述;给表里的字段加上约束条件AL TER TABLE 表名ADD CONSTRAINT 约束名PRIMAR Y KEY (字段名);AL TER TABLE 表名ADD CONSTRAINT 约束名UNIQUE (字段名);把表放在或取出数据库的内存区AL TER TABLE 表名CACHE;AL TER TABLE 表名NOCACHE;3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)删除表和它所有的约束条件DROP TABLE 表名CASCADE CONSTRAINTS;4.TRUNCATE (清空表里的所有记录, 保留表的结构)TRUNCATE 表名;三.查询语句(SELECT) 部分SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件;字段名可以带入函数例如: COUNT(*), MIN(字段名), MAX(字段名), AVG(字段名), DISTINCT(字段名), TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')NVL(EXPR1, EXPR2)函数解释:IF EXPR1=NULLRETURN EXPR2ELSERETURN EXPR1DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数解释:IF AA=V1 THEN RETURN R1IF AA=V2 THEN RETURN R2..…ELSERETURN NULLLPAD(char1,n,char2)函数解释:字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位字段名之间可以进行算术运算例如: (字段名1*字段名1)/3查询语句可以嵌套例如: SELECT …… FROM(SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;两个查询语句的结果可以做集合操作例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS, 交集INTERSECT分组查询SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1[HAVING 条件] ;两个以上表之间的连接查询SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE表名1.字段名= 表名2. 字段名[ AND ……] ;SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE表名1.字段名= 表名2. 字段名(+) [ AND ……] ;有(+)号的字段位置自动补空值查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESCSELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]ORDER BY字段名1, 字段名2 DESC;字符串模糊比较的方法INSTR(字段名, ‘字符串’)>0字段名LIKE ‘字符串%’[‘%字符串%’]每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.四.ORACLE里常用的数据对象 (SCHEMA)1.索引(INDEX)CREATE INDEX 索引名ON 表名( 字段1, [字段2, ……] );AL TER INDEX 索引名REBUILD;一个表的索引最好不要超过三个(特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况, 也可以建立多字段的组合索引和基于函数的索引ORACLE8.1.7字符串可以索引的最大长度为1578 单字节ORACLE8.0.6字符串可以索引的最大长度为758 单字节2.视图(VIEW)CREATE VIEW 视图名AS SELECT …. FROM …..;AL TER VIEW视图名COMPILE;视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.3.同义词(SYNONMY)CREATE SYNONYM同义词名FOR 表名;CREATE SYNONYM同义词名FOR 表名@数据库链接名;4.数据库链接(DATABASE LINK)CREATE DATABASE LINK数据库链接名CONNECT TO 用户名IDENTIFIED BY 密码USING ‘数据库连接字符串’;数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样数据库全局名称可以用以下命令查出SELECT * FROM GLOBAL_NAME;查询远端数据库里的表SELECT …… FROM 表名@数据库链接名;五.权限管理(DCL) 语句1.GRANT 赋于权限常用的系统权限集合有以下三个:CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)常用的数据对象权限有以下五个:ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名, DELETE ON 数据对象名, INSER T ON 数据对象名, AL TER ON 数据对象名GRANT CONNECT, RESOURCE TO 用户名;GRANT SELECT ON 表名 TO 用户名;GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;2.REVOKE 回收权限REVOKE CONNECT, RESOURCE FROM 用户名;REVOKE SELECT ON 表名FROM 用户名;REVOKE SELECT, INSERT, DELETE ON表名FROM 用户名1, 用户名2;查询数据库中第63号错误:select orgaddr,destaddr from sm_histable0116 where error_code='63';查询数据库中开户用户最大提交和最大下发数:select MSISDN,TCOS,OCOS from ms_usertable;查询数据库中各种错误代码的总和:select error_code,count(*) from sm_histable0513 group by error_code orderby error_code;查询报表数据库中话单统计种类查询。
Oracle数据库常用Sql语句大全
Oracle数据库常用Sql语句大全最简单的就是查询:select语句数据库操作语言DML:update、insert、delete等数据库定义语言DDL:create、drop、alter等等oracle取前几条数据语句sqlserver中可以用top n 的方法,oracle中用rownum,但如果只用rownum会随机取数据,如果想按一定顺序取前几条数据则可这样写:select * from (select列 from 表 where 条件 order by列 desc) where rownum<>select * from (select rownum r ,* from test) ttwhere tt.r 50 and tt.r <= 100;=””>这样子写是会全表扫描的的,小的表不觉得会有多慢,数据量大了你就知道有多不好了,改成这样就不会了oracle怎幺写”IF”语句?如果是 SQL 语句里面使用。
使用 DECODE 或者 CASE WHENDECODE 的用法就是DECODE(abc, 50, 'A’, 'B’)CASE WHEN 的用法就是CASE WHEN abc=50 THEN 'A’ ELSE 'B’ END如果是在存储过程里面的话,就是简单的 IF/ELSE 了SQL 语句的话,就是SELECTabc, DECODE(abc, 50, 'A’, 'B’)FROM表什幺是oracle实例,写出在oracle如何查找实例名的sql语句oracle数据库实例(instance_name)是用于和操作系统进行联系的标识,也就是说数据库和操作系统之间的交互使用的是数据库实例。
数据库名和实例名可以相同也可以不同。
在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。
oracle常用sql语句
oracle常⽤sql语句正在看的ORACLE教程是:oracle常⽤sql语句。
SQL*Plus system/manager2、显⽰当前连接⽤户SQL> show user3、查看系统拥有哪些⽤户SQL> select * from all_users;4、新建⽤户并授权SQL> create user a identified by a;(默认建在SYSTEM表空间下)SQL> grant connect,resource to a;5、连接到新⽤户SQL> conn a/a6、查询当前⽤户下所有对象SQL> select * from tab;7、建⽴第⼀个表SQL> create table a(a number);8、查询表结构SQL> desc a9、插⼊新记录SQL> insert into a values(1);10、查询记录SQL> select * from a;11、更改记录SQL> update a set a=2;12、删除记录SQL> delete from a;13、回滚SQL> roll;SQL> rollback;14、提交SQL> commit;⽤户授权:GRANT ALTER ANY INDEX TO "user_id "GRANT "dba " TO "user_id ";ALTER USER "user_id " DEFAULT ROLE ALL创建⽤户:CREATE USER "user_id " PROFILE "DEFAULT " IDENTIFIED BY " DEFAULT TABLESPACE "USERS " TEMPORARY TABLESPACE "TEMP " ACCOUNT UNLOCK;GRANT "CONNECT " TO "user_id ";⽤户密码设定:ALTER USER "CMSDB " IDENTIFIED BY "pass_word "表空间创建:CREATE TABLESPACE "table_space " LOGGING DATAFILE'C:\ORACLE\ORADATA\dbs\table_space.ora' SIZE 5M------------------------------------------------------------------------1、查看当前所有对象SQL > select * from tab;2、建⼀个和a表结构⼀样的空表SQL > create table b as select * from a where 1=2;SQL > create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;3、察看数据库的⼤⼩,和空间使⽤情况SQL > col tablespace format a20SQL > select b.file_id ⽂件ID, b.tablespace_name 表空间, b.file_name 物理⽂件名, b.bytes 总字节数, (b.bytes-sum(nvl(a.bytes,0))) 已使⽤, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分⽐ from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name / dba_free_space --表空间剩余空间状况 dba_data_files --数据⽂件空间占⽤情况4、查看现有回滚段及其状态SQL > col segment format a30SQL > SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;5、查看数据⽂件放置的路径SQL > col file_name format a50SQL > select tablespace_name,file_id,bytes/1024/1024,file_name fromdba_data_files order by file_id;6、显⽰当前连接⽤户SQL > show user7、把SQL*Plus当计算器SQL > select 100*20 from dual;8、连接字符串SQL > select 列1 | |列2 from 表1;SQL > select concat(列1,列2) from 表1;9、查询当前⽇期SQL > select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;10、⽤户间复制数据SQL > copy from user1 to user2 create table2 using select * from table1;11、视图中不能使⽤order by,但可⽤group by代替来达到排序⽬的SQL > create view a as select b1,b2 from b group by b1,b2;12、通过授权的⽅式来创建⽤户SQL > grant connect,resource to test identified by test;SQL > conn test/test13、查出当前⽤户所有表名。
oracle常用SQL语句
ORACLE常用SQL语句1.select txt_type||' '||'is a'||' '||txt_ord as "Grid" fromSNP_SESS_TXT_LOG (连接“||”字段值、字符串等)2.select distinct weight_no from weight_record (去重)3.select a from XXX where a between xx and yy (一个区间内)4.select a from XXX where a in/not in (x,y,z)5.like '_8%' (_代表一个字符;%代表一个或多个)6.where xx is null7.select a from XXX order by a asc/desc (升序/降序)8.select a , b from XXX order by a , b desc (按别名排序,默认升序)9.大小写控制函数10.字符控制函数eg:11.数字函数ROUND函数其中DUAL是一个伪表,可以测试函数和表达式用 TRUNC函数MOD函数12.日期函数eg:13.通用函数NVL2函数(NVL2(expr1,expr2,expr3)功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。
)NULLIF函数(比较两个表达式的值。
如果第一个表达式的值与第二个表达式的值相等,返回NULL;如果第一个表达式的值不等于第二个表达式的值,或第二个表达式的值为NULL,返回第一个表达式的值)COALESCE函数(COALESCE函数会依次检查输入的参数,返回第一个不是NULL的参数,只有当传入COALESCE函数的所有的参数都是NULL的时候,函数才会返回NULL)14.条件表达式CASE函数DECODE函数15.多表连接等值连接非等值连接。
oracle的sql语句
oracle的sql语句Oracle的SQL语句可以用于查询、插入、更新和删除数据库中的数据。
以下是一些常见的Oracle SQL语句示例:1. 查询数据:- 查询所有记录:SELECT * FROM 表名;- 查询指定列:SELECT 列名1, 列名2 FROM 表名;- 带条件查询:SELECT * FROM 表名 WHERE 条件;- 排序查询:SELECT * FROM 表名 ORDER BY 列名ASC/DESC;- 分组查询:SELECT 列名, COUNT(*) FROM 表名GROUP BY 列名;2. 插入数据:- 插入单条记录:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);- 插入多条记录:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2), (值3, 值4), ...;3. 更新数据:- 更新单个字段:UPDATE 表名 SET 列名 = 新值WHERE 条件;- 更新多个字段:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件;4. 删除数据:- 删除所有记录:DELETE FROM 表名;- 删除满足条件的记录:DELETE FROM 表名 WHERE 条件;5. 聚合函数:- 计算总数:SELECT COUNT(*) FROM 表名;- 计算平均值:SELECT AVG(列名) FROM 表名;- 计算最大值:SELECT MAX(列名) FROM 表名;- 计算最小值:SELECT MIN(列名) FROM 表名;- 计算求和:SELECT SUM(列名) FROM 表名;这些只是一些常见的Oracle SQL语句示例,实际使用中还可以结合其他语句和函数进行更复杂的查询和操作。
oracle常用sql语句
创建表Create table student(id number(5));用查询结果创建新表这个命令是一种快捷的建表方式CREATE TABLE mytable (id, name, sal, job, deptno) as SELECT empno, ename, sal, job, deptno FROM emp;修改表添加一个字段Alter table student add (name varchar2(10));修改一个字段的长度alter table student modify (name varchar2(20))修改一个字段的类型,名字(里面不能有数据)Alter table student modify(name varchar2(20))删除一个字段//不建议,因为顺序变了Alter table student drop column name修改表的名字Rename student to stu;删除表Drop table student添加数据Insert into student values(‘1’,’01-5月-15’)Insert into student (id,name) values(‘1’,’zhanshan’)Insert into student (id,name) values(‘1’,null);修改数据Update student set name=‘你好’ where id=1UPDATE student SET sex = '男', birthday = '1984-04-01' WHERE xh = 'A001';删除数据Savepoint aDelete from empRollback to aDrop table student—删除表的数据和结构Delete from emp where id=?查看表的结构Desc empSelete ename from emp –查看一列Select distinct deptno from emp 取消重复的行Selete ename from emp where ename=?oracle内容分大小写,字段不分NvlSelect sal*12+nvl(comm,0)“年薪” from emp null的加减乘除都为null||连接符Select ename || ‘is a’|| job from empLike % 0到多个字符 -一个字符Select * from emp where ename=’S%’Where中使用inSelect * from emp where deptno in(????,????,????)Is nullSelect * from emp where comm. Is null使用逻辑操作符andSELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%';Order by 默认是asc升序还有desc降序Select * from emp order by sal使用别名别名需要使用“”号圈中,英文不需要“”号Select sal*12 “年薪” from emp order by “年薪”数据分组Select max(sal),min(sal),avg(sal),sum(.),count(.) from emp错误写法:select ename, sal from emp where sal=max(sal);正确写法:select ename, sal from emp where sal=(select max(sal) from emp);Group by havingSelect max(sal) deptno from emp group by deptno;Select max(sal) deptno from emp group by deptno having sal >1000;顺序 group by having order by多表查询SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno;SELECT d.dname, e.ename, e.sal FROM emp e, dept d WHERE e.deptno = d.deptnoand e.deptno = 10;自连接SELECT worker.ename, boss.ename FROM emp worker,emp boss WHERE worker.mgr = boss.empno AND worker.ename = 'FORD';子查询嵌套查询单行子查询SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename ='SMITH');数据库在执行sql 是从左到右扫描的,如果有括号的话,括号里面的先被优先执行。
Oracle常用SQL语句
Oracle常用SQL语句——shirley 1.1. 创建表空间create tablespace 表空间名loggingdatafile ‘数据文件存放目录\数据文件名.dbf’size 500m ----初始大小autoextend on ----扩展方式next 500m maxsize 2048m ----每次扩展500MB,最大2048MBextent management local;说明:1)第一: CREA TE TABLESPACE 表空间名对表空间的命名,遵守Oracle 的命名规范就可了.ORACLE可以创建的表空间有三种类型:(1)TEMPORARY: 临时表空间,用于临时数据的存放,创建临时表空间的语法如下:CREA TE TEMPORARY TABLESPACE "SAMPLE"......(2)UNDO : 还原表空间. 用于存入重做日志文件,创建还原表空间的语法如下:CREA TE UNDO TABLESPACE "SAMPLE"......(3)用户表空间: 最重要,也是用于存放用户数据表空间可以直接写成: CREA TE TABLESPACE "SAMPLE"TEMPORARY和UNDO 表空间是ORACLE 管理的特殊的表空间.只用于存放系统相关数据.2)第二,有NOLOGGING 和LOGGING 两个选项,NOLOGGING: 创建表空间时,不创建重做日志.LOGGING 和NOLOGGING正好相反, 就是在创建表空间时生成重做日志.用NOLOGGING时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复,但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的,所以通常不需要表空间的创建日志,因此,在创建表空间时,选择NOLOGGING,以加快表空间的创建速度.3)第三: DA TAFILE 用于指定数据文件的具体位置和大小.如: DA TAFILE 'D:\ORACLE\ORADA TA\ORA92\LUNTAN.ora' SIZE 5M说明文件的存放位置是'D:\ORACLE\ORADA TA\ORA92\LUNTAN.ora' , 文件的大小为5M.如果有多个文件,可以用逗号隔开:DA TAFILE 'D:\ORACLE\ORADA TA\ORA92\LUNTAN.ora' SIZE 5M,'D:\ORACLE\ORADA TA\ORA92\dd.ora' SIZE 5M但是每个文件都需要指明大小.单位以指定的单位为准如5M 或500K.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少IO竟争.指定文件名时,必须为绝对地址,不能使用相对地址.4)第四: EXTENT MANAGEMENT LOCAL 存储区管理方法在Oracle 8i以前,可以有两种选择,一种是在字典中管理(DICTIONARY),另一种是本地管理(LOCAL ),从9I开始,只能是本地管理方式.因为LOCAL 管理方式有很多优点.在字典中管理(DICTIONARY): 将数据文件中的每一个存储单元作为一条记录,所以在做DM操作时,就会产生大量的对这个管理表的Delete和Update操作.做大量数据管理时,将会产生很多的DM操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片,这就是为什么要做磁盘整理的原因.本地管理(LOCAL): 用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘. 同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
SQL ORACLE查询语句大全集锦
SQL查询语句大全集锦一、简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
代码:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='张三'(一) 选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下面语句显示testtable表中所有列的数据:代码:SELECT * FROM testtable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:代码:SELECT nickname,email FROM testtable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:代码:SELECT 昵称=nickname,电子邮件=email FROM testtable4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。
使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT 时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:代码:SELECT TOP 2 * FROM `testtable`代码:SELECT TOP 20 PERCENT * FROM `testtable`(二) FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。
Oracle_SQL语句大全
Oracle SQL语句大全2009‐04‐13 15:391.desc(描述) emp 描述emp这张表2.desc dept 部门表3.desc salgrade 薪水等级4.select *from table 查找表中的元素5.dual 是系统中的一张空表6.select *from dual7.select sysdate from dual 取出系统时间8.select ename,sal*12 "annul sal"(取的别名) from emp; 查找用户姓名和用户的年薪9.任何含有空值的数学表达式的值都是空值select ename,sal*12+comm from emp;10.select ename||sal from emp 其中的||相当于将sal全部转化为字符串11.表示字符串的方法select ename ||'ajjf' from emp;12.如果其中有一个单引号就用2个单引号来代替他select ename||'sakj' 'lds'from emp;13.select distinct deptno from emp (去除部门字段中重复的部分,关键字distinct)14.select distinct deptno,job from emp;(去除这2个字段中重复的组合)15.select *from dept where deptno=10; 取出条件(取出部门编号为10的记录)16.select * from emp where ename='CLIRK'; 取出部门中姓名为clirk的记录(注意取出过程中ename用单引号隔开)17.select ename,sal from emp where sal>1500; 取出部门中薪水大于1500的人的姓名18.select ename,sal,deptno from emp where deptno<> 10 取出部门中的部门号不等于10的19.select ename,sal,deptno from emp where ename>'CBA' 取出部门中员工名字大于CBA的员工(实际比较的是ACIIS码)20.select ename,sal from emp where sal between 800 and 1500select ename,sal from emp where sal>=800 and sal<=1500; (取出800和1500之间的数)21.select ename,sal,comm from emp where comm is null (选出其中的空值)select enmae,sal,comm from emp where comm is not null(选出其中的非空值) 22.select ename,sal,comm from emp where sal in (800,1500,2000);取出这3者之中的select ename,sal,comm from emp where ename in('simth');23.select ename,sal,hiredate from emp where hiredata>'3‐04月‐81';宣传符合条件的日期24.select ename,sal,from emp where sal>1000 or deptno=10; 找出工资薪水大于1000或者部门号等于10的员工25.select ename,sal from emp where sal not in(500,1000); 查找薪水不在500到1000的员工姓名和月薪26.select ename,sal from emp where ename like '%ALL%';select ename,sal from emp where ename like '_%A%'; 查找姓名中含有ALL的客户信息,一个横线代表一个通配符27.select ename,sal from emp where ename like '_%$%%' escape '$'; 自己指定转易字符select ename,sal from emp where ename like '_%\%%'; 查找中间含有%相匹配的客户信息,运用转易字符28.select * from dept order by deptno 对表中元素按部门号排序select *from dept order by deptno desc 默认为升序,可以用desc按降序29.select ename,sal from emp where sal <>1000 order by sal desc 按照查询条件来查询,并排序(asc升序排列)30.select ename,sal*12 from emp where ename not like '_%A%' and sal>800 order by sal desc31.select lower(ename) from emp 将ename都转化为小写 lower是函数能将字母转化为小写32.select ename from emp where lower(ename) like '_%a%'; 找出ename 中所有的含有a的字符33.select substr(ename,2,3) form emp 从第2个字符开始截取3个字符34.select chr(65) from dual; 将65转化为字符35.select ascii('A') from dual 将ACSII码转化为字符串36.select round(23.565)from dual 四舍五入36.select round(23,4565,2)from dual 四舍五入到第二位37.select to_char(sal,'$99.999.9999') from emp 按指定格式输出select to_char(sal,'L99,999,9999') form emp L代表本地字符38.select hiredate from empselect to_char(hiredate,'YYYY‐MM‐DD HH:MI:SS) from emp; 时间格式的显示select to_char(sysdate,'YYYY‐MM‐DD HH:MI:ss) from dual; 十二小时制显示系统时间select to_char(sysdate,'YYYY‐MM‐DD HH24:MI:SS) from dual 二四小时制显示系统时间39.select ename,hiredate from emp where hiredate > to_date('2005‐2‐3 12:32:23','YYYY‐MM‐DD HH:MI:SS');40 select sal from emp where sal>to_number('$1,250.00','$9,999.99'); 取出比它大的一切字符串(把特定格式的数字转化成字符)41 select ename,sal+nvl(comm,0) from emp; 将comm值为空的用0来替换,单行函数(以一条记录为条件)一条对一条42.select Max(sal) from emp;select Min(sal) from emp;select avg(sal) from emp;select sum(sal) from emp;select count(*) from emp; 查看表中一共有多少条记录 select count(*) from emp where deptno=10; 查找部门10一共有多少人;43.select avg(sal),deptno from emp group by deptno; 按部门号进行分组select deptno,job,max(sal) from emp group by job,deptno; 按工作和部门号进行分组;44.select ename from emp where sal=(select max(sal) from emp); 子查询,查找部门中薪水最高的员工姓名45.group by 注意:出现在select列表中的字段,如果没有出现在组函数中必须出现在group by子句中46.select avg(sal),deptno from emp group by deptno having avg(sal)>2000; 选出部门中平均薪水大于2000的部门,47.select deptno from emp where sal>100 group by deptno having ..........order by........先取数据‐‐过滤数据‐‐‐‐‐‐分组‐‐‐‐对分组限制‐‐‐‐‐‐‐排序48.select avg(sal) from emp where sal>2000 group by deptno having avg(sal)>1500 order by avg(sal) desc;查找部门中平均薪水打印2000的员工并按部门号进行排序,查询分组后的平均薪水必须大于1500,查询结果按平均薪水从低到高排列49.select ename from emp where sal>(select avg(sal) from emp);查找出员工中薪水位于部门平均薪水之上的所有员工50.select ename,sal from emp join(select max(sal) max_sal from emp group by deptno) t on(emp.sal=t,max_sal and emp.deptno=t.deptno);查找每个部门中薪水最高的51.select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno; 表的自连接52.select dname,ename from emp cross join dept 交叉连接,笛卡尔SQL99中的新语法53.select ename,dname from emp join dept on(emp.deptno=dept.deptno);54.select ename,dname from emp join dept using(deptno); 查找emp 和dept表中deptno相同的部分。
oracle语句大全及用法
oracle语句大全及用法Oracle语句是Oracle数据库中用于管理和操作数据的SQL语句。
以下是一些常用的Oracle语句及其用法:1. 数据定义语句(DDL)CREATE DATABASE:用于创建新的数据库。
CREATE TABLE:用于创建新的表。
语法如下:sql`CREATE TABLE table_name (column1 datatype1, column2 datatype2, ...);`ALTER TABLE:用于修改现有的表结构,如添加、删除或修改列。
DROP TABLE:用于删除现有的表。
CREATE INDEX:用于在表上创建索引,以提高查询性能。
2. 数据操纵语句(DML)SELECT:用于从表中查询数据。
语法如下:sql`SELECT column1, column2, ... FROM table_name;`INSERT INTO:用于向表中插入新的数据行。
语法如下:sql`INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);`UPDATE:用于修改表中的现有数据。
DELETE:用于从表中删除数据。
3. 数据控制语句(DCL)GRANT:用于授予用户或角色对数据库对象的访问权限。
REVOKE:用于撤销用户或角色对数据库对象的访问权限。
4. 事务控制语句(TCL)COMMIT:用于提交当前事务,使所做的更改永久生效。
ROLLBACK:用于撤销当前事务,恢复到事务开始前的状态。
SAVEPOINT:用于在事务中设置保存点,以便在之后的某个时刻可以回滚到该点。
5. 其他常用语句DECLARE:用于声明变量或常量,并为其分配数据类型和初始值。
BEGIN ... END:用于定义PL/SQL代码块的开始和结束。
IF ... THEN ... ELSE:用于条件判断,根据条件执行不同的操作。
ORACLE常用SQL语句大全
ORACLE常用SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表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 tablename6、说明:增加一个列,删除一个列A:alter table tabname add column col typeB: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注:索引是不可更改的,想更改必须删除重新建。
oracle经典sql语句
Oracle数据库中的经典SQL语句涵盖了许多方面,包括数据查询、数据插入、数据删除、数据修改等。
以下是一些常见的经典SQL语句示例:1. 查询数据(SELECT)•基本查询:•sql复制代码SELECT column1, column2, ...FROM table_nameWHERE condition;•排序:•sql复制代码SELECT column1, column2, ...FROM table_nameORDER BY column1 ASC|DESC;•分组与聚合:•sql复制代码SELECT column1, COUNT(column2)FROM table_nameGROUP BY column1;2. 插入数据(INSERT INTO)•插入完整的行:•sql复制代码INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);•插入从另一个表中选择的数据:•sql复制代码INSERT INTO table1 (column1, column2, column3, ...)SELECT column1, column2, column3, ...FROM table2WHERE condition;3. 更新数据(UPDATE)•更新表中的数据:•sql复制代码UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;4. 删除数据(DELETE)•删除表中的数据:•sql复制代码DELETE FROM table_nameWHERE condition;5. 创建表(CREATE TABLE)•创建一个新表:•sql复制代码CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,...);6. 创建索引(CREATE INDEX)•在表上创建一个索引:•sql复制代码CREATE INDEX index_nameON table_name (column1, column2, ...);7. 删除表(DROP TABLE)•删除一个表:•sql复制代码DROP TABLE table_name;8. 添加主键(ALTER TABLE ADD PRIMARY KEY)•在表上添加一个主键:•sql复制代码ALTER TABLE table_nameADD PRIMARY KEY (column1, column2, ...);9. 删除主键(ALTER TABLE DROP PRIMARY KEY)•从表中删除一个主键:•sql复制代码ALTER TABLE table_nameDROP PRIMARY KEY;10. 创建视图(CREATE VIEW)•创建一个视图:•sql复制代码CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE condition;这些只是SQL在Oracle数据库中的一些基本和常见用法示例。
oracle经典SQL查询语句
Oracle查询语句select*from scott.emp ;1.--dense_rank()分析函数(查找每个部门工资最高前三名员工信息)select*from(select deptno,ename,sal,dense_rank()over(partition by deptno order by sal desc)a from scott.emp) where a<=3order by deptno asc,sal desc;结果:--rank()分析函数(运行结果与上语句相同)select*from(select deptno,ename,sal,rank()over(partition by deptno order by sal desc) a from scott.emp )where a<=3order by deptno asc,sal desc;结果:--row_number()分析函数(运行结果与上相同)select*from(select deptno,ename,sal,row_number()over(partition by deptno order by sal desc)a from scott.emp) where a<=3order by deptno asc,sal desc;--rows unbounded preceding 分析函数(显示各部门的积累工资总和)select deptno,sal,sum(sal)over(order by deptno asc rows unbounded preceding)积累工资总和from scott.emp ;结果:--rows 整数值 preceding(显示每最后4条记录的汇总值)select deptno,sal,sum(sal)over(order by deptno rows3 preceding)每4汇总值from scott.emp ;结果:--rows between 1 preceding and 1 following(统计3条记录的汇总值【当前记录居中】)select deptno,ename,sal,sum(sal)over(order by deptno rows between1preceding and1following)汇总值from scott.emp ; 结果:--ratio_to_report(显示员工工资及占该部门总工资的比例) select deptno,sal,ratio_to_report(sal)over(partition by deptno)比例from scott.emp ;结果:--查看所有用户select*from dba_users ;select count(*)from dba_users ;select*from all_users ;select*from user_users ;select*from dba_roles ;--查看用户系统权限select*from dba_sys_privs ;select*from user_users ;--查看用户对象或角色权限select*from dba_tab_privs ;select*from all_tab_privs ;select*from user_tab_privs ;--查看用户或角色所拥有的角色select*from dba_role_privs ;select*from user_role_privs ;-- rownum:查询10至12信息select*from scott.emp a where rownum<=3and a.empno not in(select b.empno from scott.emp b where rownum<=9);结果:--not exists;查询emp表在dept表中没有的数据select*from scott.emp a where not exists(select*from scott.dept b where a.empno=b.deptno);结果:--rowid;查询重复数据信息select*from scott.emp a where a.rowid>(select min(x.rowid) from scott.emp x where x.empno=a.empno);--根据rowid来分页(一万条数据,查询10000至9980时间大概在0.03秒左右)select*from scott.emp where rowid in(select rid from(select rownum rn,rid from(select rowid rid,empno from scott.emp order by empno desc)where rownum<10)where rn>=1)order by empno desc;结果:--根据分析函数分页(一万条数据,查询10000至9980时间大概在1.01秒左右)select*from(select a.*,row_number()over(order by empno desc) rk from scott.emp a )where rk<10and rk>=1;结果:--rownum分页(一万条数据,查询10000至9980时间大概在0.01秒左右)select*from(select t.*,rownum rn from(select*from scott.emp order by empno desc)t where rownum<10)where rn>=1;select*from(select a.*,rownum rn from(select*from scott.emp) a where rownum<=10)where rn>=5;--left outer join:左连接select a.*,b.*from scott.emp a left outer join scott.dept b on a.deptno=b.deptno ;--right outer join:右连接select a.*,b.*from scott.emp a right outer join scott.dept b on a.deptno=b.deptno ;--inner joinselect a.*,b.*from scott.emp a inner join scott.dept b on a.deptno=b.deptno ;--full joinselect a.*,b.*from scott.emp a full join scott.dept b on a.deptno=b.deptno ;select a.*,b.*from scott.emp a,scott.dept b wherea.deptno(+)=b.deptno ;select distinct ename,sal from scott.emp a group by sal having;select*from scott.dept ;select*from scott.emp ;--case when then end (交叉报表)select ename,sal,case deptno when10then'会计部'when20 then'研究部'when30then'销售部'else'其他部门'end部门from scott.emp ;结果:select ename,sal,case when sal>0and sal<1500then'一级工资'when sal>=1500and sal<3000then'二级工资'whensal>=3000and sal<4500then'三级工资'else'四级工资'end 工资等级from scott.emp order by sal desc;结果:--交叉报表是使用分组函数与case结构一起实现select姓名,sum(case课程when'数学'then分数end)数学,sum(case课程when'历史'then分数end)历史from学生group by姓名;--decode 函数select姓名,sum(decode(课程,'数学',分数,null))数学,sum(decode(课程,'语文',分数,null))语文,sum(decode(课程,'历史','分数',null))历史from学生group by姓名;--level。
oracle经典sql语句
1、oracle将多行变成一行select d.datagetsource_id,wmsys.wm_concat(d.catagory_id)from datagetsource2catagory d group by d.datagetsource_id 2、oracle将表数据导入导出C:\Documents and Settings\Administrator>exp irdp/irdpfile=e:/数据库备份/irdp_bak_200911020927_forUpdate.dmp full-y 导出数据库的语句,最后的是full-y,不是full=y,如果用后面也可以导出,但它会把库中的所有用户都导出来。
3、oracle将树形sql语句最后加上根节点idCONNECT_BY_ROOTselect munity_id,c2c.parent_community_id,level,CONNECT_BY_ROOT community_id rootfrom community2community c2cstart with munity_id in(select community_idfrom community cywhere withdrawn = 'N')connect by prior munity_id = c2c.parent_community_id 4、查询数据库所有包含item_id字段的表的名称select t.TABLE_NAME from user_tab_columns t wheret.COLUMN_NAME like'%ITEM_ID%'group by t.TABLE_NAME;5、查询数据库回收站中被删除的表select * from recyclebin where original_name ='WEBPUBLISHAPPLY';6、闪回数据库某张表alter table WEBPUBLISHAPPLY enable row movement;flashback table WEBPUBLISHAPPLY to timestampto_timestamp('2010-08-03 00:00:00','yyyy-mm-ddhh24:mi:ss');alter table WEBPUBLISHAPPLY disable row movement;7、oracle-9i将一行记录中部分数据复制到另一行记录中update addressbook aset(a.a_sex,a.a_brithday,a.a_brithplace,a.a_address,a.a_phone)=(selectd.a_sex,d.a_brithday,d.a_brithplace,d.a_address,d.a_phone from addressbook dwhere d.a_id = '5')where a.a_id = '3';8、将表中a字段记录为1的行中的b字段全部改为2update addressbook dset d.a_brithplace = (select r.a_brithplace fromaddressbook r where r.a_id = '9')where d.a_address = (select c.a_address from addressbook c where c.a_id = '5')9、删除表且删除表所占的空间,且不能回退truncate table books10、oracle事务1)savepoint a 保存事务点2)rollback to a 回退到事务点a,且取消a之后的操作3)rollback取消全部操作4)只读事务set transaction read only;--1(会话1)update emp set sal = 3000where ename = 'smith';--2(会话2) select sal from emp where ename = 'smith';--3(会话1)当在1处设置了只读事务后,紧接着2处在3之前修改了该数据,但是在3处查看的数据还是1处这个时间点的数据,也就是修改前的数据提示:在read only事务中,是不允许进行增删改操作的5)顺序事务set transaction isolation level serializable;--1(会话1) update emp set sal = 3000where ename = 'smith';--2(会话2) select sal from emp where ename = 'smith';--3(会话1)在3处的查询语句只会查询到2处修改前的数据11、分组函数select i.item_type_id,i.submitter_id,count(1) from item i where i.item_type_id = 'ebook'or i.item_type_id = 'rwsk' group by rollup (i.item_type_id,i.submitter_id);select i.item_type_id,i.submitter_id,count(1) from item i where i.item_type_id = 'ebook'or i.item_type_id = 'rwsk' group by cube (i.item_type_id,i.submitter_id);12、同时利用两个或者多个分组函数select r.type,r.metaapplication_id,count(1) from resourceshowtype rgroup by grouping sets(r.type,r.metaapplication_id);13、自动执行内连接select c2i.collection_id,item_id,i.item_type_id fromcollection2item c2inatural join item i14、函数1)返回字符的ASCII码select ascii('a') from dual;2)将ASCII码转换为字符select chr(65) from dual;3)链接两个字符select concat('ab','cd') from dual;4)单词首字母大写select initcap('hello world') from dual;5)查看字符串a在字符串b中的位置instr(b,a,n,m),n为起始位置,初始为1,m为出现次数,初始为1select instr('hello world','l','1') from dual;6)返回字符串的长度select length('hello world') from dual;7)将条目id左边填充0直到字符长度达到10位select i.item_id,lpad(i.item_id,10,'0') from item i;select i.item_id,rpad(i.item_id,10,'0') from item i;8)将字符串中左边连续出现的'浙江大学'的任意组合去掉select ,ltrim(,'浙江大学') from community c;9)将字符串变为首字母大写或者全小写或者全部大写select nls_initcap(n'hello world') from dual;select nls_lower(n'SQL Server') from dual;select nls_upper(n'SQL Server') from dual;10)字符串替换select replace('浙江大学出版社','浙江','湖北') from dual;11)截取子字符串select substr('浙江大学出版社',1,4) from dual;15、时间1)在系统时间往后推100个月select add_months(sysdate,100),sysdate from dual;select add_months(sysdate,-100),sysdate from dual;select add_months(sysdate,-1000000000000),sysdate from dual;2)返回当前时区对应日期格式的时间select current_date from dual;3)返回当前日期格式的时间select current_timestamp from dual;4)从当前时间中抽取年月日,不能抽取时分秒select extract(year from sysdate) from dual;select extract(month from sysdate) from dual;select extract(day from sysdate) from dual;16、使用标量变量接收查询数据declarev_comtype_name %type;beginselect name into v_comtype_namefrom communitytypewhere community_type_id=&comtype_id;dbms_output.put_line('资源库名称:'||v_comtype_name); end;17、使用记录变量接受数据--oracle自定义类型种类:--1、子类型--subtype cc_num is number(16,2);--2、记录类型--type emp_record_type is record--(--ename varchar2(10),--job varchar2(9)--);--emp_record emp_record_type;--3、rowtype类型变量--emp_record emp%rowtype;declaretype emp_record_type is record(id munity_type_id%type,name %type);emp_record emp_record_type;beginselect munity_type_id,into emp_recordfrom communitytype ctwhere munity_type_id = 'ebook';dbms_output.put_line('资源库ID:'||emp_record.id); dbms_output.put_line('资源库名称:'||emp_); end;18、操纵数据declarev_community_type_namecommunitytype.english_name%type:='&englishname'; beginupdate communitytype tset t.english_name = v_community_type_namewhere munity_type_id = 'AcademicRes'; commit;end;19、数据库游标1)sql%isopen游标是否已经打开2)sql%found sql语句是否已经执行成功beginsavepoint a1;update communitytype tset t.english_name = '333'where munity_type_id = 'AcademicRes';if sql%foundthencommit;dbms_output.put_line('成功');elserollback to a1;dbms_output.put_line('失败');end if;end;3)sql%notfound4)sql%rowcount返回sql影响的行数。
oracle常用sql语句
empty_blocks, avg_space, chain_cnt, avg_row_len, sample_size,
last_analyzed
FROM dba_tab_partitions
v$rollname where v$(+) = sys.dba_rollback_segs.segment_name and
v$n (+) = v$n order by rownum
15、耗资源的进程(top session)
8、查看数据库的版本
Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
9、查看数据库的创建日期和归档方式
Select Created, Log_Mode, Log_Mode From V$Database;
16、查看锁(lock)情况
select /*+ RULE */ ls.osuser os_user_name, ername user_name,
decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX',
SELECT partition_name, high_value, high_value_length, tablespace_name,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1. dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表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 only5、说明:删除新表drop table tabname6、说明:增加一个列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 viewname10、说明:几个简单的基本的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 table111、说明:几个高级查询运算词A:UNION 运算符UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。
当 ALL 随 UNION 一起使用时(即 UNION AL L),不消除重复行。
两种情况下,派生表的每一行不是来自 TABLE1 就是来自TABLE2。
B: EXCEPT 运算符EXCEPT运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。
当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符INTERSECT运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。
当ALL随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接A、left (outer) join:左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.cB:right (outer) join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Group by:一张表,一旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据在selecte统计函数中的字段,不能和普通的字段放在一起;13、对数据库进行操作:分离数据库: sp_detach_db;附加数据库:sp_attach_db 后接表明,附加需要完整的路径名14.如何修改数据库的名称:sp_renamedb 'old_name', 'new_name'二、提升1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1(仅用于SQlServer)法二:select top 0 * into b from a2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)insert into b(a, b, c) select d,e,f from b;3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..4、说明:子查询(表名1:a 表名2:b)select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)5、说明:显示文章、提交人和最后回复时间select a.title,ername,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b6、说明:外连接查询(表名1:a 表名2:b)select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b. c7、说明:在线视图查询(表名1:a )select * from (SELECT a,b,c FROM a) T where t.a > 1;8、说明:between的用法,between限制查询数据范围时包括了边界值,not bet ween不包括select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between 数值1 and 数值29、说明:in 的使用方法select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)10、说明:两张关联表,删除主表中已经在副表中没有的信息delete from table1 where not exists ( select * from table2 where tabl e1.field1=table2.field1 )11、说明:四表联查问题:select * from a left inner join b on a.a=b.b right inner join c on a. a=c.c inner join d on a.a=d.d where .....12、说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f开始时间,getdat e())>513、说明:一条sql 语句搞定数据库分页select top 10 b.* from (select top 20 主键字段,排序字段from 表名order by 排序字段desc) a,表名 b where b.主键字段= a.主键字段order by a.排序字段具体实现:关于数据库分页:declare @start int,@end int@sql nvarchar(600)set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’exec sp_executesql @sql注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。
Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。
因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)14、说明:前10条记录select top 10 * form table1 where 范围15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)16、说明:包括所有在TableA中但不在TableB和TableC中的行并消除所有重复行而派生出一个结果表(select a from tableA ) except (select a from tableB) except (select a from tableC)17、说明:随机取出10条数据select top 10 * from tablename order by newid()18、说明:随机选择记录select newid()19、说明:删除重复记录1),delete from tablename where id not in (select max(id) from tablena me group by col1,col2,...)2),select distinct * into temp from tablenamedelete from tablenameinsert into tablename select * from temp评价:这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段alter table tablename--添加一个自增列add column_b int identity(1,1)delete from tablename where column_b not in(select max(column_b) from tablename group by column1,column2,...) alter table tablename drop column column_b20、说明:列出数据库里所有的表名select name from sysobjects where type='U' // U代表用户21、说明:列出表里的所有的列名select name from syscolumns where id=object_id('TableName')22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。