您的位置:首页 > 数据库

Firebird的SQL语法

2014-01-27 08:41 295 查看
一、分页:

  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 TABLES;

     SHOW TABLE tablename;

 

三、使用ISQL连接数据库

  firebird%92bin>isql -u sysdba -p masterkey

  SQL>CONNECT 'E:companyxmwsoftnewxmwsoftc2dbcts2.fdb';

  或

  SQL>CONNECT 'E:%92'

  CON>USER 'sysdba'

  CONT>PASSWORD 'masterkey';

 

四、更新字段注释

  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 (DB$FIELD_NAME = 'CREDIT_BUY')

 

六、更新表注释

  UPDATE RDB$RELATIONS

  SET RDB$DESCRIPTION = '描述信息'

  WHERE RDB$RELATION_NAME = 'TABLE_NAME';

 

七、查询所有的表和视图(包括系统表和系统视图)

  SELECT RDB$RELATION_NAME

  FROM RDB$RELATIONS;

 

八、查询所有的用户表和用户视图

  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;

 

--得到数据库的所有者名称

SELECT distinct RDB$OWNER_NAME AS DATABASE_OWNER

FROM RDB$RELATIONS

WHERE (RDB$SYSTEM_FLAG = 1);

--根据表名得到表的主键

SELECT RC.RDB$CONSTRAINT_NAME AS CONSTRAINT_NAME,

I.RDB$RELATION_NAME AS TABLE_NAME,

S.RDB$FIELD_NAME AS COLUMN_NAME

FROM RDB$RELATION_CONSTRAINTS RC

LEFT JOIN RDB$INDICES I ON

   (I.RDB$INDEX_NAME = RC.RDB$INDEX_NAME)

LEFT JOIN RDB$INDEX_SEGMENTS S ON

   (S.RDB$INDEX_NAME = I.RDB$INDEX_NAME)

