|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在执行崩溃恢复时,理解在一个数据库中的每一个表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的一个小镇的名字。 |
|