當前位置:首頁 » 編程語言 » 上一層sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

上一層sql

發布時間: 2022-09-27 07:26:38

『壹』 sql的七層及每層的作用

OSI分層模型。

┌—————┐
│ 應用層 │←第七層
├—————┤
│ 表示層 │
├—————┤
│ 會話層 │
├—————┤
│ 傳輸層 │
├—————┤
│ 網路層 │
├—————┤
│數據鏈路層│
├—————┤
│ 物理層 │←第一層
└—————┘
OSI七層參考模型

OSI模型的七層分別進行以下的操作:
第一層:物理層
負責最後將信息編碼成電流脈沖或其它信號用於網上傳輸。它由計算機和網路介質之間的實際界面組成,可定義電氣信號、符號、線的狀態和時鍾要求、數據編碼和數據傳輸用的連接器。如最常用的RS-232規范、10BASE-T的曼徹斯特編碼以及RJ-45就屬於第一層。所有比物理層高的層都通過事先定義好的介面而與它通話。如乙太網的附屬單元介面(AUI),一個DB-15連接器可被用來連接層一和層二。
第二層:數據鏈路層
通過物理網路鏈路提供可靠的數據傳輸。不同的數據鏈路層定義了不同的網路和協議特徵,其中包括物理編址、網路拓撲結構、錯誤校驗、幀序列以及流控。物理編址(相對應的是網路編址)定義了設備在數據鏈路層的編址方式;網路拓撲結構定義了設備的物理連接方式,如匯流排拓撲結構和環拓撲結構;錯誤校驗向發生傳輸錯誤的上層協議告警;數據幀序列重新整理並傳輸除序列以外的幀;流控可能延緩數據的傳輸,以使接收設備不會因為在某一時刻接收到超過其處理能力的信息流而崩潰。數據鏈路層實際上由兩個獨立的部分組成,介質存取控制(Media Access Control,MAC)和邏輯鏈路控制層(Logical Link Control,LLC)。MAC描述在共享介質環境中如何進行站的調度、發生和接收數據。MAC確保信息跨鏈路的可靠傳輸,對數據傳輸進行同步,識別錯誤和控制數據的流向。一般地講,MAC只在共享介質環境中才是重要的,只有在共享介質環境中多個節點才能連接到同一傳輸介質上。IEEE MAC規則定義了地址,以標識數據鏈路層中的多個設備。邏輯鏈路控制子層管理單一網路鏈路上的設備間的通信,IEEE 802.2標準定義了LLC。LLC支持無連接服務和面向連接的服務。在數據鏈路層的信息幀中定義了許多域。這些域使得多種高層協議可以共享一個物理數據鏈路。
第三層:網路層
負責在源和終點之間建立連接。它一般包括網路尋徑,還可能包括流量控制、錯誤檢查等。相同MAC標準的不同網段之間的數據傳輸一般只涉及到數據鏈路層,而不同的MAC標准之間的數據傳輸都涉及到網路層。例如IP路由器工作在網路層,因而可以實現多種網路間的互聯。
第四層:傳輸層
向高層提供可靠的端到端的網路數據流服務。傳輸層的功能一般包括流控、多路傳輸、虛電路管理及差錯校驗和恢復。流控管理設備之間的數據傳輸,確保傳輸設備不發送比接收設備處理能力大的數據;多路傳輸使得多個應用程序的數據可以傳輸到一個物理鏈路上;虛電路由傳輸層建立、維護和終止;差錯校驗包括為檢測傳輸錯誤而建立的各種不同結構;而差錯恢復包括所採取的行動(如請求數據重發),以便解決發生的任何錯誤。傳輸控制協議(TCP)是提供可靠數據傳輸的TCP/IP協議族中的傳輸層協議。
第五層:會話層
建立、管理和終止表示層與實體之間的通信會話。通信會話包括發生在不同網路應用層之間的服務請求和服務應答,這些請求與應答通過會話層的協議實現。它還包括創建檢查點,使通信發生中斷的時候可以返回到以前的一個狀態。
第六層:表示層
提供多種功能用於應用層數據編碼和轉化,以確保以一個系統應用層發送的信息可以被另一個系統應用層識別。表示層的編碼和轉化模式包括公用數據表示格式、性能轉化表示格式、公用數據壓縮模式和公用數據加密模式。
公用數據表示格式就是標準的圖像、聲音和視頻格式。通過使用這些標准格式,不同類型的計算機系統可以相互交換數據;轉化模式通過使用不同的文本和數據表示,在系統間交換信息,例如ASCII(American Standard Code for Information Interchange,美國標准信息交換碼);標准數據壓縮模式確保原始設備上被壓縮的數據可以在目標設備上正確的解壓;加密模式確保原始設備上加密的數據可以在目標設備上正確地解密。
表示層協議一般不與特殊的協議棧關聯,如QuickTime是Applet計算機的視頻和音頻的標准,MPEG是ISO的視頻壓縮與編碼標准。常見的圖形圖像格式PCX、GIF、JPEG是不同的靜態圖像壓縮和編碼標准。
第七層:應用層
最接近終端用戶的OSI層,這就意味著OSI應用層與用戶之間是通過應用軟體直接相互作用的。注意,應用層並非由計算機上運行的實際應用軟體組成,而是由向應用程序提供訪問網路資源的API(Application Program Interface,應用程序介面)組成,這類應用軟體程序超出了OSI模型的范疇。應用層的功能一般包括標識通信夥伴、定義資源的可用性和同步通信。因為可能丟失通信夥伴,應用層必須為傳輸數據的應用子程序定義通信夥伴的標識和可用性。定義資源可用性時,應用層為了請求通信而必須判定是否有足夠的網路資源。在同步通信中,所有應用程序之間的通信都需要應用層的協同操作。
OSI的應用層協議包括文件的傳輸、訪問及管理協議(FTAM) ,以及文件虛擬終端協議(VIP)和公用管理系統信息(CMIP)等。

