本代码在:WinXp Pack 3 + Delphi2009 updata1 火鸟Firebird2.5.0.23247下测试通过。
使用了Data Access面板的组件用SQL进行操作
作者:LAH [懒妹]
QQ:112412387

火鸟Firebird数据库的中文参考资料

■firebird标准连接串 
Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=C:\document. and Settings\Administrator\桌面\data\demo.fdb;
default character set gbk; 使用中文时在创建数据库语句中就应该加这句,并且连接文本中也要用这句。

.NET - Firebird .Net Data Provider 连接串 
User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost;Port=3050;Dialect=3;
Charset=NONE;Role=;Connection
lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet
Size=8192;ServerType=0;

■Firebird除了可见的表外,还隐藏了系统表具体可用(注意以下语句中的""中的文本区分大小写)

查询所有的表和视图(包括系统表和系统视图)
SELECT RDB$RELATION_NAME FROM RDB$RELATIONS;

这样我们就能看到rdb$开头的系统表,如约束信息表:
rdb$relation_constraints 及与其相关的 RDB$CHECK_CONSTRAINTS RDB$INDEX_SEGMENTS

一、分页写法小例:
select first 10 templateid,code,name from template ;
select first 10 skip 10 templateid,code,name from template ;
select * from shop rows 1 to 10; --firebird2.0支持这种写法

二、show
show tables;
show table tablename;
三、
D:\firebird2\bin>isql -u sysdba -p masterkey
connect "E:\company\xmwsoft\newxmwsoft\c2\db\cts2.fdb";
四、--更新字段注释
update RDB$RELATION_FIELDS
set RDB$DESCRIPTION = "描述信息"
where (RDB$RELATION_NAME = "SHOP") and
(RDB$FIELD_NAME = "CREDIT_BUY")

五、--显示字段注释
select RDB$FIELD_NAME,RDB$DESCRIPTION from RDB$RELATION_FIELDS
where (RDB$RELATION_NAME = "SHOP")
and
(RDB$FIELD_NAME = "CREDIT_BUY")

六、--更新表注释
update RDB$RELATIONS set RDB$DESCRIPTION = "描述信息" where RDB$RELATION_NAME="TABLE_NAME"

八、--查询所有的用户表和用户视图
SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0;

九、--查询所有的用户表
SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$VIEW_BLR IS NULL

十、查所有用户表、用户视图所有字段及相关定义
SELECT a.RDB$RELATION_NAME, b.RDB$FIELD_NAME, b.RDB$FIELD_ID, d.RDB$TYPE_NAME,
c.RDB$FIELD_LENGTH, c.RDB$FIELD_SCALE
FROM RDB$RELATIONS a
INNER JOIN RDB$RELATION_FIELDS b
ON a.RDB$RELATION_NAME = b.RDB$RELATION_NAME
INNER JOIN RDB$FIELDS c
ON b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME
INNER JOIN RDB$TYPES d
ON c.RDB$FIELD_TYPE = d.RDB$TYPE
WHERE a.RDB$SYSTEM_FLAG = 0
AND d.RDB$FIELD_NAME = "RDB$FIELD_TYPE"
ORDER BY a.RDB$RELATION_NAME, b.RDB$FIELD_ID
十一、查找某表的所有字段及相关定义
SELECT A.RDB$FIELD_NAME, B.RDB$FIELD_TYPE, B.RDB$FIELD_LENGTH, B.RDB$FIELD_PRECISION, B.RDB$FIELD_SCALE
FROM RDB$RELATION_FIELDS A, RDB$FIELDS B
WHERE A.RDB$RELATION_NAME = "tablename"
AND A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME
ORDER BY A.RDB$FIELD_POSITION
十二、查找某表的主键定义字段
select A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B
WHERE B.RDB$CONSTRAINT_TYPE = "PRIMARY KEY"
AND B.RDB$RELATION_NAME = "tablename"
AND A.RDB$INDEX_NAME = B.RDB$INDEX_NAME
ORDER BY A.RDB$FIELD_POSITION

