以前在寫博客中,自己感覺函數,SQL查詢常用的沒必要多看多學習,今天想處理一個簡單笛卡爾積問題,炸了!下面聊聊解決和感覺有意義的知識點
說問題拉點知識關於rownum的,這是Oracle系統查詢返回行的記錄數值(編號),那麼這個其實沒什麼貼別好說的但是用法相當的靈活和強悍,接着說說今天用到兩個非常簡單函數lpad,rpad
大家都是平常熟悉的lpad,rpad,就是咱們補齊字符串常用函數
格式:
select lpad(rownum,5,rownum),rownum from dual connect by rownum <=5;
解釋:
一開始我用rownum from源dual看了一下,返回數值是1也就是一行,上面配合lpad函數意思返回其實原數據1,預期的長度5,不夠5長度用rownum(1)補齊,然後connect by 條件指定列小於等於5,所以輸出5行
拉一拉這個有什麼用,後面咱們就會用到!把新朋友引入進來 這個朋友就層次化查詢,這個朋友厲害的狠,我們下面一起和他聊聊天,朋友名字叫Connect by,在喜歡嚴謹的思路,經常做父子的SQL語句,而且還有助手叫prior,他負責標識前後關係,可以放在比較符的後面。他的影子叫sys_connect_by_path(),是ORACLE中的函數,他能把自己(connect by)遞歸生成的結果集,爲每條起始記錄,將結果集的列值串聯爲字符串。
這樣說完上面的查詢語句大家算是基本瞭解都是啥東西,我們尋尋漸進在又認識了一個夥伴叫distinct,英語翻譯過來截然不同的,就是獲取唯一標識,會把重讀信息過濾掉,這時候他介紹了兩位關係戶雙胞胎union與union all,這就不得了了,我們深入一下他的大家族
聯合查詢
這個大家族我來介紹介紹,他們工作室幹把兩個或多個select語句並列查詢,對記錄查詢的結果集進行操作,獲得最終的記錄集結果。
先從大哥說吧(比較常用),union查詢兩個結果集並進行操作,刪除重複的記錄,相當於在獲取最終的結果集之後叫過來朋友distinct,結果集去重複,那麼雙胞胎兄弟union all的其實功能一樣就是人家喜歡單幹!結果不去掉重複,再來說說其他家人intersect,這個比較厲害,我們數學中都學過交集,U的反身,他就是獲取最終查詢結果的交集,都有的那一部分。再來說一說minus可以當做集合減法操作,第一個查詢結果集是被減數,第二個減數,返回第一個結果集中存在,第二個結果集中不存在的。
那我們的鋪墊算是做好了下面看看今天一個非常簡單的笛卡爾積也是比較經典的例子!我結合上面的知識大家一定會很快明白
先說說笛卡爾積是啥:
數學上的概念,笛卡爾積又叫直職,貼上一段數學
集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積爲{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}
今天說了那麼多,以上完全個人理解和認識,有可能存在不足之處,請多多指教,今天就說笛卡爾積咱們明天說說問題!