Structured Query Language —— “结构化查询语言简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。”
SQL虽然其是主要针对关系型数据库的查询语言,也可以通过“CREATE FUNCTION”自定义函数逻辑,在文本分析的领域发挥作用,如下是对于文字相似度的自定义函数:
- CREATE FUNCTION DBO.FN_Resemble
- (@Cloumna NVARCHAR(MAX),
- @Cloumnb NVARCHAR(MAX)
- )
- RETURNS FLOAT
- AS
- BEGIN
- DECLARE @num FLOAT,@len int
- SET @Cloumna=ISNULL(@Cloumna,0)
- SET @Cloumnb=ISNULL(@Cloumnb,0)
- SET @len=1
- SET @num=0
- WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
- BEGIN
- WHILE(@len<=LEN(@Cloumna))
- BEGIN
- DECLARE @a NVARCHAR(4)
- SET @a=''
- SET @a=SUBSTRING(@Cloumna,@len,1)
- IF(CHARINDEX(@a,@CloumnB)>0)
- BEGIN
- SET @num=@num+1
- END
- SET @len=@len+1
- END
- SET @num=@num*1.0/LEN(@Cloumna)
- BREAK
- END
- RETURN @num
- END
- go
- CREATE FUNCTION DBO.FN_Resemble_order
- (@Cloumna NVARCHAR(MAX),
- @Cloumnb NVARCHAR(MAX)
- )
- RETURNS FLOAT
- AS
- BEGIN
- DECLARE @num FLOAT,@len int
- SET @Cloumna=ISNULL(@Cloumna,0)
- SET @Cloumnb=ISNULL(@Cloumnb,0)
- SET @len=1
- SET @num=0
- WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
- BEGIN
- DECLARE @a NVARCHAR(4)
- DECLARE @b NVARCHAR(4)
- IF(LEN(@Cloumna)>=LEN(@CloumnB))
- BEGIN
- WHILE(@len<=LEN(@CloumnB))
- BEGIN
- SET @a=''
- SET @a=SUBSTRING(@Cloumna,@len,1)
- SET @b=''
- SET @b=SUBSTRING(@CloumnB,@len,1)
- IF(@a=@b)
- BEGIN
- SET @num=@num+1
- END
- ELSE
- BEGIN
- break
- END
- SET @len=@len+1
- END
- END
- ELSE IF (LEN(@Cloumna)<LEN(@CloumnB))
- BEGIN
- WHILE(@len<=LEN(@Cloumna))
- BEGIN
- SET @a=''
- SET @a=SUBSTRING(@Cloumna,@len,1)
- SET @b=''
- SET @b=SUBSTRING(@CloumnB,@len,1)
- IF(@a=@b)
- BEGIN
- SET @num=@num+1
- END
- ELSE
- BEGIN
- break
- END
- SET @len=@len+1
- END
- END
- SET @num=@num*1.0/LEN(@Cloumna)
- BREAK
- END
- RETURN @num
- END
- go
- CREATE FUNCTION DBO.FN_Resemble_onebyone
- (@Cloumna NVARCHAR(MAX),
- @Cloumnb NVARCHAR(MAX)
- )
- RETURNS FLOAT
- AS
- BEGIN
- DECLARE @num FLOAT,@len int
- SET @Cloumna=ISNULL(@Cloumna,0)
- SET @Cloumnb=ISNULL(@Cloumnb,0)
- SET @len=1
- SET @num=0
- WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0)
- BEGIN
- DECLARE @a NVARCHAR(4)
- DECLARE @b NVARCHAR(4)
- IF(LEN(@Cloumna)>=LEN(@CloumnB))
- BEGIN
- WHILE(@len<=LEN(@CloumnB))
- BEGIN
- SET @a=''
- SET @a=SUBSTRING(@Cloumna,@len,1)
- SET @b=''
- SET @b=SUBSTRING(@CloumnB,@len,1)
- IF(@a=@b)
- BEGIN
- SET @num=@num+1
- END
- SET @len=@len+1
- END
- END
- ELSE IF (LEN(@Cloumna)<LEN(@CloumnB))
- BEGIN
- WHILE(@len<=LEN(@Cloumna))
- BEGIN
- SET @a=''
- SET @a=SUBSTRING(@Cloumna,@len,1)
- SET @b=''
- SET @b=SUBSTRING(@CloumnB,@len,1)
- IF(@a=@b)
- BEGIN
- SET @num=@num+1
- END
- SET @len=@len+1
- END
- END
- SET @num=@num*1.0/LEN(@Cloumna)
- BREAK
- END
- RETURN @num
- END
- go
特别地,在关系型数据库中,运用SQL 自定义函数达到数据处理(数据治理)的目的是ETL的基本功能之一;也可以为数据分析的查询取数或者关键指标的换算打基础。
同时,在数据科学领域,数据分析大多数情况,R语言或者Python会主要来承担此类任务,在特殊情况下,这些语言也有包含有相应的函数以帮助分析师做前期的数据清理(类似于SQL的自定义功能)。
相比封装的函数,SQL的这种功能会相对灵活些,更能够根据具体的业务逻辑编写。