WHERE (RC.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY')

AND (I.RDB$RELATION_NAME = 'COUNTRY')

---根据表名得到其相关的依赖.

SELECT RDB$DEPENDENT_NAME AS DEPENDENT_NAME,

RDB$DEPENDED_ON_NAME AS DEPENDS_ON,

RDB$FIELD_NAME AS FIELD_NAME,

RDB$DEPENDENT_TYPE DEPENDENT_TYPE,

   CASE

    WHEN RDB$DEPENDENT_TYPE = 0 THEN 'TABLE'

    WHEN RDB$DEPENDENT_TYPE = 1 THEN 'VIEW'

    WHEN RDB$DEPENDENT_TYPE = 2 THEN 'TRIGGER'

    WHEN RDB$DEPENDENT_TYPE = 3 THEN 'COMPUTED'

    WHEN RDB$DEPENDENT_TYPE = 4 THEN 'VALIDATION'

    WHEN RDB$DEPENDENT_TYPE = 5 THEN 'PROCEDURE'

    WHEN RDB$DEPENDENT_TYPE = 6 THEN 'expression_r_INDEX'

    WHEN RDB$DEPENDENT_TYPE = 7 THEN 'EXCEPTION'

    WHEN RDB$DEPENDENT_TYPE = 8 THEN 'USER'

    WHEN RDB$DEPENDENT_TYPE = 9 THEN 'FIELD'

    WHEN RDB$DEPENDENT_TYPE = 10 THEN 'INDEX'

    WHEN RDB$DEPENDENT_TYPE = 14 THEN 'GENERATOR'

    ELSE 'UNKNOWN'

    END AS DEPENDENT_TYPE_STR,

   RDB$DEPENDED_ON_TYPE AS DEPEND_ON_TYPE,

   CASE

    WHEN RDB$DEPENDED_ON_TYPE = 0 THEN 'TABLE'

    WHEN RDB$DEPENDED_ON_TYPE = 1 THEN 'VIEW'

    WHEN RDB$DEPENDED_ON_TYPE = 2 THEN 'TRIGGER'

    WHEN RDB$DEPENDED_ON_TYPE = 3 THEN 'COMPUTED'

    WHEN RDB$DEPENDED_ON_TYPE = 4 THEN 'VALIDATION'

    WHEN RDB$DEPENDED_ON_TYPE = 5 THEN 'PROCEDURE'

    WHEN RDB$DEPENDED_ON_TYPE = 6 THEN 'expression_r_INDEX'

    WHEN RDB$DEPENDED_ON_TYPE = 7 THEN 'EXCEPTION'

    WHEN RDB$DEPENDED_ON_TYPE = 8 THEN 'USER'

    WHEN RDB$DEPENDED_ON_TYPE = 9 THEN 'FIELD'

    WHEN RDB$DEPENDED_ON_TYPE = 10 THEN 'INDEX'

    WHEN RDB$DEPENDED_ON_TYPE = 14 THEN 'GENERATOR'

    ELSE 'UNKNOWN'

    END AS DEPENDS_ON_TYPE_STR

FROM RDB$DEPENDENCIES WHERE RDB$DEPENDED_ON_NAME='JOB'

ORDER BY RDB$DEPENDENT_NAME

--根据索引名得到表名和与及其索引相关的列

SELECT I.RDB$RELATION_NAME AS TABLENAME,

S.RDB$FIELD_NAME AS FIELDNAME

FROM RDB$INDICES I

LEFT JOIN RDB$INDEX_SEGMENTS S ON

   (S.RDB$INDEX_NAME = I.RDB$INDEX_NAME)

WHERE (I.RDB$INDEX_NAME = 'NAMEX');

--根据表名得到其上所有的索引

SELECT I.RDB$INDEX_NAME AS FKINDEXNAME,

I.RDB$RELATION_NAME AS TABLENAME,

S.RDB$FIELD_NAME AS FIELDNAME

FROM RDB$INDICES I

LEFT JOIN RDB$INDEX_SEGMENTS S ON (S.RDB$INDEX_NAME = I.RDB$INDEX_NAME)

WHERE I.RDB$RELATION_NAME = 'CUSTOMER'

AND (NOT EXISTS(SELECT 1

   FROM RDB$RELATION_CONSTRAINTS R WHERE R.RDB$INDEX_NAME = I.RDB$INDEX_NAME))

--得到所有的用户表

SELECT RDB$RELATION_NAME AS TABLE_NAME

FROM RDB$RELATIONS

WHERE RDB$SYSTEM_FLAG = 0

AND RDB$VIEW_SOURCE IS NULL;

--根据表名与字段得到索引

SELECT I.RDB$INDEX_NAME AS FKINDEXNAME,

I.RDB$RELATION_NAME AS TABLENAME,

S.RDB$FIELD_NAME AS FIELDNAME

FROM RDB$INDICES I

LEFT JOIN RDB$INDEX_SEGMENTS S ON (S.RDB$INDEX_NAME = I.RDB$INDEX_NAME)

WHERE I.RDB$FOREIGN_KEY IS NOT NULL

AND I.RDB$RELATION_NAME = 'CUSTOMER'

AND S.RDB$FIELD_NAME = 'COUNTRY';

--根据表名得到列信息

SELECT RF.RDB$FIELD_NAME AS FieldName,

T.RDB$TYPE_NAME AS DataType,

F.RDB$FIELD_LENGTH AS FieldLength,

RF.RDB$NULL_FLAG AS AllowNulls,

CS.RDB$DEFAULT_COLLATE_NAME AS CharacterSet,

RF.RDB$DEFAULT_SOURCE AS Defaultvalue,

F.RDB$COMPUTED_SOURCE AS ComputedSource,

F.RDB$FIELD_SUB_TYPE AS SubType,

F.RDB$FIELD_PRECISION AS FieldPrecision

FROM RDB$RELATION_FIELDS RF

LEFT JOIN RDB$FIELDS F ON (F.RDB$FIELD_NAME = RF.RDB$FIELD_SOURCE)

LEFT JOIN RDB$TYPES T ON (T.RDB$TYPE = F.RDB$FIELD_TYPE)

LEFT JOIN RDB$CHARACTER_SETS CS ON (CS.RDB$CHARACTER_SET_ID = F.RDB$CHARACTER_SET_ID)

WHERE RF.RDB$RELATION_NAME = 'EMPLOYEE' AND

T.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'

ORDER
4000
BY RF.RDB$FIELD_POSITION;

--检测一个列是否存在,结果为1存在,不为1不存在

SELECT COUNT(RF.RDB$FIELD_NAME)

FROM RDB$RELATION_FIELDS RF

LEFT JOIN RDB$FIELDS F ON (F.RDB$FIELD_NAME = RF.RDB$FIELD_SOURCE)

LEFT JOIN RDB$TYPES T ON (T.RDB$TYPE = F.RDB$FIELD_TYPE)

WHERE RF.RDB$RELATION_NAME = 'EMPLOYEE' AND

T.RDB$FIELD_NAME = 'RDB$FIELD_TYPE' AND

RF.RDB$FIELD_NAME = 'EMP_NO'

--检测一个表是否存在

SELECT COUNT(RDB$RELATION_NAME)

   FROM RDB$RELATIONS

   WHERE (RDB$RELATION_NAME = 'CUSTOMER')

    AND RDB$VIEW_SOURCE IS NULL;

--得到数据库中所有的视图

SELECT RDB$RELATION_NAME

FROM RDB$RELATIONS

WHERE RDB$FLAGS = 1

AND RDB$VIEW_SOURCE IS NOT NULL;

--得到所有的系统表

SELECT RDB$RELATION_NAME

FROM RDB$RELATIONS

WHERE (RDB$FLAGS = 0 OR RDB$FLAGS IS NULL)

AND RDB$VIEW_SOURCE IS NULL;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: