`
iceglove
  • 浏览: 16767 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

ORACLE数据库结构查询语言SQL语言(一)

阅读更多

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语言考试题一含答案.pdf 本文档是关于ORACLE数据库及SQL语言考试题,涵盖了名词解释、ORACLE数据库知识问答和SQL语句编写三部分,旨在考察新同事ORACLE数据库知识和SQL语言掌握情况。 名词解释 ...

    sql循序渐进SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯

    SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作...

    oracle 数据库 scott.sql 范例表

    它支持多种数据类型,如数值、字符串、日期等,并采用SQL(结构化查询语言)进行数据操作。数据库由一系列表组成,表之间可以通过外键建立关联。 2. SCOTT用户: "SCOTT"是一个内置的Oracle示例用户,拥有几个预定...

    Oralce数据库SQL和pl_sql实例教程

    Oracle数据库是世界上最流行的数据库管理系统之一,SQL(Structured Query Language)是用于管理关系数据库的标准语言,而PL/SQL是Oracle数据库特有的编程语言,扩展了SQL的功能,使得能够编写复杂的存储过程和...

    Oracle数据库SQL练习

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其SQL语法是进行数据操作和查询的核心工具。本资料包针对Oracle数据库的SQL使用提供了丰富的练习资源,旨在帮助用户深入理解和熟练掌握SQL语言在Oracle环境...

    Oracle数据库SQL和PL/SQL实例教程

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,SQL(结构化查询语言)是与所有关系数据库进行交互的标准语言,而PL/SQL是Oracle数据库特有的编程语言,它扩展了SQL的功能,使得数据库管理、开发和维护...

    oracle数据库 sql 和pl/sql实例教程

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,SQL(结构化查询语言)是用于管理和操作数据库的标准语言,而PL/SQL则是Oracle公司为Oracle数据库设计的一种过程式编程语言,它结合了SQL的功能并增加了流程...

    Oracle数据库11g之SQL.zip

    Oracle数据库11g是Oracle公司推出的数据库管理系统的一个重要版本,其在SQL支持方面有着显著的增强和优化。SQL,全称Structured Query Language,是用于管理关系数据库的标准语言,包括数据查询、数据操纵、数据定义...

    通过VB来连接oracle数据库做查询

    在IT行业中,Visual Basic(VB)是一种常用的编程语言...你可以下载并研究该文件,以加深对VB连接Oracle数据库查询的理解。记得在使用任何生产环境的数据时,务必小心,遵循安全最佳实践,避免对数据造成不必要的影响。

    Oracle数据库系统应用与开发

    Oracle数据库系统是Oracle公司开发的,它采用SQL作为查询语言,支持分布式数据库、事务处理、备份恢复等多种功能。Oracle以其强大的性能、安全性及可扩展性闻名,广泛应用于金融、电信、政府等多个领域。 二、...

    Oracle数据库资料大全

    SQL是用于管理Oracle数据库的标准查询语言,包括数据查询、插入、更新和删除等操作。PL/SQL是Oracle特有的过程化语言,用于编写复杂的业务逻辑,它结合了SQL和传统编程语言的特点,提供异常处理、循环、子程序等功能...

    SqlServer,Oracle,MySql数据库结构相互对比同步.rar

    - **查询语言**:SQL Server使用T-SQL,Oracle使用PL/SQL,两者都是SQL的扩展,MySQL更接近SQL标准。 - **事务处理**:Oracle和SQL Server支持ACID特性,MySQL的InnoDB存储引擎也支持。 - **安全性**:三者都提供...

    Oracle数据库SQL和PL SQL实例教程 高继民(ppt)

    oracle数据库ppt 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 第7章 游标和异常处理 第8章 存储过程、函数和包 第9章 触发器 第10章 数据库...

    HeidiSql客户端,可连接mySql,sqlServer等数据库

    标题中的“HeidiSql客户端”指的是HeidiSQL,这是一个轻量级且用户友好的数据库管理工具,主要用于连接MySQL、MariaDB、SQL Server、PostgreSQL和Oracle等不同类型的数据库系统。这款软件以其简单易用的界面和高效的...

    结构化查询语言SQL快速入门

    SQL,即结构化查询语言,是用于管理和处理关系数据库的标准语言。它被ANSI(美国国家标准协会)定义为关系型数据库管理系统(RDBMS)的标准,广泛应用在诸如Oracle、Sybase、Microsoft SQL Server、Access等流行...

    oracle数据库语法

    Oracle 数据库语法 ... Oracle 数据库语法是一个庞大的知识体系,涉及到数据库管理、查询语法、函数、视图、存储过程、触发器等多种元素。理解和掌握 Oracle 数据库语法是数据库管理和开发的基础。

    Oracle数据库学习课件

    2. **SQL语言**:SQL(结构化查询语言)是与数据库交互的基础,课程将深入讲解SQL的语法,包括数据查询、插入、更新、删除操作,以及更复杂的联接、子查询、集合操作等。同时,也会涉及SQL的DDL(数据定义语言)和...

    oracle数据库编程pdf文档教案

    在Oracle数据库编程中,首先会涉及到SQL(结构化查询语言),这是与数据库交互的基础。Java_oracle01.pdf可能涵盖了SQL的基本概念,如SELECT语句用于数据查询,INSERT用于插入新记录,UPDATE用于更新现有记录,以及...

    labview 调用oracle数据库

    本篇将详细讲解如何利用LabVIEW调用Oracle数据库,包括ODBC连接、创建表、写入数据以及查询与更新操作。 首先,要实现LabVIEW与Oracle数据库的连接,我们需要借助ODBC(Open Database Connectivity)驱动程序。ODBC...

    SqlServer表结构转oracle表结构

    在数据库管理领域,将SQL Server的表结构转换到Oracle数据库是一项常见的需求,特别是在系统迁移或数据整合的过程中。本文将详细探讨如何实现这一过程,并提供C#开发源码的相关信息。 首先,我们需要理解SQL Server...

Global site tag (gtag.js) - Google Analytics