第二章 單錶查詢 2

2021-05-26 12:13:23 字數 4583 閱讀 3677

--2.2 謂詞和運算子

use tsqlfundamentals2008;

goselect orderid, custid, empid, orderdate

from sales.orders

where (custid=1

and empid in(1,3,5))

or(custid=85

and empid in (2,4,6))

--2.3 case表示式

select productid, productname, categoryid,

case categoryid

when 1 then 'beverages'

when 2 then 'condiments'

else 'unknown category'

end as 'categaryname'

from production.products;

--case&ntile函式

select orderid, custid, val,

case ntile(3) over(order by val)

when 1 then 'low'

when 2 then 'medium'

when 3 then 'high'

else 'unknown'

end as titledesc

from sales.ordervalues

order by val;

--case&when

select orderid, custid, val,

case

when val < 1000.00 then 'less than 1000'

when val between 1000.00 and 3000.00 then 'between 1000 and 3000'

when val > 3000.00 then 'more than 3000'

else 'unknown'

end as valuecategory

from sales.ordervalues

--2.4 null值

--sql支援用三值謂詞邏輯,這意味著謂詞的計算結果可以是true, false或unknown

--對兩個null進行比較的表示式(null=null),其計算結果為unknown

select custid, country,region,city

from sales.customers

where region is null

--ansi sql有兩種unique約束:一種將多個null值視為相等的(只允許有乙個null值),

--另一種則將多個null值視為不同的(允許有多個null值)。sql server只實現的前者

--2.5 同時操作

select orderid, custid, val

from sales.ordervalues

where

case

when val < 2000.00 then 'no'

when val < 3000.00 then 'yes'

else 'no'

end = 'yes'

--2.6 處理字元資料

--普通字元資料型別包括char和varchar,unicode字元資料報括nchar和nvarchar,

--他們兩者的區別是:普通的字元使用乙個位元組(byte)來儲存每個字元,而unicode

--字元則需要兩個位元組。

--名稱中不包含var元素的任何資料型別都是固定長度的(char,nchar),對於這樣的類

--型,sql server會按照為列定義的大小,在行中為該列預留出固定的空間,所以該

--列的長度並不是字串中字元的實際個數。

--名稱中含有var元素的資料型別是可變長度的(varchar,nvarchar),sql server在行

--中會按照字串的實際長度來儲存資料,外加兩個額外的位元組以儲存資料的偏移值。

--在定義可變長度的資料型別時,可以使用max說明符,而不必指定字元的最大數量。

select empid, firstname + n' ' + lastname as fullname

from hr.employees

go--通過將乙個名為concat_null_yields_null的會話選項設定為off,就可以改變

--sql server處理串聯的方式。這時,sql server將把null值作為空字串來進行串聯。

set concat_null_yields_null off

select custid, country, region, city, country + n',' + region + n',' + city as location

from sales.customers

set concat_null_yields_null on

go--coalsce函式,替換字串

select custid, country, region, city,

country + n',' + coalesce(region,n'') + n',' + city as location

from sales.customers

--substring函式,提取子串,sql server起始index為1

select substring(n'abcde', 1, 3)

--left和right函式是substring函式的簡略形式

select left(n'abcde', 3)

select right(n'abcde', 3)

--len和datalength函式

--對於unicode字元,每個字元需要兩個位元組的儲存空間;因此字串的

--字元數是位元組數的一半。如果要得到位元組數,則應該使用datalength函式。

select len(n'abcde') --5

select datalength(n'abcde') --10

--charindex函式 返回字串中某個子串第一次出現的起始位置

select charindex(' ', n'anders fan')

--patindex函式 返回字串中某個模式第一次出現的起始位置

select patindex(n'%fan%', n'anders fan is me')

--replace函式 將字串中出現的所有某個子串替換為另乙個字串

select replace(n'anders fan', n'anders', n'xufei')

--可以使用replace函式來計算字串中某個字元出現的次數

select len(n'anders fan') - len(replace(n'anders fan', n'n', n'')) as num

--replacate函式 以指定的次數複製字串值

select replicate(n'anders ', 100) as [the king]

--為每個**商的整數id生成乙個10位數字的字串表示,不足10位時,前面補0

select supplierid,

right(replicate(n'0', 9) + cast(supplierid as varchar(10)), 10)

as strsupplierid

from production.suppliers

--stuff函式

select stuff(n'xyz', 2, 1, n'abc') --xabcz

--upper lower

select upper(n'anders fan')

select lower(n'anders fan')

--like謂詞

--%萬用字元 代表任意長度的字串

select empid, lastname

from hr.employees

where lastname like n'd%'

-- _萬用字元 代表任意單個字元

select empid, lastname

from hr.employees

where lastname like n'_e%'

--萬用字元 方括號中包括一列字元,表示必須匹配列指定字元中的乙個字元

select empid, lastname

from hr.employees

where lastname like n'[abc]%'

--[-]萬用字元 方括號中包含乙個字元範圍,表示必須匹配指定範圍內的乙個字元

select empid, lastname

from hr.employees

where lastname like n'[a-e]%'

--[^]萬用字元 ^後面跟著乙個字元列或範圍,表示不屬於指定字元列或範圍內的任意單個字元

select empid, lastname

from hr.employees

where lastname like n'[^a-m]%'

--escape 轉義字元

第二章 select 查詢

檢視當前使用者的表及部分字段資訊 select table name,column name,data type,data length,nullable from user tab columns where table name bonus 檢視當前使用者的表 檢視?select from ta...

第二章 繼承(2)

1.繼承條件下構造方法的呼叫規則 i.如果子類的構造方法中沒有通過super顯示呼叫父類的有參方法,也沒有通過this顯示呼叫自身的其他構造方法,則系統會預設先呼叫父類的無參構造方法,這時有無 super 一樣 ii.如果子類的構造方法中乙個super顯示呼叫父類的有參構造方法,則將執行父類相應的構...

第二章 順序表

線性表是具有相同特性的資料元素的乙個有限序列。靜態順序表。define list init size 100 線性儲存空間的初始分配量。typedef structsqlist 動態線性表。typedef structsqlist 線性表宣告 sqlist l l.data elemtype mal...