firebird常用sql语句
2017-10-09 11:29
337 查看
转自:http://www.du52.com/text.php?id=182
Firebird常用SQL
一、分页写法小例:
二、show
三、
D:\firebird2\bin>isql-usysdba-pmasterkey
connect"E:\company\xmwsoft\newxmwsoft\c2\db\cts2.fdb";
四、--更新字段注释
五、--显示字段注释
六、--更新表注释
七、--查询所有的表和视图(包括系统表和系统视图)
八、--查询所有的用户表和用户视图
九、--查询所有的用户表
十、查所有用户表、用户视图所有字段及相关定义
十一、查找某表的所有字段及相关定义
十二、查找某表的主键定义字段
十三、查找某表的外键定义
firebird默认的用户名:SYSDBA密码:masterkey
开源的Firebird的可视化管理工具Marathon
flameRobin也量个开源的可视化管理工具
1、创建表
如:createtablet1
(
sno1char(9)primarykey,
sno2char(9)referencesstudent(sno)
)
2、修改表
(1)增加字段
altertabletable_nameaddfieldnamedatetype[notnull,primarykey]
如:altertablestudentaddsexchar(2)notnull
primarykey
default'm'
CHECK(sex1='f'orsex1='m')
ALTERTABLESTUDENT
ADDAGEINTEGER[1:100]
DEFAULT56
CHECK(agebetween20and35)
ALTERTABLESTUDENT
ADDAGEINTEGER[1:100]
DEFAULT56
CHECK(age>=20andage<=35)
(2)删除字段
altertabletable_namedropfieldname
ALTERTABLESTUDENTDROPAA
(3)增加主键
altertableSCORE
addconstraintPK_SCORE_1
primarykey(ID,CORUSENAME)
////////////////////////////////////////////////////////////////////////////
查询:
SELECT[TRANSACTIONtransaction]
[DISTINCT|ALL]
{*|<val>[,<val>…]}
[INTO:var[,:var…]]
FROM<tableref>[,<tableref>…]
[WHERE<search_condition>]
[GROUPBYcol[COLLATEcollation][,col[COLLATEcollation]…]
[HAVING<search_condition>]
[UNION<select_expr>[ALL]]
[PLAN<plan_expr>]
[ORDERBY<order_list>]
[FORUPDATE[OFcol[,col…]]];
在表上增加外键
altertableSTUDENT
addconstraintFK_STUDENT_1
foreignkey(ID)
referencesSCORE(ID)
///////////////////////////////////////////////////////////////////////
创建域:
CREATEDOMAINdomain[AS]<datatype>
[DEFAULT{literal|NULL|USER}]
[NOTNULL][CHECK(<dom_search_condition>)]
[COLLATEcollation];
如:
(1)createdomainMyScoreasSMALLINT
default0
check(valuebetween0and100)
(2)CREATEDOMAINDEPTNOASCHAR(3)
CHECK((VALUE='000')OR
(VALUE>'0'ANDVALUE<='999')
OR(VALUEISNULL))
修改域:
ALTERDOMAINname{
SETDEFAULT{literal|NULL|USER}
|DROPDEFAULT
|ADD[CONSTRAINT]CHECK(<dom_search_condition>)
|DROPCONSTRAINT|new_col_name
|TYPEdatatype};
如:
(1)alterDOMAINDAGETYPEINTEGER
(2)alterDOMAINDAGETYPEINTEGER
setDEFAULT40
addconstraintCHECK(valuebetween10and90)
(3)alterDOMAINDAGETYPEINTEGER
dropCONSTRAINT
(4)CREATEDOMAINprodtype
ASVARCHAR(12)
DEFAULT'software'NOTNULL
CHECK(VALUEIN('software','hardware','other','N/A'));
问题:不知道{USER}是什么意思,怎么用?
连接到数据:
CONNECT'filespec'[USER'username'][PASSWORD'password']
[CACHEint][ROLE'rolename']
如:
connectg:\firebird\test.fdbuser'sysdba'password'masterkey';//一定要加上‘;’以表示sql语句结束。
创建索引:
CREATE[UNIQUE][ASC[ENDING]|DESC[ENDING]]INDEXindex
ONtable(col[,col…]);
创建视图:
CREATEVIEWname[(view_col[,view_col…])]
AS<select>[WITHCHECKOPTION];
创建存储过程
CREATEPROCEDUREname
[(param<datatype>[,param<datatype>…])]
[RETURNS<datatype>[,param<datatype>…])]
AS<procedure_body>[terminator]
//////////////////////////////////////////////
<procedure_body>=
[<variable_declaration_list>]
<block>
////////////////////////////////////////////////
<variable_declaration_list>=
DECLAREVARIABLEvar<datatype>;
[DECLAREVARIABLEvar<datatype>;…]
///////////////////////////////////
<block>=
BEGIN
<compound_statement>
[<compound_statement>…]
END
查询select:
SELECT[TRANSACTIONtransaction]
[DISTINCT|ALL]
{*|<val>[,<val>…]}
[INTO:var[,:var…]]
FROM<tableref>[,<tableref>…]
[WHERE<search_condition>]
[GROUPBYcol[COLLATEcollation][,col[COLLATEcollation]…]
[HAVING<search_condition>]
[UNION<select_expr>[ALL]]
[PLAN<plan_expr>]
[ORDERBY<order_list>]
[FORUPDATE[OFcol[,col…]]];
注意:plan和for的用法。
查询数据的前10行:
selectFIRST10skip2*fromEMPLOYEE
查询数据的前10行,用关键字first:
CAST(<value>|NULLASdatatype)
FromdatatypeTodatatype
NUMERIC->CHARACTER,DATE
CHARACTER->NUMERIC,DATE
DATE->CHARACTER,NUMERIC
连接字符串:||
如:selectid,name||'ddd'
fromSTUDENT
////////////////////////////////////////////////////////////////////
注意:在InterBase存储过程和触发器语言代码中,除了上面提到的复合语句Begin、End之外,所有的语句必须以分号结束,这一点必须明确。
单独的sql语句后也不用加分号结束。
//////////////////////////////////////////
单行选择语句Select…Into:将选择的结果存储到Into之后的变量中,into子句必须放在整个选择语句的末尾。例如:SelectCount(*)fromEmployeeInto:varcount;
////////////////////////////////////////////////////////////////////
多行选择语句FORselect_statementDOcompound_statement:
对select_statement返回的每一条记录重复执行compounde_statement语句,实际是一个循环结构。其中:select_statement是必须带有into子句的选择语句,而且into子句必须放在选择语句的末尾,而且后面不能跟分号。使用该语句可以返回多个数据行。语法结构是:Forselect_statement
DoCompound_statement
/////////////////////////////////////////////////////////
IF(condition)THENcompound_statement[ELSEcompound_statement]:
/////////////////////////////////////////////////////////////
SUSPEND:暂时终止即挂起存储过程的执行,并将参数返回给客户端。这是存储过程专用的语句。
//////////////////////////////////////////////////////////////////
WHILEconditionDOcompound_statement:当condition条件为真时,重复执行compounde_statement语句,直到condition条件为假时退出。
///////////////////////////////////////////////////////////////////////
WHEN{error[,error…]|ANY}DOcompound_statement:
错误处理语句。当指定的错误之一出现时,执行compound_statement语句。如果使用了WHEN,那么必须将其放在整个存储过程或触发器的最后一个语句。error可以是异常、SQLCODE错误码、GDSCODE代码。ANY表示处理任何错误。
///////////////////////////////////////////////////
注意:在存储过程中,除了CreateProcedure,As,Begin…End语句之外,任何其他语句末尾都要添加分号结束。因此,如果你使用isql创建存储过程,你必须另外定义其它的符号来代表创建存储过程的结束,通常使用setterm语句完成。比如,在创建存储过程之前,使用setterm!!;把!!作为分号来表示存储过程创建的结束,在创建存储过程的语句之后,再用set
term;!!恢复分号的作用。如:
SetTerm##;CreateProcedureAdd_Emp_Proj(Emp_NoSmallint,Proj_IdChar(5))AsBegin
Begin
InsertIntoEmployee_Project(Emp_No,Proj_Id)Values(:Emp_No,:Proj_Id);
WhenSqlcode-530DoExceptionUnknown_Emp_Id;
EndReturn;
End##
SetTerm;##
特别注意:不论是输入参数、输出参数还是局部变量,如果在SQL语句中使用,前面必须加上冒号。如果不和SQL语句一起使用,则不要加冒号。
//////////////////////////////////
在存储过程中不要使用标准的select语句返回多行数据,而是要使用FOR…SELECT…INTO循环和SUSPEND语句通过输出参数来完成。
///////////////////////
删除存储过程
要删除一个存储过程,可以使用DropProcedure语句。不过你要注意如下的一些限制:
·不能删除一个被其它存储过程、触发器、视图引用的存储过程,必须先将这种引用关系解除,然后才能删除存储过程。
·不能删除一个递归或者与其它存储过程形成循环依赖关系的存储过程,必须先解除这种递归或者循环依赖关系才能删除存储过程。
·如果存储过程正被活动事务使用,则必须等事务结束后才能删除。
·只有超级用户和存储过程的创建者才能删除存储过程。
//////////////////////
Firebird常用SQL
一、分页写法小例:
1 | select first 10 templateid,code, name from template ; |
2 | select first 10 skip10templateid,code, name from template ; |
3 | select * from shop rows 1 to 10; --firebird2.0支持这种写法 |
1 | show tables; |
2 | show table tablename; |
D:\firebird2\bin>isql-usysdba-pmasterkey
connect"E:\company\xmwsoft\newxmwsoft\c2\db\cts2.fdb";
四、--更新字段注释
1 | update RDB$RELATION_FIELDS |
2 | set RDB$DESCRIPTION '描述信息' |
3 | where (RDB$RELATION_NAME 'SHOP' ) and |
4 | (RDB$FIELD_NAME 'CREDIT_BUY' ) |
1 | select RDB$FIELD_NAME,RDB$DESCRIPTION from RDB$RELATION_FIELDS |
2 | where (RDB$RELATION_NAME 'SHOP' ) |
3 | and |
4 | (RDB$FIELD_NAME 'CREDIT_BUY' ) |
1 | update RDB$RELATIONS set RDB$DESCRIPTION '描述信息' where RDB$RELATION_NAME= 'TABLE_NAME' |
1 | SELECT RDB$RELATION_NAME FROM RDB$RELATIONS; |
1 | SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG |
1 | SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG AND RDB$VIEW_BLR IS NULL |
01 | SELECT a.RDB$RELATION_NAME, |
02 | c.RDB$FIELD_LENGTH, c.RDB$FIELD_SCALE |
03 | FROM RDB$RELATIONS a |
04 | INNER JOIN RDB$RELATION_FIELDS b |
05 | ON a.RDB$RELATION_NAME |
06 | INNER JOIN RDB$FIELDS c |
07 | ON b.RDB$FIELD_SOURCE |
08 | INNER JOIN RDB$TYPES d |
09 | ON c.RDB$FIELD_TYPE |
10 | WHERE a.RDB$SYSTEM_FLAG |
11 | AND d.RDB$FIELD_NAME 'RDB$FIELD_TYPE' |
12 | ORDER BY a.RDB$RELATION_NAME, b.RDB$FIELD_ID |
1 | SELECT A.RDB$FIELD_NAME, |
2 | FROM RDB$RELATION_FIELDS |
3 | WHERE A.RDB$RELATION_NAME 'tablename' |
4 | AND A.RDB$FIELD_SOURCE |
5 | ORDER BY A.RDB$FIELD_POSITION |
1 | select A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS |
2 | WHERE B.RDB$CONSTRAINT_TYPE 'PRIMARY KEY' |
3 | AND B.RDB$RELATION_NAME 'tablename' |
4 | AND A.RDB$INDEX_NAME |
5 | ORDER BY A.RDB$FIELD_POSITION |
1 | select r1.RDB$CONSTRAINT_NAME, |
2 | FROM RDB$RELATION_CONSTRAINTS |
3 | where r1.RDB$RELATION_NAME 'tablename' |
4 | and r1.RDB$CONSTRAINT_TYPE 'FOREIGN KEY' |
5 | and r1.RDB$CONSTRAINT_NAME |
6 | and ref.RDB$CONST_NAME_UQ |
7 | and r1.RDB$INDEX_NAME |
开源的Firebird的可视化管理工具Marathon
flameRobin也量个开源的可视化管理工具
1、创建表
01 | CREATE TABLE table_name |
02 | ( |
03 | column_name BY (< |
04 | [ DEFAULT { NULL | USER }] [ NOT NULL ] |
05 | ... |
06 | CONSTRAINT constraint_name |
07 | PRIMARY KEY (column_list), |
08 | UNIQUE (column_list), |
09 | FOREIGN KEY (column_list) REFERENCES other_table (column_list), |
10 | CHECK (condition), |
11 | ... |
12 | ); |
(
sno1char(9)primarykey,
sno2char(9)referencesstudent(sno)
)
2、修改表
(1)增加字段
altertabletable_nameaddfieldnamedatetype[notnull,primarykey]
如:altertablestudentaddsexchar(2)notnull
primarykey
default'm'
CHECK(sex1='f'orsex1='m')
ALTERTABLESTUDENT
ADDAGEINTEGER[1:100]
DEFAULT56
CHECK(agebetween20and35)
ALTERTABLESTUDENT
ADDAGEINTEGER[1:100]
DEFAULT56
CHECK(age>=20andage<=35)
(2)删除字段
altertabletable_namedropfieldname
ALTERTABLESTUDENTDROPAA
(3)增加主键
altertableSCORE
addconstraintPK_SCORE_1
primarykey(ID,CORUSENAME)
////////////////////////////////////////////////////////////////////////////
查询:
SELECT[TRANSACTIONtransaction]
[DISTINCT|ALL]
{*|<val>[,<val>…]}
[INTO:var[,:var…]]
FROM<tableref>[,<tableref>…]
[WHERE<search_condition>]
[GROUPBYcol[COLLATEcollation][,col[COLLATEcollation]…]
[HAVING<search_condition>]
[UNION<select_expr>[ALL]]
[PLAN<plan_expr>]
[ORDERBY<order_list>]
[FORUPDATE[OFcol[,col…]]];
在表上增加外键
altertableSTUDENT
addconstraintFK_STUDENT_1
foreignkey(ID)
referencesSCORE(ID)
///////////////////////////////////////////////////////////////////////
创建域:
CREATEDOMAINdomain[AS]<datatype>
[DEFAULT{literal|NULL|USER}]
[NOTNULL][CHECK(<dom_search_condition>)]
[COLLATEcollation];
如:
(1)createdomainMyScoreasSMALLINT
default0
check(valuebetween0and100)
(2)CREATEDOMAINDEPTNOASCHAR(3)
CHECK((VALUE='000')OR
(VALUE>'0'ANDVALUE<='999')
OR(VALUEISNULL))
修改域:
ALTERDOMAINname{
SETDEFAULT{literal|NULL|USER}
|DROPDEFAULT
|ADD[CONSTRAINT]CHECK(<dom_search_condition>)
|DROPCONSTRAINT|new_col_name
|TYPEdatatype};
如:
(1)alterDOMAINDAGETYPEINTEGER
(2)alterDOMAINDAGETYPEINTEGER
setDEFAULT40
addconstraintCHECK(valuebetween10and90)
(3)alterDOMAINDAGETYPEINTEGER
dropCONSTRAINT
(4)CREATEDOMAINprodtype
ASVARCHAR(12)
DEFAULT'software'NOTNULL
CHECK(VALUEIN('software','hardware','other','N/A'));
问题:不知道{USER}是什么意思,怎么用?
连接到数据:
CONNECT'filespec'[USER'username'][PASSWORD'password']
[CACHEint][ROLE'rolename']
如:
connectg:\firebird\test.fdbuser'sysdba'password'masterkey';//一定要加上‘;’以表示sql语句结束。
创建索引:
CREATE[UNIQUE][ASC[ENDING]|DESC[ENDING]]INDEXindex
ONtable(col[,col…]);
创建视图:
CREATEVIEWname[(view_col[,view_col…])]
AS<select>[WITHCHECKOPTION];
创建存储过程
CREATEPROCEDUREname
[(param<datatype>[,param<datatype>…])]
[RETURNS<datatype>[,param<datatype>…])]
AS<procedure_body>[terminator]
//////////////////////////////////////////////
<procedure_body>=
[<variable_declaration_list>]
<block>
////////////////////////////////////////////////
<variable_declaration_list>=
DECLAREVARIABLEvar<datatype>;
[DECLAREVARIABLEvar<datatype>;…]
///////////////////////////////////
<block>=
BEGIN
<compound_statement>
[<compound_statement>…]
END
查询select:
SELECT[TRANSACTIONtransaction]
[DISTINCT|ALL]
{*|<val>[,<val>…]}
[INTO:var[,:var…]]
FROM<tableref>[,<tableref>…]
[WHERE<search_condition>]
[GROUPBYcol[COLLATEcollation][,col[COLLATEcollation]…]
[HAVING<search_condition>]
[UNION<select_expr>[ALL]]
[PLAN<plan_expr>]
[ORDERBY<order_list>]
[FORUPDATE[OFcol[,col…]]];
注意:plan和for的用法。
查询数据的前10行:
selectFIRST10skip2*fromEMPLOYEE
查询数据的前10行,用关键字first:
CAST(<value>|NULLASdatatype)
FromdatatypeTodatatype
NUMERIC->CHARACTER,DATE
CHARACTER->NUMERIC,DATE
DATE->CHARACTER,NUMERIC
连接字符串:||
如:selectid,name||'ddd'
fromSTUDENT
////////////////////////////////////////////////////////////////////
注意:在InterBase存储过程和触发器语言代码中,除了上面提到的复合语句Begin、End之外,所有的语句必须以分号结束,这一点必须明确。
单独的sql语句后也不用加分号结束。
//////////////////////////////////////////
单行选择语句Select…Into:将选择的结果存储到Into之后的变量中,into子句必须放在整个选择语句的末尾。例如:SelectCount(*)fromEmployeeInto:varcount;
////////////////////////////////////////////////////////////////////
多行选择语句FORselect_statementDOcompound_statement:
对select_statement返回的每一条记录重复执行compounde_statement语句,实际是一个循环结构。其中:select_statement是必须带有into子句的选择语句,而且into子句必须放在选择语句的末尾,而且后面不能跟分号。使用该语句可以返回多个数据行。语法结构是:Forselect_statement
DoCompound_statement
/////////////////////////////////////////////////////////
IF(condition)THENcompound_statement[ELSEcompound_statement]:
/////////////////////////////////////////////////////////////
SUSPEND:暂时终止即挂起存储过程的执行,并将参数返回给客户端。这是存储过程专用的语句。
//////////////////////////////////////////////////////////////////
WHILEconditionDOcompound_statement:当condition条件为真时,重复执行compounde_statement语句,直到condition条件为假时退出。
///////////////////////////////////////////////////////////////////////
WHEN{error[,error…]|ANY}DOcompound_statement:
错误处理语句。当指定的错误之一出现时,执行compound_statement语句。如果使用了WHEN,那么必须将其放在整个存储过程或触发器的最后一个语句。error可以是异常、SQLCODE错误码、GDSCODE代码。ANY表示处理任何错误。
///////////////////////////////////////////////////
注意:在存储过程中,除了CreateProcedure,As,Begin…End语句之外,任何其他语句末尾都要添加分号结束。因此,如果你使用isql创建存储过程,你必须另外定义其它的符号来代表创建存储过程的结束,通常使用setterm语句完成。比如,在创建存储过程之前,使用setterm!!;把!!作为分号来表示存储过程创建的结束,在创建存储过程的语句之后,再用set
term;!!恢复分号的作用。如:
SetTerm##;CreateProcedureAdd_Emp_Proj(Emp_NoSmallint,Proj_IdChar(5))AsBegin
Begin
InsertIntoEmployee_Project(Emp_No,Proj_Id)Values(:Emp_No,:Proj_Id);
WhenSqlcode-530DoExceptionUnknown_Emp_Id;
EndReturn;
End##
SetTerm;##
特别注意:不论是输入参数、输出参数还是局部变量,如果在SQL语句中使用,前面必须加上冒号。如果不和SQL语句一起使用,则不要加冒号。
//////////////////////////////////
在存储过程中不要使用标准的select语句返回多行数据,而是要使用FOR…SELECT…INTO循环和SUSPEND语句通过输出参数来完成。
///////////////////////
删除存储过程
要删除一个存储过程,可以使用DropProcedure语句。不过你要注意如下的一些限制:
·不能删除一个被其它存储过程、触发器、视图引用的存储过程,必须先将这种引用关系解除,然后才能删除存储过程。
·不能删除一个递归或者与其它存储过程形成循环依赖关系的存储过程,必须先解除这种递归或者循环依赖关系才能删除存储过程。
·如果存储过程正被活动事务使用,则必须等事务结束后才能删除。
·只有超级用户和存储过程的创建者才能删除存储过程。
//////////////////////
相关文章推荐
- firebird sql 常用语句
- FIREBIRD常用SQL语句
- Firebird常用系统表Sql语句
- Firebird常用系统表Sql语句
- Firebird常用系统表Sql语句
- Firebird常用系统表Sql语句
- Firebird常用系统表Sql语句
- 柳永法常用SQL语句备忘
- SQL Server 创建表 添加主键 添加列常用SQL语句
- 管理常用SQL语句
- sql server 数据类型及常用表处理sql语句总结
- 常用SQL语句(SELECT篇)
- 常用SQL语句汇总——基础
- 常用SQL语句(不断更新)
- mysql-sql常用sql语句整理
- 50条常用SQL语句
- 常用SQL语句总结(1)
- Oracle 常用性能监控SQL语句
- 常用的sql语句
- 常用的SQL语句两个