456成人影院在线观看_亚洲a毛片_日韩9999_伊人网老司机_一本免费视频_最近高清日本免费

IT之道-艾銻知道

您當前位置: 主頁 > 資訊動態 > IT知識庫 >

艾銻知識 | SQL Server中with as使用介紹


2020-03-04 16:37 作者:艾銻無限 瀏覽量:


煩惱即菩提,菩提即智慧

 
 
 
 
 
疫情放慢了管理者的腳步,卻沒有放慢管理者的心,對于企業來說,在富有的時候,可以說說情懷,說說理想,但在貧窮受困的時候,沒有飯吃的時候,情懷和理想其實并不重要,重要的是下一頓吃什么?在哪吃呢?
 
前幾天,有篇文章報道某云南大型企業的人事總監被總經理怒罵的郵件很火,為什么會發生這樣的事,我覺得身為一個企業的員工,無論你處在什么崗位,什么職位,一定要審時度勢,要知道企業要什么,俗話說,大河有水小河滿,只有企業活下來了,活好了,組織里的員工才能真正拿到自己想要的,如果在危難時機,你還在堅持自己觀點,抱持著自己的思維不改變,不能與企業思想同步,那最終也不會有什么好的結果.
 
在這里艾銻無限給已經上班或即將上班的各個企業伙伴一些忠告:
 
1,困難時期,在為自己著想的同時多想想能為企業做點什么,今天你的付出,明天不一定會有收獲,但長久來看,能量守恒定律,你是不會吃虧的.
 
2,在經濟還沒復蘇的時期,企業還不太忙的時候,除了做好自己部門手頭上的工作以外,把自己的大腦開動起來,如果你是職員,就想想假如你是這個部門經理,你如何做可以讓部門的損失降到最低,讓收益提升到最大.如果你是經理就想想假如你是企業的CEO,你如何做可以讓企業快速恢復狀態,讓業務快速發展起來,讓現金流可以流動起來?
 
3,如果你處在花錢的部門,就想想如何做可以省錢,又可以為部門創收,如果你是創收的部門,就想想原來從來就沒想過的問題,因為你不能破舊就不能立新,不能創造就是在消耗.
 
4,管理團隊間,如果不是能力問題,不僅行動要勤快,大腦更要勤快一些,除了思考自己部門的工作,也要思考其他部門的工作,你的團隊可以做些什么更利于其他部門的發展,你可以做些什么更助于其他管理者達成目標,整個企業就像一臺齒輪吻合的機器,只有彼此主動吻合才能讓這臺機器更好的運轉,這也像打群架,如果每一個人都能照顧好自己,還能為他人著想,就不會受傷,也能全身而退,有一個人需要他人照顧,就很可能有人受傷,并導致全隊受損.
 
5,無論什么時期,不要害怕困難,不要拒絕煩惱, 煩惱即菩提,菩提即智慧,偉大的洞見和上師都是來自于苦難和無數次的折磨.相信宇宙的安排,無論是事,還是人,來到你的身邊就是成就你的,所以把心安于當下,盡一切努力做到盡善盡美.
 
接下來分享一則技術信息,以許會對你的企業有所幫助:

艾銻知識 |SQL Server中with as使用介紹

一.WITH AS的含義 

    WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。
特別對于UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS短語所獲取的數據放入一個TEMP表里,如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語里的數據放入一個全局臨時表里。很多查詢通過這種方法都可以提高速度。

二.使用方法

先看下面一個嵌套的查詢語句:
select * from person.StateProvince where CountryRegionCode in
         (select CountryRegionCode from person.CountryRegion where Name like 'C%')
    上面的查詢語句使用了一個子查詢。雖然這條SQL語句并不復雜,但如果嵌套的層次過多,會使SQL語句非常難以閱讀和維護。因此,也可以使用表變量的方式來解決這個問題,SQL語句如下:
