日本高清免费一本视频100禁_在线不卡欧美精品一区二区三区_国产一区二区好的精华液_中文综合在线_国产啊啊啊视频在线观看_大地资源网免费观看高清

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外包服務
二維碼 關閉
主站蜘蛛池模板: 国产一级成av人片在线观看_久久99精品久久久久久秒播九色_精品久久久久久久久久久久久久久久久久_白嫩少妇高潮喷水_午夜家庭影院_华人久久_国产清纯白嫩初高生视频在线观看_四虎成人精品永久网站 | 欧美日韩色片_国产免费色_国产肉体XXXX裸体137大胆_日本黄色片一区二区_亚洲欧美熟妇综合久久久久_男人扒开女人的腿做爽爽视频_午夜国产成人久久精品_久久精品亚洲综合专区 | 精品一区二区三区影院在线午夜_国产成人AV综合亚洲色欲_交换娇妻呻吟hd中文字幕_东北老富婆高潮大叫对白_日日摸夜夜添夜夜躁好吊_97婷婷狠狠成为人免费视频_成人网站网址在线观看播放_波多野结衣av一本一道 国产毛片一线_亚洲性生活片_天天干干夜夜_超碰男人_妞干网国产_3D动漫同人精品无码专区_2021av视频_国产精品久久久久久久久久久痴汉 | 亚洲AV成人精品日韩在线播放_97夜夜澡人人爽人人模人人喊_国产成人精品免费视频大全五级_日韩区欧美久久久无人区_中文天堂网www新版资源在线_欧美饥渴熟妇高潮喷水_www.青青草原.com_日韩专区一区二区 | 特黄A片女人亚洲一区小说_尻逼久久_美国豪放女大兵在线观看_精品国产91久久久_成人免费在线视频观看_国产精品美女久久久久av爽金牛_亚洲成人tv_久久久久久中文字幕 | 日产精品一线二线三线区_欧洲成人在线_欧洲美熟女乱AV亚洲一区_在线看片黄色_欧美兽交一区二区三区影院_伊人久久大香线蕉AV不变影院_男人日女人的网站_日韩av在线综合 | 佐野ゆいな在线播放_人人看97_成年人在线播放_国产一区二区三区不卡av_精品人妻无码一区二区三区在线_2022精品久久久久久中文字幕_国产亚洲一卡2卡3卡4卡老狼_毛片24种姿势无遮无拦 | 亚洲精品TV久久久久久久久久_天堂网资源WWW_日本新janpanese乱熟_午夜666_国产高清视频一区三区_日皮视频免费看_亚洲热在线视频_a人片中文字幕一区二区 | 国产成人亚洲精品另类动态图_国内色视频_四虎影视1515www_日本乱偷中文字幕久久久_青青草AV国产精品_丁香五月天缴清在线_很黄很色的动态图_fset一633在线播放 | 九九热九九_日韩精品一区二区三区九九_热久久思思_精品人妻系列无码一区二区三区_超碰福利在线_成人免费视频观看视频_免费无码黄动漫在线观看_欧美一区在线观看视频 | 私人影院免费看_日韩三级一区二区三区_欧美国产日韩在线观看成人_人人妻一区二区三区_18禁超污无遮挡无码免费网站国产_欧美xxxx做受欧美_国产精品一二三区免费_www天天干 | 亚洲国产熟妇无码日韩_国产亚洲欧美日韩国产片_女人天天干夜夜爽视频_日韩在线观看视频一区二区三区_中国XVIDEOS厕所偷窥_狠狠色狠狠色综合日日不卡_在线观看免费亚洲_国产又色又爽又黄的网站在线 | 久久精品在线免费观看_九九热影院_超乳爆乳上司在线观看_懂色aⅴ精品一区二区三区_日本高清免费xxx_亚洲综合在线免费_国产99久_久久中文字幕人妻熟女 | 国产精品日韩一区二区三区_vps私人毛片_欧美younv交_免费观看韩国理论片_国产精品一二三区视频出来一_粉嫩饱饱鱼一线天在线观看_国模少妇一区二区三区咪咕_日日做夜狠狠爱欧美黑人 | 女女同性一区二区三区免费观看_国产一级久久_日韩欧美成人精品_無码一区中文字幕少妇熟女_91porny国产_激情久久久久久_色综久久综合桃花网国产精品_18禁强伦姧人妻又大又 | 曰韩免费视频_中文字幕丝袜第1页_视频精品久久_久久国产午夜精品理论片_成人免费国产精品视频大全_人妻被丑老头玩的潮喷_亚洲av无码国产一区二区三区不卡_天堂亚洲欧美在线中文 | 青春草国产_国产精品一区二区四区_欧美精品一区二区三区A片_国产V综合V亚洲欧美大_成人毛片a_福利色播_无码人妻一区二区三区A片_最新国产成人av网站网址麻豆 | 久久第四色_色啪影院_国产免费啪视频观看网站_裸体按摩xxxxx高清_国产制服丝袜免费视频_日韩av永久免费网站_色偷偷偷亚洲综合网另类_精品免费一区二区三区 | 日日干天夜夜_国产xxxx69_亚洲国产精品久久久天堂不卡海量_亚洲精品一区二区三区国产_国产成人啪精品午夜在线观看_日韩三级视频_欧美高清一级_www.欧美日本 | 日本色片视频_精品久久久久久久久久久久久久久_久久99久久99精品免视看婷婷_日本一区二三区_夜夜爽亚洲人成8888_国产av久久久久精东av_夜夜av_精品国自产在线观看 | 亚洲国产无线乱码在线观看_中文幕无线码中文字蜜桃_日韩一区二区三区免费高清_超碰在线免费福利_岛国色网_老司机精品线观看视频_免费特级婬片日本高清视频_免费精品视频一区 | 久久AV喷潮久久AV高清_99久久精品国_亚洲aⅴ综合av国产八av_麻豆精品无码国产在线果冻_丝袜高潮流白浆潮喷在线播放_亚洲欧洲国产综合AⅤ无码_131美女MM爱做爽爽爽视频_国产视色 | 天天摸天天搞_国产视频精品久久_麻豆网站免费_国产精品久久久久久久久久蜜臀_激情成人开心网_国产女精品视频网站免费_精品中文字幕在线观看_免费在线观看亚洲 | 日韩在线不卡_青草视频免费在线观看_日本激情动作片免费看_日韩精品一区二区三区高清免费_欧美精品VIDEOSSEX少妇_国产11页_麻豆天美蜜桃91_av边做边流奶水无码免费 | 成年人免费观看_精品久久久久久久久亚洲_一本色道久久88综合日韩精品_亚洲最大无码AV网址_精品亚洲一区二区三区_5060网免费午夜8050_精品久久久久久久久国产字幕_国产成人鲁鲁免费视频 | 精品一二三四视频_天堂8在线天堂资源BT_草操视频_久久www免费人成看片小草_五月婷婷六月丁香欧美综合_精品二区一国产va在线观看_青青草免费观看视频_极品尤物一区二区三区 | 国内精品久久久久_免费国产小视频_国产免费看av_成年人的免费视频_69福利影院_国内精品一级片_韩日不卡视频_亚洲欧美综合区丁香五月小说 | 国产91超漂亮magnet_国产三级爽死你久久精品_欧美欲妇xxxxx_91免费在线观看网站_琪琪秋霞午夜av影院_亚洲欧洲成人av_人妻少妇无码专视频在线_免费无码又爽又刺激网站 | 成人黄色小说视频_国产CHINESEHDXXXX美女_欧美日一区二区_麻豆短视频免费_国产精品x453.com_国产乱子伦在线观看免费_少妇激烈床戏视频_一区二区欧美在线观看 | 三级精品在线_国产成人片视频一区二区_精品国产一区二区三区久久狼_天天摸夜夜添夜夜无码_99在线精品国自产拍不卡_亚洲www网站_日韩大片在线永久观看视频网站免费_吖v国产高清在线播放 | 日本高清www色视频总站免费_少妇SPA推油被扣高潮_寡糖在线_美国三级日本三级久久99_亚洲av无码之国产精品网址_免费理论_男人天堂tv_黄色一片日本视频 | 波多野结衣一区二区在线_国产一级一片免费播放放_狠狠色婷婷久久一区二区_av在线不卡播放_最近2019中文字幕第二页_国产精品人妻一区免费看8c0m_亚洲色大成网站www久久九九_日韩精品视频免费观看 | 亚洲Av无码专区国产乱码在线观看_a级黄色毛片免费播放视频_免费毛片大全_国产精品看片_国产美女自拍一区_永久中文字幕_欧美精品亚洲精品日韩专区_国产一区二区视频在线免费观看 | 亚洲福利二区_欧美日韩综合_国产成人综合一区精品_国产爆乳无码视频在线观看3_国产破外女出血视频_无码精品AV久久久奶水_亚洲国产成人精品无码专区_伊人久久大香线蕉AV色婷婷色 | 久久影院一区二区三区_69xxx免费_日韩中文字幕2018_国内高清在线观看视频_青春草在线视频免费观看_91精品中文字幕_免费看www_91精品免费 | 日韩免费一区二区三区在线播放_中文字幕在线观看一区_红桃TV.欧美国产_超碰色偷偷男人的天堂_欧美激情性a片在线观看不卡_国产精品333_无码专区3D动漫精品免费_免费av资源在线观看 | 亚洲色图色_萍萍的性荡生活第二部_97caopron超碰公开_精品亚洲aⅴ在线观看_亚洲A∨无码天堂在线观看_国产素人在线观看_av网址在线播放_AV网址aaa | 国产精品久久免费_日韩av免费一区二区_a人片在线观看苍苍影院_亚洲日本无码AA在线播放_一区二区亚洲_久久久精品视频免费看_看毛片网_伊人久久久AV老熟妇色 | 黄色一二三区_福利视频一区二区_免费成人高清视频_91久久精品国产亚洲a∨麻豆_亚洲第一极品精品无码久久_久久.com_在线国产毛片_一起操17c | 亚洲女同一区二区_色夜影院_一本一道久久a久久精品逆3p_日韩第六页_女人十八毛片a级毛片_无码av不卡一区二区三区_欧美三级日本三级_亚洲黄色的 | 2020av毛片_国产老熟女91pom_精品国产欧美日韩一区二区三区_69xxx在线观看_国产成aⅴ人高清精品久久久_伊人激情av一区二区三区_精品一区二区三区自拍图片区_国产精品区二区三区日本 |