讀SQL進階教程筆記15_SQL編程思維

来源:https://www.cnblogs.com/lying7/archive/2023/05/08/17380134.html
-Advertisement-
Play Games

1. 還原論 1.1. 認為可以把高級現象還原為低級基本現象的學說 1.2. 將複雜的東西看成是由簡單單元組合而成的 1.2.1. 以賦值、條件分支、迴圈等作為基本處理單元,並將系統整體分割成很多這樣的單元的思維方式 1.2.2. 文件系統也是將大量的數據分割成記錄這樣的小單元進行處理的 2. 整體 ...


1. 還原論

1.1. 認為可以把高級現象還原為低級基本現象的學說

1.2. 將複雜的東西看成是由簡單單元組合而成的

1.2.1. 以賦值、條件分支、迴圈等作為基本處理單元,並將系統整體分割成很多這樣的單元的思維方式

1.2.2. 文件系統也是將大量的數據分割成記錄這樣的小單元進行處理的

2. 整體論

2.1. 用系統、整體的觀點考察有機界的理論

2.2. 也稱“機體論”

2.3. SQL中沒有賦值或者迴圈的處理,數據也不以記錄為單位進行處理,而以集合為單位進行處理

2.3.1. SQL更像一種函數式語言

3. 遞歸集合

3.1. 馮·諾依曼提出用遞歸集合定義自然數,是在1923年發表的論文《關於超限序數的引入》中

3.1.1. SQL可以通過COUNT函數計算出元素個數,與馮·諾依曼方法的定義方式相容性很好

3.2. 偉大的哲學家弗雷格(Friedrich Ludwig Gottlob Frege),他幾乎以一己之力創建了關係模型基礎之一的謂詞邏輯

3.3. 因完善了現代集合論體系並提出良序定理和選擇公理而聞名的數學家策梅洛(Ernst Friedrich Ferdinand Zermelo)

3.4. 弗雷格方法和馮·諾依曼方法很像,區別在於不用空集表示0,而用包含空集的集合來表示

3.5. 自然數的定義是由皮亞諾列舉的5個條件給出的,馮·諾依曼等人只是根據皮亞諾公理生成了自然數而已

3.6. 使用λ演算函數來構建自然數的方法

3.6.1. 使用λ演算構建的自然數被阿隆佐·邱奇(Alonzo Church)以自己的姓氏命名為了“邱奇數”

3.6.2. 其本質卻是輸入輸出均為函數的高階函數

4. 用CASE表達式代替IF語句和CASE語句

4.1. CASE表達式與1+(2-4)或者(x*y)/z一樣,都是表達式,在執行時會被整體當作一個值來處理

4.2. 常量可以理解為變數個數為0的表達式

4.3. CASE表達式最終會作為一個確定的值來處理

4.4. 可以把CASE表達式當作聚合函數的參數來使用

5. 用GROUP BY和關聯子查詢代替迴圈

5.1. SQL中沒有專門的迴圈語句

5.1.1. 使用游標實現迴圈,但是這樣的話還是面向過程的做法

5.1.2. 去掉普通編程語言中的迴圈正是SQL語言設計之初的目的之一

5.2. 將關係整體作為操作的對象。目的是避免迴圈

5.3. 面向過程語言在迴圈時經常用到的處理是“控制、中斷”

5.3.1. 在SQL中,這兩個處理可以分別用GROUP BY子句和關聯子查詢來表達

5.3.2. 關聯子查詢適合用來分割處理單元

6. 表中的行沒有順序

6.1. 對於文件來說,行的順序是非常重要的

6.2. 表有意地放棄了行的順序這一形象的概念,從而使它具有了更高的抽象度

6.3. 依賴順序的不好的寫法

6.3.1. 在定義視圖時指定ORDER BY子句(如果某種資料庫支持這種寫法,那麼它本身就有問題)

6.3.2. Oracle中的rownum這樣依賴具體實現的“行編號”列

7. 將表看成集合

7.1. 理解表的抽象性的最好的方法是使用自連接

8. 理解EXISTS謂詞和“量化”的概念

8.1. 謂詞邏輯有100多年的歷史,是現代邏輯學的標準邏輯體系

