嵌入式SQL中處理多條記錄的結果集

2021-01-07 阿T男

#MYSQL#本篇的主要內容是使用檢索來操作sql語句。檢索在資料庫裡面還是使用的很多的。對於提高查詢效率和簡化sql的編寫都起到了很大的作用。具體的看下面的操作。

嵌入式SQL中處理多條記錄的結果集時,採用的是遊標機制。因此,SQL DML語句在嵌入使用時,要注意是否使用了遊標機制。不 需要遊標的SQL DML操作在嵌入式SQL中,不用遊標的SQL DML語句主要包括以下幾種。查詢結果 為單記錄的SELECT語句。非CURRENT形式的UPDATE語句。非CURRENT形式的DELETE語句。INSERT語句。

下面對這幾種語句分別介紹,並通過實例說明其具體使用方法。查詢結果為單記錄的SELECT語句語法如下。EXEC SQL SELECT [ALLIDISTINCT]<目標列表達式>{,<目標列表達式>}INTO<主變量>[<指示變量>]{,<主變量>[<指示變量>]}FROM<表名或視圖名>{,<表名或視圖名>)}[WHERE <條件表達式>]

這裡需要說明的是,該語句對交互式SELECT語句進行了擴充,即多了一一個INTO子句。要求返回的結果最多只能有一-條記錄, 因此不能包括GROUP BY、HAVING 和ORDER BY子句。另外,在INTO子句中可以使用指示變量。當查詢得出的某個數據項為空值時,系統會自動將相應主變量後面的指示變量置為負值(-般為-1),但不向該主變量執行賦值操作,即

主變量值仍保持執行SQL語句之前的值。當我們發現指示變量值為負值時,不管主變量為何值,均應認為主變量值為NULL.

如果資料庫中沒有滿足條件的記錄,即查詢結果為空,那麼DBMS將SQLCODE的值置為100。當查詢結果為多條記錄時,程序將出錯,DBMS會在SQLCA中返回錯誤信息。實例6嵌入式SQL中使用查詢結果為單記錄的SELECT語句在TEACHER表中查詢教工號為5的教師的姓名、年齡信息,將其值賦予主變量teacher_ name 和age.示例代碼如下SELECT TNAME ,AGE INTO :teacher_ name ,age FROM TEACHER WHERE TNO = 5;teacher_ name、 age 均是主變量,並假定均已在前面的程序中說明過了。

在TEACHER表中,教工號為5的記錄只有一行,因此該SELECT語句的查詢結果為單記錄。從提高應用程式的數據獨立性角度考慮,SELECT 語句在任何情況下都應該使用遊標。雖然對於僅返回一行結果數據的SELECT語句可以不使用遊標,但如果以後資料庫說明.改變了,該SELECT語句可能會返回多行數據,這時該語句就會出錯。.非CURRENT形式的UPDATE語句

所謂非CURRENT形式的UPDATE語句,是指執行UPDATE操作時,所有滿足更新條件的記錄都進行更新,而不是一行一行地單獨更新。 語法與交互式UPDATE語句完全相同,只是在SET子句和WHERE子句中可以使用主變量,在SET子句中還可以使用指示變量。實例7嵌入式 SQL中使用非CURRENT形式的UPDATE語句將TEACHER表中所有男教師增加若干工資,假設增加的工資已賦給主變量Raise。示例代碼如下。 UPDATE TEACHER SET SAL- SAL+ :Raise WHERE TSEX=' 男';與返回單一值得SELECT語句不同,非CURRENT形式的UPDATE語句可以操作多條元組。在該例中,所有男教師的記錄都將被更新。

