⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sql

📁 SQL的数据操作语句-北京交大(收藏了一段时间)
💻
📖 第 1 页 / 共 3 页
字号:
        <TR>
          <TD>
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR onclick="expandIt('elThree','0'); return false">
                <TD rowSpan=2 width=5></TD>
                <TD class=txleft1 height=23>
                  <DIV class=parent id=elThreeParent><IMG border=0 height=9 
                  id=elThreeImg src="SQL的数据操作语句-北京交大.files/plus.gif" 
                  width=9>&nbsp;&nbsp;<A class=item 
                  href="http://distance.njtu.edu.cn/course/8100062/kejian/web/3-2.htm#">数据库的发展动向</A></DIV></TD></TR>
              <TR>
                <TD>
                  <DIV class=child id=elThreeChild>
                  <TABLE border=0 borderColor=#c0c0c0 borderColorDark=#ffffff 
                  borderColorLight=#ffffff cellSpacing=1 width="100%">
                    <TBODY>
                    <TR>
                      <TD class=txleft2 onmouseout=bbar(this) 
                      onmouseover=abar(this)><A 
                        href="http://distance.njtu.edu.cn/course/8100062/kejian/web/8-1.htm" 
                        target=_self>客户机/服务器的结构</A></TD></TR>
                    <TR>
                      <TD class=txleft2 onmouseout=bbar(this) 
                      onmouseover=abar(this)><A 
                        href="http://distance.njtu.edu.cn/course/8100062/kejian/web/8-2.htm" 
                        target=_self>分布式数据库系统</A></TD></TR>
                    <TR>
                      <TD class=txleft2 onmouseout=bbar(this) 
                      onmouseover=abar(this)><A class=item 
                        href="http://distance.njtu.edu.cn/course/8100062/kejian/web/8-3.htm" 
                        target=_self>并行数据库基础</A></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD bgColor=#cecfce height=1></TD></TR></TBODY></TABLE><!-- End of Left --></TD>
    <TD vAlign=top>
      <TABLE border=0 borderColor=#c0c0c0 borderColorDark=#ffffff 
      borderColorLight=#ffffff cellSpacing=1 width="100%">
        <TBODY>
        <TR bgColor=#f2f2f2 height=22 vAlign=right>
          <TD class=txleft2>
            <DIV align=mid><FONT color=#000000><A 
            href="http://distance.njtu.edu.cn/course/8100062/kejian/web/kcnr_main.htm" 
            target=_self>课程内容</A> &gt;&gt; 
      SQL的数据操作语句</FONT></DIV></TD></TR></TBODY></TABLE>
      <TABLE align=center border=0 cellPadding=3>
        <TBODY>
        <TR height=10>
          <TD></TD></TR>
        <TR>
          <TD>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2>&nbsp;&nbsp;&nbsp;&nbsp;SQL的数据操作功能包括SELECT,INSERT,DELETE和UPDATE四个语句,即检索和更新(包括增,删,改)两部分功能. 
            </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>1.SQL查询语句</B> <BR>SQL语言的核心语句是数据库查询语句,其简单格式是: <BR>SELECT 
            目标列 FROM 基本表(或视图) <BR>[WHERE 条件表达式] <BR>[GROUP BY 列名1 [HAVING 
            内部函数表达式]] <BR>[ORDER BY 列名2 {ASC/DESC}]; 
            <BR>语句的功能是:根据WHERE子句中的条件表达式,从基本表(或视图)中找出满足条件的元组,按SELECT子句中的目标列,选出元组中的目标列,形成结果表.如果ORDER 
            BY子句,则结果表要根据指定的列名2按升序或降序排序.GROUP 
            BY子句将列名1分组.分组的附加条件用HAVING短语给出,只有满足内部函数表达式的组才会被输出. 
            <BR>SQL语句对数据库的操作十分灵活方便,原因在于SELECT语句中的成分丰富多样,有许多可选形式,尤其是目标列和目标表达式,下面用例子来详细说明,例子涉及的是"学生-课程"数据库. 
            </FONT>
            <P 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>(1)简单查询:</B> <BR><B>[例4.1]</B>求数学系学生的学号,姓名. <BR>SELECT 
            S#,SNAME FROM S WHERE SD='MA'; <BR><B>[例4.2]</B>求选修了课程的学生的学号. 
            <BR>SELECT DISTINCT S# FROM SC; 
            <BR>这里SELECT后面的DISTINCT表示要在结果中去掉重复的S#. <BR><B>[例4.3]</B>求全体学生的详细信息. 
            <BR>SELECT * FRON S; <BR><B>[例4.4]</B>查询经过计算的值.求学生学号和学生的出生年份. 
            <BR>SELECT S#,1989-AGE FROM S; 
            <BR>SELECT语句的后面可以是字段名,也可以是字段名和常数组成的算术表达式,还可以是字符串常数. <BR>如:SELECT 
            S#,'B',1998-AGE FROM S; <BR>结果是:S# <BR>S1 B 1969(AGE=29) <BR>S2 B 
            1968(AGE=30) <BR><B>[例4.5]</B>要求对结果进行排序(即使用ORDER BY)的查询. 
            <BR>求选修C1课程的学生学号和得分,结果按分数降序排列. <BR>SELECT S#,GRADE FROM SC WHERE 
            C#='C1' <BR>ORDER BY GRADE DESC; </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>(2)连接查询:</B>若查询涉及两个以上的表,则称之为连接查询,连接查询功能是关系数据库最重要的查询功能之一. 
            <BR><B>[例4.6]</B>查找学生以及其选修课程的信息. <BR>SELECT S.*,SC.* FROM S,SC WHREE 
            S.S#=SC.S# 
            <BR>WHERE后面的条件S.S#=SC.S#称为连接条件或连接谓语,连接谓语中的字段称为连接字段.连接字段的类型必须是可比的,但不必相同,当然大多数情况下是相同类型的.连接谓语中的比较符可以是=,&lt;,&gt;,&lt;=,&gt;=,.当比较符为'='时,就是等值连接的情况.如本例,若又在目标中去掉一个相同的字段名,则为自然连接. 
            <BR><B>[例4.7]</B>带有其它条件的连接查询. <BR>求选修C1课程且成绩为B以上的学生及成绩. <BR>SELECT 
            S.S#,SNAME,SD,AGE,GRADE FROM S,SC <BR>WHERE S.S#=SC.S# AND 
            SC.C#='C1' <BR>AND(SC.GRADE='A' OR SC.GRADE='B'); 
            <BR>连接谓词可以和其他谓词组合起来,形成各种复合条件. 
            <BR>连接查询可以是两个表的连接,也可以是两个以上表的连接(常称多表连接),也可以是一个表自身的连接. </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>(3)嵌套查询:</B>嵌套查询亦称为子查询.嵌套查询是一个SELECT-FROM-WHERE查询块可以嵌入另一个查询块之中.在SQL中允许多层嵌套. 
            <BR><B>[例4.8]</B>求选修了课程'J'的学生的学号和姓名. <BR>SELECT S#,SNAME FROM S 
            WHERE S# IN <BR>(SELECT S# FROM SC WHERE C# IN) <BR>(SELECT C# FROM 
            C WHERE CNAME='J')); 
            <BR>子查询在上一级查询处理之前求解,即嵌套查询是从里向外处理的,这样,外层查询可以利用内层查询的结果,在[例14.8]中若最内层查询结果为C4,原查询可以等价于: 
            <BR>SELECT S#,SNAME FROM S WHERE S# IN <BR>(SELECT S# FRON SC WHERE 
            X#='C4'); <BR>若这个内层查询结果为S2,S3,S6,则原查询便为: <BR>SELECT S#,SNAME FRON S 
            WHERE S# IN ('S2','S3','S6'); 
            <BR>从本例看到,在查询涉及多个关系时,用嵌套查询逐次求解,层次分明,容易理解也容易书写,具有结构化程序设计的优点. 
            <BR>在嵌套查询中,最常用的是谓词IN.若用户能确切知道内层查询返回的单值,则可以用比较算符. </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>(4)视图的查询:</B>视图定义后,用户可以如对基本表那样对视图进行查询. <BR>如:SELECT S#,SA 
            FRON CS-S WHERE SA&lt;20; 
            <BR>系统执行此查询时,首先把它转换成等价的对基本表的查询,然后执行此查询,即当查询视图表时,系统首先从数据字典中取出该视图的定义,然后把定义中的查询语句和对该视图查询语句结合起来,形成一个修正的查询语句.对上例,修正后的查询语句为: 
            <BR>SELECT S#,SA FROM S WHERE SD='CS' AND SA&lt;20; 
            <BR>由于视图的查询实质上是对基本表的查询,因此基本表的变化可以反映到视图上,视图就如同'窗口'一样,通过视图可以看到基本表的动态变化. 
            </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>2.SQL插入语句</B> <BR>&nbsp;&nbsp;&nbsp; 插入语句的一般格式为: 
            <BR>INSERT INTO 表名[(字段名[,字段名]...)] <BR>VALUES(常量[,常量]...); 
            <BR>INSERT INTO 表名[(字段名[,字段名]...)]; <BR>子查询; <BR>&nbsp;&nbsp;&nbsp; 
            第一种格式把一个新记录插入指定的表中,第二中格式把查询的结果插入表中,若表中有些字段在插入语句中没有出现,则在这些字段上的值取空值NULL,当然在表定义中说明了NOT 
            NULL的字段在插入时不能取NULL.若插入语句中没有指出字段名,则新记录必须在每个字段上均有值. </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>[例4.9]</B>单记录插入. <BR>把一个新学生记录插入表中,其有关信息为:S10,姓名Zhang 
            Ming,信息系IS,18岁 <BR>INSERT INTO S VALUES('S10','Zhang Ming','IS',18) 
            <BR><B>[例4.10]</B>插入一个选课记录('S15','C10','A'); <BR>INSERT INTO SC 
            (S#,C#,G) VALUES ('S15','C10','A'); 
            <BR>插入和删除与更新一样,都会引起破坏数据完整性的问题,如本例中S15在S表中不存在,C10在C表中也不存在,这就破坏了参照完整性.支持关系模型的系统应自动地检查数据的完整性,对破坏完整性的操作拒绝执行.所以这个新行就不能插入. 
            <BR><B>[例4.11]</B>多记录插入. <BR>下面语句是求一个系中学生的平均年龄,并把结果存入数据库中. 
            <BR>CREATE TABLE DEPTAGE(SDEPT CHAR(15),AVEAGE SMALLINT); <BR>INSERT 
            INTO DEPTAGE(SDEPT,AGEAVE) <BR>SELECT SD,AVG(AGE) FROM S GROUP BY 
            SD; </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>3.SQL的删除语句</B> <BR>删除语句的一般格式为: <BR>DELETE FROM 表名[WHERE 
            谓词]; <BR>删除语句从指定表中删除满足谓词的那些记录.没有WHERE子句时表示删去全部记录,但表的定义仍在数据字典中. 
            </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>[例4.12]</B>单个记录删除.例如,要把学生S9删除,可以使用下面删除语句: <BR>DELETE FROM 
            S WHERE S#='S9'; <BR>执行删除操作也可能破坏数据的完整性,如本例. 
            <BR><B>[例4.13]</B>多个记录删除.例如,要删除所有的学生选课记录,可以使用下面删除语句 <BR>DELECT FROM 
            SC; <BR>执行操作后,SC成为一个空表. 
            <BR><B>[例4.14]</B>带有子查询的删除.删除计算机科学系全体学生的选课记录. <BR>DELETE FROM SC 
            WHRER 'CS'= <BR>(SELECT SD FROM S WHRER S.S#=SC.S#); </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>4.SQL的更新语句</B> <BR>(<B>1)更新语句的一般格式:</B> <BR>UPDATE 表名 SET 
            字段=表达式[,字段=表达式]... <BR>[WHERE 谓词]; 
            <BR>更新语句修改指定表中满足谓词的元组,把这些元组按SET子句的表达式修改相应字段上的值. </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>[例4.15]</B>单记录修改,如把学生S1的姓名改为'WANG PING',也可以使用以下语句: 
            <BR>UPDATE S SET SNAME='WANG PING' WHRER S#='S1' 
            <BR>[例4.16]多记录修改,如把所有的学生的年龄加2,可以使用以下语句: <BR>UPDATE S SET SA=SA+2 
            <BR><B>[例4.17]</B>具有子查询的更新,如把数学系全体学生的成绩置为零,可以使用如下语句: <BR>UPDATE SC 
            SET G='0' WHERE 'MA' <BR>(SELECT SD FROM S WHERE S.S#=SC.S#); 
            <BR><B>[例4.18]</B>多个表的更新 
            <BR>在UPDATE语句中,一次只能对一个表更新,这就会产生破坏参照完整性的问题.例如,把S2的学号该为S9. <BR>UPDATE 
            S SET S#='S9' WHERE S#='S2'; <BR>UPDATE SC SET S#='S9' WHERE 
            S#='S2'; 
            <BR>在执行了第一个更新语句之后,数据库已处于不一致的状态,因为在SC表中某些记录(即S#='S2'的那些SC记录)的S#值在S表中不存在,这就违反了关系模型的参照完整性,只有执行了第二个更新语句之后,数据库才重新处于一致状态.因此,必须保证这两个更新语句要么都执行,要么都不执行.在DB2中引入事务(Transaction)的概念来解决这个问题,这里不在细述. 
            </FONT>
            <P align=left 
            style="LINE-HEIGHT: 200%; MARGIN-BOTTOM: 0px; MARGIN-TOP: 0px"><FONT 
            size=2><B>(2)视图的执行:</B>对视图修改最终要转换成对基本表的修改(修改指INSERT,UPDATE和DELETE三类操作),如 
            <BR>UPDATE CS-S SET SN='WANG PING' WHERE S#='S1'; <BR>将转换成对基本表S的更新: 
            <BR>UPDATE S SET SN='WANG PING' WHERE S#='CS' AND S#='S1'; 
            <BR>INSERT INTO CS-S VALUES('S12','YX','CS',19); <BR>将转换成对基本表的插入: 
            <BR>INSERT INTO S VALUES('S12','YX','CS',19); 
            <BR>在关系数据库中,不是所有的视图都是可以修改的,也就是说,有些视图的修改不能唯一地有意义地转换成对基本表的修改,例如: 
            <BR>UPDATE S-G SET GAVG=90 WHERE S#='S1'; 
            <BR>由于S-G中的一个元组是由SC中若干行经过求平均得到的,因此对视图S-G的更新就无法转换成对SC的更新,所以视图S-G是不可更新的. 
            </FONT></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 width=750 cellspace="0" cellpading="0">
  <TBODY>
  <TR>
    <TD bgColor=#c8c8c8 height=1 width="100%"></TD></TR>
  <TR height=10>
    <TD></TD></TR>
  <TR>
    <TD align=middle height=16>北方交通大学计算机与信息技术学院基础教研室</TD></TR>
  <TR>
    <TD align=middle height=16>mailto: <A 
      href="mailto:xhl@computer.njtu.edu.cn">xhl@computer.njtu.edu.cn</A></TD></TR>
  <TR>
    <TD align=middle height=16>Copyright &copy; distance.njtu.edu.cn All rights 
      reserved </TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -