T-SFQL 0.1
Copy right
Hubble.net
概述
T-SFQL (Transact-Structured Full-text Query Language) 是在T-SQL 标准基础上衍生出来的结构化全文查询语言。2009年由Hubble.net 提出,语言全文数据库的查询和管理。
T-SFQL 0.1 版本为T-SFQL 语言推出的第一个版本。该版本只提供基本的“增删改查”功能。其他功能将逐渐在后续版本中提供。
保留关键字
从T-SQL继承的关键字
ADD EXIT PRIMARY
ALL FETCH PRINT
ALTER FILE PRIVILEGES
AND FILLFACTOR PROC
ANY FLOPPY PROCEDURE
AS FOR PROCESSEXIT
ASC FOREIGN PUBLIC
AUTHORIZATION FREETEXT RAISERROR
AVG FREETEXTTABLE READ
BACKUP FROM READTEXT
BEGIN FULL RECONFIGURE
BETWEEN GOTO REFERENCES
BREAK GRANT REPEATABLE
BROWSE GROUP REPLICATION
BULK HAVING RESTORE
BY HOLDLOCK RESTRICT
CASCADE IDENTITY RETURN
CASE IDENTITY_INSERT REVOKE
CHECK IDENTITYCOL RIGHT
CHECKPOINT IF ROLLBACK
CLOSE IN ROWCOUNT
CLUSTERED INDEX ROWGUIDCOL
COALESCE INNER RULE
COLUMN INSERT SAVE
COMMIT INTERSECT SCHEMA
COMMITTED INTO SELECT
COMPUTE IS SERIALIZABLE
CONFIRM ISOLATION SESSION_USER
CONSTRAINT JOIN SET
CONTAINS KEY SETUSER
CONTAINSTABLE KILL SHUTDOWN
CONTINUE LEFT SOME
CONTROLROW LEVEL STATISTICS
CONVERT LIKE SUM
COUNT LINENO SYSTEM_USER
CREATE LOAD TABLE
CROSS MAX TAPE
CURRENT MIN TEMP
CURRENT_DATE MIRROREXIT TEMPORARY
CURRENT_TIME NATIONAL TEXTSIZE
CURRENT_TIMESTAMP NOCHECK THEN
CURRENT_USER NONCLUSTERED TO
CURSOR NOT TOP
DATABASE NULL TRAN
DBCC NULLIF TRANSACTION
DEALLOCATE OF TRIGGER
DECLARE OFF TRUNCATE
DEFAULT OFFSETS TSEQUAL
DELETE ON UNCOMMITTED
DENY ONCE UNION
DESC ONLY UNIQUE
DISK OPEN UPDATE
DISTINCT OPENDATASOURCE UPDATETEXT
DISTRIBUTED OPENQUERY USE
DOUBLE OPENROWSET USER
DROP OPTION VALUES
DUMMY OR VARYING
DUMP ORDER VIEW
ELSE OUTER WAITFOR
END OVER WHEN
ERRLVL PERCENT WHERE
ERROREXIT PERM WHILE
ESCAPE PERMANENT WITH
EXCEPT PIPE WORK
EXEC PLAN WRITETEXT
EXECUTE PRECISION
EXISTS PREPARE
新增关键字
DOCID: 该关键字用于表示文档ID。
SCORE:该关键字用于表示查询结果的得分。
MATCH:该关键字类似LIKE 用于全文的模糊匹配。
基本T-SFQL 语句
Insert 语句
T-SFQL 的Insert 语句的语法和T-SQL 基本一致,0.1 版本省略了table hint limited 部分。
Syntax
INSERT [INTO]
{
table_name)
}
{ [(column_list)]
{ VALUES
( { DEFAULT
| NULL
| expression
}[,...n]
)
}
}
| DEFAULT VALUES
Arguments
[INTO]
Is an optional keyword that can be used between INSERT and the target table.
table_name
Is the name of a table that is to receive the data.
(column_list)
Is a list of one or more columns in which to insert data. column_list must be enclosed in parentheses and delimited by commas.
If a column is not in column_list, Microsoft® SQL Server™ must be able to provide a value based on the definition of the column; otherwise, the row cannot be loaded. SQL Server automatically provides a value for the column if the column:
· Has an IDENTITY property. The next incremental identity value is used.
· Has a default. The default value for the column is used.
· Has a timestamp data type. The current timestamp value is used.
· Is nullable. A null value is used.
column_list and VALUES list must be used when inserting explicit values into an identity column, and the SET IDENTITY_INSERT option must be ON for the table.
VALUES
Introduces the list of data values to be inserted. There must be one data value for each column in column_list (if specified) or in the table. The values list must be enclosed in parentheses.
If the values in the VALUES list are not in the same order as the columns in the table or do not have a value for each column in the table, column_list must be used to explicitly specify the column that stores each incoming value.
DEFAULT
Forces SQL Server to load the default value defined for a column. If a default does not exist for the column and the column allows NULLs, NULL is inserted. For a column defined with the timestamp data type, the next timestamp value is inserted. DEFAULT is not valid for an identity column.
expression
Is a constant, a variable, or an expression. The expression cannot contain a SELECT or EXECUTE statement.
DEFAULT VALUES
Forces the new row to contain the default values defined for each column.
Examples
INSERT T1 VALUES (1, 'Row #1')
INSERT
INTO T1 (column_1,column_2) VALUES (-99,'Explicit identity value')
Select 语句
T-SFQL 0.1 版本的Select语句是 T-SQL的Select语句的子集,只提供单表的查询功能。不提供 Group by , Having 语句,不提供 Sum,Avg 等统计函数,不提供Distinct, Union等语法。Where 子句中增加了全文搜索的语法元素。分页的查询功能在Hubble.net 库中提供,不在SQL中提供,因此取消Top功能。Order by 语句只限定为单字段排序。
Syntax
SELECT [ ALL]
<select_list>
[ FROM {<table_source>} [,...n] ] n =1
[ WHERE <search_condition> ]
[ ORDER
BY { order_by_expression | column_position
[ ASC | DESC ] }
[,...n] ]
n=1
Arguments
ALL
列出被查询表中所有的列,通常用 * 表示 ALL
select_list
列出指定的列
FROM
指定查询的源。
table_source
表名,0.1 版本只提供单表查询,这里只能写一个表名。
WHERE
Where 子句和T-SQL的查询字句一致,0.1 版本不提供Where子句中使用函数等内容,只提供最简化的布尔表达式。为适应全文搜索的需要, T-SFQL 语句在T-SQL标准基础上做了增加,下面重点描述增加的部分:
- 指定字段权重
T-SFQL 语句只允许对全文索引字段指定权重,对其它字段指定权值无效。
语法:
FieldName^Boost
^ 为分隔符,表示设置权重开始
Boost为权重,无符号整型,范围为 0-65535
例:
Select * from T where c1^5 match ‘
- 位置无关模糊匹配
位置无关模糊匹配指被匹配的关键字无论其位置关系如何,得到的记录得分都相同。
比如 匹配 China BeiJing 和 BeiJing China 得到的结果是相同的。
语法:
FieldName Match ‘Query words[^Boost]’
Query words:要查询的单词,可以为多个单词,单词之间以空格分隔。
^: 分隔符,表示设置权重开始。
Boost:权重,无符号整型,范围为 0-65535。可选项,不指定权重则默认权重为1。
例:
Select * from T where
C2 Match ‘
- 位置相关模糊匹配
位置无关模糊匹配指被匹配的关键字随其位置关系不同会得到不同的记录得分。
比如 匹配 China BeiJing 和 BeiJing China 得到的结果是不同。前者会将全文中存在China BeiJing 这个顺序的文章得分提高,而将BeiJing China 这个顺序的文章得分降低。
T-SFQL 借用了SQL 中的Like 关键字来表示位置相关的模糊匹配。
语法:
FieldName Like ‘Query words[^Boost][^Position]’
Query words:要查询的单词,可以为多个单词,单词之间以空格分隔。
^: 分隔符,表示设置权重或者位置开始。
Boost:权重,无符号整型,范围为 0-65535。可选项,不指定权重则默认权重为1。
Position: 单词的起始位置,无符号整型,可选项,必须在权重之后出现。如果不指定,则默认为单词出现在查询字符串中的位置。
例:
Select * from T where C2 Like ‘
Select * from T where C2 Like ‘中国^256^0 中国人^100^
Select * from T where C2 Like ‘
Examples
Select * from T where c1 > 100
and c1 < 200 and c2 match ‘
查找 表T 中 C1 大于100 且小于 200 并且 C2 匹配 China ,BeiJing 和 ShangHai 三个单词的记录。
Update 语句
Update 语句的语法和SQL的Update完全相同。Where 子句参加Select 语句。
Syntax
UPDATE
{
table_name WITH (
<table_hint_limited> [...n])
| view_name
| rowset_function_limited
}
SET
{column_name = {expression
| DEFAULT | NULL}
| @variable =
expression
| @variable = column
= expression } [,...n]
{{[FROM {<table_source>} [,...n] ]
n=1
[WHERE
<search_condition>]
}
}
Examples
Update T Set c1 = 12 where c1 >
100 and c1 < 200 and c2 match ‘
查找 表T 中 C1 大于100 且小于 200 并且 C2 匹配 China ,BeiJing 和 ShangHai 三个单词的记录。并将这些记录中c1 字段的值更改为 12。
Delete 语句
Delete 语句的语法和SQL的Delete完全相同。Where 子句参加Select 语句。
Syntax
DELETE
[FROM ]
{
table_name
WITH ( <table_hint_limited> [...n])
| view_name
| rowset_function_limited
}
[ FROM {<table_source>}
[,...n] ] n=1
[WHERE
{ <search_condition>
]
}
]
Examples
Delete T where c1 > 100 and c1
< 200 and c2 match ‘
查找 表T 中 C1 大于100 且小于 200 并且 C2 匹配 China ,BeiJing 和 ShangHai 三个单词的记录。并将这些记录删除。