declare @t table(CountryRegionCode nvarchar(3))
insert into @t(CountryRegionCode) (select CountryRegionCode from person.CountryRegion where Name like 'C%')
select * from person.StateProvince where CountryRegionCode
                     in (select * from @t)
   雖然上面的SQL語句要比第一種方式更復雜,但卻將子查詢放在了表變量@t中,這樣做將使SQL語句更容易維護,但又會帶來另一個問題,就是性能的損失。由于表變量實際上使用了臨時表,從而增加了額外的I/O開銷,因此,表變量的方式并不太適合數據量大且頻繁查詢的情況。為此,在SQL Server 2005中提供了另外一種解決方案,這就是公用表表達式(CTE),使用CTE,可以使SQL語句的可維護性,同時,CTE要比表變量的效率高得多。
    下面是CTE的語法:
[ WITH <common_table_expression> [ ,n ] ]
< common_table_expression>::=
        expression_name [ ( column_name [ ,n ] ) ]
    AS
        ( CTE_query_definition )
    現在使用CTE來解決上面的問題,SQL語句如下:
with
cr as
(
    select CountryRegionCode from person.CountryRegion where Name like 'C%'
)
select * from person.StateProvince where CountryRegionCode in (select * from cr)
    其中cr是一個公用表表達式,該表達式在使用上與表變量類似,只是SQL Server 2005在處理公用表表達式的方式上有所不同。

在使用CTE時應注意如下幾點:

1. CTE后面必須直接跟使用CTE的SQL語句(如select、insert、update等),否則,CTE將失效。如下面的SQL語句將無法正常使用CTE:

1
2
3
4
5
6
7
8
with
cr as
(
  select CountryRegionCode from person.CountryRegion where Name like 'C%'
)
select * from person.CountryRegion -- 應將這條SQL語句去掉
-- 使用CTE的SQL語句應緊跟在相關的CTE后面 --
select * from person.StateProvince where CountryRegionCode in (select * from cr)
2. CTE后面也可以跟其他的CTE,但只能使用一個with,多個CTE中間用逗號(,)分隔,如下面的SQL語句所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
with
cte1 as
(
  select * from table1 where name like 'abc%'
),
cte2 as
(
  select * from table2 where id > 20
),
cte3 as
(
  select * from table3 where price < 100
)
select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id

3. 如果CTE的表達式名稱與某個數據表或視圖重名,則緊跟在該CTE后面的SQL語句使用的仍然是CTE,當然,后面的SQL語句使用的就是數據表或視圖了,如下面的SQL語句所示:
-- table1是一個實際存在的表
with
table1 as
(
    select * from persons where age < 30
)
select * from table1 -- 使用了名為table1的公共表表達式
select * from table1 -- 使用了名為table1的數據表
4. CTE 可以引用自身,也可以引用在同一 WITH 子句中預先定義的 CTE。不允許前向引用。
5. 不能在 CTE_query_definition 中使用以下子句:
(1)COMPUTE 或 COMPUTE BY
(2)ORDER BY(除非指定了 TOP 子句)
(3)INTO
(4)帶有查詢提示的 OPTION 子句
(5)FOR XML
(6)FOR BROWSE
6. 如果將 CTE 用在屬于批處理的一部分的語句中,那么在它之前的語句必須以分號結尾,如下面的SQL所示:

1
2
3
4
5
6
7
8
9
declare @s nvarchar(3)
set @s = 'C%'
; -- 必須加分號
with
t_tree as
(
  select CountryRegionCode from person.CountryRegion where Name like @s
)
select * from person.StateProvince where CountryRegionCode in (select * from t_tree)
  
  CTE除了可以簡化嵌套SQL語句外,還可以進行遞歸調用,關于這一部分的內容將在下一篇文章中介紹。
