日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

SQL基本操作全解析:從建庫建表到窗口函數(shù)實戰(zhàn)指南

SQL基本操作全解析:從建庫建表到窗口函數(shù)實戰(zhàn)指南 1. 先搞清楚SQL到底在學什么1.1 你以為的SQL和實際要用的SQL可能不是一回事很多人一聽到“SQL基本操作”腦子里浮現(xiàn)的是大學數(shù)據(jù)庫課本里那一堆CREATE、DROP、GRANT、REVOKE。真到了工作中才發(fā)現(xiàn)日常打交道最多的其實是查詢、插入、更新、刪除這四類操作也就是常說的增刪改查。至于授權(quán)、備份、恢復、調(diào)參這些事大部分時候有DBA或運維同事頂著普通開發(fā)、數(shù)據(jù)分析、產(chǎn)品運營能把查詢寫好就已經(jīng)能解決工作中絕大多數(shù)問題了。我用一個比較直白的分類來幫大家建立整體認知。SQL語言按功能大致可以分成四類分類全稱代表命令日常工作占比DQL數(shù)據(jù)查詢語言SELECT最高超過一半DML數(shù)據(jù)操作語言INSERT、UPDATE、DELETE較高DDL數(shù)據(jù)定義語言CREATE、ALTER、DROP偶爾用到DCL數(shù)據(jù)控制語言GRANT、REVOKE很少用到這個表不是想讓你背概念而是想告訴你學習精力要花在刀刃上。先把SELECT練得滾瓜爛熟再掌握增刪改的基本姿勢建表改表了解常見用法權(quán)限控制交給專業(yè)的人。這跟我?guī)氯说乃悸芬恢隆視屝氯讼然ㄒ恢軙r間把各種查詢寫明白而不是上來就研究怎么建存儲過程、怎么調(diào)索引。1.2 數(shù)據(jù)庫選型MySQL、SQL Server、SQLite到底學哪個看熱搜詞就能發(fā)現(xiàn)大家的關(guān)注點分布在MySQL、SQL Server、SQLite這幾個方向上。這里我想先給一個結(jié)論SQL基本操作的語法在主流數(shù)據(jù)庫里七八成是通用的。標準SQL的SELECT、WHERE、GROUP BY、ORDER BY、JOIN在MySQL、PostgreSQL、SQL Server、SQLite里寫法幾乎一樣。真正不同的地方主要在函數(shù)名、分頁寫法、自增主鍵的定義方式這些細節(jié)上。比如分頁查詢MySQL用LIMITSQL Server用OFFSET FETCH或TOPSQLite也支持LIMIT比如字符串拼接MySQL用CONCATSQL Server用加號SQLite用||。這些差異確實煩人但如果你把標準SQL的部分打扎實換數(shù)據(jù)庫也就是查一下函數(shù)手冊的事。我平時用得最多的是MySQL線上生產(chǎn)環(huán)境也是MySQL為主偶爾用SQLite做本地數(shù)據(jù)處理。所以這篇文章的示例統(tǒng)一用MySQL語法來寫涉及SQL Server或SQLite有差異的地方我會單獨標注說明。這樣不管你在哪個數(shù)據(jù)庫上練習思路都能跟得上。2. 建庫建表所有SQL操作的地基2.1 建庫前先想清楚字符集和排序規(guī)則我第一次接手項目的時候上來就CREATE DATABASE連字符集都沒指定結(jié)果存中文一切正常后來做模糊查詢時發(fā)現(xiàn)明明條件是對的就是查不出來。排查了半天發(fā)現(xiàn)是建庫時用了默認的latin1字符集中文被存成了亂碼。從那以后我建庫一定顯式指定字符集。以MySQL為例一個穩(wěn)妥的建庫語句長這樣CREATE DATABASE IF NOT EXISTS school DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;utf8mb4是utf8的超集能存emoji也能存生僻字。雖然你可能覺得用不到但線上環(huán)境一旦定了字符集后期想改牽連很大所以一步到位更省心。COLLATE里的ci是case insensitive的縮寫意思是排序和比較時不區(qū)分大小寫這也是比較符合業(yè)務直覺的配置。如果你在SQL Server上對應的概念是實例排序規(guī)則比如Chinese_PRC_CI_AS思路是一樣的。2.2 用學生、課程、成績?nèi)龔埍碜咄ㄋ谢静僮鲗WSQL基本操作最忌諱的就是只看不練。為了讓你后面每個案例都有場景可以跑我設計一套特別經(jīng)典的三張表學生表、課程表、成績表。這套表我在不同公司帶新人時用過很多次知識點覆蓋很全面。學生表保存學生基礎信息CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 學生ID, stu_no VARCHAR(20) NOT NULL UNIQUE COMMENT 學號, stu_name VARCHAR(50) NOT NULL COMMENT 姓名, gender CHAR(1) DEFAULT 1 COMMENT 性別1男 2女, birth_date DATE NULL COMMENT 出生日期, phone VARCHAR(20) NULL COMMENT 手機號, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時間 ) COMMENT 學生表;課程表保存課程信息CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 課程ID, course_no VARCHAR(20) NOT NULL UNIQUE COMMENT 課程編號, course_name VARCHAR(100) NOT NULL COMMENT 課程名稱, credit DECIMAL(3,1) DEFAULT 0 COMMENT 學分 ) COMMENT 課程表;成績表保存學生每門課的考試成績CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主鍵, stu_id INT NOT NULL COMMENT 學生ID, course_id INT NOT NULL COMMENT 課程ID, score DECIMAL(5,1) NOT NULL COMMENT 成績滿分100, exam_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 考試時間, UNIQUE KEY uk_stu_course (stu_id, course_id) ) COMMENT 成績表;可能有人問為什么要建三個表不是兩個甚至一個就夠了嗎。直接建一張大寬表把學生信息和成績放一起寫起來確實簡單。但這樣做會有兩個問題一是學生信息重復存儲一個學生選了五門課姓名性別就存了五遍浪費空間不說改一次要改多行二是數(shù)據(jù)更新容易不一致改了一行漏了一行后面對賬就頭疼。拆成三張表是關(guān)系型數(shù)據(jù)庫的基本設計套路也是你后面理解JOIN連接的重要鋪墊。2.3 主鍵、唯一鍵、索引的第一步認知建表語句里出現(xiàn)了PRIMARY KEY、UNIQUE KEY這里我講得淺一點但你要建立正確認知。主鍵是每行數(shù)據(jù)的唯一標識你可以把它理解為身份證號一表只能有一個主鍵且主鍵不允許為空。唯一鍵保證某一列或某幾列的組合值不重復比如成績表里的(stu_id, course_id)就是確保同一個學生同一門課只能錄一次成績。至于索引現(xiàn)在你只需要知道它是數(shù)據(jù)庫為了加速查詢而維護的一種數(shù)據(jù)結(jié)構(gòu)可以類比成書的目錄。沒有索引的查詢是全表掃描相當于從第一頁翻到最后一頁有索引的查詢相當于先查目錄再翻到對應頁。我建議剛?cè)腴T的人先不要把注意力放在索引原理上但要養(yǎng)成一個習慣作為查詢條件的字段尤其是經(jīng)常出現(xiàn)在WHERE和JOIN條件里的字段盡量加上索引。等后面遇到慢SQL了再深入研究執(zhí)行計劃那是進階的事。3. 增刪改數(shù)據(jù)別把線上庫當測試環(huán)境3.1 INSERT插入數(shù)據(jù)的三種姿勢插入數(shù)據(jù)是最容易理解的操作但寫法上有不少細節(jié)值得說。第一種是單條插入指定字段名和值INSERT INTO student (stu_no, stu_name, gender, birth_date, phone) VALUES (2024001, 張偉, 1, 2000-01-15, 13800001111);第二種是一次插入多條VALUES后面跟多個括號INSERT INTO student (stu_no, stu_name, gender, birth_date, phone) VALUES (2024002, 李娜, 2, 2001-03-22, 13800002222), (2024003, 王強, 1, 2000-07-08, 13800003333), (2024004, 趙敏, 2, 2001-11-30, 13800004444);第三種是從查詢結(jié)果直接插入常用于數(shù)據(jù)處理和表結(jié)構(gòu)遷移INSERT INTO student_archive (stu_no, stu_name, gender, birth_date, phone) SELECT stu_no, stu_name, gender, birth_date, phone FROM student WHERE create_time 2024-01-01;第三種用法我工作中用到過很多次。比如要臨時把線上某些數(shù)據(jù)導到分析庫或者做一張報表中間表直接從業(yè)務表里查出來灌進去比先導成文件再導進去要高效得多。要注意的是INSERT SELECT不會檢查目標表和源表的數(shù)據(jù)是否有約束沖突如果目標表有唯一鍵插入重復數(shù)據(jù)會直接報錯。3.2 UPDATE更新數(shù)據(jù)血淚教訓就是WHERE更新操作我見過太多翻車現(xiàn)場包括我自己剛?cè)胄袝r也干過。有一次要給一批用戶改等級寫UPDATE的時候忘了加WHERE條件執(zhí)行完后發(fā)現(xiàn)全表用戶的等級都被改了。當時真的冷汗直流還好是測試環(huán)境如果線上那后果不是寫個檢討就能了事的。正確的更新語句必須帶WHEREUPDATE student SET phone 13900001111 WHERE stu_no 2024001;這里有個很重要的習慣要培養(yǎng)UPDATE和DELETE語句里WHERE條件一定要先寫再回頭寫SET和表名。我寫更新語句的習慣是先寫UPDATE student SET phone 13900001111 WHERE stu_no 2024001;然后執(zhí)行之前再反復看一遍WHERE確認它圈定的范圍就是自己真正想改的范圍。還有一點如果一條UPDATE要改多個字段SET后面用逗號分隔就行UPDATE student SET phone 13900001111, gender 2 WHERE stu_no 2024001;有些人會問如果不小心忘帶了WHERE有沒有辦法回滾。答案取決于是否開啟了事務以及數(shù)據(jù)變更是否已經(jīng)提交。這就要引出事務的概念。3.3 DELETE、TRUNCATE和DROP的區(qū)別刪數(shù)據(jù)前先冷靜刪除操作有三兄弟長得像但脾氣完全不同。DELETE是逐行刪除可以帶WHERE條件只刪符合條件的行。DELETE執(zhí)行后不會重置自增ID也就是說你刪了最后一行再插入一條新數(shù)據(jù)ID會繼續(xù)往下跳。而且DELETE操作可以通過事務回滾在InnoDB引擎下如果還沒COMMIT有機會恢復。TRUNCATE是把整張表清空不能帶WHERE條件執(zhí)行效率比DELETE高很多原理是直接丟棄表數(shù)據(jù)頁再重新分配。TRUNCATE之后自增ID會歸零而且不能通過事務回滾在MySQL中隱式提交。DROP更狠直接刪除整個表的結(jié)構(gòu)和數(shù)據(jù)神仙難救。操作能否帶WHERE能否回滾自增IDDELETE能能事務內(nèi)不重置TRUNCATE不能基本不能重置DROP不能不能表都沒了我的實操建議是刪除數(shù)據(jù)之前先SELECT一遍同樣的WHERE條件確認刪的就是目標數(shù)據(jù)。如果可能先備份再刪比如CREATE TABLE student_bak_20250101 AS SELECT * FROM student WHERE 條件。這一步多花十秒能避免很多無法挽回的事故。3.4 事務與提交為什么推薦手動開啟事務的概念我用一個生活場景來解釋轉(zhuǎn)賬。A給B轉(zhuǎn)100塊數(shù)據(jù)庫要執(zhí)行兩步操作A的賬戶扣100B的賬戶加100。這兩步要么都成功要么都失敗不能出現(xiàn)只扣錢不加錢的情況。事務就是保證一系列操作作為一個整體來執(zhí)行。MySQL的InnoDB引擎下事務的ACID特性是數(shù)據(jù)庫可靠性的基礎。對于多行更新或刪除建議手動控制事務START TRANSACTION; UPDATE account SET balance balance - 100 WHERE user_id 1; UPDATE account SET balance balance 100 WHERE user_id 2; COMMIT;如果執(zhí)行過程中發(fā)現(xiàn)某一步出錯了可以ROLLBACK回滾讓所有修改都不生效。我個人的習慣是涉及金額、庫存、狀態(tài)變更等多表聯(lián)動的數(shù)據(jù)操作一定會包上事務。查數(shù)據(jù)雖然也可以開事務但不那么必要默認的自動提交模式足夠了。4. 查詢基本功解決80%的日常取數(shù)需求4.1 SELECT執(zhí)行順序越早理解越少走彎路查詢絕對是SQL的重頭戲。很多人寫SQL能跑出結(jié)果但一旦報錯就懵了尤其是涉及多個子句組合的時候往往是因為沒搞懂SELECT語句的執(zhí)行順序。一條完整的查詢大概是這樣的SELECT stu_name, gender FROM student WHERE create_time 2024-01-01 GROUP BY stu_name, gender HAVING COUNT(*) 1 ORDER BY create_time DESC LIMIT 10;你可能以為SQL引擎是從SELECT開始讀的實際上執(zhí)行順序完全不是這樣。邏輯上的執(zhí)行順序大概是FROM確定數(shù)據(jù)來源先找到表WHERE過濾行級條件GROUP BY按字段分組HAVING過濾分組后的條件SELECT確定要輸出的列ORDER BY排序LIMIT分頁截取理解這個順序最大的好處是抓SQL報錯時能快速定位是哪一步出了問題。比如你寫了WHERE COUNT(*) 1數(shù)據(jù)庫會報錯因為WHERE在GROUP BY之前執(zhí)行此時聚合結(jié)果還不存在所以聚合條件必須放在HAVING里。這種錯誤新手經(jīng)常遇到理解了執(zhí)行順序就可以避免。4.2 WHERE條件與空值處理的三個大坑WHERE是查詢中最常用的子句除了常規(guī)的、、、、、比較運算符之外還有幾個高頻場景要注意。第一個坑是NULL的判斷。NULL在SQL里表示“未知”或“沒有值”它不等于空字符串也不等于0。判斷某列是否為NULL必須用IS NULL或IS NOT NULL不能用 NULL或! NULL。曾經(jīng)有新人寫了個查詢想找沒填手機號的用戶條件是WHERE phone ! 結(jié)果該用戶手機號是NULL這條記錄怎么都查不出來。要查出沒填手機號的用戶正確寫法是SELECT * FROM student WHERE phone IS NULL OR phone ;第二個坑是LIKE模糊查詢。%表示任意長度的任意字符_表示單個任意字符。比如查詢姓張的學生SELECT * FROM student WHERE stu_name LIKE 張%;注意如果數(shù)據(jù)量很大LIKE %關(guān)鍵詞%這種寫法即使有索引也未必能命中因為前導百分號會導致索引失效。這個細節(jié)在后面慢SQL排查部分我再展開。第三個坑是IN和NOT IN。IN后面跟一個值列表或子查詢結(jié)果比如查一班和二班的學生SELECT * FROM student WHERE class_id IN (1, 2);用NOT IN的時候要特別小心如果列表里包含NULL結(jié)果可能不符合直覺。因為NULL參與比較時結(jié)果是UNKNOWN不是TRUE所以帶NULL的NOT IN子查詢可能會返回空結(jié)果。建議用NOT EXISTS替代SELECT * FROM student s WHERE NOT EXISTS ( SELECT 1 FROM score sc WHERE sc.stu_id s.id );4.3 去重的兩種方式DISTINCT和GROUP BY別混用去重是個高頻需求。熱搜詞里“sql語句去重查詢”、“清洗---sql語句去重”都指向這個問題。最直接的是DISTINCTSELECT DISTINCT gender FROM student;這條語句返回學生表里所有不重復的性別。DISTINCT可以作用于多列意思是多列組合起來不重復SELECT DISTINCT class_id, gender FROM student;另一種去重方式是GROUP BY它本身的功能是分組聚合但也可以實現(xiàn)去重效果SELECT class_id, gender FROM student GROUP BY class_id, gender;兩條語句返回結(jié)果很相似但語義不同。DISTINCT強調(diào)的是“結(jié)果集去重”GROUP BY強調(diào)的是“按字段分組”如果你還需要統(tǒng)計每組的數(shù)量只能用GROUP BY。如果是單純?nèi)ブ谼ISTINCT就夠了別畫蛇添足。還要講一個實用場景刪除表里的重復數(shù)據(jù)。比如成績表因為重復導入產(chǎn)生了重復記錄思路是先找出每組保留的最小ID再刪除不在最小ID列表里的記錄DELETE FROM score WHERE id NOT IN ( SELECT MIN(id) FROM score GROUP BY stu_id, course_id );這里要提醒一下MySQL里DELETE的子查詢不能直接引用目標表會報“You cant specify target table for update in FROM clause”的錯誤。解決辦法是套一層臨時表DELETE FROM score WHERE id NOT IN ( SELECT * FROM ( SELECT MIN(id) FROM score GROUP BY stu_id, course_id ) tmp );4.4 排序與分頁LIMIT的偏移問題要注意ORDER BY用于排序默認為升序ASC降序要寫DESC。多字段排序時從左到右依次作為主次關(guān)鍵字比如先按班級排再按成績從高到低排SELECT stu_id, course_id, score FROM score ORDER BY course_id, score DESC;分頁常用LIMITMySQL和SQLite都支持。LIMIT的兩種寫法SELECT * FROM student ORDER BY id LIMIT 10; -- 返回前10行 SELECT * FROM student ORDER BY id LIMIT 10 OFFSET 20; -- 跳過20行返回10行也可以簡寫成LIMIT 20, 10表示從第21行開始取10行。這里有一個性能陷阱當OFFSET值很大的時候比如LIMIT 100000, 10數(shù)據(jù)庫仍然要先把前面10萬行找出來再丟棄效率很低。更優(yōu)的做法是記住上一頁最后一條記錄的ID或排序字段值用WHERE條件來定位SELECT * FROM student WHERE id 上一頁最后一條的ID ORDER BY id LIMIT 10;這種“鍵集分頁”方式不管翻到第幾頁查詢效率都穩(wěn)定。在做后臺列表分頁時我優(yōu)先用這種方式。5. 聚合分組從明細數(shù)據(jù)到統(tǒng)計報表5.1 五個聚合函數(shù)COUNT、SUM、AVG、MAX、MIN聚合函數(shù)是讓SQL從“查數(shù)據(jù)”升級為“算數(shù)據(jù)”的關(guān)鍵。常用的就五個COUNT統(tǒng)計行數(shù)SUM求和AVG求平均值MAX求最大值MIN求最小值比如統(tǒng)計學生總數(shù)、成績總分、平均分、最高分、最低分SELECT COUNT(*) AS total_students, COUNT(phone) AS has_phone_students FROM student;COUNT(*)統(tǒng)計的是所有行數(shù)COUNT(phone)統(tǒng)計的是phone不為NULL的行數(shù)這個差別非常實用。再比如統(tǒng)計某門課的情況SELECT COUNT(*) AS exam_count, SUM(score) AS total_score, AVG(score) AS avg_score, MAX(score) AS max_score, MIN(score) AS min_score FROM score WHERE course_id 1;5.2 GROUP BY分組統(tǒng)計新手最容易報錯的地方分組統(tǒng)計的原理就是按指定的列把數(shù)據(jù)切成不同的組然后對每組進行聚合計算。比如統(tǒng)計每個學生的選課數(shù)量SELECT stu_id, COUNT(*) AS course_count FROM score GROUP BY stu_id;這里有一個高頻報錯點也就是網(wǎng)上經(jīng)常說的“only_full_group_by mode”。在MySQL 5.7及以上版本默認開啟這個模式要求SELECT列表中的非聚合列必須出現(xiàn)在GROUP BY中。比如下面這條就是典型錯誤-- 錯誤的寫法 SELECT stu_name, COUNT(*) FROM score JOIN student ON score.stu_id student.id GROUP BY score.stu_id;報錯提示大概是“which isnt in GROUP BY”因為stu_name并沒有被GROUP BY。正確寫法是把stu_name加進GROUP BY-- 正確的寫法 SELECT student.stu_name, COUNT(*) FROM score JOIN student ON score.stu_id student.id GROUP BY student.stu_name;或者如果你想統(tǒng)計的是“每個學生且每門課”的組合那GROUP BY可以寫多個字段。理解這個報錯的關(guān)鍵還是回到SELECT執(zhí)行順序GROUP BY先執(zhí)行SELECT后執(zhí)行。分組之后每個組內(nèi)的stu_name并不是唯一的數(shù)據(jù)庫不知道選哪個值輸出干脆報錯讓你自己做決定。5.3 HAVING和WHERE的邊界一句話講明白WHERE在分組前過濾數(shù)據(jù)HAVING在分組后過濾分組。什么時候用哪個記住一句話過濾條件里如果涉及聚合結(jié)果必須用HAVING普通行級過濾用WHERE。比如找出平均分大于80分的學生SELECT stu_id, AVG(score) AS avg_score FROM score GROUP BY stu_id HAVING AVG(score) 80;如果想把不及格的成績先排除掉再統(tǒng)計平均分就用WHERE先過濾SELECT stu_id, AVG(score) AS avg_score FROM score WHERE score 60 GROUP BY stu_id HAVING AVG(score) 80;注意WHERE和HAVING同時出現(xiàn)時執(zhí)行的先后順序先WHERE過濾掉不及格的數(shù)據(jù)再GROUP BY分組最后HAVING過濾平均分。5.4 分組統(tǒng)計實戰(zhàn)課程成績分析把前面這些知識合起來做一個綜合的統(tǒng)計任務統(tǒng)計每門課的選課人數(shù)、平均分、最高分、最低分、及格率。SELECT c.course_name, COUNT(*) AS exam_count, ROUND(AVG(s.score), 2) AS avg_score, MAX(s.score) AS max_score, MIN(s.score) AS min_score, ROUND(SUM(CASE WHEN s.score 60 THEN 1 ELSE 0 END) / COUNT(*), 4) AS pass_rate FROM score s JOIN course c ON s.course_id c.id GROUP BY c.course_name;其中SUM(CASE WHEN ... THEN 1 ELSE 0 END)這個寫法很實用它能把滿足條件的行數(shù)統(tǒng)計出來。這里也可以用IF函數(shù)簡寫MySQL寫法是SUM(IF(s.score 60, 1, 0))效果一樣。這種條件聚合我?guī)缀趺恐芏紩玫健?. 多表連接從單表查詢走向關(guān)聯(lián)分析6.1 連接的本質(zhì)笛卡爾積與關(guān)聯(lián)條件單表查詢解決了大部分基礎需求但業(yè)務數(shù)據(jù)往往分散在多張表里想把學生姓名和成績放在一起看就必須用連接。連接的本質(zhì)可以理解為先把兩張表做笛卡爾積再根據(jù)關(guān)聯(lián)條件篩選出有效組合。所謂笛卡爾積就是第一張表的每一行都去匹配第二張表的每一行。比如學生表有4行成績表有8行笛卡爾積就是32行其中很多是沒有意義的組合。加上關(guān)聯(lián)條件ON之后就只保留兩邊匹配上的行。6.2 INNER JOIN、LEFT JOIN、RIGHT JOIN怎么選最常用的連接類型是INNER JOIN和LEFT JOIN。INNER JOIN只返回兩表都匹配上的行。比如查詢有成績記錄的學生及其成績SELECT s.stu_name, c.course_name, sc.score FROM score sc JOIN student s ON sc.stu_id s.id JOIN course c ON sc.course_id c.id;LEFT JOIN以左表為主返回左表的全部行右表沒有匹配的就補NULL。比如查詢所有學生的選課情況即使沒選過課的學生也要列出來SELECT s.stu_name, sc.score FROM student s LEFT JOIN score sc ON sc.stu_id s.id;沒選課的學生score字段會顯示NULL。RIGHT JOIN和LEFT JOIN是鏡像關(guān)系以右表為主。因為LEFT JOIN已經(jīng)能滿足絕大多數(shù)場景所以我個人基本不寫RIGHT JOIN完全可以用交換兩表順序的LEFT JOIN替代。有一個容易搞混的點ON條件里除了關(guān)聯(lián)條件還能寫過濾條件。比如LEFT JOIN時想把某些無效成績過濾掉可以寫在ON里但這時候要小心。ON條件在關(guān)聯(lián)階段用WHERE條件在關(guān)聯(lián)完成之后用兩者的結(jié)果可能不同。以LEFT JOIN student和score為例ON里加score.deleted 0左表未匹配的行依然會保留WHERE里加score.deleted 0未匹配的行會被過濾掉LEFT JOIN就變成了INNER JOIN的效果。6.3 JOIN和子查詢什么時候用哪個子查詢就是嵌套在查詢里的查詢常見的是WHERE后面的標量子查詢和FROM后面的派生表。比如查沒有考試成績的學生SELECT * FROM student WHERE id NOT IN ( SELECT DISTINCT stu_id FROM score );那什么時候用JOIN什么時候用子查詢呢。結(jié)合我自己的經(jīng)驗給出幾條實用建議。如果子查詢只是用來做條件過濾不涉及返回子查詢里的字段子查詢可讀性更好比如上面的NOT IN和NOT EXISTS場景。如果子查詢返回的字段也要輸出到結(jié)果集那直接JOIN更合適。比如查學生及其最高分用子查詢反而別扭JOIN分組更直接。MySQL的查詢優(yōu)化器在大多數(shù)情況下會把子查詢改寫成連接方式執(zhí)行性能差距不會特別大所以優(yōu)先考慮可讀性。這里還想多說一句子查詢也可以放在SELECT后面當標量用。比如查詢每個學生信息及其平均分SELECT s.stu_name, (SELECT AVG(sc.score) FROM score sc WHERE sc.stu_id s.id) AS avg_score FROM student s;這種方式在數(shù)據(jù)量大時可能性能不佳因為每一行都要執(zhí)行一次子查詢相當于循環(huán)查庫。能改寫成JOIN聚合的場景盡量改寫成JOIN。6.4 多表統(tǒng)計實戰(zhàn)每個學生的總成績與選課數(shù)來看一個實際需求統(tǒng)計每個學生的姓名、選課數(shù)、總成績并按總成績降序排列。SELECT s.stu_name, COUNT(sc.course_id) AS course_count, ROUND(SUM(sc.score), 2) AS total_score FROM student s LEFT JOIN score sc ON sc.stu_id s.id GROUP BY s.id, s.stu_name ORDER BY total_score DESC;這里有個細節(jié)如果學生沒有選課SUM函數(shù)的結(jié)果是NULL而不是0所以ORDER BY時NULL會被排在最前面還是最后面不同數(shù)據(jù)庫表現(xiàn)不一樣。如果想統(tǒng)一處理可以用IFNULL或COALESCE把NULL轉(zhuǎn)成0SELECT s.stu_name, COUNT(sc.course_id) AS course_count, COALESCE(ROUND(SUM(sc.score), 2), 0) AS total_score FROM student s LEFT JOIN score sc ON sc.stu_id s.id GROUP BY s.id, s.stu_name ORDER BY total_score DESC;COALESCE是標準SQL函數(shù)返回參數(shù)列表中第一個非NULL的值比IFNULL通用性更好。7. 進階操作窗口函數(shù)與慢SQL排查7.1 窗口函數(shù)入門ROW_NUMBER、RANK、SUM OVER窗口函數(shù)是SQL進階的一道分水嶺也是這輪熱搜里的高頻詞。它本質(zhì)上是在不改變結(jié)果集行數(shù)的前提下對每一行計算一個聚合值或排名值。和GROUP BY最大的區(qū)別是GROUP BY會把多行合并成一行窗口函數(shù)不會。最常用的場景是分組排名。比如給每個學生的成績排名SELECT stu_id, course_id, score, ROW_NUMBER() OVER (PARTITION BY course_id ORDER BY score DESC) AS rn FROM score;這條SQL按照課程分組組內(nèi)按成績降序排名。ROW_NUMBER是連續(xù)排名哪怕成績相同排名也不同RANK是跳躍排名成績相同排名一樣但下一個排名會跳號比如1、2、2、4DENSE_RANK是連續(xù)排名成績相同并列為2下一個繼續(xù)是3。還有一個很實用的窗口函數(shù)場景是累計求和。比如統(tǒng)計每個學生的累計成績SELECT stu_id, course_id, score, SUM(score) OVER (PARTITION BY stu_id ORDER BY exam_time) AS cumulative_score FROM score;窗口函數(shù)剛開始上手會覺得語法別扭但只要記住固定套路聚合函數(shù)/排名函數(shù) OVER(PARTITION BY 分組字段 ORDER BY 排序字段)大部分需求都能套進去。它特別適合解決“分組內(nèi)TOP N”、“分組內(nèi)排名”、“累計值計算”這類問題用了窗口函數(shù)SQL會簡潔很多。7.2 常用字符串與日期處理函數(shù)寫SQL時字符串和日期的處理是日常高頻操作這里我整理幾個最常用的足以覆蓋大部分場景。字符串處理常用的有CONCAT拼接、SUBSTRING截取、UPPER/LOWER大小寫轉(zhuǎn)換、LENGTH/LEN長度計算、REPLACE替換、TRIM去空格。比如查詢學生的姓名和姓名長度SELECT stu_name, CHAR_LENGTH(stu_name) AS name_length FROM student;日期處理方面DATE_FORMAT格式化、DATE_ADD日期加、DATEDIFF日期差這三個最常用。比如查詢2024年注冊的學生按月統(tǒng)計數(shù)量SELECT DATE_FORMAT(create_time, %Y-%m) AS month, COUNT(*) AS cnt FROM student WHERE create_time 2024-01-01 AND create_time 2025-01-01 GROUP BY DATE_FORMAT(create_time, %Y-%m) ORDER BY month;日期處理的注意事項是區(qū)間過濾。查某一天的數(shù)據(jù)更穩(wěn)妥的寫法是用 當天零點 AND 第二天零點而不是用BETWEEN。因為BETWEEN包含兩個端點如果字段是DATETIME類型且有時間部分BETWEEN 2024-01-01 AND 2024-01-31會把1月31日寫TIME的23:59:59之后的數(shù)據(jù)排除掉。寫成 2024-01-01 AND 2024-02-01就不會有這種問題。7.3 慢SQL排查的基本思路EXPLAIN和索引慢SQL優(yōu)化是熱搜詞里比較進階的話題我把新手能上手的排查思路講一下。遇到一條SQL跑得特別慢第一步不是猜而是用EXPLAIN看執(zhí)行計劃EXPLAIN SELECT * FROM score WHERE stu_id 1;不同數(shù)據(jù)庫的EXPLAIN輸出格式不同MySQL主要看幾個關(guān)鍵列type、key、rows。type列表示訪問類型從好到差大致是const、eq_ref、ref、range、index、ALL。ALL就是全表掃描通常意味著沒走索引是需要警惕的。key表示實際用到的索引。rows是預估掃描的行數(shù)越小越好。慢SQL的常見原因我整理成一張速查表慢SQL癥狀常見原因調(diào)整方向WHERE條件查得慢沒建索引給WHERE字段建索引JOIN查得慢關(guān)聯(lián)字段沒索引給關(guān)聯(lián)字段建索引LIKE %關(guān)鍵詞%掃全表前導百分號導致索引失效考慮全文索引或ESOR條件導致索引失效多個條件無法合并用UNION拆分分頁翻得越多越慢OFFSET過大鍵集分頁返回列太多SELECT *只查需要的列我實測過很多次簡單的WHERE字段加完索引查詢從幾百毫秒降到幾毫秒效果立竿見影。索引不是越多越好寫多寫少都有代價但一開始先把WHERE和JOIN的高頻字段索引建起來性價比最高。7.4 新手常見的幾個低級錯誤我都踩過最后分享幾個我自己和帶過的同學經(jīng)常犯的錯誤希望能幫你省下一些排查時間。第一個是字符串不用引號。寫WHERE stu_no 2024001如果stu_no是VARCHAR類型有些數(shù)據(jù)庫會做隱式轉(zhuǎn)換索引可能失效。規(guī)則很簡單字符串比較一定加單引號。第二個是UPDATE和DELETE忘寫WHERE。這類錯誤前面已經(jīng)反復強調(diào)我這里再換個角度它往往發(fā)生在你“趕時間”的時候。越急越要冷靜寫完后默讀一遍條件再回車。第三個是混淆“空字符串”和“NULL”。這兩種狀態(tài)在數(shù)據(jù)庫里不同前端傳空值到后端時尤其容易踩坑。統(tǒng)一規(guī)范比較好比如手機號沒填就存NULL不要既存在NULL又存在的情況不然查詢時寫條件很麻煩。第四個是SELECT *濫用。查幾條數(shù)據(jù)沒感覺但線上大表SELECT *會把不需要的大字段也讀出來拖慢網(wǎng)絡傳輸和內(nèi)存占用。我建議只寫需要的字段。8. 寫在最后8.1 我日常寫SQL的一些小習慣這篇文章基本把SQL基本操作的主干過了一遍。最后不講大道理分享幾個我實際寫SQL時的習慣。在確認環(huán)境的前提下我總是先想清楚要的數(shù)據(jù)長什么樣再動手寫。數(shù)據(jù)來自幾張表過濾條件有哪些是否需要分組輸出按什么排序。把這幾件事想明白SQL寫起來基本一氣呵成。拿到一個查數(shù)需求我不會急著敲鍵盤而是在草稿紙上畫出表關(guān)系標注清楚關(guān)聯(lián)字段這個小習慣救過我很多次。另外凡是修改操作我都會先查一遍目標數(shù)據(jù)再執(zhí)行變更改完后再查一遍確認結(jié)果符合預期。8.2 給新手最后的一個建議如果你現(xiàn)在還在大學階段或者剛接觸SQL我建議不要只停留在看懂這篇文章的程度而是把文中的三張表建出來把每個示例都親手跑一遍再多給自己出幾個變體題目。比如“查每個學生選課數(shù)超過2門的學生姓名和選課數(shù)”、“查每門課程排名前三的學生”、“查和某個學生同一天出生的同學”。把這些問題用SQL解決之后你的SQL基礎就算真的扎實了后面無論是數(shù)據(jù)分析、后端開發(fā)還是DBA方向都會有很順的開局。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美综合传媒| 美女自卫慰黄网站免费| 中文自拍欧美影视| 女人高潮大叫一级毛片| 国产精品色片一区二区| 99久久国产精品免费高潮| 中文字幕无码不卡啪啪| 韩国嫰模上门援交视频| 尤物视频网 刘玥| 91伊人久久在线| 操死我了啊啊啊| 国产一区在线免费播放| 人妻丝袜一区二区三区在线| 97超碰中文在线| 国产精品天干天干综合网麻豆| 电家庭影院午夜69久久夜色精品国产69乱| 97人人操人人干| 久射吧| 午夜超爽| 97在线资源| 亚洲免费成人精品电影| 国产97综合| 黑丝自慰喷水网站| 茄子社区国产精品| 亚洲精品国产精品乱码不99| 99热欧美| 欧美熟妇视频| 国产自制av蜜乳| 中文字幕一区二区三区人妻少妇在线| 国产婷婷综合在线观看| 日韩精品电影| 另类天堂| 色天堂在线观看| 超碰伊人在线| 亚洲激情av| 国产视频97| 99激情| 啊啊啊好想要| 中文字幕第23区| 图片区小说区| 国产深夜福利| 熟女中出视频| 围产精品一区二区三区视频播放| 久久精品六区| 亚洲一区二区三区久久 亚洲一区二区| 人妻精品一区二区| 九九十八精品| 日本激情免费大片| 男人的天堂VA| 成人综合网 欧美| 摸奶性爱视频网站在线免费播放| 中文字幕久久精视频久久大全| 2019天天干天天操| 不卡视频一区蜜桃视频| 人人操天天爽| 5278欧美一区二区三区| 国产精品96| 欧美色视| 亚洲男人天堂网久久| 9超碰免费| 久草精品国产99| 丝袜大香蕉| 97久久久久| 黑丝少妇麻豆| 91强奸乱轮| 欧美综合另类| 玖玖爱伊人玖玖爱| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 亚洲性图91| 丁香五月综合| 隔壁邻居波多野结衣中文字幕| 欧美后入式| 欧美少妇大量自拍视频在线观看| 国产一区二区a毛片| 大茄子熟女AV导航| 欧美日韩亚洲高清不卡一区二区三区| aaaa少妇高潮大片| 久久精品人妻一区| 欧美 色 亚洲| 久久久91福利姬| 伊人影院在线理论播放| 婷婷AV一区二区三区| 97日韩欧美| 天美久久久久| 97超碰资源网| 亚州色站 日韩电影| caoni国产亚洲av| 在线观看啊啊啊啊啊| 精品国产乱码久久久兰草影视| 精品二区三四区五电影| 国产一区二区视频在线播放| 欧美色图另类图片| 青青久日| 97超碰色情| 91男人天堂网| 欧美A√综合网| 99综合视频一体| 操逼天美3区| 一本色道综合久久欧美日韩精品| 欧美色图人妻| 男人久久天堂| 中文久久一区| 人人人人人人少妇| 中字乱伦AV| 国产免a费看黄片在线| 久久久91| 91成人无码| 加勒比东京热五月天天堂网| 日韩 女同 综合| 综合色播| 爱做久久久久久| 婷婷激情五月天小说网| 老熟女搡BBBB搡BBBB视频| 日韩大香蕉| 伊人麻豆传媒| 久草免费在线视频| 四虎免费在线观看| 超碰78| 伊人九九九| 操久久久久| 91中文字幕在线观看| 日韩欧美中文字| 久久大陆| 久久久久921| 久久精品人妻一区二区| 亚洲国产青青| 男人的天堂久久狠| 久久精品一区一起草| 好爽要喷了| 嫩草 我啊~嗯~在线| 熟妇高潮二区三区| 黑人精品欧美一区二区蜜桃| 亚洲同性aV综合| 美女天天干| 桑老女人九区| 丰满人妻一区二区三区四区| 超碰在线人人射| 日韩操逼性鲍| 黄片免费视频2019| 国产av波波国产精品| 日本免费中文字幕在线| 久久久精品无码亚免费| 色婷婷基地| 五月丁香网站| 日韩传媒在线| 男人天堂网手机版婷婷| 欧美韩日精品99综合| 欧美日韩不卡传媒| 国产精品天堂| 日本性爱不卡视频| 五月丁香| 美女丝袜激情小说| 欧美性高潮在线| 蜜臀久久99精品久久久久久| 插入逼91| 国产视频不卡在线观看| 日韩乱码Av| 欧美综合制服在线| 欧美草草高清日韩视频| 人妻性爱一区二区| 嗯嗯嗯啊啊啊在线免费观看| 日韩无码视频黄色| 夜嗨影院| av天天在线观看| 手机不卡视频不卡在线一二三区| 天天操天天日天天干| 男人天堂毛片| 美女尤物人人操| 婷婷亚洲五月***久久| 五月综合激情| 午夜福利在线合集| 国产乱伦视频污| 18禁美女裸体无遮挡啪啪| 激情看片网站| 色噜噜人妻丝袜AV资源| 夜夜春夜夜操| 国产又黄又粗的视频| 丁香六月东京热| 久久欧美按摩999| 青青伊人久久| 一级二级在线观看| 婷婷尹人大香蕉免费| 欧美在线伊人色| 欧美人妻一区二区| 人人贴人人摸| 大香蕉碰碰| 亚洲不卡一| 亚洲色图尤物视频| 日本久久久久久久久| 九草九九九| 色欲天天婬色婬香WWW夜色| 性做久久久久久久| 国产AV人人 夜夜人人澡| 欧美日韩亚洲少妇寂寞影院正在播放| 亚瑟国产精品久久无码| 韩国黄片aaaa| 国产精品点击进入在线影院高清| 91亚洲色人| 大伊香蕉在线视频免费| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 一级性爱啪啪视频| 97精品国产97久久久久久免费| 亚欧美综合网。| 国产精品女aA片爽爽视频| 婷婷亚洲五月***久久| 美女大乳久久久久久久女人18| yazhououmeizongya| 岛国黄| 嗯~啊~快点 死我视频| 亚洲第一页色网| 日韩成人在线性爱视频| 久久久久久久78| 欧美在线天堂| 超碰狠狠操| 精品女同一区二区三区| 90后性网国产欧美| 午夜操操操| 欧美性爱视频免费一区一A| av天堂电影网| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲一本大道中文字幕无码在线| 91美女国产在线| 亚瑟国产精品久久无码| 大香蕉国产中文自拍| 激情综合网亚洲| 天天爱天天操| 60秒不遮不挡| 成人综合色网| 精品一级毛片在线观看| 久久色激情一区二区三区| 国产精品久久久久久久久久久久久久| 另类天堂| 在线97视频| 97亚洲性爱| 国产高清成人免费视频| 懂色综合久久久| 久久无码精品| 精品国产网站| 亚洲色图尤物视频| 超碰97久久国| 97最新在线播放视频| av天堂加勒比| 曰韩欧美国产传媒麻豆第一区| 免费AV中文网在线观看| 亚洲91亚洲| 国产亚洲精品无码三区| 香蕉免费一区二区三区不读| 色久桃花影院在线观看| 福利天天都操| 人妻激情偷乱视频一区二区三区 | 欧美亚洲今日在线| 亚洲色五月| 人妻精品一区二区| AV一二区| 日本免费专区| 天天综合欧美黑人| 怡红院视频在线| 囯产精品久久久久久久久久梁医生 | 啪啪性爱免费视频| 99精品人人爽| 综合久久婷婷| 中国操逼无码| 色偷偷人人玩人人舔人人操人人摸人人爽| 欧美亚洲中文字幕| 久久久久97| 中文字幕女同在线| 九九热男人天堂| 老子午夜伦不卡影院| 精品999日本| 狠狠狠狠狠狠| 国产乱色国产精品免费视| 99久久9| 欧美图片偷拍| 亚洲偷拍自拍在线视频| 欧美一级在线观看成人| 我爱搞逼综合网| 激情丁香五月婷婷| 人人玩人人添人人澡免费| 97伊人超碰| 超碰1997| 欧美色图在线视频少妇| 五月天婷婷小说| 精品人妻av在线播放| 青娱乐休闲视频在线观看| 青草地一本线一区二区三区| 日韩在线电影| 亚州性色| 欧美成人免费在线观看| 欧美后入| 精品国产乱码久久久久久网站入口| 久久乐| 国产一级不卡在线观看| 欧美色婷婷| 熟女网站最新| 97超碰国产亚洲精品资源| 亚洲精品白浆高清久久久久久| 男女香蕉一区二区| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 久久久久9999| 亚洲欧美在线观看免费| 夜色91| 亚洲精品黑丝| 免费看污网址| 久久综合精品一区二区三区| 中出91| 大香蕉强奸乱伦| 欧美狠狠干| 2020天天色综合| 日韩78m视频| 久久9久9久99久9久9| 性爱1区| 中国一级操逼视频| 欧洲性爱无码区| 一区二区三区一亚洲中文字幕、综合区灬| 亚洲综合九| 国产精品女同| 床上啊啊啊一区二区三区| 亚洲国产一级精品毛一级精品看免费视频 | 91插B网站| 欧美日韩一干二干| 欧美精品 - 91爱爱| 色婷婷丁香五月| 美国一区二区免费视频| 亚洲图片日本AⅤ欧美在线| 天堂男人网| 亚洲色图欧美色图在线播放| 亚洲污污网站| julia ann久久| 在线观看午夜婷婷久久久久清性观看| 日韩三级在线观看mp4| 美腿色图| 超碰97资源中文字幕| 成人资源中文字幕在线观看天天| 九月丁香| 欧美天天拍| 国产精品一二三区福利| 婷婷激情五月| 男人的天堂2019AV| 久久久九97| 激情综合色| 99久久久久| 综合久| 综合久久中文字幕综合日韩精品| www…国产操逼| 尤物一级在线免费观看| 激情四射五月天| 丁香五月色情| 狂操嫩妻视频一区二区三区| 亚洲色图欧美一区二区不卡| 日韩肏逼视频| 香蕉国产精品麻豆亚洲欧美日韩| www.亚洲黄色| 尤物网址| 强奸a片网| 欧洲色| 91在线|亚| 青青草吊丝| 内射黑人| 日本欧美m v精品网站加| 日本高清加勒比| 欧美日日人人天天| 欧美亚洲情色| 国产精品久久久久久久久久梁医生| 人人操人人摸avav| 国产精品成人蜜臀AV在线| 日韩少妇一区二区三区| 九九热视频在线观看| 一区二区三区在线资源| 麻豆福利视频导航| 啊啊啊啊啊啊啊啊要喷了| 麻豆天美AV传媒第一页| 日韩免费a级毛片无码a∨| 小视频国产| 亚洲成人福利电影免费| 色综合久久久久| 日韩乱码Av| 精品人妻视频一区二区三区蜜桃视频| 日日噜噜夜夜久久亚洲一区二区 | 九九成人| 秋霞蝌科网日本一区| 免费观看啪视频| 亚洲,欧美,春色,另类| 久久久久性熟视频| 少妇第一页| 农村妇女精品一二区| 国产精品直播在线观看直播| 免费看A片毛毛片在线播| 五月天色色色| 男人的天堂色偷偷青青草视频婷婷网| 中文字幕无码不卡啪啪| 午夜福利一区二区影院| 超碰在线人妻| 99色婷婷中文字幕乱色| 91 天天综合| 天天懆天天日| 欧美亚洲综合色| 色娱乐色呦呦夜夜夜夜av| 色色九区| 黄色欧美性爱视频| 亚洲国产剧情少妇激情| 国产后入式在线观看| 操操操五月天婷婷丁香影院| 色婷婷香蕉| 96免费视频在线| 日韩本不卡视频在线观看| 大香蕉乱级| 五月天色综合| 东北操逼| 韩国三级一线观看久| 天天色综合天天操| 日韩三级在线观看mp4| 易易A毛视频| 亚洲国产精品9999在线观看| 人妻加勒比东京热| 中韩中文字幕在线观看| 超碰在线香蕉| 亚洲精品欧美专业| 久久久亚洲| 国产一区二区三区影片| 九区国产| 精品人妻1区| 熟妇熟女亚洲天堂网| 天天爽入口| 人人 操人人 操人人| 久妇网| 78m成人视线| 欧美亚洲日本激情在线| 素颜老阿姨乱情色| 日本人妻中文字幕精品| 九九十八精品| 操逼操2| 亚洲色图超碰在线| 亚洲欧美伦综合| 乱老女人一区二区视频| 国产自偷| 色99视频| 91性网| 色情五月婷婷| 夜夜欢天天干| 在线 制服丝袜中出 人妻| 91久热| 香蕉人人操tv| 在线 欧美 亚洲| 爆操无码| 日本道人妻久久久在线不卡色视频| 草草网站影院白丝内射| 亚州色图欧美| 欧美日本国产日韩激情视频| 日日干夜夜欢| www欧美性爱| 国产中午字一暮区| 久久综合九九| 欧美天天弄| 91N欧美| 亚洲欧美不卡线| 久久99黄色卞西瓜| 国产在线观看一区二区三区| 好爽,再快点啊哈嗯嗯嗯嗯| 国产精品九九九| 老鸭窝亚洲毛片| 蜜臀无码视频在线观看| 97露脸精品丝袜| 少妇人妻好深太紧了vr91| 日韩无码AB| 强奸乱伦日韩AV| 午夜九九| 亚洲综合色男人网| 亚欧免费| 四虎影视永久在线观看精品免费网站 | 久久久久人妻二区精品叶可怜| 秋霞一区二区三区四区五区六区七区| 国产AV激情无码久久无码 | 国产精品九九九| 久久久久性熟视频| 免费观看国产不卡av| 91黑丝操| 97超级久久强资源| 国产精品久久久久久久AV大片| 天天综合网~91入口| www.人人cao| 黄页av| 精品人妻视频一区二区三区蜜桃视频| 一区二区三区 日韩欧美| 91超碰在线观看| 欧美乱色| 九色精品视频导航1| 亚洲成人AB| 麻豆精品久久久久久久| 欧美成人四级在线播放| 青女偷拍网| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 国产女人视频三四五区| 少妇极品熟妇人妻无码| 天天色综合天天操| 国产呦精品系列在线观看| 性爱AV天堂| 大香蕉AV在线| 香蕉久久AⅤ...| 伊人国产AV| 四季AV综合网址| 偷看洗澡一二三区美女| 999久久久免费精品国产牛牛| 国产女人9999| 麻豆视频test| 欧美成人一区二区三区在线播放| 91 欧美| AV色五月天| 无码99| 久久久免费一级黄片| 天天澡天天爽日日AV| 极品AV网站在线观看| 大胆91| 国产 亚洲 丝袜 制服| 91亚洲欧洲| 久久久久久少妇| 蜜桃久久久久久| 亚洲欧美激情在线视频| 国产精品久久久久久久电影渣男| 亚洲人妻日日日| 涩涩久久精品| 97超碰逼| 久久国产99精品72福利| 欧美性爱精品一区二区| 色在线亚洲视频www| 9Ⅰ老熟女| 91精品久久久久久| 欧美日韩天堂| 久草资源欧美在线视频| 天堂蜜桃无码视频一区二区| 免费看久久久性性| 999亚洲国产视频| 五月丁香黄色网| 亚洲日韩精品一区二区| 精品无码一区二区三区| 丰满人妻一区二区中文| 日韩中文字幕2020| 五十路熟女工口 | 日韩欧美传媒一区国产| 人人九九精| 密臀视频一区二区三区| 91蜜臀在线久久久久| 九九久久精品| 99热国产| 五月天婷婷激情| 久久五月视频| 国内三级自拍小视频在线观看| 成人三一级一片aaa| 国产成人无码a| 国产成人拍国产亚洲精品| 超碰导航97| 在线精品福利免费播放| 99少妇| 久久久久婷婷精品av电影| 综合网久久| 艾草av| 97网址www| 欧美性天天影视| 五月大香蕉| 五月天激情四射| 久久五月综合| 五月天婷婷小说| 开心五月婷婷激情| 亚洲色吧网| 亚洲男人天堂2019| 麻豆蜜桃视频在线观看| 91美女视屏| 天美传媒av 在线| 最新AVzaixian| 久久久com| 97一区二区蜜臀| 97爱亚洲综合色| 黄呦呦在线| 加勒比伊人影院| 一区二区亚州激情久婷婷欧美| 夜夜夜夜爽| 0755午夜福利视频| 9丨久久九九九 | 亚州少妇| 久久成年精品| 久热大香蕉网站| 欧美肥臀在线| 久久无码精品| 国产三级资源在线观看| 一线黄色免费性爱片| 天天做日日爱夜夜爽| 操99| 国产性感骚丝袜在线| 东京成人一区| 99热线麻豆| 亚洲啪啪综合?v一区综合精品区| 久综合国内精品自在自线| 丁香五月综合| 色999人与兽| 91成人国产综合久久精品蜜月| 久久久久久久久久精| 亚洲成人在线乱码色午夜| 2017大香蕉| 亚洲精品国产日韩无码AV永久免 | 情色av电影| 人妻超碰青青草98| 伦理第一页| 1769国内精品视频| 久久久精品国产亚洲AV无码| 亚洲天堂人妻一区二区| 9久精品视频在线观看| 男生通女生屁股| 日韩精品资源专区二区| 亚洲AV无码国产精品久久久久| 嗯嗯啊啊视频在线看| 欧美在线l亚洲| 中国和日本人色哪个不下载能放| 色哟哟 日韩精品| 无码聚合| 久久9亚洲| 中文熟女五十乱码在线| 久久永久无码人妻视频| 伊欧美综合视频| 久久久久久亚洲精品中文字幕人妻| 中文字幕日韩人妻视频一区二区三区交换夫妻 | 97中文热色| 精品视频免费在线一区| 97中文超碰| 男女香蕉一区二区| 翔田千里爆乳巨臀无码| 99热99色| 日韩八十路老熟女| 久久性爱视频免费看| 国产在线视视频有精品| 四虎免费看黄| 天美91| 日韩免费性爱视频在线观看| 国产精品。| 综合第一页| 强奸乱伦动态污图免费| 操B久久| 天天综合网~91| 国产精品无码论坛| 久久久久9999妇女| 国产操逼网站亚洲一级黄色| 综合五月婷婷| 中文一区二区| 国产高清精品一区二区三区毛片| 亚洲18禁| 中文字幕视频二区| 爱做久久久久久| 99精品高潮| 国产亚洲性生活视频播放| 91九久| 香蕉综合网| 色婷婷基地| 中日韩久久久免费看| 亚洲中文国际强奸字幕| 日本999精品| 日韩黄片影院| 一区,二区,三区网站| 99热这里只有精品18| 六月婷婷色综合| 国产午夜福利合集| 亚洲精品啪视频| 久久精品国产精品| 岛国色情视频在线观看| 久久久性爱视频| 中文字幕精品免费一区二区| 九九九九九九九九九九九免费国产| 熟妇人妻丰满久久久久久久无码 | JULIA人妻风俗店中出电影| 久久少妇| 欧美中文字幕男人天堂久久精品| 男人的午夜天堂| 91在线页| 四虎国产精品永久在线囯在线| 欧美一区二区一级岛国大片| 亚州精品丝袜-不卡成人免费| 襙一襙| 日韩国产十八禁| 熟妇xxxxx性春色| 久久m| 色伊人91| 亚洲 中文 欧美 日韩 在线| 国产精品视频精品一二| 亚洲深夜福利| 东北夫妻性偷拍| 一级性爱视频免费在线| 精品97久久综合| 色欧美天天| 大香蕉97久久| 国产毛片毛片4p懂色| 蜜奶av| 欧美1区二区三区公司| 亚洲欧美精品久| 凹凸久久人人| 草B在线| 亚洲色图超碰在线| 亚洲国产精品成人综合| 久久啊啊啊视频| 7777欧美成是人在线观看| 男人的天堂VA| 日本一区二区三区精品| 欧美精品日韩久久久九| 欧美成人精品一区二区男人蜜臀| 99久在线精品99re8热| 男人天堂2017| 亚洲激情色片| 激情五月天丁香社区| 91精品人妻一品二品三品| 天天肏美女| 国产精品视频麻豆入口| 成人精品久久| 日韩一999精品| 成年女人黄网站| 国产91 丝袜在线播放| 国产日本熟女顶级一区二区三区视频| 欧美日韩另类在线| 久久国产精品视频| 人妻日日夜夜精品| h无码动漫在线观看| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 精品美女少妇一区二区三区| 性做久久久久久免费观看软件| 玖玖综合网| 性性欧美| 天天日少妇逼AV| 吖在线不卡一区二区国产剧情| 99精品在线| 99国产在线绯色一区| 久久香蕉综合一本到3atv| 亚洲色图一区二区三区| 日本新免费二区三区| 超碰在线91| 免费1级a做爰片观看| 中韩中文字幕在线观看| 日日干夜夜操视频h| 国产尹人在线视频免费| 亚洲在线网站| 天美传媒麻豆一区二区三区国产精| 中文字幕天天天天天| 综合啪啪| 国产精品点击进入在线影院| 色香欲综合| 九九九精品一区二区无码| 国产11页| 国产精品爽爽va在线观看98| 成人国产视频在线观看| 大香蕉一人| 欧美日韩国产男人| 欧洲天天在线| 探花激情视频| 国产一级高跟丝袜| 国产一级高清免费观看| 情色五月天就去干| 怡红院成人av| 欧插网站| 九月婷婷久久| 操高情无码| 久久亚州精品成人Av无| 日韩大香蕉| 国产精品农村妇女精品| 日本高清加勒比| 天天亚洲综合| 99国产精品人妻人伦| 性爱av网站| av无码av无码专区| 国产精品视频自拍在线| 啊啊啊好多水| 久久久久久十| 日韩欧美麻豆| …中文字幕亚洲乱,97人妻无码费视… | 欧美日韩免费性爱| 91人妻人人澡人人爽人人精品| 91亚洲影视| 日韩欧美蜜桃精品久久中文字幕久久 | 亚欧精品久久久久久久久久久| av天堂手机版追回| 东北丰满熟女国产一区 | 欧美日韩国产另类综合| 另类图片欧美激情综合| 中国人高清www色视频免费| 日曰骚久久精品| 色欲久久99精品久久| 天天爱综合网| 日韩色图 一区二区| 久久一本大香蕉| 夜草欧美| 久久精品国产久精国产| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日韩福利综合一区| 三男一女不戴套的A片| 欧美日本成人一区二区| 久操精品| 欧美人与动性人交a| 国产亚洲色停停久久99精品91| 91精片| 1769成人国产精品视频| 欧美18老人禁| 五月天久久综合网| 亚洲一曲日韩精品| 精品亚洲黄色片 国产精品导航一区二区 | 性久久| hd成人一区二区在线| 国产欧美亚洲精品a第2页| 激情久久av一区av二区av| 性爱av在线免费观看| 9l视频自拍9l九色成人| 99精品无码| 九九视品黄色| 亚洲自拍欧美国产首页网曝| 亚洲天堂人人妻| 91国产丝袜美女| 日韩91网| 激情色图| 无码人妻精品一区二区中文| 婷婷激情五月天小说网| 色爱国产| 亚州精人品大香蕉| av婷婷色网| 亚洲老司机123专区| 哑洲在线| 91精品老女人| 国产亚洲日韩欧| 手机在线人成免费视频| 狠狠狠狠狠| 欧美天堂日韩三级国产传媒| 96国产污污污丝袜| 97伊人超碰| dy888午夜老子影视达达兔| av一区二区三区四区| 午夜精品久久久久久久99蜜桃一| 99热思思| 少妇69中文| 日本精品一区二区三| 欧美色性情| WWW啪啪的com| 久久9视频| 精品久久久久黄少妇| 夜夜免费视频| 少妇色| 乱论91| 五月天偷拍| 色大师网站www永久网站视频| 麻豆区久久久久亚| 亚洲九九九九| 超碰成人最新最好看| 亚欧精品久久久久久久久久久| 在线黄色污污网站| 国产精品伦理| 岛国大片国产| 亚 欧 美 综合| 久草精品一区| 97亚洲欧美| 强奸乱伦资源| 免费看污网站| 尤物视频新赏网鲜网色诱网| 日韩成人私密一级精品av| 日本亚洲熟女视频| 超碰天天久久79| 欧美伊人电影| 久久人人爽爽人人爽人人片αV| 国产 码在线成人网站| 蜜臀久久在线视频| 中文字幕乱亚洲美女精品一区| 天天综合网日韩7799| 天美传媒国产原创中文字幕亚洲欧美另类| 东京热精品97综合网| 欧美综合网A| 粉嫩av在线一区二区| 欧美天天谢综合网| 久久精品超碰| 夜夜影视四色| 青青草伊人久久| 婷婷色香伊人| 免费A V在线| 亚洲视频二区| 无码久久国产 | 日韩成人精品| 区日韩亚洲乱码av电影| 超碰导航97| 女人喷水视频在线观看| 情色五月天久久久| 97干97色| 久99| 大香蕉手机在线| 中日韩久久久| 男人 天堂 日 亚洲| 思思热国产高清| 婷婷尹人大香蕉免费| 啊啊啊轻点在线观看| 福利操逼| 亚洲中文电影| 伊人网青青| 久久综合日韩亚洲欧美| 精品午夜福利| 丁香五月社区| 香蕉精品二区二区| 爽 好舒服 无码刺激久久| 久久精品视频一区三区小泽玛利亚| 青青青国产手线观看视频2| 中文字幕一区 二区三四五 区日 日骚| 天天操天天干美女网址导航| 偷拍自拍在线视频观看| 日日做夜狠狠爱欧美黑人| 八戒午夜福利理论片| 啊嗯好大视频在线观看| 91综合色| 91女人的网站| 最新日本中文字幕| 久久啊哟| 日韩性爱啪啪视频| 国产13区| 欧美区亚洲区偷拍区| 日日夜夜国产综合| 免费的黄片有限公司| 99热aaa| 欧 美 自 拍 偷 拍| 色 亚洲 91| 波多野结衣先锋影音| 超碰免费欧美7| 久久久久久久久成人av解说| 中国熟女91| 国产超碰| 大香久久| 青青11操操操操操操操操| 亚洲一区二区在线观看91| 无码91| 少妇厨房愉情理伦片bd在线观看| 日韩精品熟妇| 无套内射人妻在线播放| 国产丸一视频| 无套内射性感少妇视频| 日日骚网站| 嗯嗯啊在线视频| 人人操,人人液| 美女大乳久久久久久久女人18| 欧美天天弄| 亚洲中文字幕精品久久久久久直播| 人人操人人摸人人看人人干| 欧美日韩中文视频播放| 啊啊啊啊啊在线| 久jiu久神马影院| 富女玩鸭子一级毛片| 最新精品久久蜜桃 | 超碰免费人妻人人| 97这里只精品| 亚洲日韩成人性爱视频| 好湿好紧视频| 大鸡巴久久久| 亚洲人妻在线一区| 丝袜加勒比| 嗯嗯嗯啊啊啊在线免费观看| 精品丝袜无码一区二区三APP| 性交一区二区在线播放| 99热自拍| 天堂v无码免费视频| 97视频www| 中文激情网| 国产精品白领在线观看| 亚洲综合69| 久热免费视频| 国产丝袜欧美在线视频| 亚洲欧美综合网站| 午夜免费视频1000| 免费1级a做爰片观看| 在线啊啊啊| av在线人气| 久久精品国产72国产精品福利 | 97香蕉网| 69丨亚洲丨精品丨入口免费播放| 涩涩五月天| 吖在线不卡一区二区国产剧情| 97视频免费在线| 大香蕉AV丝袜| 国产精品一二三在线看| 91亚洲在线| 狠操91,com| 青青爽| 亚欧Av| 日韩欧美福利视频看看| 婷婷久久久精品| 97色97好| 久久精品国产精品亚洲艾通辽熟妇 | n1038 一二三区| 久久性视频| 国产欧美精选自拍一区| 9118禁| 死我十八禁| 欧美一区二区日韩传媒搭讪精品| 立川理惠无码一区二区| 亚洲一区日韩精品| 日韩人妻无码不卡网站| 999 久久久| 99999精品视频| www狠狠| 大香蕉久| 中国AAAAAA黄色片| 欧美丝袜中文字幕07在线| 精品无码久久久久| 富二代亚洲精品99| 97久久视频| 久久久久国产精品喷潮免费观看臀| 亚洲高清视频在线免费观看| 亚洲欧美综合网| 97超碰人操| 97在线欧洲| 色妹子A V| 成人精品在线| 91 亚洲 欧美 日韩 国产 综合| 乱伦一二三区| 97精品国产| 伊人九九| 92大香蕉| 日韩97精| 国产地址二三| 亚洲激情 欧美色图| 亚码激情| 99精品无码| 国产精品青草综合久久| 欧美性巨大╳╳╳╳╳高跟鞋| 久久无码一区二区二三区性色| 欧美综合另类| 亚洲se91| 欧美亚洲今日在线| 5252色欧美在线男人的天堂| 骚逼自拍99| 1000午夜黄色| 丰满精品人妻少妇久久字幕| 夜夜操av亚洲一区二区| 爱射综合| 国产不卡精品91| 日本精品一区三区| 天天干,夜夜爽| 91日韩在线| 一起草av| 激情五月天婷婷| 长长久久曰曰夜夜成人网| 欧美激情综合| 欧美激情综合色综合啪啪五月| 99热在线观看| 色婷婷成人| 天天干天天拍| 蜜臀国产AV中文字幕| 精品区9| 91熟女熟妇视频网站| 欧美综合站| 在线啊啊啊啊| 色老汉色| 久久欧洲| 久久99草| 91网站在线播放| 偷拍新久久| 91n处女在线观看| 亚洲久9| 大肥女高潮bbwbbwhd视频| 超碰欧美| 国产精品亚洲色婷婷久久久| 欧美中文字幕日韩在线| 欧美国产精品| 老司机深夜影院18未满| 午夜福利视频在线一区| 久久露脸国产老熟女| 激情婷婷| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 国产超碰97| 日日摸日日碰夜夜爽视频| 超碰免费人妻在线| 99亚洲精品| 97人妻免费中文字幕| 嫖老熟女A片一二三区| 色色五月天激情| 久热色情精品| 97视频620| 91美女国产在线| 久久一区二区蜜桃| 国产亚洲精品一区二区三区| 亚洲一区二区久久久久| 日韩黄色一区二区三区| 九九激情网| 亚洲男人的天堂V| 日韩资源网| 亚洲情色 自拍| 国产强奸乱伦欧美| 日本一级婬片试看三分钟| 国产精品亚洲美女久久久久| 欧美综合骚| 蜜屁Av| 久久久久熟女| 91在线精品一区二区三区| 国产精品一级特黄aaa大片在线观看| 久久久国产成人一区二区三区在线| 久久久蜜桃一区二区三区| 四虎视频在线观看| 黄页网站成人免费| 亚洲无码视频免费在线观看网址!| 久操网无码在线| a网站免费观看| 麻豆性爱视频在线播放| 亚洲脚交| 另类亚洲一区二区三区| 爆操无码| xxx亚洲午夜天堂| 91日日夜夜| 国产1024在线播放| 精品黑人一区二区| 极品粉嫩一区二区| 欧美精品亚洲精品日韩传电影| 超碰午夜| 黄片不用下载在线观看| 快点操死我| 亚洲操操操无码| 久久中文字幕一区不卡| 99久热| 成人久久久精品| 色吧 综合| 天天天天天干夜夜夜夜夜操| 97久久超碰国产网站| 国产精品日日摸天天碰| 免费一级精品啪啪视频| 99无码| 国内成人圈中文字幕无码视频| 精品无码久久久久久久杏吧| 欧美极度丰满熟妇hd| 91中文精品日韩欧美在线| 熟女91网站| 亞洲久久直播| 大吊色| 国产60页| 婷婷五月天色色| 91精品伊人久久久大香线蕉91| 韩国轻伦国内自拍一区| 熟女少妇一区二区三区| 亚洲欧美综合区自拍另类 | 色色97爱| 成人美女av| 夜夜嗷嗷一区二区| 老熟女91| 九九av| 性欧美| 久久精品高清AV| 亚洲第一色页夜| 中文字幕久久婷婷丁香五月天| 熟女乱伦二区| 校园春色家庭伦理欧美激情| 91久久免费视频互動交流| 91xingse| 97在线观| 91狠狠综合久久久| 超碰偷拍| 久久久国产亚洲精品系列| 96免费视频在线| 国产婷婷综合在线观看| 狠狠狠一区二区三区| 97亚洲色图| 激情视频网址| 中文字幕欧美精品亚洲日韩蜜臀| av在线免费一区二区| 午夜后入| 男女性感激情网站| 东北女人的毛片| 成人 日韩欧美一区| 少妇同性| 一起草三级AV电影在线观看| 乱精品一区字幕二区|