`
iceglove
  • 浏览: 16534 次
  • 性别: 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数据库语句大全.doc

    数据定义语言(DDL)用于定义数据库的结构,包括创建、修改和删除数据库对象的语句。Oracle 数据库支持五种类型的完整性约束: 1. NOT NULL(非空):防止 NULL 值进入指定的列,在单列基础上定义,默认情况下,...

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

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

    Oracle数据库原理及应用教学大纲.pdf

    这篇教学大纲涵盖了 Oracle 数据库的基本概念、体系结构、表设计、数据操作、 SQL 查询、数据库对象、PL/SQL 编程等方面的知识。 一、课程性质和任务 Oracle 数据库原理及应用教学大纲旨在为学生提供一个完整的 ...

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

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

    Oracle数据库11g各版本介绍及功能比较

    Oracle 数据库 11g 企业版提供了 Java 和 PL/SQL 的本地编译功能,允许使用 Java 和 PL/SQL 语言编写部署在数据库中的程序。 管理软件开发 Oracle 数据库 11g 企业版提供了多种管理软件开发工具,包括 Oracle SQL ...

    完整版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...

    c#登陆界面与Oracle数据库连接并增删改查

    首先,我们需要创建一个 Oracle 数据库连接,用于与数据库进行交互。我们可以使用 OracleClient 命名空间中的 OracleConnection 类来创建连接对象。下面是一个简单的示例代码: ```csharp string connString = ...

    轻松学Oracle数据库

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

    Oracle数据库培训SQL基础篇PPT课件.pptx

    本课程讲解了Oracle数据库的SQL基础知识,涵盖了SELECT语句、约束和排序数据、单行函数、多表显示数据、组函数合计数据、创建和管理表、子查询和操纵数据、内置约束、创建视图等内容。 一、基本的SELECT语句 * ...

    Oracle实验指导书

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

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

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

Global site tag (gtag.js) - Google Analytics