zoukankan      html  css  js  c++  java
  • 关系数据库 第二瓣

    多表连接查询

      连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。

    1.内连接

      使用内连接时,如果两个表的相关字段满足连接条件,则从这两个表中提取数据并组合成新的记录。

      在非ANSI标准的实现中,连接操作时在WHERE子句中执行的,在ANSI SQL-92中,连接是在JOIN子句中执行的。这些连接方式分别称为theta连接和ANSI连接。

      内连接格式为:FROM 表1 [INNER] JOIN 表2 ON 连接条件

      形如:

      SELECT * FROM Student INNER JOIN SC ON Student.Sno = SC.Sno;

      SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade, FROM Student JOIN SC ON Student.Sno = SC.Sno;

          SELECT Sname, Cname, Grade FROM Student S JOIN SC ON S.Sno = SC.Sno

      注:当为表指定了别名后,在查询语句中的其他地方都要使用别名。

    2.自连接

      自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但在逻辑上分为两张表。使用自连接时,必须为两张表取别名,使之在逻辑上成为两张表。

      SELECT S2.Sname, S2.Sdept FROM Student S1 JOIN Student S2 ON S1.Sdept = S2.Sdept WHERE S1.Sname= '王智博' AND S2.Sname!='王智博'

    3.外连接

      内连接中只有满足连接条件的元组才能作为结果输出,但有时我们也希望输出那些不满足连接条件的元组的信息,这是就需使用外连接。

      外连接只限制一张表中的数据必须满足连接条件,二另一张表中的数据可以不满足连接条件。

      ANSI方式的外连接语法格式为:

      FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON 连接条件

      左外连接:限制表2中的数据必须满足连接条件,而不管表1中的数据是否满足连接条件,均输出表1中的内容。

      右外连接:限制表1中的数据必须满足连接条件,而不管表2中的数据是否满足连接条件,均输出表2中的内容。

      SELECT Student.Sno, Sname, Cno, Grade FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno

    4.子查询

      在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。

      1.使用子查询进行基于集合的测试

        SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname='王智博') AND Sname!='王智博'

      2.使用子查询进行比较测试

        SELECT Sno,Grade FROM SC WHERE Cno='C02' and Grade>(SELECT AVG(Grade) FROM SC WHERE Cno='C02')

      3.使用子查询进行存在性测试

        SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC JOIN Student ON Sno = Student.Sno AND Cno='C01')

    数据更改功能

      1.插入数据

        INSERT [INTO] 表名 [(列名列表)] VALUES (值列表)

        例如:

        INSERT INTO SC (Sno, Cno, XKLB) VALUES ('9521105', 'C01', '必修');

        INSERT INTO SC VALUES ('9521105', 'C01', '必修'); --如果全部赋值,则不必写列名列表  

      2.更新数据

        UPDATE 表名 SET 列名=表达式 [,…n] [WHERE 更新条件]

        例如:

        UPDATE Student SET Sage = Sage +1

        UPDATE Student SET Sage = 21 WHERE Sno='950101'

        UPDATE Student SET Sage = 21 WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept = '计算机系')

        UPDATE Student SET Grade =21 FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Sdept='计算机系'

      3.删除数据

        DELETE [FROM] 表名 [WHERE 删除条件]

        DELETE FROM SC;

        DELETE FROM SC FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Sdept='计算机系' AND Grade<60;

        

        

      

      

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/CanWork/p/3355723.html
Copyright © 2011-2022 走看看