先看如下一個數據表(t_tree):
    上圖顯示了一個表中的數據,這個表有三個字段:id、node_name、parent_id。實際上,這個表中保存了一個樹型結構,分三層:省、市、區。其中id表示當前省、市或區的id號、node_name表示名稱、parent_id表示節點的父節點的id。
    現在有一個需求,要查詢出某個省下面的所有市和區(查詢結果包含省)。如果只使用SQL語句來實現,需要使用到游標、臨時表等技術。但在SQL Server2005中還可以使用CTE來實現。
    從這個需求來看屬于遞歸調用,也就是說先查出滿足調價的省的記錄,在本例子中的要查“遼寧省”的記錄,如下:
id   node_name   parent_id
1     遼寧省        0
    然后再查所有parent_id字段值為1的記錄,如下:
id   node_name   parent_id
2      沈陽市       1
3      大連市       1
    最后再查parent_id字段值為2或3的記錄,如下:
id    node_name    parent_id
4       大東區        2
5       沈河區        2
6       鐵西區        2
    將上面三個結果集合并起來就是最終結果集。
    上述的查詢過程也可以按遞歸的過程進行理解,即先查指定的省的記錄(遼寧省),得到這條記錄后,就有了相應的id值,然后就進入了的遞歸過程,如下圖所示。
    從上面可以看出,遞歸的過程就是使用union all合并查詢結果集的過程,也就是相當于下面的遞歸公式:
    resultset(n) = resultset(n-1) union all current_resultset
    其中resultset(n)表示最終的結果集,resultset(n - 1)表示倒數第二個結果集,current_resultset表示當前查出來的結果集,而最開始查詢出“遼寧省”的記錄集相當于遞歸的初始條件。而遞歸的結束條件是current_resultset為空。下面是這個遞歸過程的偽代碼:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public resultset getResultSet(resultset)
{
  if(resultset is null)
   {
     current_resultset =第一個結果集(包含省的記錄集)
     將結果集的id保存在集合中
     getResultSet(current_resultset)
   }
   current_resultset = 根據id集合中的id值查出當前結果集
  if(current_result is null) return resultset
   將當前結果集的id保存在集合中
  return  getResultSet(resultset union all current_resultset)
}
 
// 獲得最終結果集
resultset = getResultSet(null)
   
從上面的過程可以看出,這一遞歸過程實現起來比較復雜,然而CTE為我們提供了簡單的語法來簡化這一過程。
    實現遞歸的CTE語法如下:
[ WITH <common_table_expression> [ ,n ] ]
< common_table_expression>::=
         expression_name [ ( column_name [ ,n ] ) ]
    AS (
        CTE_query_definition1  --   定位點成員(也就是初始值或第一個結果集)
       union all
        CTE_query_definition2  --   遞歸成員
     )
sql語句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
with
district as
(
  --  獲得第一個結果集,并更新最終結果集
  select * from t_tree where node_name= N'遼寧省'
  union all
  --  下面的select語句首先會根據從上一個查詢結果集中獲得的id值來查詢parent_id    
  --  字段的值,然后district就會變當前的查詢結果集,并繼續執行下面的select 語句
  --  如果結果集不為null,則與最終的查詢結果合并,同時用合并的結果更新最終的查
  --  詢結果;否則停止執行。最后district的結果集就是最終結果集。
  select a.* from t_tree a, district b
        where a.parent_id = b.id
)
select * from district
with
district as
(
  select * from t_tree where node_name= N'遼寧省'
  union all
  select a.* from t_tree a, district b
        where a.parent_id = b.id
),
district1 as
(
  select a.* from district a where a.id in (select parent_id from district) 
)
select * from district1
   
注:只有“遼寧省”和“沈陽市”有下子節點。

    在定義和使用遞歸CTE時應注意如下幾點:

1. 遞歸 CTE 定義至少必須包含兩個 CTE 查詢定義,一個定位點成員和一個遞歸成員。可以定義多個定位點成員和遞歸成員;但必須將所有定位點成員查詢定義置于第一個遞歸成員定義之前。所有 CTE 查詢定義都是定位點成員,但它們引用 CTE 本身時除外。

