数据库连接查询

由于下面的图被覆盖掉了,所以无法显示了。     

连接操作是大家基本都用到的,现在归纳总结如下:

      通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。 
     连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。
SQL-92标准所定义的FROM子句的连接语法格式为: FROM join_table join_type join_table [ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。 join_type 指出连接类型,可分为三种:内连接外连接交叉连接内连接(INNER JOIN)使用比 较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 的比较方式不同,内连接又分为等值连接自然连接不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) 和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 数据行。交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
    连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
    无论哪种连接都不能对text、ntext和image数据类型列进行直接连接。

下面就是交叉连接:
INPUT:
SELECT * FROM TABLE1
OUTPUT:
ROW       REMARKS
========== =======
row 1        Table 1
row 2        Table 1
row 3          Table 1
row 4        Table 1
 
INPUT:
SELECT * FROM TABLE2
OUTPUT:
ROW        REMARKS
========== ========
row 1           table 2
row 2          table 2
row 3           table 2
row 4          table 2
 
To join these two tables, type this:
INPUT:
SELECT * FROM TABLE1,TABLE2
OUTPUT:
ROW       REMARKS  ROW      REMARKS
========== ========== ========== ========
row 1               Table 1    row 1      table 2
row 1               Table 1    row 2      table 2
row 1               Table 1    row 3      table 2
row 1               Table 1    row 4      table 2
row 2                Table 1    row 1      table 2
row 2               Table 1    row 2      table 2
row 2               Table 1    row 3      table 2
row 2               Table 1    row 4      table 2
row 3               Table 1    row 1      table 2
row 3               Table 1    row 2      table 2
row 3               Table 1    row 3      table 2
row 3               Table 1    row 4      table 2
row 4               Table 1    row 1      table 2
row 4               Table 1    row 2      table 2
row 4               Table 1    row 3      table 2
row 4               Table 1    row 4      table 2

各种连接查询实例

基本表:

(1)CUSTOMER

INPUT:

SELECT * FROM CUSTOMER

OUTPUT:

NAME       ADDRESS    STATE  ZIP        PHONE       REMARKS
========== ========== ====== ========== ========= ==========
TRUE WHEEL 55O HUSKER NE     58702      555-4545    NONE
BIKE SPEC  CPT SHRIVE LA     45678      555-1234    NONE
LE SHOPPE  HOMETOWN   KS     54678      555-1278    NONE
AAA BIKE   10 OLDTOWN NE     56784      555-3421    JOHN-MGR
JACKS BIKE 24 EGLIN   FL     34567      555-2314    NONE

(2) PART

INPUT:

SELECT * FROM PART

OUTPUT:

    PARTNUM DESCRIPTION                PRICE
=========== ==================== ===========
         54 PEDALS                     54.25
         42 SEATS                      24.50
         46 TIRES                      15.25
         23 MOUNTAIN BIKE             350.45
         76 ROAD BIKE                 530.00
         10 TANDEM                   1200.00

(3) ORDERINFO

INPUT:

         SELECT * FROM ORDERINFO

OUTPUT:

  ORDEREDON NAME           PARTNUM    QUANTITY REMARKS
=========== ========== =========== =========== =======
15-MAY-1996 TRUE WHEEL          23           6 PAID
19-MAY-1996 TRUE WHEEL          76           3 PAID
 2-SEP-1996 TRUE WHEEL          10           1 PAID
30-JUN-1996 TRUE WHEEL          42           8 PAID
30-JUN-1996 BIKE SPEC           54          10 PAID
30-MAY-1996 BIKE SPEC           10           2 PAID
30-MAY-1996 BIKE SPEC           23           8 PAID
17-JAN-1996 BIKE SPEC           76          11 PAID
17-JAN-1996 LE SHOPPE           76           5 PAID
 1-JUN-1996 LE SHOPPE           10           3 PAID
 1-JUN-1996 AAA BIKE            10           1 PAID
 1-JUL-1996 AAA BIKE            76           4 PAID
 1-JUL-1996 AAA BIKE            46          14 PAID
11-JUL-1996 JACKS BIKE          76          14 PAID

1 交叉连接

SELECT  O.ORDEREDON, O.NAME, O.PARTNUM, P.PARTNUM, P.DESCRIPTION

FROM ORDERINFO O, PART P

结果如图1,可见结果与交叉连接相同。结果为8414*6)行。

1

2 等值连接

SELECT  O.ORDEREDON, O.NAME, O.PARTNUM, P.PARTNUM, P.DESCRIPTION

FROM ORDERS O, PART P

WHERE O.PARTNUM = P.PARTNUM

结果如图2

2

自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 结果集合中所包括的列,并删除连接表中的重复列。

3 不等值连接

SELECT O.NAME, O.PARTNUM, P.PARTNUM, O.QUANTITY * P.PRICE TOTAL

FROM ORDERS O, PART P

WHERE O.PARTNUM > P.PARTNUM

4 内连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,O.NAME, O.PARTNUM

FROM PART P

JOIN ORDERINFO O ON O.PARTNUM = 54

如图3

3

5 右连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,O.NAME, O.PARTNUM

FROM PART P

RIGHT OUTER JOIN ORDERINFO O ON O.PARTNUM = 54

如图4,右连接补全右表

4

6 左连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,

O.NAME, O.PARTNUM

FROM PART P

LEFT OUTER JOIN ORDERINFO O ON O.PARTNUM = 10

5,左边补全。

5

7 自连接

INPUT:

SELECT * FROM TABLE1, TABLE1

OUTPUT:

ROW        REMARKS    ROW        REMARKS
========== ========== ========== ========
row 1      Table 1    row 1      Table 1
row 1      Table 1    row 2      Table 1
row 1      Table 1    row 3      Table 1
row 1      Table 1    row 4      Table 1
row 2      Table 1    row 1      Table 1
row 2      Table 1    row 2      Table 1
row 2      Table 1    row 3      Table 1
row 2      Table 1    row 4      Table 1
row 3      Table 1    row 1      Table 1
row 3      Table 1    row 2      Table 1
row 3      Table 1    row 3      Table 1
row 3      Table 1    row 4      Table 1
row 4      Table 1    row 1      Table 1
row 4      Table 1    row 2      Table 1
...

自连接的上述写法在实际应用中不一定能。比如微软SQLSERVER有其自身的规定,详见帮助文档。上述写法在其中是不可以的。

8 半连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,O.NAME

FROM PART P

JOIN ORDERINFO O ON O.PARTNUM = 54

如图6

6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值