來自:careyson
單錶查詢是所有查詢的中間狀態,既是多個表的複雜查詢在最終進行這種連線後都能夠被抽象成單錶查詢。所以先從單錶查詢開始。
選擇列是通過在select語句後面新增所要選擇的列名實現的。
選擇行的子集是在sql語句的where子句後面加上相應的限制條件,當where子句後面的表示式為「真」時,也就是滿足所謂的「條件」時,相應的行的子集被返回。
where子句後面的運算子分為兩類,分別是比較運算子和邏輯運算子.比較運算子是將兩個相同型別的資料進行比較,進而返回布林型別(bool)的運算子,在sql中,比較運算子一共有六種,分別為 等於(=), 小於(), 小於或等於(<=), 大於或等於(>=)以及 不等於(<>),其中小於或等於和大於或等於可以看成是比較運算子和邏輯運算子的結合體。
而邏輯運算子是將兩個布林型別進行連線,並返回乙個新的布林型別的運算子,在sql中,邏輯運算子通常是 將比較運算子返回的布林型別相連線 以最終確定where子句後面滿足條件的真假。邏輯運算子一種有三種,與(and),或(or),非(not).
這幾種運算子是有優先順序的,優先順序由大到小排列是:比較運算子 > 於(and)> 非(or)。 當然,運算子也可以通過小括號來改變優先順序
對於不加括號:
select *from [adventureworks].[humanresources].[department]where departmentid>=1 and departmentid<=3 and departmentid>=5 or departmentid<=7
// 優先順序:先是比較運算子,故應該是每部分先算出結果;然後第二優先順序是 and(含義是同時成立)故兩個 and 連線的三部分取交集;
// 最後是 or(含義是取並集),表示將優先順序高的運算結果(or前面)和 or 後面的結果取並集。
// 這裡明顯 or 前面結果是空集,故並集就是 or 後面的結果。
加了括號改變運算順序後:
select *from [adventureworks].[humanresources].[department]where departmentid>=1 and departmentid<=3 and (departmentid>=5 or departmentid<=7)
// 這裡的分析也是同理,括號內意思是 部門id 可以是 >=5 的那些,也可以是 <= 7 的那些,取並集顯然是全集(全部取到)
假如在乙個使用者註冊的表中,一些選填資訊並不需要使用者必須填寫,則在資料庫中儲存為null,這些null值在利用上面where子句後的運算子時,有可能造成資料丟失,比如乙個選填資訊是性別(gender),假設下面兩條條件子句:
where gender="m"由於null值的存在,這兩條語句返回的資料行加起來並不是整個表中的所有資料。所以,當將null值考慮在內時,where後面的條件子句擁有可能的值從真和假,增加為真,假,以及未知(null)。這些是我們在現實世界中想一些問題的時候可能的答案--真的,假的,我不知道。where not (gender="
m")
所以我們如何在這種情況下不丟失資料呢,對於上面的例子來說,如何才能讓整個表的資料不被丟失呢,這裡必須將除了「真」,「假」以外的「未知」這個選項包含在內,sql提供了is null來表明未知這個選項:
where gender is null將上面語句加入進去,則不會再丟失資料。單錶查詢 LINQ to DataSet
fill the dataset.dataset ds new dataset ds.locale cultureinfo.invariantculture filldataset ds datatable orders ds.tables salesorderheader var query fr...
ORACLE單錶查詢
介紹 oracle資料庫系統是美國oracle公司 甲骨文 提供的以分布式資料庫為核心的一組軟體產品,oracle有很多種查詢方法,現在我來教大家一些簡單的條件查詢 第一種 較為精準的查詢 我要從oracle資料庫中查詢姓king名字為steven的人 select from employees w...
單錶查詢操作
1.查詢所有字段 查詢學生資訊表中所有學生資訊 select from 表名 2.查詢指定字段 查詢學生資訊表中所有學生的 姓名,家庭住址,身份證號 select 別名 as 姓名 別名 as 身份證號 別名 as 位址 from 表名 3.條件查詢 查詢位址是 泊頭,性別是男的學生資訊 selec...