数据定义语言
?数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象?用于操纵表结构的数据定义语言命令有:
?CREATE TABLE
?ALTER TABLE
?TRUNCATE TABLE
?DROP TABLE
数据操纵语言
?数据操纵语言用于检索、插入和修改数据
?数据操纵语言是最常见的SQL命令
?数据操纵语言命令包括:
?SELECT
?INSERT
?UPDA TE
?DELETE
DML –SELECT 命令
?利用现有的表创建表
?语法:
CREATE TABLE
SELECT column_names FROM
SQL> CREATE TABLE newstudent
AS SELECT * FROM student;
SQL> CREATE TABLE newstudent1
AS SELECT sno, sname
FROM student;
SQL> CREATE TABLE newstudent2
AS SELECT * FROM student
WHERE 1 = 2;
?选择无重复的行
?在SELECT子句,使用DISTINCT关键字
SQL> SELECT DISTINCT sname FROM student;
?使用列别名
?为列表达式提供不同的名称
?该别名指定了列标题
SQL> SELECT sno 学号,
2010-extract(year from birthday) “年龄”----中间有空格,用“”
FROM student;
DML –INSERT 命令
?插入日期类型的值
?日期数据类型的默认格式为“DD-MON-RR”
?使用日期的默认格式
?使用TO_DATE函数转换
?插入来自其它表中的记录
?语法:
INSERT INTO
SELECT column_names FROM
SQL> INSERT INTO student2
SELECT * FROM student;
数据控制语言
?数据控制语言为用户提供权限控制命令
?用于权限控制的命令有:
?GRANT 授予权限
?REVOKE 撤销已授予的权限
算术操作符
?算术操作符用于执行数值计算
?可以在SQL语句中使用算术表达式,算术表达式由数值数据类型的列名、数值常量和连接它们的算术操作符组成
?算术操作符包括加(+)、减(-)、乘(*)、除(/)
?比较操作符用于比较两个表达式的值
?比较操作符包括=、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和IS NULL 等,LIKE可以使用匹配符_、%
逻辑操作符
?逻辑操作符用于组合多个计较运算的结果以生成一个或真或假的结果。
?逻辑操作符包括与(AND)、或(OR)和非(NOT)
显示2005-5月-10 至2005-5月-26的订单信息
SQL> SELECT * FROM order_master
WHERE odate > ‘10-5月-05'
AND del_date < ‘26-5月-05’;
?连接操作符用于将多个字符串或数据值合并成一个字符串
通过使用连接操作符可以将表中
的多个列合并成逻辑上的一行列
SQL> SELECT (venname|| ' 的地址是'
||venadd1||' '||venadd2 ||' '||venadd3) address
FROM vendor_master WHERE vencode='V001
SQL 操作符的优先级从高到低的顺序是:
?算术操作符--------最高优先级
?连接操作符
?比较操作符
?NOT 逻辑操作符
? AND 逻辑操作符
? OR 逻辑操作符 --------最低优先级
? 单行函数对于从表中查询的每一行只返回一个值
? 可以出现在 SELECT 子句中和 WHERE 子句中
? 单行函数可以大致划分为:
? 字符函数
? 日期时间函数
? 数字函数
? 转换函数
? 混合函数
? 以下是一些其它的字符函数:
? CHR 和ASCII
? LPAD 和RPAD
? TRIM
? LENGTH
? DECODE(在2.2视频中讲解)
SQL> SELECT LENGTH('frances') FROM dual;
SQL> SELECT TRIM(9 from 9999876789999) FROM dual;
日期时间函数
? 日期函数对日期值进行运算,并生成日期数据类型或数值类型的结果
? 日期函数包括:
? ADD_MONTHS
? MONTHS_BETWEEN
? LAST_DAY
? ROUND
? NEXT_DAY
? TRUNC
? EXTRACT
转换函数
?转换函数将值从一种数据类型转换为另一种数据类型
?常用的转换函数有:
?TO_CHAR
?TO_DA TE
?TO_NUMBER
SELECT TO_DATE(‘2005-12-06’ , ‘yyyy-mm-dd’)
FROM dual;
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
SELECT TO_NUMBER('100') FROM dual;
混合函数
?以下是几个用来转换空值的函数:
?NVL,第一为空返回二;否则返回一。
?NVL2,第一个不空则返回二;否则返回三。
?NULLIF,两个表达式,相等则返回空;否则第一个。
分组函数
?分组函数基于一组行来返回结果
?为每一组行返回一个值
SELECT COUNT(DISTINCT qty_hand) FROM itemfile;
SELECT COUNT(*) FROM itemfile
SELECT A VG(re_level) FROM itemfile
WHERE p_category='accessories';
SELECT COUNT(itemrate) FROM itemfile;
SELECT MAX(max_level) FROM itemfile;
SELECT SUM(itemrate*max_level) FROM itemfile;
?GROUP BY子句
?用于将信息划分为更小的组
?每一组行返回针对该组的单个结果
?HA VING子句
?用于指定GROUP BY 子句检索行的条件
思考:
查出平均成绩大于所有学生的平均成绩的学生的学号和平均成绩
查出平均成绩大于60 的学生的学号和平均成绩,并按照学号的降序排列SQL> select sno, max(score) as 最高分, sum(score) as 总分from 成绩group by sno;
Oracle 的多表查询
? 等值连接
? 外连接
? 自连接
? 子查询
相等连接(第一种写法):
select table1.column,table2.column
from table1, table2
where table1.column1=table2.column2
可以使用表的别名,为了书写的简化。
相等连接(第二种写法):
select table1.column,table2.column
from table1 inner join table2
on table1.column1=table2.column2
可以使用表的别名,为了书写的简化。
左外连接(第一种写法):
select table1.column,table2.column
from table1 left outer join table2
on table1.column1=table2.column2
可以使用表的别名,为了书写的简化。
左外连接(第二种写法):
select table1.column,table2.column
from table1, table2
where table1.column1=table2.column2(+)
可以使用表的别名,为了书写的简化。
集合操作符
? 集合操作符将两个查询的结果组合成一个结果
MINUS 操作符返回从第一个查询结果中排除第二个查
询中出现的行。
SQL> SELECT orderno FROM order_master
MINUS
SELECT orderno FROM order_detail;
INTERSECT 操作符只返回两个查询的公共行。
SQL> SELECT orderno FROM order_master
INTERSECT
SELECT orderno FROM order_detail
重命名表:rename table_name1 to table_name2;
重命名列:alter table table_name rename column col_oldname to colnewname ;
常见的select、from、where的顺序:
1, from 2, where 3, select
完整的select、from、where、group by、having、order by的顺序:
1, from 2, where 3, group by 4,having 5, select 6, order by
EXISTS用来判断查询所得的结果中,是否有
满足条件的纪录存在。
例:select *from student
where exists(select * from address
where zz='郑州');
从select 、from、where三者的先后执行顺
序来分析。
子查询的使用
create table student(sno number(6) ,birthday date, sname varchar2(10));
insert into student values(1, '11-1月-81' , '张三');
insert into student values(2, '10-3月-82' , '李四');
insert into student values(3, '06-1月-83' , '王五');
insert into student values(4, '26-1月-83' , '赵六');
create table address(sno number(6) , zz varchar2(10));
insert into address values(1, '郑州');
insert into address values(2, '开封');
insert into address values(3, '洛阳');
insert into address values(4, '郑州');
要求:找出zz是郑州的学生中,sno最大的学生的sname
select sname
from student
where sno =(
select max(sno)
from address
where zz= '郑州' );
1.创建student表
create table student(xh number,xm varchar2(10),nl int);
insert into student values (1,'A',21);
insert into student values (2,'B',22);
insert into student values (3,'A',23);
insert into student values (4,'A',24);
insert into student values (5,'A',25);
insert into student values (6,'C',26);
insert into student values (7,'B',27);
任务:查找xm有相同的纪录,并显示出来,如下:
XH XM NL
---------- ---------- ----------
1 A 21
3 A 23
4 A 24
5 A 25
2 B 22
7 B 27
答案:select * from student where xm in (select xm from student group by xm having count(*)>1);
CREATE TABLE 管理人员(
编号char(10) ,
姓名varchar2(10) ,
管理人员编号char(10)
);
insert into 管理人员values('001', '张一', '004');
insert into 管理人员values('002', '张二', '004');
insert into 管理人员values('003', '张三', '003');
insert into 管理人员values('004', '张四', '004');
要求:现在想显示:编号,姓名,管理人员姓名
select a.编号,a.姓名,b.姓名as 管理人员姓名
from 管理人员a join 管理人员b on a.管理人员编号=b.编号;
SELECT CASE WHEN的的使用
语法:
CASE
WHEN 条件1 THEN action1
WHEN 条件2 THEN action2
WHEN 条件3 THEN action3
…..
ELSE actionN
END CASE
select case
when substr('20090310',5,2) = '01' then '一月份'
when substr('20090310',5,2) = '02' then '二月份'
when substr('20090310',5,2) = '03' then '三月份'
when substr('20090310',5,2) = '04' then '四月份'
else null
end
from dual;
语法:
CASE selector
WHEN value1 THEN action1
WHEN value2 THEN action2
WHEN value3 THEN action3
…..
ELSE actionN
END [CASE]
select case substr('20090310',5,2)
when '01' then '一月份'
when '02' then '二月份'
when '03' then '三月份'
when '04' then '四月份'
else null
end
from dual;
create table 成绩(sno number, km varchar2(10), score number,grade char(6)); insert into 成绩values(1, '语文', 65,null);
insert into 成绩values(2, '数学', 76,null);
insert into 成绩values(3, '英语', 86,null);
insert into 成绩values(4, '语文', 94,null);
要求:把每个学生的grade列,用相应的等级来更新。
update 成绩set grade = (
select grade from (
select sno ,
case when score >= 90 then '优秀'
when score >= 80 then '良好'
when score >= 70 then '中等'
when score >= 60 then '及格'
else '不及格'
end grade
from 成绩
) a
where 成绩.sno = a.sno );
表T1里有a,b,c...N个字段,表T2里有a,b,c三个字段,
然后想在T1中"c"与表T2中"c"相同的情况下从表T2中将a,b覆盖表T1中的a,b怎么做?
create table T1(a int ,b int ,c int ,d int ,e int);
create table T2(a int ,b int ,c int );
insert into T1 values(1,2,3,4,5);
insert into T1 values(10,20,3,4,5);
insert into T1 values(10,20,4, 40,50);
insert into T2 values( -1, -1 , 3);
insert into T2 values( -2, -2, 4);
update t1 set a= (select a from t2 where t1.c= t2.c ) , b =(select b from t2 where t1.c= t2.c) where t1.c in (select c from t2);
分析函数
分析函数用于计算完成聚集的累计排名、序号等
分析函数为每组记录返回多个行
以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始
ROW_NUMBER 返回连续的排序,不论值是否相等
RANK 具有相等值的行排序相同,序数随后跳跃
DENSE_RANK 具有相等值的行排序相同,序号是连续的
DECODE 中的if-then-else逻辑
?在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:
?DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
?Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
?需要注意的是,这里的if、then及else 都可以是函数或计算表达式。
Create table student(id number,name varchar2(10),sex char(1));
Insert into student values(1, '张', '1');
Insert into student values(2, '王', '2');
Insert into student values(3, '李', '1');
Select name ,decode(sex, '1','男生', '2','女生')
from student;
用case实现:
select id,name,
case sex
when '1' then '男'
when '2' then '女'
end 性别
from student;
DECODE 取出一行内两列中的较大值
Create table sales(month char(2),sales_tv number,sales_computer number);
Insert into sales values('01', 10, 18);
Insert into sales values('02', 28, 20);
Insert into sales values('03', 36, 33);
select month, decode(sign(sales_tv -sales_computer), 1, sales_tv, sales_computer) as 较大销售量from sales;
Oracle中的行列转换
create table 销售(商品名称varchar2(10), 季度char(2), 销售额number);
insert into 销售values('电视机', '01', 100);
insert into 销售values('电视机', '02', 200);
insert into 销售values('电视机', '03', 300);
insert into 销售values('空调', '01', 50);
insert into 销售values('空调', '02', 150);
insert into 销售values('空调', '03', 180);
格式1:
商品名称季度销售额
---------- ---- ----------
电视机01 100
电视机02 200
电视机03 300
空调01 50
空调02 150
空调03 180
格式2:
商品名称一季度二季度三季度四季度
---------- ---------- ---------- ---------- ----------
电视机100 200 300 0 空调50 150 180 0
从格式1到格式2:
select a.商品名称,
sum(decode(a.季度,'01', a.销售额,0 )) 一季度,
sum(decode(a.季度,'02', a.销售额,0 )) 二季度,
sum(decode(a.季度,'03', a.销售额,0 )) 三季度,
sum(decode(a.季度,'04', a.销售额,0 )) 四季度
from 销售a
group by a.商品名称
order by 1;
ROWNUM 的使用
创建yggz表
create table yggz (
bh number(6) ,
gz number
);
insert into yggz values(1,1000);
insert into yggz values(2,1100);
insert into yggz values(3,900);
insert into yggz values(4,2000);
insert into yggz values(5,1500);
insert into yggz values(6,3000);
insert into yggz values(7,1400);
insert into yggz values(8,1200);
作用:对查询结果,输出前若干条记录
注意:只能与<、<=、between and连用。
任务:(1)查找表中,第3条到第5条记录,并显示出来。
结果如下:
BH GZ
---------- ----------
3 900
4 2000
5 1500
任务(1)答案:
select bh,gz
from (
select yggz.*, rownum rn
from yggz
)
where rn >=3 and rn <= 5;
或者:
select * from yggz where rownum<=5
minus
select * from yggz where rownum<=2;
任务:(2)按工资由高到底,查找表中,第3高的到第5高的记录,并显示出来。
结果如下:
BH GZ
---------- ----------
5 1500
7 1400
8 1200
任务(2)答案:
select bh,gz from (
select a.*,rownum rn from(
select yggz.* from yggz order by gz desc ) a
)
where rn<=5 and rn>2;
或者:
select * from (select * from yggz
order by gz desc) where rownum<=5
minus
select * from (select * from yggz
order by gz desc) where rownum<=2;
删除重复记录
create table student(sno number(6) , sname varchar2(10), sage int );
insert into student values(1, 'AA', 21);
insert into student values(2, 'BB', 22);
insert into student values(3, 'CC', 23);
insert into student values(3, 'CC', 34);
insert into student values(3, 'CC', 35);
insert into student values(3, 'CC', 36);
DELETE FROM student
WHERE sno IN
(SELECT sno FROM student GROUP BY sno HAVING COUNT(*) > 1)
AND ROWID NOT IN
(SELECT MIN(ROWID) FROM student GROUP BY sno HA VING COUNT(*) > 1);
DELETE FROM student WHERE ROWID IN
(SELECT A.ROWID FROM student A,student B
WHERE A.sno=B.sno AND A.ROWID > B.ROWID);
DELETE FROM student d WHERE d.rowid >
(SELECT MIN(x.rowid) FROM student x WHERE d.sno=x.sno);
GROUP BY GROUPING SETS 的使用
可以用GROUP BY GROUPING SETS来进行分组
自定义汇总,可以应用它来指定你需要的总数组
合。
其格式为:
GROUP BY GROUPING SETS ((list), (list) ... )
这里(list)是圆括号中的一个列序列,这个组合生
成一个总数。要增加一个总和,必须增加一个(NUlL)
分组集。
例如:对于scott.emp表,如果要查询:各部门sal大于2000的员工,进行汇总,得到各部门的sal总和、以及总共的sal总和。
SELECT CASE
WHEN a.deptno IS NULL THEN
'合计'
WHEN a.deptno IS NOT NULL AND a.empno IS NULL THEN
'小计'
ELSE
'' || a.deptno
END deptno,
a.empno, a.ename,
SUM(a.sal) total_sal
FROM scott.emp a WHERE a.sal > 2000 GROUP BY GROUPING SETS((a.deptno),(a.deptno, a.empno, a.ename),());
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中常用函数大全 1、数值型常用函数 函数返回值样例显示 ceil(n) 大于或等于数值n的最小整数select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数select ceil(10.6) from dual; 10 mod(m,n) m除以n的余数,若n=0,则返回m select mod(7,5) from dual; 2 power(m,n) m的n次方select power(3,2) from dual; 9 round(n,m) 将n四舍五入,保留小数点后m位select round(1234.5678,2) from dual; 1234.57 sign(n) 若n=0,则返回0,否则,n>0,则返回1,n<0,则返回-1 select sign(12) from dual; 1 sqrt(n) n的平方根select sqrt(25) from dual ; 5 2、常用字符函数 initcap(char) 把每个字符串的第一个字符换成大写select initicap('mr.ecop') from dual; Mr.Ecop lower(char) 整个字符串换成小写select lower('MR.ecop') from dual; mr.ecop replace(char,str1,str2) 字符串中所有str1换成str2 select replace('Scott','s','Boy') from dual; Boycott substr(char,m,n) 取出从m字符开始的n个字符的子串select substr('ABCDEF',2,2) from dual; CD length(char) 求字符串的长度select length('ACD') from dual; 3 || 并置运算符select 'ABCD'||'EFGH' from dual; ABCDEFGH 3、日期型函数 sysdate当前日期和时间select sysdate from dual;
oracle 用户创建及权限设置 权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> conn / as sysdba; SQL>create user username identified by password SQL> grant dba to username; SQL> conn username/password SQL> select * from user_sys_privs; 我们将从创建 Oracle 用户权限表开始谈起,然后讲解登陆等一般性动作,使大家对 Oracle 用户权限表有个深入的了解。 一、创建 sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 二、登陆sqlplus / as sysdba;// 登陆sys帐户sqlplus sys as sysdba;// 同上 sqlplus scott/tiger;//登陆普通用户scott sqlplus sys as sysdba;//同上 sqlplus scott/tiger;//登陆普通用户scott 三、管理用户 create user zhangsan;//在管理员帐户下,创建用户zhangsan alter user scott identified by tiger;//修改密码
四,授予权限 1、默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限 /*管理员授权*/ grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限 grant unlimited session to zhangsan;//授予zhangsan用户使用表空间的权限 grant create table to zhangsan;//授予创建表的权限 grante drop table to zhangsan;//授予删除表的权限 grant insert table to zhangsan;//插入表的权限 grant update table to zhangsan;//修改表的权限 grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public) 2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权 /*oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的*/ grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限 grant drop on tablename to zhangsan;//授予删除表的权限 grant insert on tablename to zhangsan;//授予插入的权限 grant update on tablename to zhangsan;//授予修改表的权限 grant insert(id) on tablename to zhangsan; grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限 五、撤销权限 基本语法同grant,关键字为revoke 六、查看权限 select * from user_sys_privs;//查看当前用户所有权限 select * from user_tab_privs;//查看所用用户对表的权限 七、操作表的用户的表 /*需要在表名前加上用户名,如下*/ select * from zhangsan.tablename 八、权限传递 即用户A将权限授予B,B可以将操作的权限再授予C,命令如下: grant alert table on tablename to zhangsan with admin option;//关键字 with admin option grant alert table on tablename to zhangsan with grant option;//关键字 with grant option效果和admin类似 九、角色 角色即权限的集合,可以把一个角色授予给用户 create role myrole;//创建角色
--创建用户 create user han identified by han default tablespace users Temporary TABLESPACE Temp; grant connect,resource,dba to han; //授予用户han开发人员的权利 --------------------对表的操作-------------------------- 创建表格语法: create table 表名( 字段名1 字段类型(长度) 是否为空, 字段名2 字段类型是否为空 ); -增加主键 alter table 表名 add constraint 主键名 primary key (字段名1); -增加外键: alter table 表名 add constraint 外键名 foreign key (字段名1) references 关联表 (字段名2); 在建立表格时就指定主键和外键 create table T_STU ( STU_ID char(5) not null, STU_NAME varchar2(8) not null, constraint PK_T_STU primary key (STU_ID) ); 主键和外键一起建立: create table T_SCORE ( EXAM_SCORE number(5,2),
EXAM_DATE date, AUTOID number(10) not null, STU_ID char(5), SUB_ID char(3), constraint PK_T_SCORE primary key (AUTOID), constraint FK_T_SCORE_REFE foreign key (STU_ID) references T_STU (STU_ID) ) --创建表 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
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语句
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/de8692340.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
一、基础 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
日期/时间 相关查询 1、获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 1 SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month " 2 FROM DUAL; 2、获取当前月份的最后一天 这个查询语句类似于上面那个语句,而且充分照顾到了闰年,所以当二月份有 29 号,那么就会返回 29/2 。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 view source print? 1 SELECT TRUNC (LAST_DAY (SYSDATE)) "Last day of current mont h" 2 FROM DUAL; 3、获取当前年份的第一天 每年的第一天都是1 月1日,这个查询语句可以使用在存储过程中,需要对当前年份第一天做一些计算的时候。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 1 SELECT TRUNC (SYSDATE, 'YEAR') "Year First Day" FROM DUAL; 4、获取当前年份的最后一天 类似于上面的查询语句。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 view source print? 1 SELECT ADD_MONTHS (TRUNC (SYSDATE, 'YEAR'), 12) - 1 "Year Last Day" FROM DUAL 5、 获取当前月份的天数 这个语句非常有用,可以计算出当前月份的天数。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 view source print? 1 SELECT CAST (TO_CHAR (LAST_DAY (SYSDATE), 'dd') AS INT) num ber_of_days 2 FROM DUAL; 6、获取当前月份剩下的天数 下面的语句用来计算当前月份剩下的天数。你可以用任何的日期值替换 “SYSDATE”来指定查询的日期。 1 SELECT SYSDATE, 2 LAST_DAY (SYSDATE) "Last",
一、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子句中
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/de8692340.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数据库常用的Sql语句 今天想查询一下Oracle数据库下所有的表名或某个用户下的所有表,半天没想起来.还是在网上找到了答案. select table_name from all_tables;//所有的表明 select table_name from user_all_tables;//用户的所有的表 一下是转贴的sql语句的帖子. select * from user_objects; //查询所有的表 select * from dba_tables; //查询所有的表 select * from all_tables; //查询所有的表 select * from user_users //查出一个用户 select * from all_users //查询所有用户 select * from dba_users //查询所有用户 select name,dbid from v$database; //查询数据库名和它的ID select * from https://www.doczj.com/doc/de8692340.html,er_tab_columns; //查询表名,并显示列名 describe 表名//查询表结构 2: 查询数据库参数 show parameter db; 3:查询数据库的实例名 select instance_name from v$instance; 4: 数据库域名 数据库安装结束后,如果要知道正在运行额数据库是否有域名以及数据库域名名称可以用select value from v$parameter where name='db_domain' show parameter domain 5:数据库服务名 如果数据库有域名,则数据库服务名就是全局数据库名,如果该数据库没有定义域名,则数据库服务名与数据库名相同 show parameter service_name 6:显示当前用户 show user 7:直接登陆 sqlplus "/as sysdba" 8:当前ORACLE系统时间 select sysdate from dual; 9:查询数据库字典v$nls_parameter产看字符集相关参数 select * from v$nls_parameters; //************* oracle基本操作语句(适合初学者) oracle操作语句:
oracle数据库性能监控的SQL 1. 监控事例的等待 SQL> SELECT EVENT,SUM(DECODE(WAIT_TIME,0,0,1)) "PREV",SUM(DECODE(WAIT_TIME,0,1,0)) "CURR",COUNT(*) "TOT" FROM V$SESSION_WAIT GROUP BY EVENT ORDER BY 4; 2. 回滚段的争用情况 SQL> SELECT NAME, WAITS, GETS, WAITS/GETS "RATIO" FROM V$ROLLSTAT A, V$ROLLNAME B WHERE https://www.doczj.com/doc/de8692340.html,N = https://www.doczj.com/doc/de8692340.html,N; 3. 监控表空间的 I/O 比例 SQL> SELECT DF.TABLESPACE_NAME NAME,DF.FILE_NAME "FILE",F.PHYRDS PYR, F.PHYBLKRD PBR,F.PHYWRTS PYW, F.PHYBLKWRT PBW FROM V$FILESTAT F, DBA_DATA_FILES DF WHERE F.FILE# = DF.FILE_ID ORDER BY DF.TABLESPACE_NAME; 4. 监控文件系统的 I/O 比例 SQL> SELECT SUBSTR(A.FILE#,1,2) "#", SUBSTR(https://www.doczj.com/doc/de8692340.html,,1,30) "NAME", A.STATUS,A.BYTES, B.PHYRDS,B.PHYWRTS FROM V$DATAFILE A, V$FILESTAT B WHERE A.FILE# = B.FILE#; 5.在某个用户下找所有的索引 SQL> SELECT USER_INDEXES.TABLE_NAME, USER_INDEXES.INDEX_NAME,UNIQUENESS, COLUMN_NAME FROM USER_IND_COLUMNS, USER_INDEXES WHERE USER_IND_COLUMNS.INDEX_NAME = USER_INDEXES.INDEX_NAME AND USER_IND_COLUMNS.TABLE_NAME = USER_INDEXES.TABLE_NAME ORDER BY USER_INDEXES.TABLE_TYPE, USER_INDEXES.TABLE_NAME, USER_INDEXES.INDEX_NAME, COLUMN_POSITION; 6. 监控 SGA 的命中率 SQL> SELECT A.VALUE + B.VALUE "LOGICAL_READS", C.VALUE "PHYS_READS", ROUND(100 * ((A.VALUE+B.VALUE)-C.VALUE) / (A.VALUE+B.VALUE)) "BUFFER HIT RATIO" FROM V$SYSSTAT A, V$SYSSTAT B, V$SYSSTAT C WHERE A.STATISTIC# = 38 AND B.STATISTIC# = 39 AND C.STATISTIC# = 40; 7. 监控 SGA 中字典缓冲区的命中率 SQL> SELECT PARAMETER, GETS,GETMISSES , GETMISSES/(GETS+GETMISSES)*100 "MISS RATIO",(1-(SUM(GETMISSES)/ (SUM(GETS)+SUM(GETMISSES))))*100 "HIT RATIO" FROM V$ROWCACHE WHERE GETS+GETMISSES <>0 GROUP BY PARAMETER, GETS, GETMISSES; 8. 监控 SGA 中共享缓存区的命中率,应该小于1% SQL> SELECT SUM(PINS) "TOTAL PINS", SUM(RELOADS) "TOTAL RELOADS", SUM(RELOADS)/SUM(PINS) *100 LIBCACHE FROM V$LIBRARYCACHE; SQL> SELECT SUM(PINHITS-RELOADS)/SUM(PINS) "HIT RADIO",SUM(RELOADS)/SUM(PINS)
ORACLE基本定义、操作语句 一、表 1.创建表 CREATE TABLE TAB_NAME ( COL_01 V ARCHAR2(10) NOT NULL, COL_02 NUMBER(8,2), COL_03 DATE ); 2.添加主键约束 ALTER TABLE TAB_NAME ADD CONSTRAINT PK_COL_01 PRIMARY KEY(COL_01); 3.添加唯一性约束 ALTER TABLE TAB_NAME ADD CONSTRAINT UK_COL_02 UNIQUE(COL_02); 4.添加外键约束 ALTER TABLE TAB_NAME ADD CONSTRAINT FK_COL0_03 FOREIGN KEY(COL_03) REFERENCES TAB_2(COL_03); 5.添加check约束 ALTER TABLE TAB_NAME ADD CONSTRAINT CHK_COL_03 CHECK(COL_01 <> ‘ABC’); 6.创建索引 ――创建唯一索引 CREATE UNIQUE INDEX IDX_NAME ON TAB_NAME(COL_01); ――创建非唯一索引 CREATE INDEX IDX_NAME ON TAB_NAME(COL_01); 7.给表添加一个新列 ALTER TABLE TAB_NAME ADD COL_04 V ARCHAR2(10); 8.修改列的数据类型 ALTER TABLE TAB_NAME MODIFY COL_04 NUMBER(8); 9.删除一列 ALTER TABLE TAB_NAME DROP COLUMN COL_04; 10.更改表的名称 ALTER TABLE TAB_NAME RENAME TO TAB_NEW_NAME; 11.更改表的列名 ALTER TABLE TAB_NAME RENAME COLUMN COL_04 TO COL_05; 12.给表和列添加注释说明 --add comments to the table COMMENT ON TABLE TAB_NAME IS‘示例表’; --add comments to the column COMMENT ON COLUMN TAB_NAME.COL_01 IS‘列名’; 13.删除表 DROP TABLE TAB_NAME; 14.MERGE merge into tj_test1 tt1
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/de8692340.html,mandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) VALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) VALUES (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
1. select * from table_name where rownum>begin and rownum< end 2.sql = "select * from table" con.prepareCall("SELECT * FROM(SELECT A.*, rownum r FROM("+sql+") A WHERE rownum <= "+intPage*intPageSize+") B WHERE r > "+(intPage-1) *intPageSize); 今天想查询一下Oracle数据库下所有的表名或某个用户下的所有表,半天没想起来.还是在网上找到了答案. select table_name from all_tables;//所有的表明 select table_name from user_all_tables;//用户的所有的表 一下是转贴的sql语句的帖子. select * from user_objects; //查询所有的表 select * from dba_tables; //查询所有的表 select * from all_tables; //查询所有的表 select * from user_users //查出一个用户 select * from all_users //查询所有用户 select * from dba_users //查询所有用户 select name,dbid from v$database; //查询数据库名和它的ID select * from https://www.doczj.com/doc/de8692340.html,er_tab_columns; //查询表名,并显示列名 describe 表名//查询表结构 select * from https://www.doczj.com/doc/de8692340.html,er_tab_columns where table_name=表名//查询指定表名的字段 2: 查询数据库参数 show parameter db;