例如,一个作者也许写了许多不同的书,或者一本书也许由许多不同的作者共同完成。当两个表的字段之间有这种“多对多”的关系时,你需要使用第三个表来指明这种关系。 但是,在许多情况下,两个表之间的关系并不复杂。比如你需要指明表titles和表publishers之间的关系。因为一个书名不可能与多个出版商相匹配,你不需要通过第三个表来指明这两个表之间的关系。要指明表titles和表publishers之间的关系,你只要让这两个表有一个公共的字段就可以了。在数据库pubs中,表titles和表publishers都有一个名为pub_id的字段。如果你想得到书名及其出版商的一个列表,你可以使用如下的语句: SELECT title,pub_name FROM titles,publishers WHERE titles.pub_id=publishers.pub_id 当然,如果一本书是由两个出版商联合出版的,那么你需要第三个表来代表这种关系。 通常,当你予先知道两个表的字段间存在“多对多”关系时,就使用第三个表来关联这两个表。反之,如果两个表的字段间只有“一对一”或“一对多”关系,你可以使用公共字段来关联它门。 操作字段 通常,当你从一个表中取出字段值时,该值与创建该表时所定义的字段名联系在一起。如果你从表authors中选择所有的作者名字,所有的值将会与字段名au_lname相联系。但是在某些情况下,你需要对字段名进行操作。在SELECT语句中,你可以在缺省字段名后面仅跟一个新名字来取代它。例如,可以用一个更直观易读的名字Author Last Name来代替字段名au_lname: SELECT au_lname "Author Last Name" FROM authors 当这个SELECT语句执行时,来自字段au_lname的值会与“Author Last Name”相联系。查询结果可能是这样: Author Last Name …………………………………………………………………….. White Green Carson O’Leary Straight … (23 row(s) affected) 注意字段标题不再是au_lname,而是被Author Last Name所取代。 你也可以通过执行运算,来操作从一个表返回的字段值。例如,如果你想把表titles中的所有书的价格加倍,你可以使用下面的SELECT语句: SELECT price*2 FROM titles 当这个查询执行时,每本书的价格从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询: SELECT price "Original price", price*2 "New price" FROM titles 当数据从表titles中取出时,原始价格显示在标题Original price下面,加倍后的价格显示在标题New price下面。结果可能是这样: original price new price ………………………………………………………………. 39.98 11.95 23.90 5.98 39.98 … (18 row(s) affected) 你可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。你也可以一次对多个字段进行运算,例如: SELECT price*ytd_sales "total revenue" FROM titles 在这个例子中,通过把价格与销售量相乘,计算出了每种书的总销售额。这个SELECT语句的结果将是 这样的: total revenue …………………………………………….. 81,859,05 46,318,20 55,978,78 81,859,05 40,619,68 … (18 row(s) affected) 最后,你还可以使用连接运算符(它看起来像个加号)来连接两个字符型字段: SELECT au_fname+" "+au_lname "author name" FROM authors 在这个例子中,你把字段au_fname和字段au_lname粘贴在一起,中间用一个逗号 隔开,并把查询结果的标题指定为author name。这个语句的执行结果将是这样的: author names ………………………………………………………… Johnson White Marjorie Green Cheryl Carson Michael O’Leary Dean Straight … (23 row(s) affected) 可以看到,SQL为你提供了对查询结果的许多控制。你应该在ASP编程过程中充分利用这些优点。
(出处:ChinaAsp ) |