等值连接_sql高阶教程:非等值自连接
生活随笔
收集整理的這篇文章主要介紹了
等值连接_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高阶教程:非等值自连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术人员的明天:35岁后我们做什么
- 下一篇: 扫描过程_高考试卷扫描、阅卷过程以及答题