linux之SQL语句简明教程外部连接
“huang26”通过精心收集,向本站投稿了5篇linux之SQL语句简明教程外部连接,下面是小编为大家整理后的linux之SQL语句简明教程外部连接,仅供大家参考借鉴,希望大家喜欢!
篇1:linux之SQL语句简明教程外部连接
之前我们看到的左连接 (left join),又称内部连接 (inner join),在这个情况下,要两个表格内都有同样的值,那一笔资料才会被选出。那如果我们想要列出一个表格中每一笔的资料,无论它的值在另一个表格中有没有出现,那该怎么办呢?在这个时候,我们就需要用到SQL OUTER JOIN(外部连接) 的指令。
外部连接的语法是依数据库的不同而有所不同的。举例来说,在 Oracle 上,我们会在WHERE子句中要选出所有资料的那个表格之后加上一个 “(+)” 来代表说这个表格中的所有资料我们都要。
假设我们有以下的两个表格:
Store_Information表格
Store_NameSalesTxn_DateLos Angeles150005-Jan-San Diego25007-Jan-1999Los Angeles30008-Jan-1999Boston70008-Jan-1999Geography表格
Region_NameStore_NameEastBostonEastNew YorkWestLos AngelesWestSan Diego我们需要知道每一间店的营业额,
如果我们用一个普通的连接,我们将会漏失掉 'New York' 这个店,因为它并不存在于Store_Information这个表格。所以,在这个情况下,我们需要用外部连接来串联这两个表格:
SELECT A1.Store_Name, SUM(A2.Sales) SALESFROM Georgraphy A1, Store_Information A2
WHERE A1.Store_Name = A2.Store_Name (+)
GROUP BY A1.Store_Name;
我们在这里是使用了 Oracle 的外部连接语法。
结果:
Store_NameSALESBoston700New YorkLos Angeles1800San Diego250请注意: 当第二个表格没有相对的资料时,SQL 会传回 NULL 值。在这一个例子中,'New York' 并不存在于Store_Information表格,所以它的 “SALES” 栏位是 NULL。
Linux实测结果:
篇2:linux之SQL语句简明教程表格连接
现在我们介绍连接 (Join) 的概念,要了解连接,我们需要用到许多我们之前已介绍过的指令。我们先假设我们有以下的两个表格,
Store_Information表格
Store_NameSalesTxn_DateLos Angeles150005-Jan-1999San Diego25007-Jan-1999Los Angeles30008-Jan-1999Boston70008-Jan-1999Geography表格
Region_NameStore_NameEastBostonEastNew YorkWestLos AngelesWestSan Diego而我们要知道每一区 (Region_Name) 的营业额 (Sales)。Geography这个表格告诉我们每一区有哪些店,而Store_Information告诉我们每一个店的营业额。若我们要知道每一区的营业额,我们需要将这两个不同表格中的资料串联起来。当我们仔细了解这两个表格后,我们会发现它们可经由一个相同的栏位,Store_Name,连接起来。我们先将 SQL 句列出,之后再讨论每一个子句的意义:
SELECT A1.Region_Name REGION, SUM(A2.Sales) SALESFROM Geography A1, Store_Information A2
WHERE A1.Store_Name = A2.Store_Name
GROUP BY A1.Region_Name;
结果:
REGIONSALESEas700West2050在第一行中,我们告诉 SQL 去选出两个栏位:第一个栏位是Geography表格中的 Region_Name 栏位 (我们取了一个别名叫做 REGION);第二个栏位是Store_Information表格中的 Sales 栏位 (别名为 SALES),
请注意在这里我们有用到表格别名:Geography表格的别名是 A1,Store_Information表格的别名是 A2。若我们没有用表格别名的话, 第一行就会变成
SELECT Geography.Region_Name REGION, SUM(Store_Information.Sales) SALES很明显地,这就复杂多了。在这里我们可以看到表格别名的功用:它能让 SQL 句容易被了解,尤其是这个 SQL 句含盖好几个不同的表格时。
接下来我们看第三行,就是WHERE子句。 这是我们阐述连接条件的地方。在这里,我们要确认Geography表格中 Store_Name 栏位的值与Store_Information表格中 Store_Name 栏位的值是相等的。这个WHERE子句是一个连接的灵魂人物,因为它的角色是确定两个表格之间的连接是正确的。如果WHERE子句是错误的,我们就极可能得到一个笛卡儿连接 (Cartesian Join)。笛卡儿连接会造成我们得到所有两个表格每两行之间所有可能的组合。在这个例子中,笛卡儿连接会让我们得到 4 x 4 = 16 行的结果。
Linux实测结果:
1.先创建Geography表
2.相表中插入响应的数据
3.连接查询
篇3:linux之SQL语句简明教程IN
在 SQL 中,在两个情况下会用到IN这个指令;这一页将介绍其中之一 -- 与WHERE有关的那一个情况,在这个用法下,我们事先已知道至少一个我们需要的值,而我们将这些知道的值都放入IN这个子句。IN指令的 语法为下:
SELECT “栏位名”FROM “表格名”
WHERE “栏位名” IN ('值一', '值二', ...);
在括弧内可以有一或多个值,而不同值之间由逗点分开。值可以是数目或是文字。若在括弧内只有一个值,那这个子句就等于
WHERE “栏位名” = '值一'举例来说,若我们要在以下的Store_Information表格中找出所有含盖 Los Angeles 或 San Diego 的资料,
Store_Information表格
Store_NameSalesTxn_DateLos Angeles150005-Jan-San Diego25007-Jan-1999San Francisco30008-Jan-1999Boston70008-Jan-1999我们就打入,
SELECT *FROM Store_Information
WHERE Store_Name IN ('Los Angeles', 'San Diego');
结果:
Store_NameSalesTxn_DateLos Angeles1500Jan-05-1999San Diego250Jan-07-1999Linux实测结果如下:
篇4:linux之SQL语句简明教程CREATEINDEX
索引 (Index) 可以帮助我们从表格中快速地找到需要的资料,举例来说,假设我们要在一本园艺书中找如何种植青椒的讯息。若这本书没有索引的话,那我们是必须要从头开始读,直到我们找到有关种直青椒的地方为止。若这本书有索引的话,我们就可以先去索引找出种植青椒的资讯是在哪一页,然后直接到那一页去阅读。很明显地,运用索引是一种有效且省时的方式。
从资料库表格中寻找资料也是同样的原理。如果一个表格没有索引的话,资料库系统就需要将整个表格的资料读出 (这个过程叫做'table scan')。若有适当的索引存在,资料库系统就可以先由这个索引去找出需要的资料是在表格的什么地方,然后直接去那些地方抓资料。这样子速度就快多了。
因此,在表格上建立索引是一件有利于系统效率的事。一个索引可以涵盖一或多个栏位。建立索引的语法如下:
CREATE INDEX “INDEX_NAME” ON “TABLE_NAME” (COLUMN_NAME);现在假设我们有以下这个表格,
Customer表格
栏位名称资料种类First_Namechar(50)Last_Namechar(50)Addresschar(50)Citychar(50)Countrychar(25)Birth_Datedatetime若我要在 Last_Name @谖簧辖ㄒ索引,我就打入以下的指令,
CREATE INDEX IDX_CUSTOMER_LAST_NAMEON Customer (Last_Name);
若我们要在 Last_Name 这个栏位上建一个索引,我们就打入以下的指令,
CREATE INDEX IDX_CUSTOMER_LOCATIONON Customer (City, Country);
索引的命名并没有一个固定的方式,
通常会用的方式是在名称前加一个字首,例如 “IDX_” ,来避免与资料库中的其他物件混淆。另外,在索引名之内包括表格名及栏位名也是一个好的方式。
请读者注意,每个资料库会有它本身的CREATE INDEX语法,而不同资料库的语法会有不同。因此,在下指令前,请先由资料库使用手册中确认正确的语法。
Linux实测如下:
篇5:linux之SQL语句简明教程BETWEEN
IN这个指令可以让我们依照一或数个不连续 (discrete) 的值的限制之内抓出数据库中的值,而BETWEEN则是让我们可以运用一个范围 (range) 内抓出数据库中的值,BETWEEN这个子句的语法如下:
SELECT “栏位名”FROM “ 表格名”
WHERE “栏位名” BETWEEN '值一' AND '值二';
这将选出栏位值包含在值一及值二之间的每一笔资料。
举例来说,若我们要由Store_Information表格中找出所有介于 January 6, 1999 及 January 10, 1999 中的资料,
Store_Information表格
Store_NameSalesTxn_DateLos Angeles150005-Jan-1999San Diego25007-Jan-1999San Francisco30008-Jan-1999Boston70008-Jan-1999我们就打入,
SELECT *FROM Store_Information
WHERE Txn_Date BETWEEN 'Jan-06-1999' AND 'Jan-10-1999';
请读者注意:在不同的数据库中,日期的储存法可能会有所不同,
在这里我们选择了其中一种储存法。
结果:
Store_NameSalesTxn_DateSan Diego25007-Jan-1999San Francisco30008-Jan-1999Boston70008-Jan-1999Linux实测结果如下:【linux之SQL语句简明教程外部连接】相关文章:






文档为doc格式