Firebird Cookbook 2:数据选择
数据库使用SELECT语句提取数据。注意,Firebird 2.5及之前版本没有类似MySQL的AutoIncrement列,如果要创建自增列,只能为每个表创建一个触发器和生成器:
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;
必然能够获得所有的列。但是,不同的数据库系统、同一系统的不同版本处理星号的方法并不同,也就不能保证获取的都是同样的列、同样的顺序。最好还是指定查询哪些列:
SELECT SID, SNAME FROM STUDENTS;
3.2 设置选择范围
使用first m skip n语句可指定数据的选择范围:
SELECT FIRST 5 SKIP 10 SID, SNAME FROM STUDENTS;
会选择第11~15行的数据。
3.3 处理空值
有些行可能包含NULL值,NULL值的实际含义是“未指定”,因此任何数据和NULL的比较都会得到NULL。可以考虑使用IS NULL、IS NOT NULL来判断:
SELECT * FROM STUDENTS WHERE SID IS NOT NULL;
3.4 视图
视图是预定义的只读表,可以将选择操作封装起来,并使用视图大大增强数据库的安全性:
CREATE VIEW STUDENT_NAMES AS SELECT SNAME FROM STUDENTS;
注意后面的选择操作描述绝不能带括号,如
... (AS SELECT SNAME FROM STUDENTS);
否则报错。