`
iceglove
  • 浏览: 16493 次
  • 性别: 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

分享到:
评论

相关推荐

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

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

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

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

    Oracle数据库、SQL

    1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据--&gt;database 1 1.9远程登录:telnet IP地址 1 1.10 TCP/IP通信...

    Oracle数据库学习指南

    Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 ...52. 自动备份Oracle数据库

    ORACLE数据库开发常用sql查询

    SQL语言可以在Oracle数据库中创建、存储、更新、检索和维护数据,其中主要的功能是实现数据的查询和数据的插入、删除、修改等操作

    oracle数据库的一些SQL语句

    ORACLE数据库的一些SQL语句 数据操纵语言DML M = Manipulation  数据操纵语言DML用于改变数据库数据 主要有三种形式:  1) 插入:INSERT  2) 更新:UPDATE  3) 删除:DELETE

    Oracle数据库SQL基本应用与介绍

    Oracle数据库内部的数据操作可以通过sql语句执行处理,sql与C、Basic等语言不通,数据的访问方法和操作顺序不用正确指定,是要告诉数据库引擎要做什么就可以了。Oracle不仅可以通过基本的sql进行简单的数据操作,还...

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

    Oracle数据库SQL和PL/SQL实例教程 非常适用于初学者。结合例子深刻形象的讲解。 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 第7章 游标和...

    完整版Oracle11数据库教程课件 全套PPT课件资源集合 全套12个章节.rar

    完整版Oracle11数据库教程课件 第3章_SQL语言概述及简单查询(共19页).ppt 完整版Oracle11数据库教程课件 第4章_修改数据及事务(共16页).ppt 完整版Oracle11数据库教程课件 第5章_表空间(共37页).ppt 完整版...

    Oracle PL/SQL语言初级教程

    PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及...

    Oracle Sql基础 Oracle Sql基础 Oracle Sql基础

    SQL,结构化查询语言,是用于访问关系型数据库的语言,它提供一系列的表达式用于从关系数据库中存储、更新、删除、取得数据。自从关系型数据库发布以来,它逐步流行了起来。其他的语言也被提出用语关系型数据库,...

    oracle基础教程

    2.2 SQL*Plus方式的ORACLE数据库启动和关闭 26 2.2.1 启动数据库 26 2.2.2 关闭数据库 26 2.3 svrmgrl方式的ORACLE数据库启动和关闭 28 2.3.1 启动数据库 28 2.3.2 关闭数据库 30 2.4 应用开发工具(SQL * Plus) 31...

    轻松学Oracle数据库

    轻松学编程:轻松学Oracle数据库》共15章,由浅入深、全面系统地介绍了OracleDatabase11g数据库系统的使用方法和基本管理,其主要内容包括:Oracle11g关系数据库,Oracle数据库的体系结构,SQL*Plus,表空间,管理...

    Oracle实验指导书

    SQL(Structured Query Language)是关系数据库的标准语言,是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询,SQL语言是一个通用的、功能极强的关系数据库语言。 本次实验要了解SQL语言中...

    SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的编程语言 它允许用

    SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的编程语言。它允许用户通过简单的语句与数据库进行交互,执行诸如数据查询、插入、更新和删除等各种任务。以下是关于SQL的500字...

    Oracle数据库经典学习教程

    1. Oracle数据库对象 67 2. 同义词 67 3. 序列 70 4. 视图 72 5. 索引 74 6. 表空间 75 7. 本章总结 79 8. 本章练习 80 PL/SQL程序设计 83 1. PL/SQL简介 84 2. PL/SQL块 85 3. PL/SQL数据类型 89 4. PL/SQL条件控制...

    Oracle数据库SQL学习教程

    Oracle数据库SQL学习教程QL诞生于70年代的IBM某实验室。 SQL是一种非过程语言,它描述了如何对数据进行检索、插入、删除,但它并不说明如何进行...SQL是英文Structured Query Language的缩写,意思为结构化查询语言。

    Oracle数据库SQL和PL SQL实例教程PPT(推荐)

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

    Access 2003数据库和Javascript和Oracle数据库和SQL Server 2005数据库技术文档

    Access 2003数据库技术,Javascript技术文档,Oracle数据库技术,SQL Server 2000数据库技术,SQL Server 2005数据库技术,SQL查询语言技术

    学生成绩管理系统Oracle全部SQL语句.txt

    (1)选定某一主题,创建一个oracle数据库,对其进行日常管理及应用(全部用SQL语句实现): 1、创建数据库实例,数据库表空间,创建管理员,普通用户,并分别授予相应权限; 2、至少建立5个表,以及表间关系,使用...

Global site tag (gtag.js) - Google Analytics