2. 定位點成員必須與以下集合運算符之一結合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。在最后一個定位點成員和第一個遞歸成員之間,以及組合多個遞歸成員時,只能使用 UNION ALL 集合運算符。

3. 定位點成員和遞歸成員中的列數必須一致。

4. 遞歸成員中列的數據類型必須與定位點成員中相應列的數據類型一致。

5. 遞歸成員的 FROM 子句只能引用一次 CTE expression_name。

6. 在遞歸成員的 CTE_query_definition 中不允許出現下列項:

(1)SELECT DISTINCT

(2)GROUP BY

(3)HAVING

(4)標量聚合

(5)TOP

(6)LEFT、RIGHT、OUTER JOIN(允許出現 INNER JOIN)

(7)子查詢

(8)應用于對 CTE_query_definition 中的 CTE 的遞歸引用的提示。

7. 無論參與的 SELECT 語句返回的列的為空性如何,遞歸 CTE 返回的全部列都可以為空。

8. 如果遞歸 CTE 組合不正確,可能會導致無限循環。例如,如果遞歸成員查詢定義對父列和子列返回相同的值,則會造成無限循環。可以使用 MAXRECURSION 提示以及在 INSERT、UPDATE、DELETE 或 SELECT 語句的 OPTION 子句中的一個 0 到 32,767 之間的值,來限制特定語句所允許
的遞歸級數,以防止出現無限循環。這樣就能夠在解決產生循環的代碼問題之前控制語句的執行。服務器范圍內的默認值是 100。如果指定 0,則沒有限制。每一個語句只能指定一個 MAXRECURSION 值。

9. 不能使用包含遞歸公用表表達式的視圖來更新數據。

10. 可以使用 CTE 在查詢上定義游標。遞歸 CTE 只允許使用快速只進游標和靜態(快照)游標。如果在遞歸 CTE 中指定了其他游標類型,則該類型將轉換為靜態游標類型。

11. 可以在 CTE 中引用遠程服務器中的表。如果在 CTE 的遞歸成員中引用了遠程服務器,那么將為每個遠程表創建一個假脫機,這樣就可以在本地反復訪問這些表。

下面是一些補充,很多參考價值

WITH AS短語,也叫做子查詢部分(subquery factoring)
可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。
作為提供數據的部分。
代碼例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
with temp as
 (select ID, Type_Name, Type_ID
  from T_Base_GoodsType as t
  where t.Shop_ID = @shop_id
   and Type_ID = @Goods_TypeID
 union all
 select t1.ID, t1.Type_Name, t1.Type_ID
  from T_Base_GoodsType as t1
  inner join temp
   on t1.ParentType_ID = temp.Type_ID
  where t1.Shop_ID = @shop_id)
select *
 from (select Stock_Amount,
        S.StockWarn_Amount,
        S.All_Amount,
        G.Goods_ID,
        G.Goods_Name,
        G.Goods_Unit,
        ROW_NUMBER() over(order by Stock_Amount desc) as rowid
     from T_IM_StockInfo as S
     inner join T_Base_GoodsInfo AS G
      on S.Goods_ID = G.Goods_ID
     inner join temp
      on temp.Type_ID = G.Goods_TypeID
     where S.Shop_ID = @shop_id
      AND G.Shop_ID = @shop_id
      and G.Goods_TypeID = temp.Type_ID
     group by S.Stock_Amount,
         S.All_Amount,
         G.Goods_ID,
         G.Goods_Name,
         G.Goods_Unit,
         S.StockWarn_Amount
    HAVING SUM(S.Stock_Amount) < S.StockWarn_Amount) m
 WHERE rowid between @pageindex and @pagesize