『貳』 SQL 語句在資料庫中是怎樣執行的

第一步:應用程序把查詢SQL語句發給伺服器端執行

我們在數據層執行SQL語句時,應用程序會連接到相應的資料庫伺服器,把SQL語句發送給伺服器處理。

第二步:伺服器解析請求的SQL語句

SQL計劃緩存,經常用查詢分析器的朋友大概都知道這樣一個事實,往往一個查詢語句在第一次運行的時候需要執行特別長的時間,但是如果你馬上或者在一定時間內運行同樣的語句,會在很短的時間內返回查詢結果。原因是:

  • 伺服器在接收到查詢請求後,並不會馬上去資料庫查詢,而是在資料庫中的計劃緩存中找是否有相對應的執行計劃。如果存在,就直接調用已經編譯好的執行計劃,節省了執行計劃的編譯時間。

  • 如果所查詢的行已經存在於數據緩沖存儲區中,就不用查詢物理文件了,而是從緩存中取數據,這樣從內存中取數據就會比從硬碟上讀取數據快很多,提高了查詢效率。數據緩沖存儲區會在後面提到。

  • 如果在SQL計劃緩存中沒有對應的執行計劃,伺服器首先會對用戶請求的SQL語句進行語法效驗,如果有語法錯誤,伺服器會結束查詢操作,並用返回相應的錯誤信息給調用它的應用程序。

    注意:此時返回的錯誤信息中,只會包含基本的語法錯誤信息,例如select寫成selec等,錯誤信息中如果包含一列表中本沒有的列,此時伺服器是不會檢查出來的,因為只是語法驗證,語義是否正確放在下一步進行。

    語法符合後,就開始驗證它的語義是否正確。例如,表名、列名、存儲過程等等資料庫對象是否真正存在,如果發現有不存在的,就會報錯給應用程序,同時結束查詢。

    接下來就是獲得對象的解析鎖,我們在查詢一個表時,首先伺服器會對這個對象加鎖,這是為了保證數據的統一性,如果不加鎖,此時有數據插入,但因為沒有加鎖的原因,查詢已經將這條記錄讀入,而有的插入會因為事務的失敗會回滾,就會形成臟讀的現象。

    接下來就是對資料庫用戶許可權的驗證。SQL語句語法,語義都正確,此時並不一定能夠得到查詢結果,如果資料庫用戶沒有相應的訪問許可權,伺服器會報出許可權不足的錯誤給應用程序,在稍大的項目中,往往一個項目裡面會包含好幾個資料庫連接串,這些資料庫用戶具有不同的許可權,有的是只讀許可權,有的是只寫許可權,有的是可讀可寫,根據不同的操作選取不同的用戶來執行。稍微不注意,無論你的SQL語句寫的多麼完善,完美無缺都沒用。

    解析的最後一步,就是確定最終的執行計劃。當語法、語義、許可權都驗證後,伺服器並不會馬上給你返回結果,而是會針對你的SQL進行優化,選擇不同的查詢演算法以最高效的形式返回給應用程序。例如在做表聯合查詢時,伺服器會根據開銷成本來最終決定採用hashjoin,mergejoin ,還是loop join,採用哪一個索引會更高效等等。不過它的自動化優化是有限的,要想寫出高效的查詢SQL還是要優化自己的SQL查詢語句。

    當確定好執行計劃後,就會把這個執行計劃保存到SQL計劃緩存中,下次在有相同的執行請求時,就直接從計劃緩存中取,避免重新編譯執行計劃。

    第三步:語句執行

    伺服器對SQL語句解析完成後,伺服器才會知道這條語句到底表態了什麼意思,接下來才會真正的執行SQL語句。

    此時分兩種情況:

  • 如果查詢語句所包含的數據行已經讀取到數據緩沖存儲區的話,伺服器會直接從數據緩沖存儲區中讀取數據返回給應用程序,避免了從物理文件中讀取,提高查詢速度。

  • 如果數據行沒有在數據緩沖存儲區中,則會從物理文件中讀取記錄返回給應用程序,同時把數據行寫入數據緩沖存儲區中,供下次使用。

  • 說明:SQL緩存分好幾種,這里有興趣的朋友可以去搜索一下。有時因為緩存的存在,使得我們很難馬上看出優化的結果,因為第二次執行因為有緩存的存在,會特別快速,所以一般都是先消除緩存,然後比較優化前後的性能表現,這里有幾個常用的方法:

    1 DBCC DROPCLEANBUFFERS

    2 從緩沖池中刪除所有清除緩沖區。

    3 DBCC FREEPROCCACHE

    4 從過程緩存中刪除所有元素。

    5 DBCC FREESYSTEMCACHE

    6 從所有緩存中釋放所有未使用的緩存條目。

    SQL Server 2005資料庫引擎會事先在後台清理未使用的緩存條目,以使內存可用於當前條目。但是,可以使用此命令從所有緩存中手動刪除未使用的條目。

    這只能基本消除SQL緩存的影響,目前好像沒有完全消除緩存的方案,如果大家有,請指教。

    執行順序:

  • FROM子句返回初始結果集。

  • WHERE子句排除不滿足搜索條件的行。

  • GROUP BY子句將選定的行收集到GROUP BY子句中各個唯一值的組中。

  • 選擇列表中指定的聚合函數可以計算各組的匯總值。

  • 此外,HAVING子句排除不滿足搜索條件的行。

  • 計算所有的表達式;

  • 使用order by對結果集進行排序。

  • 查找你要搜索的欄位。

