SQL Challenge ——快速找到1-100之間缺失的數

来源:http://www.cnblogs.com/kerrycode/archive/2016/10/18/5974035.html
-Advertisement-
Play Games

有個經典的題目:1-100之間的數字(不重覆)存放在表裡,共95行一列,但是裡面缺了5個數字,怎麼用SQL最快找出那五個數字。 我們先來看看Oracle資料庫如何實現,如下所示,我們先準備測試環境和數據。 SQL> create table t( id number(10)); Table crea... ...


有個經典的題目:1-100之間的數字(不重覆)存放在表裡,共95行一列,但是裡面缺了5個數字,怎麼用SQL最快找出那五個數字。

 

我們先來看看Oracle資料庫如何實現,如下所示,我們先準備測試環境和數據。

SQL> create table t( id number(10));
 
Table created.
 
SQL> begin
  2   for i in 1 .. 100
  3   loop
  4     insert into t
  5     values(i);
  6   end loop;
  7   commit;
  8  end;
  9  /
 
PL/SQL procedure successfully completed.
 
SQL> delete from t where id in (13, 26,39,52,65);
 
5 rows deleted.
 
SQL> commit;
 
Commit complete.
 
SQL> 

那麼我們藉助dba_objects這個視圖(當然你藉助其他表或視圖都OK),生成1-100的自然數,然後和T表使用ANTI JOIN來得到查詢結果。如下所示

SQL> select rn from 
  2  ( select rownum as rn from dba_objects where rownum <=100) tt
  3   where tt.rn not in(select id from t);
 
        RN
----------
        65
        52
        13
        39
        26
 
SQL> 

clip_image001

 

 

接下來我們看看SQL Server資料庫如何實現,如下所示,我們先準備測試環境和數據。

CREATE TABLE T ( ID  INT);
 
DECLARE @Index INT =1;
 
WHILE @Index <= 100
BEGIN    
    INSERT INTO T VALUES(@Index);
    SET @Index +=1;
END
GO
 
DELETE FROM T WHERE ID IN(13, 26,39,52,65);

 

SELECT  RN
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY object_id ) AS RN
          FROM      sys.objects
        ) TT
WHERE   TT.RN <= 100
        AND TT.RN NOT IN ( SELECT   ID
                           FROM     T );

clip_image002

 

後面想是否遞歸SQL也能實現, 測試、驗證自己想法的時候,發現遞歸SQL並不適合這樣的場景。上面方法應該算是最快的方法了。當然如果你有其它更好的方法,也請多多指教。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 近段時間在程式中寫到有關搜索的功能。其中有使用到MS SQLServer的關鍵詞BETWEEN,它是搜索數值範圍(包括本身)之間的數據。在使用它時,一些情況還需要註意的。如果時間的數據。搜索時間數據,要看資料庫存儲時間精度,存儲只有日期或帶有時間日期就需要註意了。不然搜索出來的數據與預期有有些出入。 ...
  • MySQL 字元串截取函數:left(), right(), substring(), substring_index()。還有 mid(), substr()。其中,mid(), substr() 等價於 substring() 函數,substring() 的功能非常強大和靈活。 1. 字元串截 ...
  • 前言:真正用到mysql是在公司的第二個項目下,具體的一些在之前的博客文章(http://www.cnblogs.com/zhengzeze/p/5623440.html)中也提到了,其中涉及到,免安裝版的mysql的配置問題,之前是從網上博客中學習的。現在把它貼出來,免得以後找不到了。具體的文章轉 ...
  • 數據作為信息的載體,要分析數據中包含的主要信息,即要分析數據的主要特征(即數據的數字特征), 對於數據的數字特征, 包含數據的集中位置、分散程度和數據分佈,常用統計項目如下: 集中趨勢統計量: 均值(Mean)、中位數(Median)、眾數(Mode)、百分位數 離散趨勢統計量:標準差(sd)、方差 ...
  • 前幾日安裝sql server2008r2 的時候碰到這個問題: 出現以下錯誤: SQL Server 安裝程式在運行 Windows Installer 文件時遇到錯誤。 Windows Installer 錯誤消息: 打開安裝日誌文件的錯誤。請驗證指定的日誌文件位置是否存在,是否可以寫入。 Wi ...
  • 介紹 本篇文章主要介紹在oracle中怎樣使用語句創建用戶,如果你是資料庫運維人員那麼這是必須掌握的,順便提一下在oracle中資料庫的概念它和其它資料庫系統比如mysql和sqlserver不一樣,在oracle中可以將用戶理解成其它的資料庫系統中的資料庫的概念,oracle中只有一個全局資料庫並 ...
  • 在項目中一般需要對一些數據進行處理,以下提供一些基本的SQL語句: 1.基於條件的插入和修改:需要在表中插入一條記錄,插入前根據key標識判斷。如果標識符不存在,則插入新紀錄,如果標識符存在,則根據語句中所給的新值對原紀錄中的欄位進行更新: 2.在分組和集合里統計分組:當需要統計一個分組裡的成員,或 ...
  • 一、關於用戶 Oracle安裝會自動的生產sys用戶和system用戶: 1. sys用戶是超級用戶,具有最高許可權,具有sysdba角色,有create database的許可權,該用戶的預設密碼是change_on_install 。 2. system用戶是管理操作員,許可權也很大,具有sysope ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...