sql循環(WITH AS短語也叫做子查詢部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--表結構 SELECT id,position,Parentid FROM op_client_sales_structure
 
WITH TEST_CTE
 AS
 (
 SELECT id,position,Parentid,Cast(Parentid AS NVARCHAR(4000)) AS PATH
 FROM op_client_sales_structure team
 WHERE Parentid !=-1
 UNION ALL
 SELECT a.id,a.position,a.Parentid,
 CTE.PATH+','+Cast(a.Parentid AS NVARCHAR(4000)) AS PATH
 FROM op_client_sales_structure a
 INNER JOIN TEST_CTE CTE ON a.id=CTE.Parentid
)
 SELECT * FROM TEST_CTE WHERE Parentid=(SELECT id FROM op_client_sales_structure WHERE Parentid=-1)
--限制遞歸次數
 OPTION(MAXRECURSION 10)

這篇文章就介紹到這,希望能幫助到你。
 

相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 西西人体午夜大胆无码视频_亚洲不卡系列_亚洲第一免费看片_成人国产精品秘片多多_日韩欧美一二三区_午夜久久久久久_99精品不卡一区二区三区_国产做A爰片毛片A片美国 | 77777日本少妇久7黄绝片_国产精品天天狠天天看_亚洲中文字幕在线网址_国产亚洲一区二区手机在线观看_午夜影院0606_日日碰狠狠躁久久躁蜜桃_日韩免费视频播放_日本理论片午午伦夜理片2021 热99欧美_久久久精品国产sm调教网站_成人亚洲在线观看_国产一区二区中文字幕免费看_最近中文字幕免费MV在线视频_japanese在线看_色视频www在线播放国产人成_97青娱乐 337P中国人体啪啪_亚洲另类色区欧美日韩图片_成人视频在线观看_国产视频九九_秋霞鲁丝片无码一区二区_欧洲亚洲另类一区在线观看_亚洲成人高清av_亚洲国产成人精品无码区2021 | 99久久精品免费看国产_50丰满少妇高潮惨叫正在播放_a级黄毛片_日日艹夜夜艹_91看片资源_精品久久久久久久久久中文字幕_四虎av无码专区亚洲av_久久AV色欲AV久久蜜桃麻豆 | 少妇下面好紧好爽视频_伊人久久香_国产精品理论一区_国产日本亚洲欧美_一级毛片在线观看网站_日韩精品免费视频一区二区三区_久久一二三区_日韩精品三区四区 | 国产精品96久久久久久久_在线免费观看av网站_黄色真人毛片_国产免费永久在线观看_AB无码精品一区二区三区人妖_国产精品人人做人人爽人_日韩成人极品在线内射3p蜜臀_无码专区男人本色 | 少妇挑战三个黑人惨叫4p国语_护士奶头又白又大又好模_在线播放精品视频_亚洲一道AV无码播放_伊人中文字幕在线观看_中文字幕av一区二区三区_狠狠操91_我要色综合色综合久久 | 人人爱人人做_日韩亚洲视频在线_秋霞成人午夜伦在线观看_国产在线精品无码AV不卡顿_日韩中文字幕亚洲一区二区va在线_吉吉天堂_欧美另类图区清纯亚洲_亚洲va欧美va日韩va成人网 | 91高清在线视频_91欧美视频_无码H黄肉动漫在线观看网站_国产精品无码无片在线播放_日韩影院中文字幕_黄色www在线观看_亚洲精品久久久久国产_久久精品亚 | 狠狠色噜噜狠狠狠7777奇米_久久不卡一区_亚洲成人网在线_www.夜夜_一级女淫片a8888_欧美国产三级_最近日本mv字幕免费高清在线_国产麻豆成人传媒免费观看 | 精品国产亚洲一区二区三区_给我看免费播放片的视频_国产成人久久AV一区二区_av在线free_国产尤物在线视频_国产精品麻豆传媒_性夜影院爽黄E爽_99久久免费国产精精品 | 91爱爱·com_91日韩精品视频_九九九在线_白嫩少妇高潮喷水_久久久久少妇_免费a级黄色毛片_99这里有精品热视频_欧美一区二区在线免费 | 亚洲国产一区二区在线观看_欧美日韩在线第一页_美国一级毛片aa_精品一区二区三区的国产在线观看_无遮挡边摸边吃奶边做的视频刺激_亚洲国产成人精品福利在线观看_99精品99久久久久久宅男_黄色在线观看视频网站 | aaaa视频_丁香五月缴情在线中文视频_亚洲国产精品久久久天堂_国产免费AV片无码永久免费_久久国产禁久久_www.亚洲.com_精品一区二区三区久久_无毒不卡在线 欧美日韩高清一区二区_www.se天堂_99国产精成人午夜视频一区二区_亚洲国产高清在线一区二区三区_久久婷婷五月综合色99啪_国产婷婷色一区二区三区在线_小尤奈无码视频_a4yy欧美一区二区三区 | 亚洲精品宾馆在线精品酒店_色窝窝色蝌蚪在线视频_麻豆传媒tv_国产9999精品_大地资源第二页中文高清版_国产一级爱_亚洲AV无码国产在丝袜线观看_噜噜噜亚洲色成人网站∨ | 国产高潮呻吟无码精品AV_麻豆视频入口_无码中文字幕av免费放dvd_日本成a人片在线观看日本_久久成年_欧美丰满熟妇xxxx性ppx人_欧美一级淫片免费视频欧美辣图_韩国中文免费在线视频 | 日本熟妇人妻xxxxx_日本人伦一区二区三区_久久另类_欧美激情影音先锋_草久久精品_亚洲va天堂va在线va欧美_欧美GAY猛男GAYA片18禁_欧美性久久久 | avhd101素人diy入口_看全色黄大色黄女片爽名优_999视频精品_久久爱黑人激情av_红杏成人免费视频观看_GAY片男同网站WWW免费_久久精品99久久久久久2456_亚洲成人三区 | 日韩一级大片_久久久久区_黄色大片一级片_国产成年无码V片在线_一级黄色伦理片_毛片女女女女女女女女女_成人免费在线_无码精品人妻一区二区三区九里奈 | 日韩精品在线免费_性一交一乱一伦一色一情孩交_麻豆影视免费_久草五月天_男男被各种姿势C到高潮视频_亚洲欧美日韩在线_开心五月激情中文在线_无码欧精品亜州日韩一区夜夜嗨 | 欧美疯狂xxx免费视频_91桃色黄色_一本色道久久88综合日韩精品_成人亚洲_91综合网站_国产福利影院_国产精品第一区第27页_亚洲一区二区精品视频 | 免费看的黄色av网站_国产有码在线_91精品无码一区二区_成人aaaa免费全部观看_欧美肥妇毛多水多BBXX_国产大片在线看_久久午夜免费观看_亚洲人成一区 | 亚洲一区二区日韩_欧美黑人又大又粗XXXXX_免费久久精品视频_黄色免费看片_好好的日在线视频观看_特级无码毛片免费视频尤物_成人亚洲一区二区一_欧美交换配乱吟粗大 | 中文日韩在线视频_无码毛片一级高潮免费视频_毛片黄片_国产成人在线网址_国产特级全黄一级毛片_免费观看在线毛片_人人妻人人澡人人爽超污_日韩欧美国产系列 | WWW片香蕉内射在袋88AV8_欧美18—19sex性hd_欧美区视频_亚洲成人资源在线观看_一区二区精品在线_可以免费看av的网站_一性一交一伦一色一情人_偷偷操不一样的久久 | 日韩亚洲区字幕_国产精品99久久久精品_99久久久无码国产精品6_挺进朋友人妻的身体里_美女精品久久久_国产精品夜夜嗨_欧美久久久久_高潮流白浆潮喷在线播放视频 | 一夲道无码人妻精品一区二区_久久曰曰_51成人_成av在线_伊人久久情人综岁的合网18_国产日本一级二级三级_国产欧美一区二区精品仙草咪_欧美整片sss | 97成人在线免费视频_草久视频_午夜视频在线看_精品自拍一区_午夜性大片_高清成人爽a毛片免费_午夜三区_成人午夜精品视频 | 青青草视频一区_亚洲高清中文字幕在线看不卡_国产自偷自拍_91丨国产丨蚪窝海角社区_99草在线_欧美人与动性xxxxBBBB_伦xxxx在线_亚洲国产精品一区久久av篠田 | 久久亚洲精品国产_250pp亚洲情艺中心在线_国产性在线观看_日韩av在线综合_av白浆_欧美二三区_日韩人妻熟女中文字幕_三级网址在线 | 人妻系列综合第一页_中文91_性欧美人与zozoxxxx视频_国产女人18毛片水真多1_成人av1234567_别揉我奶头~嗯~啊~一区二区三区_在线播放一区二区三区_96精品成人无码A片观看金桔 任你操精品视频_老子影院午夜伦不卡_精品日产一区二区三区手机_最大av在线_VPS私人毛片免费_四十路の五十路熟女豊満_中国人与拘一级毛片_h视频免费 | 国产网站久久_超碰99热_国产痴女资源在线不卡_欧美偷拍另类_av不卡免费_艹逼视频免费观看_国产精品一区二区三区成人_亚洲成年人在线 | 国产精品久久久久秋霞鲁丝_无码人妻国产一区二区三区_欧美做视频_无码专区无码专区视频网址_国产女优在线观看_欧美在线视频一区二区_热播久久_色综合视频一区二区三区高清 | 97超碰人人爽_91男生福利_丰满人妻一区二区三区av猛交_人妻天天爽夜夜爽一区二区_少妇人妻偷人精品一区二区_麻豆短视频免费_国产伦精品免费视频_夜夜欢天天干 | 99精品视频69V精品视频_成年人中文字幕在线观看_中文日韩欧美_国精品无码一区二区三区在线A片_国产免费麻豆_av免费网页_国产在线xx_亚洲精品国产片 | 亚洲一区二区三区含羞草_黑人内谢中国女人视频_国产精品亚洲专一区二区三区_国产一区二区福利在线_欧洲免费视频_婷婷影院在线综合免费视频_成人免费视频国一国二在线观看_日本少妇xxxx软件 | 国产精品推荐_一级欧美一级日韩片免费观看_日本SM极度另类视频_gg55gg国产成人影院_亚洲精品xx_国产精品av久久久久久网站_91av视屏_强●媚薬レズ狂いatid543 | 免费看亚洲片_九一精品国产白色高跟鞋_久久无码专区国产精品S_欧美乱子YELLOWVIDEO_97影院九七理论片在线一二_99爱色_91亚洲国产成人久久精品网站_久久av一区二区三区 国产乡下三级全黄三级BD_无码AV免费网站_免费在线观看一区二区_2021国产va在线_成年人黄色在线观看_欧美久久久久久久久_91精品国产91久久久久久三级_一区二区三区精密机械公司 | 久久精品视频网址_中文字幕按摩做爰_狠狠操在线视频_亚洲欧美日韩精品久久亚洲区_边添小泬边狠狠躁视频_欧美破苞系列二十三_qvod视频在线观看成人_亚洲欧洲国产一区二区三区 | 精品国产亚洲第一区二区三区_gay取精潮喷10次_日韩国产在线看_国产一区二区三区网_九七视频在线观看_日韩在线中文字幕视频_高清无码专区av_av网站大全在线观看 | 国产91久久久久久_色欲AV天天AV亚洲一区_国产传媒第一页_麻豆福利网_一区二区国产在线观看_av国产精品毛片一区二区小说_久久精品日产第一区二区三区的功能_欧美一二三 | 公粗挺进了我的密道在线播放贝壳_国产香蕉青春草原久久_最近最新中文免费字幕一_久久久久久久久久久91_中文字幕在线播放_国产精品一二三四区_chien国产乱露脸对白_日韩视频免费看 |