資料庫行行比較

2022-09-20 17:00:09 字數 2552 閱讀 3632

**自:

昨晚我和我爸聊天

我:「爸,你怎麼把菸戒了,也不出去喝酒了,是因為我媽不讓,還是自己醒悟,開始愛惜自己啦?」

爸:「兒子啊,你說的都不對,是彩禮又漲價了。」

我:「你不是有媳婦了嗎?」

爸:「我有,可你沒有啊!」

我:「爸,我長大了不娶媳婦,好好孝敬您!」

爸:「臭小子,你想的美,我一定要給你娶媳婦,讓你的孩子也好好折騰你,讓你也體會一下有乙個不爭氣的兒子是什麼感受!」

我:「......」

資料庫版本: mysql 5.7.20-log 

建表 sql

初始化資料

準備了 769063 條資料

業務機構下銷售商品,同個業務機構可以銷售不同的商品,同個商品可以在不同的業務機構銷售,也就說:業務機構與商品是多對多的關係

假設現在有 n 個機構,每個機構下有幾個商品,如何查詢出這幾個門店下各自商品的銷售情況?

具體點,類似如下

如何查出 100001 下商品 1000、1001、1003 、 100002 下商品 1003、1004 、 100003 下商品 1006、1008、1009 的銷售情況

相當於是雙層列表(業務機構列表中套商品列表)的查詢;業務機構列表和商品列表都不是固定的,而是動態的

那麼問題就是:如何查詢多個業務機構下,某些商品的銷售情況

(問題經我一描述,可能更模糊了,大家明白意思了就好!)

這個很容易想到,在**層面迴圈業務機構列表,每個業務機構查一次資料庫,偽**如下:

具體的 sql 類似如下

sql 能走索引

實現簡單,也好理解,sql 也能走索引,一切看起來似乎很完美

然而現實是:部門開發規範約束,不能迴圈查資料庫

哦豁,這種方式只能放棄,另尋其他方式了

通過 mybatis 的 動態 sql 功能,進行 sql 拼接,類似如下

具體的 sql 類似如下

sql 也能走索引

實現簡單,也好理解,sql 也能走索引,而且只查詢一次資料庫,貌似可行

唯一可惜的是:有點費 or,如果業務機構比較多,那 sql 會比較長

作為候選人之一吧,我們接著往下看

同樣是利用 mybatis 的 動態 sql ,將 business_id 列表拼在一起、 ware_inside_code 拼在一起,類似如下

具體的 sql 類似如下

sql 也能走索引

實現簡單,也好理解,sql 也能走索引,而且只查詢一次資料庫,似乎可行

但是:查出來的結果集大於等於我們想要的結果集,你品,你細品!

所以還需要對查出來的結果集進行一次過濾,過濾出我們想要的結果集

姑且也作為候選人之一吧,我們繼續往下看

sql-92 中加入了行與行比較的功能,這樣一來,比較謂詞 = 、< 、> 和 in 謂詞的引數就不再只是標量值了,還可以是值列表了

當然,還是得用到 mybatis 的 動態 sql ,類似如下

具體的 sql 類似如下

sql 同樣能走索引

實現簡單,sql 也能走索引,而且只查詢一次資料庫,感覺可行

只是:有點不好理解,因為我們平時這麼用的少,所以這種寫法看起來很陌生

另外,行行比較是 sql 規範,不是某個關係型資料庫的規範,也就說關係型資料庫都應該支援這種寫法

1、最後選擇了 行行比較 這種方式來實現了需求

別問我為什麼,問就是逼格高!

2、某乙個需求的實現往往有很多種方式,我們需要結合業務以及各種約束綜合考慮,選擇最合適的那個

3、行行比較是 sql-92 中引入的,sql-92 是 1992 年制定的規範

行行比較不是新特性,而是很早就存在的基礎功能!

主流資料庫比較

一 開放性 1.sql server 只能在windows上執行,沒有絲毫的開放性,作業系統的系統的穩定對資料庫是十分重要的。windows9x系列產品是偏重於桌面應用,nt server只適合中小型企業。而且windows平台的可靠性,安全性和伸縮性是非常有限的。它不象unix那樣久經考驗,尤其是...

Hive和資料庫比較

由於 hive 採用了 sql 的查詢語言 hql,因此很容易將 hive 理解為資料庫。其實從結構上來看,hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 hive 和資料庫的差異。資料庫可以用在 online 的應用中,但是 hive 是為資料倉儲而設計的,清楚這一...

檔案型資料庫比較

檔案型資料庫比較 tinydb,access,ib,fb,easytable,mysql,dbisam我都用過,在運算元據庫時經過突然停電,突然重啟動等因素折騰以後,資料庫檔案準壞。而且壞後99 不能修復。sqlite我用同樣的方法,卻沒事,sqlite資料庫檔案完好無損。特別是tinydb,acc...