十三、查找某表的外键定义
select r1.RDB$CONSTRAINT_NAME, rind.RDB$FIELD_NAME, r2.RDB$RELATION_NAME
FROM RDB$RELATION_CONSTRAINTS r1, RDB$RELATION_CONSTRAINTS r2, RDB$REF_CONSTRAINTS ref, RDB$INDEX_SEGMENTS rind
where r1.RDB$RELATION_NAME = "tablename"
and r1.RDB$CONSTRAINT_TYPE = "FOREIGN KEY"
and r1.RDB$CONSTRAINT_NAME = ref.RDB$CONSTRAINT_NAME
and ref.RDB$CONST_NAME_UQ = r2.RDB$CONSTRAINT_NAME
and r1.RDB$INDEX_NAME = rind.RDB$INDEX_NAME

十四、添加主键等约束
alter table tablename add constraint PK_tablename primary key(FIELDname)
alter table tablename add constraint uq_FIELD unique(FIELDname) 或 alter table tablename add unique(FIELDname)
添加NOT NULL约束比较特殊
update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'FIELDNAME') and (RDB$RELATION_NAME = 'TN')
insert into RDB$RELATION_constraints values('NN_FIELD','NOT NULL','WFW','NO','NO','')
insert into RDB$CHECK_constraints values('NN_FIELD','FIELD')

十五、删除主键等约束
先查这个表的主键名
select
RDB$CONSTRAINT_NAME from RDB$RELATION_CONSTRAINTS where
RDB$CONSTRAINT_TYPE='PRIMARY KEY' and RDB$RELATION_NAME='tablename'
然后
alter table tablename drop constraint 主键名 (主键名一般在隐藏的系统表中,每个约束一个名。)

十六、创建数据库
Create Database 'D:\Mydb.fdb' user 'sysdba' password 'masterkey' [default character set gbk]

十七、查指定字段Not Null约束
SELECT a.rdb$trigger_name,b.rdb$constraint_name,b.rdb$constraint_type
FROM RDB$CHECK_CONSTRAINTS a, rdb$relation_constraints b where
a.rdb$constraint_name=b.rdb$constraint_name and
b.rdb$constraint_type='NOT NULL' and b.RDB$RELATION_NAME='表名' and
a.rdb$trigger_name='字段名'

十八、查指定表所有unique约束 和 主键约束
SELECT a.RDB$FIELD_NAME,b.rdb$constraint_name,b.rdb$constraint_type
FROM RDB$INDEX_SEGMENTS a, rdb$relation_constraints b where
a.RDB$INDEX_NAME=b.RDB$INDEX_NAME and b.RDB$RELATION_NAME='tablename'

十九、修改字段类型
ALTER TABLE TABLENAME ALTER FIELDNAME TYPE FLOAT

二十、改字段名
alter table TABLENAME alter oldFIELDname to newFIELDname

■Firebird的基本数据类型

由于排版关系,取幂将用[],比如10[5],表示10的5次方。

INTEGER:长整型,取值范围:-2147483648至2147483647

FLOAT:单精度浮点型,取值范围:1.175*10[-38]至3.402*10[38]

DOUBLE PRECISION:双精度浮点型,取值范围:2.225*10[-308]至1.797*10[308]

DECIMAL:小数型,可指定有效位数最大为18位或小数点后18位。比如DECIMAL(5,2),就是指有5位数字,不含小数点,形如123.45

NUMERIC:小数型,与DECIMAL类似,稍后讲它们的区别。

注意,当数据含小数部分时,请尽量用DECIMAL,因为浮点型有精度问题,除非数值特别大,才用浮点型!

DECIMAL与NUMERIC的区别:
比如,DECIMAL(5,2)与NUMERIC(5,2)所分别定义的字段,DECIMAL(5,2)指的是至少有5位数字,还可以更多!而NUMERIC(5,2)指的是,就是5位,不多也不少。

SMALLINT:短整型,取值范围:-32768至32767,数值确定比较小时,可以使用,可以节省磁盘空间与提升效率

CHAR:字符型,最多32767个字符,注意,使用CHAR类型,即使字符数没有达到指定字段的宽度,也会用空字符补满!取值时,请注意用TRIM()等函数去掉多余空字符。除非确定每条记录的字符数不变,否则请用VARCHAR类型。

VARCHAR:可变长度字符型,最多32767个字符,存储时,会根据内容长度自动改变存储位数,不会产生多余空字符。当字符数超过32767时,请用BLOB型。

TIME:时间型,取值范围:00:00至23:59.9999

TIMESTAMP:日期时间型,取值范围:公元100年1月1日至公元32768年2月29日,同时包含日期与时间信息。