8.2. 對於SQL來說,量化符就是EXISTS謂詞

8.3. 更應該靈活掌握的其實是其否定形式——NOT EXISTS的用法

8.3.1. 對於SQL中不具備的全稱量化符,我們只能通過在程式中使用NOT EXISTS來表達

8.3.2. 通過德·摩根定律和NOT EXISTS來表達全稱量化的方法

8.3.3. 使用NOT EXISTS的查詢語句,可讀性都不太好

8.3.3.1. 同樣的功能也可以用HAVING子句或者ALL謂詞來實現

8.3.4. NOT EXISTS有一個很大的優點,即性能比HAVING子句和ALL謂詞要好得多

9. 學習HAVING子句的真正價值

9.1. 與WHERE子句不同,HAVING子句正是設置針對集合的條件的地方

10. 不要畫長方形,去畫圓

10.1. 能夠準確描述靜態數據模型的標準工具是維恩圖,即“圓”


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

-Advertisement-
Play Games
更多相關文章
  • 一、項目簡介 隨著互聯網迅速發展,人們的生活已經越來越離不開互聯網,人們足不出戶就可以工作、買賣、學習等。對於在校學生,通過網路教育不僅可以隨時進行網路學習,也可以根據學習的情況自我檢測,有利於學生高效、快捷地掌握所學的知識。 本系統預設計的基於網路的學生自測系統將實現多種用戶(包括學生、教師)同時 ...
  • 重要聲明-針對攻擊者 網站pljzy.top被某人攻擊 ZY知識庫 首先 說我網站抄襲,文章抄襲,ok,你列舉一下我有那幾篇文章是抄的別人的?自己眼睛不看的是吧,但凡我參考的別人的文章我都會放原文地址。 先放幾張圖片,真搞不懂我抄誰了,下麵全是我自己電腦的md文件,我抄誰的了?全是我自己做的筆記。 ...
  • 概述 預處理器指令 指導編譯器在實際編譯之前對信息進行預處理。 所有預處理指令以#開始。並由於預處理器指令不是語句,所以沒有分號作為結尾。 一個預處理器指令,一定是這一行的唯一指令。 預處理指令列表 |預處理器指令|描述| | | | |#define|將其後的一系列 成為符號| |undef|取消 ...
  • 最近有群友問,.NET有哪些微服務框架?.NET的微服務框架還真不多,一般企業都會自己搭建微服務框架,或者基於其它框架搭建微服務(比如abp)。本文將介紹幾種微服務框架,供大家學習參考。 一、Service Fabric 簡介: Service Fabric 是一個微服務框架,它由微軟開發並托管在 ...
  • 在Winform的分頁控制項裡面,我們提供了很多豐富的功能,如常規分頁,中文轉義、導出Excel、導出PDF等,基於DevExpress的樣式的分頁控制項,我們在其上面做了不少封裝,以便更好的使用,其中就包括集成保存用戶列表顯示欄位及寬度調整設置。本篇隨筆介紹這個實現的過程,通過在當前程式中序列化方式存... ...
  • 哈嘍大家好,我是鹹魚 不知道小伙伴們在寫 Bash 腳本或者說看別人的 Bash 腳本的時候有沒有註意過腳本的第一行 #!/bin/bash Bash 腳本的第一行往往以 #! 開頭,這一行稱作 shebang 行 在 類 UNIX 系統中,shebang 行用來指定腳本的解釋器路徑,通常出現在第一 ...
  • 1.什麼是信號: 信號的種類很多,不同的控制項觸發不同的特定信號 例如button的信號:(在父類中可以找到)信號與槽同時是通過關聯使用的。 2.什麼是槽? 槽:用於關聯某一個控制項的信號,信號觸發的時候將會執行槽函數(槽函數的關聯分為手動關聯和自動關聯) 槽的自動關聯; 在前面板選中對應的控制項 右擊- ...
  • (Linux用戶相關命令) 前言 上一篇中已經預告,我們這篇主要說一說Linux中用戶相關的命令。 可能各位小伙伴用的Windows會比較多一點,在Windows操作系統中,我們知道有Administrator用戶,Administrator 是Windows系統中的管理員用戶,有著最高的許可權。 用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...