PL SQL中的where子句比較

2021-09-08 06:25:20 字數 775 閱讀 8837

首先以乙個例子說明一下where子句中比較語句的問題。

declare department char(3);

begin

department:='cs';

delete from classes

where department=department;

如果執行以上語句將產生災難性的後果即:classes裡的資料將全部刪除,而不僅僅是那些department為cs的行。之所以出現這種情況,是因為sql語句中識別符號的分析方法。當pl/sql引擎看到乙個類似下面的條件:exp1=exp2

exp1和exp2首先要被檢視是否與操作的表中的列相匹配,然後再檢查它們是否是pl/sql語句塊中的變數。pl/sql是不區分大小寫的,因此在上面的例子中,department和department與classes表中的列相符,而不是與變數相符。

如果該語句塊有一標號,就可以使用與表列相同名字的變數,這只要在變數引用前加上標號就行了。這樣,就能只刪除那些滿足department='cs'的行。

《1_deleteblock》

declare department char(3);

begin

department:='cs';

delete from classes

where department=1_deleteblock.department;

需要說明的是,這種方法可以產生預期的效果,但不是一種好的程式設計風格。

SQLite中的WHERE子句

where子句用於從from子句生成的工作表中過濾行。它提供了對每一行進行判斷的表示式。當表示式返回的值為false或null時,此行就會被丟棄。這種丟棄只是刪除記錄,並不會被當作錯誤處理。所以,在經過where子句過濾生成的表將具有與原始表相同數量的列,但可能具有較少的行。圖3.10顯示了wher...

連線查詢中的ON 子句和 WHERE 子句

先看兩張表結構 produc表 問題是下面兩個查詢結果有什麼不同 1.select from product left join product details on product.id product details.id and product details.id 2 2.select fr...

where 子句的執行順序

看 複製 如下 set statistics io on set statistics time on go set statistics profile on go use pubs select from authors where au fname like s or au fname lik...