Firebird Cookbook 2:數(shù)據(jù)選擇
數(shù)據(jù)庫使用SELECT語句提取數(shù)據(jù)。注意,F(xiàn)irebird?2.5及之前版本沒有類似MySQL的AutoIncrement列,如果要創(chuàng)建自增列,只能為每個表創(chuàng)建一個觸發(fā)器和生成器:
CREATE?TABLE?STUDENTS?(SID?INTEGER?NOT?NULL,?SNAME?VARCHAR?(128)?NOT?NULL,?PRIMARY?KEY(SID));
?
CREATE?GENERATOR?GEN_STUDENTS;
SET?GENERATOR?GEN_STUDENTS?TO?0;
?
SET?TERM?!!;
CREATE?TRIGGER?STUDENTS_GEN?FOR?STUDENTS
ACTIVE?BEFORE?INSERT?POSITION?0
AS?BEGIN
IF?(NEW.ID?IS?NULL)?THEN?NEW.ID?=?GEN_ID(GEN_STUDENTS,?1);
END!!
SET?TERM?;?!!
3.1??顯式指定查詢列
誠然使用
SELECT?*?FROM?STUDENTS;
必然能夠獲得所有的列。但是,不同的數(shù)據(jù)庫系統(tǒng)、同一系統(tǒng)的不同版本處理星號的方法并不同,也就不能保證獲取的都是同樣的列、同樣的順序。最好還是指定查詢哪些列:
SELECT?SID,?SNAME?FROM?STUDENTS;
3.2??設(shè)置選擇范圍
使用first?m?skip?n語句可指定數(shù)據(jù)的選擇范圍:
SELECT?FIRST?5?SKIP?10?SID,?SNAME?FROM?STUDENTS;
會選擇第11~15行的數(shù)據(jù)。
3.3??處理空值
有些行可能包含NULL值,NULL值的實際含義是“未指定”,因此任何數(shù)據(jù)和NULL的比較都會得到NULL??梢钥紤]使用IS?NULL、IS?NOT?NULL來判斷:
SELECT?*?FROM?STUDENTS?WHERE?SID?IS?NOT?NULL;
3.4??視圖
視圖是預(yù)定義的只讀表,可以將選擇操作封裝起來,并使用視圖大大增強數(shù)據(jù)庫的安全性:
CREATE?VIEW?STUDENT_NAMES?AS?SELECT?SNAME?FROM?STUDENTS;
注意后面的選擇操作描述絕不能帶括號,如
...?(AS?SELECT?SNAME?FROM?STUDENTS);
否則報錯。
?