婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > sql server關鍵字詳解大全(圖文)

sql server關鍵字詳解大全(圖文)

熱門標簽:如何在地圖標注自己店鋪 真人語音電銷機器人 400外呼系統合法 寧波人工外呼系統有效果嗎 廣州人工電銷機器人費用 電銷機器人被曝光 怎樣把地圖標注導入公司地址 洛陽外呼系統平臺 地圖標注一個圓圈怎么用

下面把sqlserver中cross apply和outer apply關鍵字具體介紹展示如下:

1.CROSS APPLY 和OUTER APPLY

MSDN解釋如下(個人理解不是很清晰):

使用 APPLY 運算符可以為實現查詢操作的外部表表達式返回的每個行調用表值函數。表值函數作為右輸入,外部表表達式作為左輸入。

通過對右輸入求值來獲得左輸入每一行的計算結果,生成的行被組合起來作為最終輸出。

APPLY 運算符生成的列的列表是左輸入中的列集,后跟右輸入返回的列的列表。

APPLY 有兩種形式:

CROSS APPLY 和 OUTER APPLY。

CROSS APPLY 僅返回外部表中通過表值函數生成結果集的行。

OUTER APPLY 既返回生成結果集的行,也返回不生成結果集的行,其中表值函數生成的列中的值為 NULL。

網上搜集的解釋如下(個人感覺好理解):

SQL Server數據庫操作中,在2005以上的版本新增加了一個APPLY表運算符的功能。新增的APPLY表運算符把右表表達式應用到左表表達式中的每一行。

它不像JOIN那樣先計算哪個表表達式都可以,APPLY必須先邏輯地計算左表達式。這種計算輸入的邏輯順序允許把右表達式關聯到左表表達式。

APPLY有兩種形式,一個是OUTER APPLY,一個是CROSS APPLY,區別在于指定OUTER,意味著結果集中將包含使右表表達式為空的左表表達式中的行,而指定CROSS,則相反,結果集中不包含使右表表達式為空的左表表達式中的行。

注意:若要使用 APPLY,數據庫兼容級別必須為 90。

下面我們做個例子:

比如有個類別表(Category)內容如下:

 

還有個類別明細表(CategoryDetail)內容如下:

下面我們來看看OUTER APPLY 的查詢結果:

 SELECT *
 FROM dbo.Category a
   OUTER APPLY ( SELECT *
      FROM  dbo.CategoryDetail b
      WHERE  b.CategoryId = a.Id
      ) AS c ;

由上圖可看出OUTER APPLY把左表中的信息查出后把右表中的信息也關聯出來了,當然當右表的信息為空(NULL)時,OUTER APPLY也會在結果集中顯示出來.

接下來我們看下CROSS APPLY的查詢結果:

 SELECT *
 FROM dbo.Category a
   CROSS APPLY ( SELECT *
      FROM  dbo.CategoryDetail b
      WHERE  b.CategoryId = a.Id
      ) AS c ;

根據這圖和上面的比較可看出,這個返回結果只有兩個,Category 表中的Tiger的信息沒有帶出來,因為在CategoryDetail 表中沒有對應的明細.

由以上信息可得出,OUTER APPLY 就相當于數學中的并集,而CROSS APPLY相當于數學中的交集,關于交集與并集的介紹如下:

并集為下圖中的所有紅色部分,即為A和B的全部:

交集為下圖中的紅色部分,也就是A和B相交的部分:

2.OUTER APPLY 和LEFT JOIN

LEFT JOIN 關鍵字會從左表 (Category) 那里返回所有的行,即使在右表 (CategoryDetail) 中沒有匹配的行。

注釋:在某些數據庫中, LEFT JOIN 稱為 LEFT OUTER JOIN。

下面我們來看看LEFT JOIN 的查詢結果(還是1.CROSS APPLY 和 OUTER APPLY中的例子):

 SELECT *
 FROM dbo.Category a
   LEFT JOIN dbo.CategoryDetail b ON b.CategoryId = a.Id ;

LEFT JOIN 關鍵字會從左表 (Category) 那里返回所有的行,即使在右表 (CategoryDetail) 中沒有匹配的行。效果和OUTER APPLY 一樣。

