TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 SQL Server 的语法:SELECT TOP number|percent column_name(s) FROM table_name MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的MySQL 语法SELECT column_name(s) FROM table_name LIMIT number例子SELECT * FROM Persons LIMIT 5Oracle 语法SELECT column_name(s) FROM table_name WHERE ROWNUM = number例子SELECT * FROM Persons WHERE ROWNUM = 5 原始的表 (用在例子中的): Persons 表: Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing 4 Obama Barack Pennsylvania Avenue Washington SQL TOP 实例 现在,我们希望从上面的 Persons 表中选取头两条记录。 我们可以使用下面的 SELECT 语句: SELECT TOP 2 * FROM Persons结果: Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York SQL TOP PERCENT 实例 现在,我们希望从上面的 Persons 表中选取 50% 的记录。 我们可以使用下面的 SELECT 语句: SELECT TOP 50 PERCENT * FROM Persons 结果: Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York
DELETE 语句 DELETE 语句用于删除表中的行。 语法DELETE FROM 表名称 WHERE 列名称 = 值 Person: LastName FirstName Address City Gates Bill Xuanwumen 10 Beijing Wilson Fred Zhongshan 23 Nanjing 删除某行 Fred Wilson 会被删除: DELETE FROM Person WHERE LastName = 'Wilson' 结果: LastName FirstName Address City Gates Bill Xuanwumen 10 Beijing 删除所有行 可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的: DELETE FROM table_name 或者: DELETE * FROM table_name
ORDER BY 语句用于对结果集进行排序。 ORDER BY 语句 ORDER BY 语句用于根据指定的列对结果集进行排序,默认升序 如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。 原始的表 (用在例子中的): Orders 表: Company OrderNumber IBM 3532 W3School 2356 Apple 4698 W3School 6953 实例 1 以字母顺序显示公司名称: SELECT Company, OrderNumber FROM Orders ORDER BY Company结果: Company OrderNumber Apple 4698 IBM 3532 W3School 6953 W3School 2356 实例 2 以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber): SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber 结果: Company OrderNumber Apple 4698 IBM 3532 W3School 2356 W3School 6953 实例 3 以逆字母顺序显示公司名称: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC结果: Company OrderNumber W3School 6953 W3School 2356 IBM 3532 Apple 4698 实例 4 以逆字母顺序显示公司名称,并以数字顺序显示顺序号: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC结果: Company OrderNumber W3School 2356 W3School 6953 IBM 3532 Apple 4698 注意: 在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。 AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。AND:同时符合 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。 OR:符合其中一项即可 原始的表 : LastName FirstName Address City Adams John Oxford Street London Bush George Fifth Avenue New York Carter Thomas Changan Street Beijing Carter William Xuanwumen 10 Beijing AND 运算符实例 使用 AND 来显示所有姓为 Carter 并且名为 Thomas 的人: SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'结果: LastName FirstName Address City Carter Thomas Changan Street Beijing OR 运算符实例 使用 OR 来显示所有姓为 Carter 或者名为 Thomas 的人: SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'结果: LastName FirstName Address City Carter Thomas Changan Street Beijing Carter William Xuanwumen 10 Beijing 结合 AND 和 OR 运算符 我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式): SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')AND LastName='Carter' 结果: LastName FirstName Address City Carter Thomas Changan Street Beijing Carter William Xuanwumen 10 Beijing
WHERE 子句用于规定选择的标准。 WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。 语法SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的运算符可在 WHERE 子句中使用: 操作符 描述 = 等于 或 != 不等于 大于 小于 = 大于等于 = 小于等于 BETWEEN 在某个范围内 LIKE 搜索某种模式 使用 WHERE 子句 如果只希望选取居住在城市 Beijing 中的人,我们需要向 SELECT 语句添加 WHERE 子句: SELECT * FROM Persons WHERE City='Beijing'Persons 表 LastName FirstName Address City Year Adams John Oxford Street London 1970 Bush George Fifth Avenue New York 1975 Carter Thomas Changan Street Beijing 1980 Gates Bill Xuanwumen 10 Beijing 1985 结果: LastName FirstName Address City Year Carter Thomas Changan Street Beijing 1980 Gates Bill Xuanwumen 10 Beijing 1985 引号的使用 请注意,SQL 使用单引号来环绕 文本值 。如果是 数值 ,请不要使用引号。 文本值:这是正确的: SELECT * FROM Persons WHERE FirstName='Bush' 这是错误的: SELECT * FROM Persons WHERE FirstName=Bush数值:这是正确的: SELECT * FROM Persons WHERE Year1965 这是错误的: SELECT * FROM Persons WHERE Year'1965'
在天文学家们最初热火朝天地处理SDSS数据的时候,我并没有勇气把大量精力投入到这项事业中。不过我确实曾经尝试过使用SQL去搜索一些SDSS数据, 不过没有坚持下来,原来做的一些事也早就忘记了。最近又需要搜索一下SDSS数据,没办法,只能再次进行尝试并作一些记录。 目前SDSS网站(中国镜像为 http://sdss.lamost.org/skyserver/en/ ) 默认搜索的数据库是BESTDR9,当然,可以指定SQL搜索其他的数据库。BESTDR9数据库含有大量的表格,一些包含测光观测的源(例如 PhotoObj),一些包含光谱观测的源(例如SpecObj),或者观测条件(Field)或者观测天区的几何位形(TileBoundary)。 除了表格,还有一些经过一些处理(分类)的子表(Views),比如星系子表之类。此外,还有一些相应的函数、子程序等,可以查看 http://skyserver.sdss3.org/dr9/en/help/browser/browser.asp 最简单的SQL脚本应包括三个关键词 SELECT 后面写要获得值的变量名称 FROM 后面写要搜索的表的名称 WHERE 对数据的要求 原 则上WHERE也可以不用,但是那样通常会得到无比庞大的数据输出而无法处理。SELECT后面跟的变量名如果太长,可以用AS指定一个别名。WHERE 指定的条件里可以用逻辑运算关键词AND、OR和NOT进行逻辑运算,也可以用比较算符给出限定。此外还可以进行数学运算。注意,数学运算不仅可以在WHERE后进行,在SELECT后面也可以进行,这个性质很方便,比如可以直接得到星等差(颜色)如下(p.u-p.g AS u_g) SELECT TOP 10 p.u,p.g,p.r,p.i,p.z,p.u-p.g AS u_g FROM PhotoObj AS p WHERE p.u BETWEEN 0 AND 19.6 AND p.g BETWEEN 0 AND 20 如果要将多个表格中的列合并,就需要使用JOIN命令。比如上面的例子中FROM一句可以改为 FROM PhotoObj AS p JOIN SpecObj AS s ON s.bestobjid = p.objid 这样可以取出PhotoObj和SpecObj两个表中的列了。 但是使用SQL进行搜索的时候,应该尽量提高效率,要不然有可能很长时间都无法完成搜索。一个要点就是使用尽量小的表,因为大表中有很多列通常都是不会用到的,每次搜索都搜一遍大表没有必要,对于通常的搜索,在大表的子集(含有同样多的行,列数少得多,但通常会用到的量都有)中进行搜索就行了。比如 PhotoTag就是PhotoObjAll的子集。 此外,SDSS网站还提供了交叉比对的功能,详见 http://skyserver.sdss3.org/dr9/en/tools/crossid/crossid.asp 。更多SQL搜索的例子可以参见 http://sdss.lamost.org/skyserver/en/help/docs/realquery.asp 。
1、表准备 存储所有网页的基本信息 CREATE TABLE ( IDENTITY (1, 1) NOT NULL , (900) COLLATE Chinese_PRC_CI_AS NULL , COLLATE Chinese_PRC_CI_AS NULL , NULL , NULL , CONSTRAINT PRIMARY KEY CLUSTERED ( ) ON ) ON TEXTIMAGE_ON GO 存储网页链接关系 CREATE TABLE ( NULL , (900) COLLATE Chinese_PRC_CI_AS NULL , NULL , (900) COLLATE Chinese_PRC_CI_AS NULL ) ON GO 2、执行脚本,填充WebPages中的REFCOUNT,使之成为链出网页的数量 declare cur_webpages cursor for select docid from webpages declare @docid int open cur_webpages fetch next from cur_webpages into @docid while (@@fetch_status=0) begin declare @rcount int select @rcount=count(*) from pagelinks where docid=@docid update webpages set refcount=@rcount WHERE CURRENT OF cur_webpages fetch next from cur_webpages into @docid end close cur_webpages deallocate cur_webpages 3、填充初始值 update webpages set weight=1.0/(select count(*) from webpages) update webpages set REVWEIGHT=0 4、计算PageRank的SQL脚本 declare @count int set @count=0 while(@count=7) begin declare cur_webpages cursor for select docid,refcount,weight,revweight from webpages declare @docid int declare @refcount int declare @weight float declare @revweight float if(@count%2=0) select docid,weight into pagebak from webpages else select docid,revweight as weight into pagebak from webpages CREATE INDEX ON . ( ) open cur_webpages fetch next from cur_webpages into @docid,@refcount,@weight,@revweight while (@@fetch_status=0) begin if @refcount0 begin if(@count%2=0) update pagebak set weight=weight+(@weight/@refcount) where docid in (select anchordocid from pagelinks where docid=@docid ) else update pagebak set weight=weight+(@revweight/@refcount) where docid in (select anchordocid from pagelinks where docid=@docid ) end fetch next from cur_webpages into @docid,@refcount,@weight,@revweight end close cur_webpages deallocate cur_webpages if(@count%2=0) begin update webpages set revweight=0.2+(select weight from pagebak where pagebak.docid=webpages.docid) update webpages set revweight=revweight/(select sum(revweight) from webpages) end else begin update webpages set weight=0.2+(select weight from pagebak where pagebak.docid=webpages.docid) update webpages set weight=weight/(select sum(weight) from webpages) end drop table pagebak select * from webpages set @count=@count+1 end
知道CiteSpace有这一功能的人大概不多,知道如何使用的大概更少。一是一直没有时间介绍,二来各类论文中也没有机会描述这些功能。 要求:会使用基本的SQL语句(CiteSpace本身带有一些简要的语法提示,可供初学者练习)。 用CiteSpace整理Web of Science格式数据的过程如下: 1。将数据读入CiteSpace自带的数据库 2。检查,更改数据 3。输出整理后的数据 具体步骤如下: 1。将数据读入CiteSpace自带的数据库 a)CiteSpace:Data:Import/Export; b) 打开数据库:Database:Open (下方窗口会显示现有project名称) c) 读入WoS格式数据:先将所有数据存到一个文档,每个文件名以download开始,以。txt结束。 d) 在Create a New Project中,用Browse选定你的数据文档,按Import开始读入数据。按提示输入project名(只要不与数据库中现有的其它project重名即可)。 2。检查,更改数据 a) 菜单中各项功能均可使用。相关SQL会显示在SQL Query and Results下的小窗口内。数据库结构可用Database:Show Data Structure显示。 b)更改数据:Project:Edit CiteSpace提示:UPDATE articles SET article='------', source='------' WHERE project='------' and uid='------' 更改数据需要该数据项的uid,可用SQL查到,例如:select uid from articles where project-‘terrorism' UPDATE语句中SET 后,WHERE前为数据字段的新值,如: UPDATE articles SET title=‘The Investigation of terrorist incidents’ WHERE project=’terrorism' and uid='ISI:A1990EZ80000009‘ 将把记录号为ISI:A1990EZ80000009的那条记录的标题改为The Investigation of terrorist incidents。 3。输出整理后的数据 a)选择输出数据的范围:Project:1。Select a subset for export CiteSpace示例如下:SELECT uid FROM articles WHERE project='terrorism' and dt='Article' and year=2000 例中将输出名为terrorism的project中2000年为止的所有类型为Article的数据条目。可按自己需要修改语句中WHERE之后的部分。 准备好后按Search(最底下一排)。 b)开始输出到WoS格式的文件:Project:2。Export Data (WoS) 按提示选定输出的目的地文档。可在File Name一栏直接打入文档目录的地址。CiteSpace输出时将显示等待,直到输出完毕。输出文件名的命名规则:download_ _ _of_ 。txt 例如:download_terrorism_300_of_586.txt 数据量越大,等待时间越长。 有没有不清楚的地方?
select code,name, org_lon,org_lat,sum(bytes) as bytes,sum(visitors) as visitors from public.sdb_ac where code in (select DISTINCT code from public.sdb_ac) group by code,name, org_lon,org_lat ;