DATE:日期型,取值范围:公元100年1月1日至公元32768年2月29日。,注意,建库时需选择DIALECT 3级别才支持DATE型,否则就是TIMESTAMP型。

BLOB:大二进制型,可支持Text(文本)、Binary Data(二进制型,比如图片,声音等)等子类型。取值范围:64KB以内。

BOOLEAN:逻辑型,Firebird 2.0引入的新类型。取值范围:TRUE(值)或FALSE(假)。使用BOOLEAN而不用SMALLINT的理由是可以用更少的位数来存储,而且与SQL标准兼容,但是,数据将与1.5版本不兼容。

■1. COUNT, AVG, MAX, MIN, SUM
说明:通用统计函数,不详细介绍了

2. EXTRACT(timestamp_part FROM value)
说明:EXTRACT(YEAR/MONTHE/DAY/WEEKDAY FROM 字段名)
从日期型字段中分离出年,月,日及一个星期的第几天

3. CAST(value AS datatype)
说明:转换数据类型

4. LOWER() *
说明:返回小写值

5. UPPER()
说明:返回大写值

6. TRIM() *
说明:去除字符串两边的空格

7. SUBSTRING(string FROM pos FOR length)
说明:取字符串子串,注意,第一个字符的位置是1

8. BIT_LENGTH *
说明:返回字符串位(bit)数

9. CHAR_LENGTH/CHARACTER_LENGTH *
说明:返回字符串字符数

10. OCTET_LENGTH *
说明:返回字符串字节数

