日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

等值连接_sql高阶教程:非等值自连接

發布時間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 等值连接_sql高阶教程:非等值自连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題介紹:

自連接的內部計算機制:

第一步:生成同一張表格的笛卡爾積。

有序數對:有序數對指的是<1,2>,無序數對指的是{1,2}。對于有序數對,兩組數據交換意義不同。即<1,2> 不等于<2,1>。而無序數對{1,2} = {2,1}。

SELECT P1.name AS name_1, P2.name AS name_2 FROM Products P1, Products P2;

執行結果里每一行(記錄)都是一個有序對。因為是可重排列,所以結果行數為3^2 = 9。

結果里出現了(蘋果, 蘋果)這種由相同元素構成的對和(橘子, 蘋果)和(蘋果, 橘子)這種只是調換了元素順序的對,這種對在有序數對中代表的意思不同。

第二步:排除相同元素構成的對(比如<蘋果,蘋果>這種對)

-- 用于獲取排列的SQL 語句

SELECT P1.name AS name_1, P2.name AS name_2 FROM Products P1, Products P2 WHERE P1.name <> P2.name;

無論是p1還是p2,可以把這兩個表格當成兩個不同的表格,只是碰巧數據相同,相當于:

  • P1 里的“蘋果”行的連接對象為P2 里的“橘子、香蕉”這兩行
  • P1 里的“橘子”行的連接對象為P2 里的“蘋果、香蕉”這兩行
  • P1 里的“香蕉”行的連接對象為P2 里的“蘋果、橘子”這兩行

第三步:對相同元素構成的對去重(即只保留<蘋果,橘子>,<橘子,蘋果>對中的一個)

SELECT P1.name AS name_1, P2.name AS name_2 FROM Products P1, Products P2 WHERE P1.name > P2.name;

以上的結果是首先將字符按照首字母排序,可以發現結果是香蕉>蘋果>橘子,根據上文條件,橘子可以跟比它大的兩個字符結合,蘋果可以跟香蕉結合,而香蕉最大,則沒有可以匹配的數據。

第四步:將所有元素排成一行

-- 用于獲取組合的SQL 語句:擴展成3 列 SELECT P1.name AS name_1, P2.name AS name_2, P3.name AS name_3 FROM Products P1, Products P2, Products P3 WHERE P1.name > P2.name AND P2.name > P3.name;

Leetcode習題:

180題:連續出現的數字

編寫一個 SQL 查詢,查找所有Logs表中至少連續出現三次的數字。

Logs 表

結果表select distinct l1.Num as ConsecutiveNums from Logs l1,Logs l2, Logs l3 where l1.Id = l2.Id-1 #合并規則,按照id+1來合并 and l2.Id = l3.Id-1 and l1.Num = l2.Num #篩選規則 and l2.Num = l3.Num

總結

以上是生活随笔為你收集整理的等值连接_sql高阶教程:非等值自连接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。