- 浏览: 16767 次
- 性别:
- 来自: 福州
最近访客 更多访客>>
最新评论
-
iceglove:
cancan7 写道那个如果没用到spring也报这个错呢那应 ...
Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache -
cancan7:
那个如果没用到spring也报这个错呢
Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache
ORACLE数据库结构查询语言SQL语言(一)
一、 概念介绍:
数据库DATABASE、表TABLE、列COLUMN、行ROW、关键字PRIMARY KEY、索引INDEX
二、 列的类型:字符CHAR和VARCHAR2、数值NUMBER、长整形LONG、双浮点FLOAT、超长大型数据LONG RAM(照片、图形、描述等不定长数据)、日期DATE(包含日期和时间)。
CHAR (5) 和 VARCHAR2(5)的区别是 CHAR不足5位后面自动加上空格,VARCHAR2不加。
三、 列的非空属性NOT NULL:
如果一个列具有非空属性,则在给该表增加、修改数据时必须保证该列有内容,否则会出错。
如果一个列允许为空,该列可以不放任何内容,即空值(在SQL中书写为NULL),空值不是空格,如果一个列内容为空值,则该列不等于任何值(包括空值)。例如:列SAGE1、SAGE2的内容为空,列SAGE3内容为20,则下面的逻辑表达式全部为NULL:SAGE1=SAGE2、SAGE1& lt;>SAGE2、SAGE1=SAGE3、SAGE3>SAGE1。下面的逻辑表达式全部为真:SAGE1 IS NULL、SAGE3 IS NOT NULL。
四、 特殊约定:
1. 所有SQL语句以分号结束不是以回车换行结束。
2. 中扩号代表选项,就是其中的内容可有可无。
3. 下面讲的列名在很多情况下也可以是表达式。
4. 表名格式:[用户名.]表名,例如:user001.student,如果不注名用户,则说明是当前用户的表。
五、 建表或视图语句CREATE
格式:CREATE TABLE 表名 (列名 类型 长度 [NOT NULL],
列名 类型 长度 [NOT NULL],
列名 类型 长度 [NOT NULL],
列名 类型 长度 [NOT NULL],
列名 类型 长度 [NOT NULL]);
CREATE VIEW 视图名 AS SELECT ……;
CREATE TABLE 表名 AS SELECT ……;
假设目前有三张表
Student(sno,sname,ssex,sage,sdept) 学生表
Sno:学号
Sname:姓名
Ssex:性别
Sage:年龄
Sdept:所在系
Course(cno,cname,cpno,ccredit) 课程表
Cno:课程号
Cname:课程名
Cpno:先行课
Ccredit:学分
Sc(sno,cno,grade) 学生选课表
Sno:学号
Cno:课程号
Grade:分数
六、 简单SELECT语句:
格式:SELECT [表名.]列名 [列别名],[表名.]列名 [列别名],……
FROM表名 [表别名],表名 [表别名],表名 [表别名], ……;
SELECT * FROM 表名 [表别名],表名 [表别名],表名 [表别名];
//*代表所有列
例如:SELECT SNO,SNAME,SAGE FROM STUDENT;
SELECT * FROM SYSTEM.STUDENT;
七、 有条件的SELECT语句:
常用的运算:=、<>、>=、<=、AND、OR、NOT、LIKE、IN。
格式:SELECT列名 [列别名],列名 [列别名],…… 列名 [列别名]
FROM表名 [表别名],表名 [表别名],表名 [表别名]
WHERE 条件表达式;
例如:SELECT SNO,SNAME,SAGE FROM STUDENT
WHERE ((SAGE>18 OR SAGE <25)AND SSEX=’男’)
OR SSEX=’女’;
选择年龄大于18或小于25的性别为男的,或者性别为女的记录
SELECT * FROM STUDENT WHERE NOT SSEX=’女’;
选择性别不是女的所有记录(包括男与空)
SELECT * FROM STUDENT WHERE SSEX IS NOT NULL;
选择性别不为空的所有记录
LIKE、NOT LIKE运算:SNAME LIKE ‘李%’、 SNAME LIKE ‘%庆%’、 SNAME NOT LIKE ‘%华’//百分号代表任意一个字符串。
特别说明:
1.SELECT * FROM STUDENT WHERE LEFT(SNAME,1,2)=’李’ 和SELECT * FROM STUDENT WHERE SNAME LIKE ‘李%’逻辑上等价,不同是后面的一句能够使用上索引,提高查询速度。
2.当SNAME 为 CHAR(4) NOT NULL且为主键,SNAME=’李四’, SNAME LIKE ‘李四%’ 为假。{oracle 不为假}
IN、NOT IN运算:SAGE IN (10,20,30) 、SAGE NOT IN (10,20,30)
八、 有排序的SELECT语句:
格式:SELECT列名 [列别名],列名 [列别名],…… 列名 [列别名]
FROM表名 [表别名],表名 [表别名],表名 [表别名]
WHERE 条件表达式
ORDER BY列名、列名、……列名;
例如:SELECT SNO,SNAME,SAGE FROM STUDENT
ORDER BY SNO;
选出的记录按SNO排序(升序)
SELECT SNO,SNAME,SAGE FROM STUDENT
ORDER BY SSEX,SNO;
选出的记录先按SSEX排序后,再按SNO排序
九、 集合函数MAX,MIN,SUM,COUNT,AVG:
例如:SELECT MAX(SAGE) FROM STUDENT;
选择最大年龄。
SELECT COUNT(*) FROM STUDENT;
选择student表中学生的总人数。
特别注意:
Select count(ssex) from student;
选择student表中学生性别不为空的总人数。
十、 剔除重复语句DISTINCT:
例如:SELECT DISTINCT SAGE FROM STUDENT;
如果有100名18岁的学生,不加DISTINCT 18在结果返回100行18,加DISTINCT 18返回1行18。
SELECT DISTINCT SSEX FROM STUDENT;
SELECT COUNT( DISTINCT SAGE) FROM STUDENT;
十一、 数据分组GROUP BY
格式:SELECT列名 [列别名],列名 [列别名],…… 集合函数(列名 [列别名] )
FROM表名 [表别名],表名 [表别名],表名 [表别名]
WHERE 条件表达式
GROUP BY列名、列名、……列名;
特别说明:SELECT 后面出现的列,如果没有使用集合函数,必须出现在GROUP BY 中。
Sno,sname,grade,
有数据
01 john 20 pascal
01 john 30 c
02 cathy 10 pascal
02 cathy 40 c
想要
01 john 50
02 cathy 50
Select sno,sname,sum(grade) from student
Group by sno;//非法写法
Select sno,min(sname),sum(grade) from student
Group by sno;
Select sno,sname,sum(grade) from student
Group by sno,sname;
例如:SELECT CNO,AVG(GRADE) FROM SC GROUP BY CNO;
查询每一门课的课程号和平均成绩。
SELECT SSEX,COUNT(*) FROM STUDENT GROUP BY SSEX;
按SSEX分组查出:不同性别,各性别的人数
十二、 数据分组深入HAVING
集合函数如果要作为条件,只能出现在HAVING子句中,不允许出现在WHERE中。
格式:SELECT列名 [列别名],列名 [列别名],…… 集合函数(列名 [列别名] )
FROM表名 [表别名],表名 [表别名],表名 [表别名]
WHERE 条件表达式
GROUP BY列名、列名、……列名
HAVING 集合函数() 表达式;
例如: SELECT NAME,COUNT(*) FROM STUDENT GROUP BY NAME
HAVING COUNT(*)>1;
Select name,count(*) from student //非法写法
Where count(*)>1
Group by name
查出重名的名和此姓名的总人数
SELECT SNO,AVG(GRADE)
FROM SC
GROUP BY (SNO) HAVING AVG(GRADE)>=75;
查出平均分数在75以上的学生学号
T( NAME,BOOK)
张三 化学
张三 物理
李四 数学
SELECT NAME ,COUNT(*) FROM T GROUP BY NAME HAVING COUNT(*)>1;
查询借书超过1本的人以及本数。
十三、 多个表连接查询:
例如:
SELECT STUDENT.SNO,NAME,CNO,GRADE
FROM STUDENT,SC
WHERE STUDENT.SNO=SC.SNO;
查询学生学号,姓名,选修课号,成绩
例2:
A (Aname, Abook)
张三 语文
李斯 数学
李斯 英语
王务 地理
b (Aname,B credit)
-------
张三 80
李斯 70
王务 55
李斯 90
语句select * from a ,b where a.Aname = b.Aname order by Aname;
返回6行数据
张三 语文 张三 80
李斯 数学 李斯 70
李斯 数学 李斯 90
李斯 英语 李斯 70
李斯 英语 李斯 90
王务 地理 王务 55
十四、 表别名的使用:
作用1:书写方便
例如: SELECT S1.SNO,NAME,CNO FROM STUDENT S1,SC S2
WHERE S1.SNO=S2.SNO;
作用2:相同表进行连接查询
例如: SELECT S1.SNO,S1.NAME,S2.SNO,S2.NAME FROM STUDENT S1,STUDENT S2
WHERE S1.SAGE=S2.SAGE AND S1.SSEX=’男’ AND S2.SSEX=’女’;
显示年龄相同的男生、女生学号与姓名
例如:
一个表的行与自己的其他行数据进行计算。
表T(NO,RQ,DATA)
主键NO,RQ
01 2001.09.01 100
01 2001.10.01 200
02 2001.09.01 300
02 2001.10.01 400
结果:
01 2001.09.01 200
01 2001.10.01 200
02 2001.09.01 400
02 2001.10.01 400
将同一编号日期为2001.09.01的data列值改为2001.10.01的data列值
update T
set DATA =
(select s2.DATA
from T s2
where T.NO=s2.NO and T.RQ=date('2001.10.01') and s2.RQ=date('2001.09.01'));
十五、 外连接(+):
例如: SELECT S1.SNO,NAME,CNO FROM STUDENT S1,SC S2
WHERE S1.SNO=S2.SNO(+);
按表S1中的学号选出:学号,姓名,课程号。如SC中没有的学号到S1中查找。
例如: SELECT S1.SNO,S1.NAME,S2.SNO,S2.NAME FROM STUDENT S1,STUDENT S2
WHERE S1.SAGE=S2.SAGE(+)
AND S1.SSEX=’男’ AND S2.SSEX=’女’;
按男生的年龄(女生中没有但男生中有的年龄,按男生的年龄提取数据),选出相同年龄段的男生和女生的学号和姓名
A ( Aname , Abook)
张三 语文
李斯 数学
李斯 英语
王务 地理
赵六 历史
b (Aname, Bcredit)
-------
张三 80
李斯 70
王务 55
李斯 90
select * from a ,b where a.Aname = b.Aname
返回6行数据
张三 语文 张三 80
李斯 数学 李斯 70
李斯 数学 李斯 90
李斯 英语 李斯 70
李斯 英语 李斯 90
王务 地理 王务 55
select * from a,b where a.a=b.a(+);
返回7行数据
张三 语文 张三 80
李斯 数学 李斯 70
李斯 数学 李斯 90
李斯 英语 李斯 70
李斯 英语 李斯 90
王务 地理 王务 55
赵六 历史
十六、 子查询:
任何一个表达式可以是一个SELECT语句返回的结果。
例如:SELECT * FROM SC WHERE SNO IN
(SELECT SNO FROM STUDENT WHERE SSEX=’女’);
返回所有女生的成绩
例如:SELECT * FROM STUDENT
WHERE SAGE= (SELECT MAX(SAGE) FROM STUDENT);
返回年龄最大的学生的基本信息
例如:SELECT * FROM STUDENT WHERE
SAGE> (SELECT AVG(SAGE) FROM STUDENT);
返回年龄大于平均年龄的学生的基本信息。
十七、 存在测试EXISTS、NOT EXISTS
例如:SELECT * FROM SC
WHERE SNO IN
(SELECT sno FROM STUDENT WHERE SSEX=’女’);
同:SELECT * FROM SC WHERE EXISTS
(SELECT * FROM STUDENT WHERE SSEX=’女’ AND SC.SNO=SNO);
返回所有女生的成绩
例如:SELECT * FROM SC
WHERE SNO
NOT IN (SELECT sno FROM STUDENT WHERE SSEX=’女’);
同:SELECT * FROM SC WHERE NOT EXISTS
(SELECT * FROM STUDENT WHERE SSEX=’女’ AND SC.SNO=SNO)
从表SC中选出性别不为女的记录
说明:使用EXISTS相比IN,当使用in检索到数据非常少时,in比exists快。
反之,使用exists比in快。
如果exists后面的select * 改为select ‘常量’(例如a,b,。。等)速度会更快。
十八、 关于索引使用方法
所谓使用索引,就是条件之中有一个列(所谓列不能是包含这个列的表达式)属于这个表的一个索引的第一个关键字,则查询就能使用这个索
引。
1.select * from student
where sno='a';
2.select * from student
where sno=’a’ and sname=’asdf’;
3.select * from student
where sno=’a’ and sage=123;
4.select * from student
where sno=’a’ and sname =’asdf’ and sage=123;
5.select * from student
where sname=’asdf’;
所谓列不能是包含这个列的表达式,如果是表达式不能使用索引
下面不能使用索引
7.Select * from student where substr(sname,1,2)=’SD’
select * from student where trunc(birthday,’month’)=:ldt;
下面能够使用索引,且等同上面
6.SELECT * FROM student where sname like ‘SD%’
select * from student
where birthday>=trunc(:ldt,’day’)
and birthday<add_months(trunc(:ldt,’day’),1);
如果建立索引Create index on student(sno,sname,sage);
则语句1、2 、3、4可以使用这个索引,提高查询速度
如果再建立create index on student(sname)
则 语句5 、6能够使用这个新索引
语句7永远不能使用索引。
但是对于如下语句,在使用in比exists要快
d_dfjsd 数据非常多,索引使用dfjsdbh
d¬_sj数据非常多,索引使用sjbh,但是每一个sjbh所查处的结果非常少
下面的语句前者慢,后者运行快.
update d_dfjsd a
set yjje=yjje -5
where exists(select *
from d_sj where sjbh='12345678'
and dfjsdbh=a.dfjsd);
update d_dfjsd a
set yjje=yjje -5
where dfjsdbh in(select dfjsdbh from d_sj where sjbh='12345678);
十九、 插入数据INSERT:
格式:INSERT INTO 表名 [(列名,列名,列名)] VALUES(数据,数据,数据);
例如:INSERT INTO STUDENT VALUES(01,’JOHN’,10,23);
INSERT INTO STUDENT (SNO,SNAME) VALUES(001,’里’);
格式:INSERT INTO 表名 [(列名,列名,列名)]
SELECT列名,列名,列名 FROM …… where ……;
例如:INSERT INTO STUDENT
SELECT * FROM STUDENT1;
将表STUDENT1中的数据导入表STUDENT中
INSERT INTO STUDENT
SELECT * FROM USER001.STUDENT;
将USER001用户下的表STUDENT中的数据导入当前用户下的表STUDENT中
二十、 修改数据UPDATE:
格式:UPDATE 表名
SET列名= 数据,
列名= 数据,
列名= 数据,
列名= 数据
WHERE ……;
例如:UPDATE COURSE
SET COURSE=COURSE+10;
使所有人的成绩加10
update course
set course=course+10
where exists(select * from student where sage>20);
将年龄大于20的成绩加上10
操作步骤:
1. Create table a_tmp_course as select * from course;
2. Select * where (update条件);查看是否是想要修改的数据
3. 如果上面是你想修改的数据行,就可以执行Update
或者:
4. Create table a_tmp_course as select * from course;
5. 连续执行Update ,SELECT,ROLLBACK WORK;
6. 查看是否修改的正确
7. 如果正确,将ROLLBACK WORK 改为COMMIT;
(注意,数据库连接必须设定为不自动提交)
二十一、 利用表连接修改数据UPDATE:
格式:UPDATE 表名
SET(列名,列名,列名)
=(SELECT 列名,列名,列名 FROM 表名 WHERE……这条语句只能返回一行数据,可以通过集合函数变为一行数据,这需要你保证逻辑上合理)
WHERE ……;
student:
01 john 1
02 cathy 3
sc:
01 pascal 10
01 c 20
02 pascal 30
例如1:UPDATE STUDENT
SET (COURSE)=
(SELECT SUM(COURSE) FROM SC WHERE STUDENT.SNO=SNO);
将表STUDENT中的COURSE字段的值改为:表SC中此学号的成绩之和
结果:student:
01 john 30
02 cathy 30
例如2:UPDATE STUDENT
SET (COURSE)=
(SELECT SUM(COURSE)+student.course
FROM SC WHERE STUDENT.SNO=SNO);
将表STUDENT中的COURSE字段的值改为:表SC中此学号的成绩之和
结果:student:
01 john 31
02 cathy 33
二十二、 删除数据DELETE
格式:DELETE FROM 表名 [WHERE ……];
例如:DELETE FROM STUDENT;
DELETE FROM STUDENT WHERE SSEX=’女’;
删除表STUDENT中性别为”女”的记录
操作步骤:
1.Create table a_tmp_course as select * from course;
2.Select * where (DELETE条件);查看是否是想要删除的数据
3.如果上面是你想删除的数据行,就可以执行DELETE;
二十三、 提交生效COMMIT;
PB中的格式:COMMIT;
COMMIT USING SQLCA;
COMMIT WORK;
二十四、 回滚作废ROLLBACK;
PB中的格式:ROLLBACK;
ROLLBACK USING SQLCA;
ROLLBACK WORK;
二十五、 说明:SQL格式简单,但是使用却可以灵活多样,子语句可以含有子语句,只有多用才能学好、用活。利用SQL可以实现任何查询或统计。
二十六、 特别说明:在pb中执行一条delete或者insert或者update之后,必须后面有commit work或者rollback work;否则会将数据库中相应数据行锁住,直到断开连接时自动提交,当退出程序时才会断开连接。
常用命令及技巧
1.启动数据库(开机时系统自动启动)
用 oracle7登录
$svrmgrl
svrmgrl>connect internal
svrmgrl>startup
.......//看到oracle使用内存情况,与机器总内存比较,增加oracle使用内存数
svrmgrl>shutdown 所有会话断开后关闭
svrmgrl>shutdown immediate
svrmgrl>shutdown abort 强行关闭
svrmgrl>exit
$exit
2.initorac.ora(或 intiWG73.ora)
找到db_block_buffer=??? Small
改为
#db_block_buffer=??? Small(增加 #)
#db_block_buffer=??? medium
db_block_buffer=???? large(删除#)
#shared_pool_size=??? Small(增加 #)
#shared_pool_size=??? Medium
shared_pool_size=??? Large((删除#)
3.数据导出
(使用7.3倒入倒出数据是,服务器必须运行过catexp73.sql)
exp help=y得到帮助
exp parfile=ydxt.exp
其中:ydxt.exp:
system/manager@ydxt
grants=y
full=y
file=c:\database\ydxt200108170926.dmp
log=c:\database\ydxt200108170926.log
或者
system/manager@ydxt
grants=y
indexs=y
file=c:\database\ydxt200108170926.dmp
log=c:\database\ydxt200108170926.log
owner=(cur,cur2)
tables=(table1,table2)
4.数据导入
imp help=y得到帮助
imp parfile=ydxt.imp
其中:ydxt.imp:
system/manager@ydxt
grants=y
full=y //采用system用户,可以自动创建表空间
file=c:\database\ydxt200108170926.dmp
log=c:\database\ydxt200108170926.log
或者 根据用户
system/manager@ydxt
grants=y
indexs=y
file=c:\database\ydxt200108170926.dmp
log=c:\database\ydxt200108170926.log
owner=(cur,cur2)
或者 导入几个表
system/manager@ydxt
grants=y
indexs=y
commit=y //导入100行自动提交
rows=y //导入数据,否则仅仅导入结构
ignore=y //忽略错误
file=c:\database\ydxt200108170926.dmp
log=c:\database\ydxt200108170926.log
fromuser=cur
touser=cur
tables=(table1,table2)
charset选项如果旧系统与新系统字符集部一致,输入旧系统字符集
关于字符集书写格式可以通过regedit的[hkey_local_machine][software][oracle]的nls_lang的值。(仅仅书写“.”后面的内容)
5.系统常用表
tab(tname,type) 当前用户所有表
all_tables(owner,table_name),所有用户所有表
sys.all_col_comments(table_name,owner,column_name)所有用户所有列删除一个用户所有表的方法:
select ‘drop table ‘ || tname || ‘;’ from tab;
将查询结果取出来再执行,就可以删除所有表
删除一个用户所有表的数据的方法(快速删除数据):
select ‘truncate table ‘ || tname || ‘;’ from tab;
将查询结果取出来再执行,就可以删除所有表
把当前数据库中所有表的列gx去空格
select ‘update ‘ || table_name || ‘ set gx=ltrim(rtrim(gx));’
from sys.all_col_comments
where column_name=’GX’;
把当前数据库中所有表的列gx=’套表’,改为1(字符串中单引号书写格式)
select ‘update ‘ || table_name || ‘ set gx=’ ‘1’’ where gx =’’套表’’;’
from sys.all_col_comments
where column_name=’GX’;
特别注意:oracle 不能用双引号“代替两个单引号‘,在oracle 中它代表转义字符,类似于c语言的/,如果需要引号,要写单引号‘,不能用双引号代替。
6.Systemerror事件使用技巧
程序之中嵌入sql语句,怎么方便的检查执行是否成功。
一般方法:
update aaa set aa=baa;
if sqlca.sqlcode=-1 then
mesagebox(‘errro;’,’window event asdfsafsdf12 ’)
end if
技巧方法:
update ……;
if sqlca.sqlcode=-1 then sqlca.sqlcode=1/(sqlca.code+1)
通过在systemerror增加一段程序,可是自动显示出错的
窗口、对象、事件、行号、错误代码以及描述
7.系统自动定时备份程序
timerbackupdatabase.pbl
可以放在window的定时任务中,定时执行。
8.获取汉字拼音码
pb的函数
function getpy(string ) string //getpy(‘山东大学123’)=’sddx123’
oracle数据库函数
function getpy(string ) string //getpy(‘山东大学123’)=’sddx123’
ORACLE数据库SQL语言常用函数
一、 伪列:伪列不是表的真实列,但是你可以象使用真实列一样使用伪列,常用伪列:ROWID行的绝对物理编号,每一行是唯一的。ROWNUM序号,返回查询结果的每行序号。系统时间sysdate,返回系统当前时间。
例如:SELECT ROWID,ROWNUM,SNO,SNAME,sysdate FROM STUDENT;
二、 伪表dual:伪表不是真实表,但是你可以象使用真实表一样使用它,它仅有一行数据。
例如:select sysdate from dual; SELECT 123+10 FROM DUAL;
(SELECT SYSDATE; 在SYBASE数据库是正确的!)
三、 运算符:算术计算:+、-、*、/。字符串相连 ||,not、and、 or。
四、 日期运算:SYSDATE + 1,就是当前日期加一天;
五、 数值函数:绝对值ABS(n)、求余数MOD(m,n)、幂函数POWER(M,N)、四舍五入ROUND(N,[M])、截断函数TRUNC(N,[M])。
例如:SELECT COURSE,ABS(50 - COURSE) FROM SC;
SELECT MOD(COURSE,10) FROM SC,
SELECT ROUND(COURSE,2) FROM SC; COURSE=13.345, ROUND(COURSE,2)=13.35
SELECT TRUNC(COURSE,2) FROM SC; COURSE=13.345, TRUNC(COURSE,2)=13.34
六、 字符函数:ASCII转化为字符CHR(N)、字符串求小写LOWER(CHAR)、删除左边空格LTRIM(CHAR[,字符])、删除右边空格RTRIM(CHAR[,
字符])、求子串SUBSTR(STRING,M,[N])、字符串求大写UPPER(CHAR)。
例如:CHR(48)=’0’
LOWER(‘Ab’)=’ab’
LTRIM(‘ 123’)=’123’
RTRIM(‘1232III’,’I’)=’1232’
SUBSTR(‘123456’,4,2)=’45’
SUBSTR(‘123456’,2)=’23456’
UPPER(‘Ab’)=’AB’
七、 日期函数:日期增加月份ADD_MONTHS(DATE,N)、求日期当月最后一天LAST_DAY(DATE)、两个日期相差月份MONTH_BETWEEN
(DATE1,DATE2)、日期四舍五入ROUND(DATE, [FMT])、日期截断TRUNC(DATE,[FMT])、返回系统时间SYSDATE()。
例如:ADD_MONTHS(2001-01-01,1)=2001-02-01
LAST_DAY(2001-03-01)=2001-03-31
MONTH_BETWEEN(2001-01-01,2000-12-01)= -1
SELECT SYSDATE(),SNO,SNAME FROM STUDENT;
例如:
INSERT INTO BOOK(NAME,BOOK,DAT) SELECT :NAME,:BOOK,SYSDATE FROM DUAL;
通过SELECT * FROM BOOK WHERE DAT=:DD;想查询一天的数据,是错误的!
应该:SELECT * FROM BOOK WHERE TRUNC(DAT,’DD’)=:DD
特别说明这句话不能使用索引,最好的办法是
SELECT * FROM BOOK WHERE DATE>=:DD AND DATE<:DD+1;
八、 判断是否为空函数NVL(表达式1,表达式2):当表达式1为空时,返回表达式2,否则返回表达式1。
例如:如果course=nvll则NVL(COURSE,0)=0
如果COURSE=10则NVL(COURSE,0)=10
九、 转化函数:日期转化字符TO_CHAR(DATE,[FMT])、数值转化字符TO_CHAR(N,[FMT])、字符转化日期 TO_DATE(CHAR,[FMT])、字符转化数值TO_NUMBER(CHAR)、求最大值GREATEST(表达式1,表达式2……)、求最小值 LEAST(表达式1,表达式2……)。
FMT=’YYYYMMDDHHMISS’
例如:TO_CHAR(2001-02-03,’YY.MM.DD’)=’01.02.03’
TO_CHAR(1233.22,’000000.00’)=’001233.22’
TO_CHAR(1233.22,’999999.99’)=’ 1233.22’
TO_DATE(‘20000203’,’YYYYMMDD’)=2000.02.03
TO_NUMBER(‘12312’)+10=12322
GREATEST(1,2,3,4,5,6)=6
**************************************************************************
考题:
表atm(Ano,Aname )
Ano:varchar(20);
Aname:varchar(20);
删除表中所有重复行()
delete from atm t
where exists (select ano from atm
where t.ano=ano
group by ano
having (count(ano)>1));
删除表中某一重复行()
create table atmp as select distinct(ano),aname from atm;//创建临时表
delete from atm;
insert into atm
select * from atmp;
(转自:http://blog.sina.com.cn/s/blog_6015670b0100dhq6.html)
相关推荐
ORACLE数据库及SQL语言考试题一含答案.pdf 本文档是关于ORACLE数据库及SQL语言考试题,涵盖了名词解释、ORACLE数据库知识问答和SQL语句编写三部分,旨在考察新同事ORACLE数据库知识和SQL语言掌握情况。 名词解释 ...
SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作...
它支持多种数据类型,如数值、字符串、日期等,并采用SQL(结构化查询语言)进行数据操作。数据库由一系列表组成,表之间可以通过外键建立关联。 2. SCOTT用户: "SCOTT"是一个内置的Oracle示例用户,拥有几个预定...
Oracle数据库是世界上最流行的数据库管理系统之一,SQL(Structured Query Language)是用于管理关系数据库的标准语言,而PL/SQL是Oracle数据库特有的编程语言,扩展了SQL的功能,使得能够编写复杂的存储过程和...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其SQL语法是进行数据操作和查询的核心工具。本资料包针对Oracle数据库的SQL使用提供了丰富的练习资源,旨在帮助用户深入理解和熟练掌握SQL语言在Oracle环境...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,SQL(结构化查询语言)是与所有关系数据库进行交互的标准语言,而PL/SQL是Oracle数据库特有的编程语言,它扩展了SQL的功能,使得数据库管理、开发和维护...
Oracle数据库是世界上最广泛使用的数据库管理系统之一,SQL(结构化查询语言)是用于管理和操作数据库的标准语言,而PL/SQL则是Oracle公司为Oracle数据库设计的一种过程式编程语言,它结合了SQL的功能并增加了流程...
Oracle数据库11g是Oracle公司推出的数据库管理系统的一个重要版本,其在SQL支持方面有着显著的增强和优化。SQL,全称Structured Query Language,是用于管理关系数据库的标准语言,包括数据查询、数据操纵、数据定义...
在IT行业中,Visual Basic(VB)是一种常用的编程语言...你可以下载并研究该文件,以加深对VB连接Oracle数据库查询的理解。记得在使用任何生产环境的数据时,务必小心,遵循安全最佳实践,避免对数据造成不必要的影响。
Oracle数据库系统是Oracle公司开发的,它采用SQL作为查询语言,支持分布式数据库、事务处理、备份恢复等多种功能。Oracle以其强大的性能、安全性及可扩展性闻名,广泛应用于金融、电信、政府等多个领域。 二、...
SQL是用于管理Oracle数据库的标准查询语言,包括数据查询、插入、更新和删除等操作。PL/SQL是Oracle特有的过程化语言,用于编写复杂的业务逻辑,它结合了SQL和传统编程语言的特点,提供异常处理、循环、子程序等功能...
- **查询语言**:SQL Server使用T-SQL,Oracle使用PL/SQL,两者都是SQL的扩展,MySQL更接近SQL标准。 - **事务处理**:Oracle和SQL Server支持ACID特性,MySQL的InnoDB存储引擎也支持。 - **安全性**:三者都提供...
oracle数据库ppt 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 第7章 游标和异常处理 第8章 存储过程、函数和包 第9章 触发器 第10章 数据库...
标题中的“HeidiSql客户端”指的是HeidiSQL,这是一个轻量级且用户友好的数据库管理工具,主要用于连接MySQL、MariaDB、SQL Server、PostgreSQL和Oracle等不同类型的数据库系统。这款软件以其简单易用的界面和高效的...
SQL,即结构化查询语言,是用于管理和处理关系数据库的标准语言。它被ANSI(美国国家标准协会)定义为关系型数据库管理系统(RDBMS)的标准,广泛应用在诸如Oracle、Sybase、Microsoft SQL Server、Access等流行...
Oracle 数据库语法 ... Oracle 数据库语法是一个庞大的知识体系,涉及到数据库管理、查询语法、函数、视图、存储过程、触发器等多种元素。理解和掌握 Oracle 数据库语法是数据库管理和开发的基础。
2. **SQL语言**:SQL(结构化查询语言)是与数据库交互的基础,课程将深入讲解SQL的语法,包括数据查询、插入、更新、删除操作,以及更复杂的联接、子查询、集合操作等。同时,也会涉及SQL的DDL(数据定义语言)和...
在Oracle数据库编程中,首先会涉及到SQL(结构化查询语言),这是与数据库交互的基础。Java_oracle01.pdf可能涵盖了SQL的基本概念,如SELECT语句用于数据查询,INSERT用于插入新记录,UPDATE用于更新现有记录,以及...
本篇将详细讲解如何利用LabVIEW调用Oracle数据库,包括ODBC连接、创建表、写入数据以及查询与更新操作。 首先,要实现LabVIEW与Oracle数据库的连接,我们需要借助ODBC(Open Database Connectivity)驱动程序。ODBC...
在数据库管理领域,将SQL Server的表结构转换到Oracle数据库是一项常见的需求,特别是在系统迁移或数据整合的过程中。本文将详细探讨如何实现这一过程,并提供C#开发源码的相关信息。 首先,我们需要理解SQL Server...