11. CASE
说明:通过执行外来的一组条件取得相应的返回值
举例
i) 简单
SELECT o.ID, o.Description,
CASE o.Status
WHEN 1 THEN "confirmed"
WHEN 2 THEN "in production"
WHEN 3 THEN "ready"
WHEN 4 THEN "shipped"
ELSE "unknown status """ || o.Status || """"
END
FROM Orders o;
ii) 表达式
SELECT o.ID, o.Description,
CASE
WHEN (o.Status IS NULL) THEN "new"
WHEN (o.Status = 1) THEN "confirmed"
WHEN (o.Status = 3) THEN "in production"
WHEN (o.Status = 4) THEN "ready"
WHEN (o.Status = 5) THEN "shipped"
ELSE "unknown status """ || o.Status || """"
END
FROM Orders o;

12. IIF (<search_condition>, <value1>, <value2>)
说明:表达式为真,返回value1否则返回value2
等价于以下语句:
CASE
WHEN <search_condition> THEN <value1>
ELSE <value2>
END

13. NULLIF(V1,V2)
说明:如果V1=V2,返回NULL,否则返回V1
等价于以下语句:
CASE WHEN V1 = V2 THEN NULL ELSE V1 END
举例
UPDATE PRODUCTS
SET STOCK = NULLIF(STOCK,0)

14. COALESCE(V1, V2, …, Vn)
说明:如果V1为Null,返回V2,否则返回V1,
如果 n >= 3, 等于如下case语句:
CASE
WHEN V1 IS NOT NULL THEN V1
ELSE COALESCE (V2,...,Vn)
END

举例
SELECT
PROJ_NAME AS Projectname,
COALESCE(e.FULL_NAME,"[< not assigned >]") AS Employeename
FROM
PROJECT p
LEFT JOIN EMPLOYEE e
ON (e.EMP_NO = p.TEAM_LEADER);

SELECT
COALESCE(Phone,MobilePhone,"Unknown") AS "Phonenumber"
FROM Relations;

■ 某表tbl,
字段A,varchar
字段B,date
字段C,numeric

如有一下数据:
A,B,C
0001,2008-3-1,7
0001,2008-3-2,14
0002,2008-3-1,32
0002,2008-3-3,56

0001和0002的最新日期是不一致的。

我现在可以查出0001和0002的最新日期的数据,
select * from tbl a
where B=(select max(B) from tbl B where a.A=b.A)

得到
0001,2008-3-2,14
0002,2008-3-3,56

问题是如何查出次新日期的数据,得到
0001,2008-3-1,7
0002,2008-3-1,32

channon:自己解决了
select * from tbl a
where B=(select max(B) from tbl b where a.A=b.A
and B<(select max(B) from tbl c where c.A=b.A))

【收藏】Firebird知识的更多相关文章

  1. Linq、Lambda表达式详细总结(转)

    (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的 左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数 ...

  2. 【CSS3】自定义设置可编辑元素闪烁光标的颜色

    前言 因为业务需求, 要求我们的input框内的文本与悬浮的光标颜色不同, 这样的问题肯定在书本上很难找到解决办法, 需要通过平时的基础积累和经验. 解决方案 使用 ::first-line 伪元素 ...

  3. Alpha-功能规格说明书

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.引言 1. 项目简介 项目团队:删库跑路对不队 项目名称:题士 项目内容 ...

  4. Beta-功能规格说明书

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.引言 1. 项目简介 项目团队:删库跑路对不队 项目名称:题士 项目内容 ...

  5. Alpha项目展示

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 Alpha-项目展示 我们是谁 删库跑路对不队 我们在做什么 题士 进度如何 进度总览 一.项目与团队亮点 ...

  6. 如何构建一个PKM系统

    原文链接 这篇文章是个人知识总结相关的第一篇文章,主要目的是为了阐述我们为什么需要一个 PKM 系统,并且简单对自己这几年亲身形成的PKM 系统进行总结. PKM 是什么? PKM 是 Persona ...

  7. 我收藏的技术知识图(每张都是大图)关于XX背后的知识、技术图,例如:Linux、Nginx架构、PHP知识卡、机会、HTML5移动、Android系统架构、YII架构的典型流程、Css知识表

    我收藏的技术知识图(每张都是大图) HTML5Linux/Unix系统设计思想读书笔记 LinuxMVCJava线程MVCSpring MVCCSS3Nginx架构VimCliCommandsPHP知 ...

  8. C#接口知识大全收藏

    第一节 接口慨述 接口(interface)用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有了这个协定,就可以抛开编程语言的限制(理论上).接口可以从多个基接口继承,而类或结构可 ...

  9. 前端学习——css基础知识,选择器与html模板、值得收藏的html标签

    一.css需要的html(采用html5标准) DTD,文档类型声明: <!Doctype html> 文本编码声明: <meta charset="utf-8" ...

随机推荐

  1. LDAP与SSH

    一般情况下,客户端配置好之后,ssh是可以直接用的,若不能,则需手动配置 1:vim /etc/ssh/sshd_config 把UsePAM改成yes 2:在vim /etc/pam.d/sshd添 ...

  2. JavaScript流程控制语句

    一.JavaScript分支语句 -alert()    弹出警告对话框 -prompt() 弹出输入框 1.if(){}else{} 栗子: var num=prompt("请输入电话号码 ...

  3. 关于arduino清空串口缓存(转)

    在arduino1.0之前的版本 Serial.flush()的作用是是清空串口缓存( dropping received incoming data).但在1.0之后的版本 Serial.flush ...

  4. Hdu OJ 5965 扫雷(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5965 题目大意:中文题,自己读 解图思路:对于每一列都有三种情况--0, 1, 2. 如果第一列确定地 ...

  5. aspx页面,中文乱码解决方案

    由于文件编码方式编码方式不统一出现样式中文乱码解决方案: 今天碰到的问题:页面字体样式设置的'微软雅黑',可页面没引用.我调试看到样式出现中文乱码了 这种问题,就需要转换文件的编码方式,如下两步即可解 ...

  6. 类的序列化和反序列化(ObjectOutputStream和ObjectInputStream)

    1.需要序列化的类 import java.io.Serializable; /** * 必须继承 Serializable 接口才能实现序列化 */ public class Employee im ...

  7. [刘阳Java]_MyBatis_映射文件的select标签入门_第3讲

    1.Mybatis映射文件的<select>标签主要帮助我们完成SQL语句查询功能,<select>标签它包含了很多属性,下面简单对<select>标签的属性做一个 ...

  8. 无法在Web服务器上启动调试,已附加了一个调试器

    运行环境:开发环境:Windows7旗舰版64bit.VisualStudio2008 With SP1.ArcEngine10.0.NetFrameWork4.0.IIS7和C#开发语言. 问题描述 ...

  9. [工具.tfs]可视化的TFS命令工具——Team Foundation Sidekicks

    工具介绍:http://www.attrice.info/cm/tfs/index.htm Team Foundation Sidekicks is a suite of tools for Micr ...

  10. Httpoxy远程代理感染漏洞 [转]

    Httpoxy是一个最新曝出的一个CGI程序漏洞,它主要可能威胁到运行在CGI上的PHP,Go,Python和其他代码程序语言. 0×01  什么是httpoxy? 具体来说, httpoxy是一组影 ...