相關焦點

  • SQL中Groupby和Having的使用方法
    在介紹GROUP BY 和 HAVING 子句前,我們必需先講講sql語言中一種特殊的函數:聚合函數,例如SUM, COUNT, MAX, AVG等。這些函數和其它函數的根本區別就是它們一般作用在多條記錄上。 SELECT SUM(population) FROM bbc這裡的SUM作用在所有返回記錄的population欄位上,結果就是該查詢只返回一個結果,即所有國家的總人口數。通過使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數對屬於一組的數據起作用。
  • 經典SQL語句大全
    (例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。12、說明:使用外連接A、left outer join:左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
  • 嵌入式SQL的使用技巧
    SQL語言可以嵌入到高級語言中,如PL1、COBOL、FORTRAN、 C,利用高級語言的過程性結構,可以彌補SQL語言在實現複雜應用方面的不足,在這種方式下使用SQL語嵌入式SQL的實現主要有兩種方法:擴充宿主語言(高級語言)的編譯程序,使之能處。理SQL語句和預處理方式。其中常用的是後者,即預處理方式。預處理方式的處理過程可表示如下。
  • SQL on file 工具
    比如一行對應多條記錄的情況:此外,大部分資料庫都不支持導入xlsx,需要安裝Excel或第三方工具。安裝Excel的話,需要將xlsx轉為csv再導入資料庫,煩;用第三方工具直接導入的話,環境配置複雜,有的只支持xls,有的只支持低版本的xlsx,更煩。總之,文件入庫是個麻煩不斷的過程。
  • MySQL sql_mode 說明(及處理一起 sql_mode 引發的問題)
    SQL語法支持類ONLY_FULL_GROUP_BY對於GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY子句的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的。是可以理解的,因為不在 group by 的列查出來展示會有矛盾。
  • spark結構化數據處理:Spark SQL、DataFrame和Dataset
    當在程式語言中使用SQL時,其返回結果將被封裝為一個DataFrame。DataFrameDataFrame是一個分布式集合,其中數據被組織為命名的列。它概念上等價於關係資料庫中的表,但底層做了更多的優化。DataFrame可以從很多數據源構建,比如:已經存在的RDD、結構化文件、外部資料庫、Hive表。
  • 適用於初學者和分析師的SQL –使用Python入門SQL
    它是一種查詢語言,旨在訪問和處理RDBMS中的信息。SQL使我們可以編寫查詢或指令集來創建新表,操作數據或查詢存儲的數據。作為數據科學家,當務之急是必須了解SQL的基本知識才能在資料庫中工作,因為只有從組織的資料庫中檢索數據後才能執行分析! 為什麼要使用SQLite?SQLite是基於SQL的關係資料庫管理系統。它是為需要快速可靠數據的嵌入式設備而設計的。
  • 資料庫SQL腳本優化
    2、順序掃描表b,對於每一行數據,判斷join條件是否滿足,滿足條件的記錄,作為結果集的一行返回。如果返回語句中有where子句,需要先判斷where部分是否滿足3、表b掃面完成後,對於沒有匹配的表a的行,把剩餘欄位不上null,再放到結果集中。
  • Django QuerySet查詢基礎與技巧.有了她,再也不用擔心SQL注入了.
    創建一個QuerySet對象,它不會直接返回數據集。等到使用它的時候,才解析該對象得到數據集。而且解析過一次會被緩存起來,下次使用時直接返回緩存中的數據,緩存的使用提高多次查詢的效率。不熟悉SQL的可以跳過該部分,如下代碼:sql = 'select * from blog_blog' #需要查詢資料庫具體Blog對應表名qs = Blog.objects.raw(sql) #將sql語句轉成RawQuerySet對象該SQL是獲取全部記錄,相當於QuerySet如下查詢:qs
  • HiveSql基礎函數使用(三)
    去重函數:distinct與group bydistinct與group by :兩者都可以實現對結果重複記錄的去重。從執行順序來說,兩者主要存在以下幾點區別 ① distinct只是將重複的行從結果中剔除出去;group by是按指定的列分組,一般這時在select中會用到聚合函數。 ②distinct是把不同的記錄顯示出來;group by是在查詢時先把紀錄按照類別分出來再查詢。
  • 美團開源 SQL 優化工具 SQLAdvisor,與內部版本保持一致
    每一個非葉子節點代表一次 Join 的結果。上述實現時,涉及的函數為:mysql_sql_parse_join(TABLE_LIST join_table) mysql_sql_parse_join(Item join_condition) ,主要流程圖如下:
  • Java web安全黑客攻防之sql注入
    我們在編寫代碼的過程中很容易忽略這個問題,比如我們通過拼接sql的方式查詢,客戶端就可能在輸入密碼時加入一些sql。這種做法可能會導致攻擊者繞開伺服器驗證,嚴重的會導致資料庫的全部信息洩露。根據相關技術原理,SQL注入可以分為平臺層注入和代碼層注入。
  • 深入淺出SQL教程之Group by和Having
    語言中一種特殊的函數:聚合函數,例如SUM, COUNT, MAX, AVG等。這些函數和其它函數的根本區別就是它們一般作用在多條記錄上。SELECT SUM(population) FROM bbc這裡的SUM作用在所有返回記錄的population欄位上,結果就是該查詢只返回一個結果,即所有國家的總人口數。通過使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數對屬於一組的數據起作用。
  • 複雜sql處理邏輯 case when的用法
    場景:實習計劃中,包括輪換計劃,個人計劃。輪換計劃之間不會存在時間疊加。個人計劃於輪換計劃之間可能會存在時間疊加。疊加部分以個人計劃為準。計劃狀態包括:未開始,實習中,實習中斷,實習結束。 狀態根據開始時間,結束時間與當前時間的關係來計算。但是需要通過sql處理,疊加狀態時間判斷。
  • 通過 SQL 查詢學習 Pandas 數據處理
    作者:張吉來源:http://shzhangji.com/cnblogs/2017/07/23/learn-pandas-from-a-sql-perspective/Pandas 是一款廣泛使用的數據處理工具。
  • select學習第14天——Having(SQL)
    HAVING子句與Where子句有如下相似之處:1.兩者都是從結果表中篩選數據2.兩者都使用條件篩選。3.兩者,數據中的Null不滿足任何條件。Is Null例外。HAVING子句與Where子句有如下不同之處:1.Where子句只能在進行任何處理之前從原始數據表中刪除、篩選。2.HAVING子句可以在進行絕大部分處理後刪除、篩選已分組和已匯總的數據。
  • 優化SQL查詢:如何寫出高性能SQL語句
    4、 使用「臨時表」暫存中間結果簡化SQL語句的重要方法就是採用臨時表暫存中間結果,但是,臨時表的好處遠遠不止這些,將臨時結果暫存在臨時表,後面的查詢就在tempdb中了,這可以避免程序中多次掃描主表,也大大減少了程序執行中「共享鎖」阻塞「更新鎖」,減少了阻塞,提高了並發性能。
  • SQL 資料庫語句
    (例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。12、說明:使用外連接A、left (outer) join:左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
  • 如何使用 SQL Server FILESTREAM 存儲非結構化數據?
    使用VARBINARY (MAX) FILESTREAM 列創建表仍然需要將記錄插入到新創建的表中(腳本4)。用腳本4插入記錄還將在文件系統上創建一個新文件夾。使用VARBINARY (MAX) FILESTREAM 列從表中查看記錄執行腳本5的結果如圖2所示。圖2.
  • sqltoy-orm-4.17.5 發布,支持 QueryExecutor 中定義分庫分表
    (原本只支持xml中定義)//分庫dbSharding(String strategy, String... paramNames)//分表tableSharding(String strategy, String[] tables, String... paramNames)