荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (少年仲永), 信区: Java
标  题: JDBC编程技术(3) (fwd)
发信站: BBS 荔园晨风站 (Sun Apr 11 10:10:45 1999), 转信

技术服务



       第四部分 JDBC编程技术

                   丁锂 孙元 王克宏



     (接上期)

     使用LIKE谓词可以完成模式字符串匹配,如下例:

     例2.5 找出地址为以
'Beijing'开头的字符串的供应商的所有信息。

     SELECT SNO , SNAME, SADDR,SNUM

     FROM SUPPLIER

     WHERE SADDR LIKE 'Beijing%'


匹配模式中,'%'表示匹配多个或0个任意字符,'_'表示只匹配一个任意字符。 在SQL中
,还提供了COUNT,SUM,AVG,MAX和MIN等函数,增强了检索功能,它们的功能分别如下:

     COUNT

     对一列中的值计算个数

    COUNT(*)   计算记录个数
    SUM    求某一列值的总和(此列值必须是数值)
    AVG    求某一列值的平均值(此列值必须是数值)
    MAX    求某一列值中的最大值
    MIN    求某一列值中的最小值


     用户可以根据需要使用这些库函数。

     2.连接查询


若查询涉及两个以上的表,则称之为连接查询。连接查询是关系数据库最主要的查询功能。


     我们在例2.1的基础上增加供应关系表SP(SNO, PNO, NUM,
PRI),其中各列为供应商号,零件号,供应数量和价格,以及零件表PART(PNO,
PNAME, PWEG, PCOL),各列为零件号,零件名 ,零件重量和颜色。

    例2.6
      SELECT  SNAME
      FROM    SUPPLIER,SP
      WHERE   SUPPLIER.SNO = SP.SNO;
    例2.7 找出SUPPLIER中供应了零件名为'GOODS'或重量小于15的供应者名。
      SELECT  SNAME
      FROM    SUPPLIER,SP
     WHERE   SUPPLIER.SNO = SP.SNO
           AND  SP.PNO = P.  AND  SP.PNO = P.PNO
           AND  (PNAME = 'GOODS' OR  PWEG < 15);


     3.嵌套查询


嵌套查询也称子查询,指的是一个SE-LECT-FROM-WHERE查询块可以嵌入另一个查询块中,即?
檠跫枰肓硪徊檠祷氐闹到斜冉?,SQL允许多层嵌套。

     子查询一般分三种:由EXISTS谓词引出的子查询,由IN
谓词引出的以及由 ANY或 ALL引出的子查询。

     例2.8
使用量词EXISTS进行子查询:找出没有供应零件的供应商号。

       SELECT  SNO
       FROM    SUPPLIER
       WHERE   NOT  EXISTS
               (SELECT  *
                FROM   SP
           WHERE  SNO=SUPPLIER.SNO);


     例2.9
使用谓词IN的子查询:找出供应了零件名为'GOODS'的供应者名。

       SELECT  SNAME
       FROM   SUPPLIER
       WHERE  SNO  IN
                SELECT   SNO
                FROM   SP
                WHERE  PNO  IN
                         SELECT  PNO
                         FROM   P
              WHERE  PNAME = 'GOOD'.


     这个例子中就使用了多层嵌套查询。

     4.使用带集合运算的操作符的查询

     1) 并:UNION 2) 交:INTER-SECT 3)差: MINUS

     下面是一个使用MINUS的例子,它与例2.8的功能是相同的。

     例2.11 找出当前没有提供零件的供应者号。

     SELECT SNO

     FROM SP

     MINUS

     (SELECT DISTINCT SNO

     FROM SP)

     二、 SQL更新语句

     SQL的更新语句包括修改(UPDATE),插入 (INSERT)
和删除(DELETE)三类语句。

     1.修改操作(UPDATE)

     修改语句的一般格式为:

     UPDATE 表名

     SET

     字段 = 表达式 [,字段 = 表达式]...

     [WHERE 谓词]

     修改指定表中满足谓词的行,把这些行按SET子句中的表达式修改相应字段上的值。

     例2.10 把零件P1的颜色改为BLUE。

     UPDATE P

     SET PCOL = 'BLUE'

     WHERE PNO='P1';


值得注意的是,UPDATE语句一次只能对一个表更新,这样就可能会产生破坏参照完整性的
问题。如果在执行了一个更新语句后,数据库处于不一致的状态,则要对不一致的地方再进?
?
修改。

     2.插入操作(INSERT)

     插入语句用于在表中增加行,一般格式为:

     INSERT

     INTO 表名 [ (字段名[,字段名]...) ]

     VALUES(常量 [, 常量]...);

     或者写成:

     INSERT

     INTO 表名[(字段名[, 字段名]...)]

     SELECT(子查询);

     第一种格式把一个新记录插入指定的表中,第二种格式把子查询的结果插入表中。

     例2.11
插入单记录:将一个新的供应者:S09,姓名ZHANG,产地BEIJING,供应量5,000插入关系SUPPLI
ER中。

     INSERT

     INTO SUPPLIER

     VALUES ('S09', 'ZHANG', 'BEI-JING',5,000);

     例2.12 插入多记录:

     CREATE TABLE ADDRNUM (ADDR CHAR(15),AVAGE
SMALLINT);

     INSERT

     INTO ADDRNUM

     SELECT SADDR, AVG (SNUM)

     FROM SUPPLIER;

     即将表SUPPLIER中所有产地相同的平均供应量插入表
ADDRNUM中。

     3.删除操作(DELETE)

     删除操作的一般格式为:

     DELETE

     FROM 表名

     [WHERE 谓词 ];


此操作从指定表中删除满足谓词的那些记录,没有WHERE字句时表示删去此表中的全部记
录,但表的定义仍在数据字典中。

     例2.13 单记录删除:把供应者S09从SUPPLIER中删去。

     DELETE

     FROM SUPPLIER

     WHERE SNO = 'S09';

     例2.14 多记录删除:删除所有的供应者记录。

     DELETE

     FROM SUPPLIER;

     这样,表SUPPLIER成为空表。

     例2.15
带有子查询的删除:删除零件产地为'BEIJING'的所有供应者记录。

     DELETE

     FROM SP

     WHERE 'BEIJING'=

     (SELECT SADDR

     FROM SUPPLIER)

     上面我们介绍了SQL 的四个DML语句: SELECT, UPDATE,
DELETE和IN-SERT。在关系数据
库中,所有的数据仅以一种方式表示即关系中的分量(关系中某一行上某一列的值),这种数?
?
结构的单一性,使得检索,修改,删除和插入的每个操作只需要一个操作符。 (未完待续)





--



日出东方,唯我不败;
    天上地下,唯我独尊。

※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.72]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店