数据库表设计中,一个字段关联两个表,可以吗?这样关联有什么意义吗?

数据库表设计中,一个字段关联两个表,可以吗?这样关联有什么意义吗?,第1张

可以关联两个表,或更多表。

关联可以减少数据的重复存储,保证数据的正确性。

保证数据的正确(完整性)是很重要的。

关联可以防止更新数据时,破坏数据的完整性。

比如当价格表和销售表不关联到商品表时,

商品名称变更时需要修改三张表,如果一时疏忽可能遗漏某个表的更新处理。

使用外联

仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回

FROM

子句中提到的至少一个表或视图的所有行,只要这些行符合任何

WHERE

HAVING

搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。

Microsoft®

SQL

Server™

2000

对在

FROM

子句中指定的外联接使用以下

SQL-92

关键字:

LEFT

OUTER

JOIN

LEFT

JOIN

RIGHT

OUTER

JOIN

RIGHT

JOIN

FULL

OUTER

JOIN

FULL

JOIN

SQL

Server

支持

SQL-92

外联接语法,以及在

WHERE

子句中使用

*=

=*

运算符指定外联接的旧式语法。由于

SQL-92

语法不容易产生歧义,而旧式

Transact-SQL

外联接有时会产生歧义,因此建议使用

SQL-92

语法。

使用左向外联接

假设在

city

列上联接

authors

表和

publishers

表。结果只显示在出版商所在城市居住的作者(本例中为

Abraham

Bennet

Cheryl

Carson)。

若要在结果中包括所有的作者,而不管出版商是否住在同一个城市,请使用

SQL-92

左向外联接。下面是

Transact-SQL

左向外联接的查询和结果:

USE

pubs

SELECT

a.au_fname,

a.au_lname,

p.pub_name

FROM

authors

a

LEFT

OUTER

JOIN

publishers

p

ON

a.city

=

p.city

ORDER

BY

p.pub_name

ASC,

a.au_lname

ASC,

a.au_fname

ASC

left join

join

主外键是两种对表的约束。

例如:

学生表student(学号(id),姓名(name),性别(sex))

表内有:1,aa,女

课程表subject(课程编号(id),课程名(name))

表内有:1,语文

成绩表grade(成绩编号(id),学号(stu_id),课程号(sub_id),成绩(grade))

表内有:1,1,1,90

成绩表的学号就是学生表的学号相对应,并且为学生表的主键,这样就称成绩表中的学号是学生表的外键,同理,成绩表中的课程号是课程表的外键。

select * from  student as s inner join subject as su on su.stu_id=s.id inner join grade as g on g.sub_id=su.id where 1.

扩展资料:

注意事项

SQL 连接(JOIN) 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。

左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配。

假设两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段。

不同的 SQL JOIN可以使用的不同的 SQL JOIN 类型:

INNER JOIN:如果表中有至少一个匹配,则返回行

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

FULL JOIN:只要其中一个表中存在匹配,则返回行(MySQL不支持FULL JOIN)

例如:

mysql>select * from access_log

+-----+---------+-------+------------+

| aid | site_id | count | date       |

+-----+---------+-------+------------+

|   1 |       1 |    45 | 2016-05-10 |

|   2 |       3 |   100 | 2016-05-13 |

|   3 |       1 |   230 | 2016-05-14 |

|   4 |       2 |    10 | 2016-05-14 |

|   5 |       5 |   205 | 2016-05-14 |

|   6 |       4 |    13 | 2016-05-15 |

|   7 |       3 |   220 | 2016-05-15 |

|   8 |       5 |   545 | 2016-05-16 |

|   9 |       3 |   201 | 2016-05-17 |

+-----+---------+-------+------------+

9 rows in set


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9938397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存