『叄』 三層架構中SQL語句要怎麼應用

數據訪問層即訪問資料庫的一層,簡單的說就是sqlhelper類,這個類,你可以去網上搜一下就了解了。
然後就是業務邏輯層,這一層主要處理軟體中的業務邏輯,即在什麼情況下怎麼辦,最後得出來值後把數值通過數據訪問層傳向資料庫就可以了。
最後是展示層,即你的UI界面。業務邏輯處理完數據後需要展示的你再賦值到最外層就可以了。具體到軟體上一般是兩個類庫,一個是應用程序!

『肆』 sql查詢 --查詢頂層

從數據以PL / SQL查詢是使用方法:
- 更新游標:在使用前
- 用於更新說明,以便更新C的指針
--current是它更新當前記錄,其中記錄在當前游標點,這將更新

聲明
游標C
是計程車從EMP的更新選擇*;
開始
的v_temp在C環
如果(v_temp.sal <2000)則
更新EMP組SAL = SAL * 2,其中c的電流;
ELSIF(v_temp.sal = 5000),然後計程車從EMP刪除其中C的電流;
END IF;
結束循環;
提交;
結束;登錄到到網上述過程中,如果SAL <2000,然後更新emp表的欄位薩爾薩爾* 2,
如果SAL = 5000,然後刪除這條記錄。

『伍』 請問SQL語句只可以進行一層嵌套嗎我想實現兩層或以上的嵌套語句,但是嵌套後只符合其中一個嵌套條件

可以多個嵌套,但是只要一個條件不滿足結果都查詢不到,你把語句寫出來看下

Update Table Set a='5' Where b=
(Select b
From Table
Where c In (Select c
From Dmpedi.Pps_Temp
Where b = '2'
And Rownum < 5)
And Rownum = 1)

『陸』 asp.net三層架構 sql語句寫在哪一層呀

dal層,你可以寫一個數據幫助類,這樣dal層里只寫一句sql語句可以直接調用數據幫助類里的代碼

『柒』 sql語句的執行順序是什麼,為什麼下面這兩個sql執行的結果是一樣的

你這兩個sql語句只是運行順序不同
第一個sql語句你嵌套多一層子查詢,先把sum(case when right(jym,1) in(2,8) then jyje else 0 end)/100 兩個聚合函數算出來,然後在分組having直接過濾。
而第二個sql是在having的時候才去算sum(case when right(jym,1) in(2,8) then jyje else 0 end)/100 兩個聚合函數的值。
但是你最後都是用這個條件去過濾的,所以結果是一樣的

『捌』 sql2000語句:上級層級目錄形成路徑格式

幾乎不可能,因為程序不可能知道開封是河南的還是中國的省份,雲南是中國的省份還是河南的城市,還是開封的城市。
如果後面有某某省(或區或直轄市)、某某市(或省屬縣、省屬區等),這樣可能還比較好辦一點。

『玖』 動態遞歸SQL查詢(查詢第一層下面所有的分支)

--forM$SQL2000+
declare@resulttable(idint,pidint,idpathvarchar(512))
insertinto@result
selectid,pid,cast(idasvarchar)
fromthetable
whereid=@id
while@@rowcounts>0begin
insertinto@result
selectta.id,a.pid,b.idpath+'/'+cast(a.idasvarchar)
fromthetablea
[email protected]=a.pid
where1=1
andnotexists(select1
from@resultc
wherea.id=c.id)
end

說明:

id: 各個元素的ID, pid: 元素的上級ID

『拾』 sql語句到底應該在哪一層出現,或者在哪一層產生

java裡面一搬早Dao層

.net裡面在DAL層

要看是哪一層是跟資料庫打交道的