兰色精灵 发表于 2015-1-16 22:20:58

MSSQL网页编程之SQL循规蹈矩(17)JOIN子句

在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:JOIN子句
  不知你有无发明直到如今我们使用SELECT语句来检索的时分只能从一个表中举行。假如你想从两个表大概更多的表中举行检索,该怎样办呢?幸亏我们可使用SQL和干系数据库体系的一个很有效的特征,即"Join"。为了复杂申明,实践上"Join"就是使得干系数据库体系相干的东东。"Join"同意你从两个表大概更多的表毗连数据举行数据检索,而只必要使用一个SELECT语句。假如在FROM关头字以后有多个表的话,"Join"能够在SQLSELECT语句中辨认它们。
上面举个例子:
SELECT"list-of-columns"
FROMtable1,table2
WHERE"search-condition(s)"
"Join"
经由过程树模当你只处置一个表的时分会产生甚么事变可使得"Join"的注释更复杂,以是这里我没有利用"Join"。这个单一的数据库有事也被称为"flattable"(平表)。如今你有一个表的数据库用来检索一切主顾的信息和他们从你的商铺买了甚么,上面就是这个表的一切列:



每次一个新行被拔出到表中,一切的列都将被更新,如许就招致了不用要的”过剩数据”。好比,每次Jenny买器材,上面的行都将被拔出到表中:





为了不”过剩数据”,一个最好的办法:让数据库有两个表:个中一个用来对主顾坚持跟踪;别的一个用来对他们买甚么器材坚持跟踪。即有"Customer_info"表和"Purchases"表:
"Customer_info"表为:
customer_number


firstname


lastname


address


city


state


zip



"Purchases"表为:


customer_number


date


item


price


如今入手下手,不论主顾甚么时分举行反复的购物,只要第二个表"Purchases"必要更新。如许我们就削减了过剩的数据,也就是说我们规格化了这个数据库。
你细心点就会发明两个表中仍是有一个"cusomer_number"列是不异的。这个列包括了独自的主顾号,它将用来JOIN(毗连)两个表。上面举个例子来利用这两个表,假设你想搜刮主顾的名字和他们所买的器材,你可使用以下的语句来完成:
SELECTcustomer_info.firstname,customer_info.lastname,purchases.item
FROMcustomer_info,purchases
WHEREcustomer_info.customer_number=purchases.customer_number;
特别的"Join"无为"InnerJoin"大概"Equijoin",这是一个最多见的"Join"范例,今后我们常常用利用到大概看到。
这里要注重每列老是在表名之前,这却也不是必须的。这是一个好的实习关于匡助你廓清列前面随着表的熟悉有很年夜匡助。假如两个表之间有一个不异的列,它就是必需的。我这里保举在利用JOIN的时分最幸亏一切列以后加上表名。
注重;下面形貌的这个语法将在尽年夜多半的数据库体系起感化,本教程的也是一样。可是了局你会发明你下面的语句其实不起感化,请细心反省一下吧。
固然你能够试一试修正以上的代码,你可使用JOIN(ANSISQL-92语律例范中的INNERJOIN):
SELECTcustomer_info.firstname,customer_info.lastname,purchases.item
FROMcustomer_infoINNERJOINpurchases
ONcustomer_info.customer_number=purchases.customer_number;
再举别的一个例子:
SELECTemployee_info.employeeid,employee_info.lastname,employee_sales.comission
FROMemployee_info,employee_sales
WHEREemployee_info.employeeid=employee_sales.employeeid;
这个例子将从employee_info和employee_sales表当选择当employee_info表的employeeid即是employee_sales表的employeeid的employeeid、emplyee_info表中lastname和employee_sales表中的comission数值。
从下面的例子中能够发明使用JION的语句比价简洁。既然有如许的有点,我们何乐而不为呢?
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

蒙在股里 发表于 2015-1-19 09:08:46

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)

飘飘悠悠 发表于 2015-1-28 06:00:11

大侠们有推荐的书籍和学习方法写下吧。

柔情似水 发表于 2015-2-5 18:37:39

入门没那么困难,精通没那么容易

山那边是海 发表于 2015-2-13 06:19:01

分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。

飘灵儿 发表于 2015-3-3 16:55:45

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

小女巫 发表于 2015-3-11 12:28:04

原来公司用过MYSQL自己也只是建个表写个SQL

仓酷云 发表于 2015-3-18 17:39:40

SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.

小妖女 发表于 2015-3-26 13:42:01

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
页: [1]
查看完整版本: MSSQL网页编程之SQL循规蹈矩(17)JOIN子句