普通語言裡的布林型只有 true 和 false 兩個值,即二值邏輯;sql中有 true、false 和 unknown,即三值邏輯;
關係模型並不是描述現實世界的模型,而是描述人類認知狀態的核心(知識)的模型,我們有限且不完備的知識也會直接反映在表裡;
三值邏輯優先順序:
q:為什麼where co l_1 = null 會出錯?
a:null不是值,只是乙個「沒有值」的標記,需要用where col_1 is null;
select
*from tbl_a where col_1 =
null
;-- 結果為空
select
*from tbl_a where col_a is
null
;
q:排中律在sql中是否成立?(排中律:乙個人年齡要麼等於20,要麼不等於20)
a:在sql中,排中律不存在
select
*from students
where age =
20or age <>20;
-- 無法查詢出年齡為null的學生
q:case表示式中,null應該怎麼寫?
a:搜尋表示式 + is null
case col_1
when
1then
'〇'when
null
then
'x'-- 表示式為 col_1 = null,結果為空
end;
case
when col_1 =
1then
'〇'when col_1 is
null
then
'x'end
;
create
table class_a
(name varchar(16
)primary
key,
age integer
, city varchar(16
)not
null);
create
table class_b
(name varchar(16
)primary
key,
age integer
, city varchar(16
)not
null);
insert
into class_a values
('布朗',22
,'東京');
insert
into class_a values
('拉里',19
,'埼玉');
insert
into class_a values
('伯傑',21
,'千葉');
insert
into class_b values
('齊藤',22
,'東京');
insert
into class_b values
('田尻',23
,'東京');
insert
into class_b values
('山田'
,null
,'東京');
insert
into class_b values
('和泉',18
,'千葉');
insert
into class_b values
('武田',20
,'千葉');
insert
into class_b values
('石川',19
,'神奈川'
);
q:查詢「與b班住在東京的學生年齡不同的a班學生」,即「拉里」和「伯傑」
a:不能用not in
-- not in:結果為空
select
*from class_a
where age notin(
select age
from class_b as b
where b.city =
'東京');
-- not exists:不受null影響
select
*from class_a as a
where
notexists
(select
*from class_b as b
where a.age = b.age
and b.city =
'東京'
);
q:any相當與in;all和比較謂語聯用表示「與所有的xx都相等」、「比所有的xx都大」,若遇到null
a:若any、all遇到null,查詢結果永遠為空
select
*from class_a as a
where age <
all(
select age
from class_b as b
where b.city =
'東京'
);
q:max和比較謂語聯用表示「比***裡最大的更大」,若遇到null
a:極值函式只對非null起作用
select
*from class_a as a
where age <
(select
min(age)
from class_b
where city =
'東京'
);
mick[日] 《sql高階教程》 ↩︎ js高階之三 this指向
本文不考慮嚴格模式 錯誤之處感謝提出,請勿噴 function 函式 this 指向一共有4種規則 預設繫結,隱式繫結,顯式繫結,new繫結 預設繫結 function fn var a 1 fn a 1 fn在沒有任何修飾的被呼叫,只能使用預設繫結 this指向了直接呼叫的window 隱式繫結 ...
三值邏輯討論
習慣上我們在應用系統中一直使用兩值邏輯 非 true 即false 兩值邏輯的運算體系已經相當成熟,與 或 非以及衍生的異或 與非等等。但是在實際應用中,我們會有機會遇到三值邏輯。三值邏輯通常包含可選的 true false null 如何在完備的兩值邏輯運算體系中加入這個 null 使之滿足我們的...
Spring實戰之三 高階裝配
primary和 component組合使用,宣告該bean在自動掃瞄時為首選bean,在遇到歧義時首先使用首選bean autowired inject 和 qualifier配合使用,在注入時指定要注入進去的是哪個bean,如 qualifier icecream 表明注入id 確切地講是限定符...