OUTER APPLY 和 LEFT JOIN 的主要區別為:

  一個LEFT JOIN 關鍵字只能JOIN 一個表,不能解決一個復雜的SELECT 語句,或者函數方法等。

  一個OUTER APPLY 關鍵字可以包含一個獨立的復雜的SELECT 語句,或者其他函數方法等。

OUTER APPLY 和 LEFT JOIN 性能的區別:

  通過本文總結可知LEFT JOIN和OUTER APPLY性能比較的總結可知 LEFT JOIN 要比 OUTER APPLY 性能要快。所以建議能用LEFT JOIN的盡量不要用OUTER APPLY。

附注:

附Category 表和CategoryDetail 表的結果及插入數據的腳本:

CREATE TABLE [dbo].[CategoryDetail](
  [Id] [int] IDENTITY(,) NOT NULL,
  [CategoryId] [int] NULL,
  [Cry] [varchar]() NULL,
 CONSTRAINT [PK_CategoryDetail] PRIMARY KEY CLUSTERED 
 (
  [Id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY]
 GO
 SET ANSI_PADDING OFF
 GO
 SET IDENTITY_INSERT [dbo].[CategoryDetail] ON
 INSERT [dbo].[CategoryDetail] ([Id], [CategoryId], [Cry]) VALUES (, , N'喵')
 INSERT [dbo].[CategoryDetail] ([Id], [CategoryId], [Cry]) VALUES (, , N'汪')
 SET IDENTITY_INSERT [dbo].[CategoryDetail] OFF
 /****** Object: Table [dbo].[Category] Script Date: // :: ******/
 SET ANSI_NULLS ON
 GO
 SET QUOTED_IDENTIFIER ON
 GO
 SET ANSI_PADDING ON
 GO
 CREATE TABLE [dbo].[Category](
  [Id] [int] IDENTITY(,) NOT NULL,
  [Name] [varchar]() NULL,
 CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED 
 (
  [Id] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY]
 GO
 SET ANSI_PADDING OFF
 GO
 SET IDENTITY_INSERT [dbo].[Category] ON
 INSERT [dbo].[Category] ([Id], [Name]) VALUES (, N'Cat')
 INSERT [dbo].[Category] ([Id], [Name]) VALUES (, N'Dog')
 INSERT [dbo].[Category] ([Id], [Name]) VALUES (, N'Tiger')
 SET IDENTITY_INSERT [dbo].[Category] OFF

以上內容就是本文的全部所示,希望大家喜歡。

您可能感興趣的文章:
  • SQL語句的各個關鍵字的解析過程詳細總結
  • sql連接查詢中,where關鍵字的位置講解
  • sql中的left join及on、where條件關鍵字的區別詳解
  • Mysql帶And關鍵字的多條件查詢語句
  • MySQL單表多關鍵字模糊查詢的實現方法
  • MySQL 5.7中的關鍵字與保留字詳解
  • SQL中一些小巧但常用的關鍵字小結

標簽:晉中 北海 咸寧 東營 南昌 珠海 煙臺 石家莊

巨人網絡通訊聲明:本文標題《sql server關鍵字詳解大全(圖文)》,本文關鍵詞  sql,server,關鍵字,詳解,大全,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《sql server關鍵字詳解大全(圖文)》相關的同類信息!
  • 本頁收集關于sql server關鍵字詳解大全(圖文)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 房山区| 留坝县| 金山区| 闽清县| 宿州市| 阳江市| 汽车| 通海县| 葫芦岛市| 城市| 安丘市| 曲靖市| 洪江市| 久治县| 泾源县| 花莲市| 郴州市| 连城县| 鄂伦春自治旗| 涡阳县| 东平县| 榆树市| 辰溪县| 祁连县| 广饶县| 浪卡子县| 温州市| 八宿县| 鄂托克前旗| 大关县| 华宁县| 华亭县| 鸡东县| 白山市| 体育| 修文县| 清流县| 剑川县| 玉田县| 西林县| 齐齐哈尔市|