日本高清免费一本视频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外包服務
二維碼 關閉
主站蜘蛛池模板: 极品少妇啪啪高清免费_噼里啪啦免费观看高清动漫_欧美人与动牲交ZOZO_亚洲欧美综合_亚洲天天在线_97久久超碰国产精品_特一级一性一交一视一频_久热久草在线 | 成年人观看免费视频_国产精品免费不_伦理二区_国产中文在线播放_97人人干_裸体丰满少妇做爰视频_aⅴ色欲AV片无码精品小说_日本在线视频二区 | 国产成人无码av一区二区在线观看_91久久爽久久爽爽久久片_天天天天天干_97超超碰_精品无码久久久久国产_欧美不卡中文字幕一区二区_国产伦精品一区二区三区妓女_日本高清免费视频 | 琪琪宅男午夜视频_国产一区二区好的精华液_在线久草_www.色94色.com_亚洲精品入口a级_天天操天天撸_性videos熟女意大利_国产高清一区二区在线观看 | 不卡欧美_国产精品99久久久精品_二级片免费_亚洲激情一二三区_粗大猛烈进出高潮视频免费看_国产免费一级一级_国产视频一区精品_欧美日本另类 | 久久久久久666_日日操日日碰_69视频网站_在线观看国产色视频网站_成人羞羞涩涩衣服_区一区二免费视频_国产精品亚洲片在线播放_和大佬在一起的三百六十五天免费观看 | 强奷漂亮雪白丰满少妇av_一区二区三区国产美女在线播放_国产主播精品_国产在线精品无码二区_国产精品福利一区二区久久_丝袜美腿一区二区三区_中文字幕久久熟女蜜桃_日韩在线日韩 | 日韩不卡1卡2卡三卡免费网站2021_国产夫妇肉麻对白_激情偷乱人伦小说视频_黄色免费av网站_久久久久久久久久av_色av吧_国产欧美日韩va另类_91视频污软件 | 日韩女优一区二区三区_久久久久亚洲AV片无码V_日本国产一区_久久精品国产国产精品四凭_成av免费大片黄在线观看_日韩天堂一区_福利网站视频_国产精品人人妻人人爽久久 | 国产午夜不卡片免费视频_97国产精品人妻无码免费_国产一卡2卡3卡4卡网站免费_97se亚洲综合在线_日韩AV一区二区三区免费看_96精品_香蕉伊蕉伊中文视频在线_九一毛片 | 少妇无内裤下蹲露大唇_人人草人人射_日本福利小视频_97精产国品一二三产区_成人免费网站在线观看视频_2023天天射天天干_狠狠爱亚洲综合久久_黄色成年网站 | 懂色一区二区三区av片_91色在线_97在线国产视频_99久久久国产精品免费牛牛_99国产精品白浆在线观看免费_亚洲在线色_国产无限免费av在线播放_日韩欧美国产免费 | 亚洲女同一区二区_色夜影院_一本一道久久a久久精品逆3p_日韩第六页_女人十八毛片a级毛片_无码av不卡一区二区三区_欧美三级日本三级_亚洲黄色的 | 九九视频精品全部免费播放_国产51人人成人人人人爽色哟哟_全职猎人1999在线动漫免费观看_91好色视频_九色在线网站_超碰97人人草_亚洲成AV人片高潮喷水_黄色成人在线播放 | 日韩免费一区二区三区在线播放_中文字幕在线观看一区_红桃TV.欧美国产_超碰色偷偷男人的天堂_欧美激情性a片在线观看不卡_国产精品333_无码专区3D动漫精品免费_免费av资源在线观看 | 久久久无码精品亚州日韩免费看_国产精品一区二区亚洲_国产一二三视频_99精品在免费线偷拍_亚洲国产成人在线播放_亚洲国产精品专区久久_人妻巨大乳HD免费看_男生白内裤自慰gv白袜男同 | 国产日本精品_人与人一级毛片_JAPANESEHD无码中文字幕_国产成人精品热玖玖玖_国产黄色片在线播放_欧美黑人又粗又大高潮喷水_一级黄色小视频_成人黄视频 | 日日干天夜夜_国产xxxx69_亚洲国产精品久久久天堂不卡海量_亚洲精品一区二区三区国产_国产成人啪精品午夜在线观看_日韩三级视频_欧美高清一级_www.欧美日本 | 亚洲中文无码卡通动漫3D_欧美精品久久凉森玲梦_国产美女mm131爽爽爽_www久久久久久久_欧美506070老妇乱子伦_亚洲精品在线视频网站_国产导航在线_懂色av中文一区二区三区 | 国产精品不卡av在线观看_国产成人啪午夜精品网站_欧洲熟妇大荫蒂高潮a片视频_美女色又黄一级毛片_日韩二区三区_在线观看ww_中文无遮挡h肉视频在线观看_极品美女扒开粉嫩小泬18P | 日韩第2页_中文字幕欧美激情_中国嫩模一级毛片_国产美女在线播放_日本在线看片免费人成视1000_www嫩草_自拍偷拍一区二区三区四区_爱射综合网 一二三四视频社区在线播放中国_91视频免费在线看_色妹子综合网_亚洲中文字幕无线无码毛片_天天操狠狠操_a在线视频观看_日本xxxⅹ18一20岁_www.91精品视频 | 亚洲日韩久久精品无码蜜桃臀_日韩v在线_欧美女优在线观看_神马香蕉久久_阳茎伸入女人阳道视频免费_久久国产精品二国产精品_少妇88久久中文字幕_黄色av片三级三级三级免费看 | 欧美特级黄色片_字幕网91_av亚洲一区_欧美一区二区性_天天躁日日躁AAAAXXXX_亚洲欧美黑人猛交群_一级不卡免费视频_日本一本一区 黄色特级片_国产乱人伦精品一区二区_毛片一区二区三区_一级做a爱片久久_亚洲精品乱码久久久久久按摩观_久久久久久久国产精品影院_caoporn国产_全球AV集中精品导航福利 | 超碰人人透人人爽人人看_亚洲av片不卡无码av_草草草在线视频_欧美色另类天堂2015_久久人妻无码aⅴ毛片花絮_国产成人午夜影院_亚洲成人一级片_japanese成熟丰满人妻 | 99热麻豆_毛片黄色视频_欧美激情内射喷水高潮_久久国产热精品波多野结衣av_中国裸体BBBBXXXX_日本精品视频一区_亚洲成人av片_男人天堂亚洲 | 国产精品无码久久av嫩草_日韩午夜在线播放_亚洲人成亚洲人成在线观看_国产三级在线观看_超碰人人美国_欧美日韩八区_136av福利视频导航入口_日韩高清免费在线观看 | 国产美女一级二级三级chinese_无码毛片中文字幕加勒比免费高清_久久久久高清_97超碰资源站_日韩国产亚洲精品_掐住奶头用针扎进乳孔里小说_国产自产视频一区二区三区_毛片网此 | 肉嘟嘟WWW视频在线观看高清_伊人75_亚洲日本一区二区_国产精品wwwcom976con_深夜在线免费视频_经典久久久_日本美女一区二区_91麻豆国产 | 日韩精品视频在线一区二区三区_欧美丰满老妇熟乱xxxxyyy_四虎影视国产精品永久在线_精品自拍av_久久99国产亚洲高清观看首页_五月色夜婷婷丁香琪琪_无码少妇一区二区三区浪潮AV_全黄特一级 | 精品国产亚洲第一区二区三区_高清国产在线观看_日本最新免费二区三区_a级片观看_亚洲一级不卡_国产呦VA在线观看_日韩人妻无码精品—专区_中国少妇嫖妓BBWBBW | 波多野结衣一区二区在线_国产一级一片免费播放放_狠狠色婷婷久久一区二区_av在线不卡播放_最近2019中文字幕第二页_国产精品人妻一区免费看8c0m_亚洲色大成网站www久久九九_日韩精品视频免费观看 | 在线超碰在线_美国aa毛片_AV无码人妻无码男人的天堂_麻豆一二区_精品亚洲aⅴ乱码一区二区三区_久久亚州_色免费在线视频_在线中文字幕日韩 | 九一亚洲_日韩区欧美区_亚洲AV无码一区东京热不卡_免费观看在线毛片_亚洲一区二三区好的精华液_国产丰满果冻videossex_日本不卡不码高清视频_欧美a免费 | 亚洲欲色欲色xxxxx在线观看_亚洲国产视频精品_国产精品亚洲视频_久久精品男女_国产国产成年年人免_亚洲精品无码久久久久久_影视免费观看_一边吃奶一边摸做爽视频 | 国内精品久久久久_免费国产小视频_国产免费看av_成年人的免费视频_69福利影院_国内精品一级片_韩日不卡视频_亚洲欧美综合区丁香五月小说 | 国产内射爽爽大片视频社区在线_日韩欧美一二三区_91麻豆精品91久久久久同性_夜夜爽免费888视频_国产嫖妓风韵犹存对白_日本老女人视频_日韩在线第一区_伊人ab | 亚洲精品久久久久无码AV片软件_日本国产欧美大码a视频_欧美一区二区三区视频在线_久久国产精品偷_日本午夜精品视频_日日干夜夜撸_www.久色_欧美视频完全免费看 | 少妇无内裤下蹲露大唇_人人草人人射_日本福利小视频_97精产国品一二三产区_成人免费网站在线观看视频_2023天天射天天干_狠狠爱亚洲综合久久_黄色成年网站 | 欧美日韩一区在线播放_亚洲高清人人爽夜夜爽AV毛片_亚洲成在人线aⅴ免费毛片_亚洲区一区二区_欧美破苞系列二十三_国产初高中生视频在线观看_午夜性又黄又爽免费看尤物_国产精品亚洲第一区在线暖暖韩国 | 久青草视频_欧美日韩国产精品自在自线_国产自偷亚洲精品页65页_无码免费大香伊蕉在人线国产_97caopor国产在线视频_久久精品欧美一区二区三区麻豆_亚洲第一页国产_女人色网站 | 日本天堂资源_亚洲一区二区成人_一本一本久久a久久精品综合_成人区精品一区二区婷婷_久久国产精品无码网站_久久视频这里有精品_日韩精品免费一区二区三区_国产乱子伦精品无码专区 |