4.2.1 SQL 查询

Keywords:

Next: ,Previous: Overview of RDBMSs,Up: Overview of RDBMSs

4.2.1 SQL 查询

对于常规操作,非常全面的 R 接口可以产生SQL,但是对于复杂操作,只有直接使用 SQL。习惯上,SQL 用大写字母编写,但是很多用户发现在 R 接口函数里面用小写比较方便。

一个关系型DBMS以 表格(tables) (或关系(relations))数据库的方式存储数据。数据库的表格和 R 的数据框类似,因为它们都是由同一类型(数值,字符,日期,货币,...)的(column)或者字段(fields)和 包含实体观测数据的 (row)或记录(record)组成。

SQL `查询'是关系数据库里面最常用的操作。典型的查询是下面类型的SELECT语句

     SELECT State, Murder FROM USArrests WHERE Rape > 30 ORDER BY Murder

     SELECT t.sch, c.meanses, t.sex, t.achieve

       FROM student as t, school as c WHERE t.sch = c.id

     SELECT sex, COUNT(*) FROM student GROUP BY sex

     SELECT sch, AVG(sestat) FROM student GROUP BY sch LIMIT 10

上面语句的第一条从已经复制到一个数据库表的R 数据框USArrests 数据中选择两列,基于第三列做子集操作,并且让结果数据排序。第二条语句连接(join)两个表格studentschool,随后返回四列。第三和第四个查询进行了一些交差列表操作然后返回计数和平均值。(五个聚合函数分别是COUNT(*) 以及用于列的 SUM, MAX, MIN 和 AVG)

SELECT查询用FROM选择表,WHERE设定查询条件(或者被AND或OR分割的多个条件),然后用ORDER BY对结果进行排序。和数据框不一样的是,RDBMS表里面的行最好看作是无序的,如果没有ORDER BY语句,顺序是不确定的。你可以对对不止一列进行排序(辞典排序方式),各个列间用逗号分隔。把DESC放在ORDER BY后面会让结果按降序排列。

SELECT DISTINCT 查询只返回被选中的表中不同的行。

GROUP BY字句选择基于标准的行的子集。如果不止一列被设定(逗号分隔),可以用五个聚合函数中的一个对多维交差分类的数据进行汇总。HAVING字句可以基于聚合值选择或去掉一些组。

如果SELECT语句含有产生唯一排序的ORDER BY语句,LIMIT字句可加入选择(通过数字)输出行的一个连续的区块。在同时取得一个区块行时,该语句非常有用。(除非排序是唯一的否则它可能不可靠,因为LIMIT字句可用来优化查询。)

还有查询用于创建表(CREATE TABLE,但通常是利用这些接口把一个数据框复制到数据库),INSERT(插入)或DELETE(删除)或UPDATE(更新)数据。可用 DROP TABLE `查询'破坏一个表1

Kline 和 Kline (2001) 对SQL Server 2000,Oracle,MySQL 和 PostgreSQL里面SQL语句的实现细节进行了论述。


Footnotes

[1] 译者注:DROP会把一个表彻底删除,而DELETE只删除一个表的内容,会保持表的存在。

Hits:Loading...

special topic