以下各部分是关于 SQL 的简介,可让您深入了解查询的强大功能,但并不是完整的 SQL 参考。
JMP 中最重要的 SQL 语句是 SELECT 语句,该语句指示数据库从数据源中获取哪些行。当您完成编写 SQL 语句以查询数据库中针对 Solubility.jmp 样本数据表的过程之后,实际就是向数据源发送了以下 SQL 语句:
SELECT * FROM "Solubility"
* 运算符是“所有列”的简写形式。这样,该语句即向数据库发送了一个请求,请求从指定的数据表中返回所有列。
若不想返回所有行,您可以用数据表中的特定列名取代 *。在 Solubility 数据表示例中,您可以通过提交以下语句仅选择 ETHER、OCTANOL 和 CHLOROFORM 这三列:
SELECT ETHER, OCTANOL, CHLOROFORM FROM "Solubility"
注意:JMP 不要求使用分号结束 SQL 语句。
JMP 提供一种图形化的方式来构造简单的 SELECT 语句,这样就不必再键入实际的 SQL。要从数据源中选择特定列,请在列列表中突出显示这些列。
突出显示若干行
• 按 Shift 键再点击可选择一定范围的列名。
• 按 Ctrl 键再点击 (Windows) 或按 Command 键再点击 (Apple macOS) 可选择单个列名。
请注意,SQL 语句将随着您的选择相应更改。
有时,您希望从数据源中仅获取唯一记录。也就是说,您希望消除重复记录。要启用该功能,请使用 DISTINCT 关键字。
SELECT DISTINCT ETHER, OCTANOL, CHLOROFORM FROM "Solubility"
您可以按数据库中的一个或多个字段对结果排序。使用 ORDER BY 命令指定要排序的变量。
SELECT * FROM "Solubility" ORDER BY LABELS
上面的 SQL 语句可选择所有字段,并按 LABELS 变量对生成的数据表排序。若要指定更多变量作为排序依据,请将其添加到逗号分隔列表中。
SELECT * FROM "Solubility" ORDER BY LABELS, ETHER, OCTANOL
使用 WHERE 语句,您可以基于条件获取数据表中的特定行。例如,您可能想要选择列 ETHER 的值大于 1 的所有行。
SELECT * FROM "Solubility" WHERE ETHER > 1
WHERE 语句放置在 FROM 语句之后,可使用以下任意逻辑运算符。
|
运算符 |
含义 |
|---|---|
|
= |
等于 |
|
!= 或 < > |
不等于 |
|
> |
大于 |
|
< |
小于 |
|
>= |
大于等于 |
|
<= |
小于等于 |
|
NOT |
逻辑 NOT |
|
AND |
逻辑 AND |
|
OR |
逻辑 OR |
对条件求值时,先对整个语句处理 NOT 语句,然后再依次处理 AND 语句和 OR 语句。因此,以下语句:
SELECT * FROM "Solubility" WHERE ETHER > -2 OR OCTANOL < 1 AND CHLOROFORM > 0
等效于以下语句:
SELECT * FROM "Solubility" WHERE ETHER > -2 OR (OCTANOL < 1 AND CHLOROFORM > 0)
要指定获取一定范围内的值,请随同 WHERE 语句使用 IN 和 BETWEEN 语句。IN 语句指定值列表,BETWEEN 支持您指定一定范围内的值。例如,以下 IN 语句代码获取 LABELS 列的值为 Methanol、Ethanol 或 Propanol 的所有行:
SELECT * FROM "Solubility" WHERE LABELS IN (’Methanol’, ’Ethanol’, ’Propanol’)
以下 BETWEEN 语句示例获取 ETHER 值介于 0 和 2 之间的所有行:
SELECT * FROM "Solubility" WHERE ETHER BETWEEN 0 AND 2
使用 LIKE 语句,您可以选择与给定字符串相似的值。用百分比 (%) 符号来表示可包含任何值的字符串。例如,您可能想要从 Solubility 数据中选择所有乙醇类的化学品,即:以 –ol 结尾的化学品。下面的 SQL 语句可完成该任务:
SELECT * FROM "Solubility" WHERE LABELS LIKE ‘%OL’
您可以将 % 运算符放置于 LIKE 语句中的任何位置。下面的示例提取包含以 M 开头且以 OL 结尾的标签的所有行:
SELECT * FROM "Solubility" WHERE LABELS LIKE ‘M%OL’
聚合函数用于获取汇总数据而不是数据本身。可在 SELECT 语句中使用以下任意聚合函数。
|
函数 |
含义 |
|---|---|
|
SUM( ) |
列的总和 |
|
AVG( ) |
列的平均值 |
|
MAX( ) |
列的最大值 |
|
MIN( ) |
列的最小值 |
|
COUNT( ) |
列中的行数 |
以下是一些示例:
• 以下语句请求对 ETHER 列和 OCTANOL 列分别求和:
SELECT SUM(ETHER), SUM(OCTANOL) FROM "Solubility"
• 下面的语句返回 ETHER 值大于 1 的行数:
SELECT COUNT(*) FROM "Solubility" WHERE ETHER > 1
• 下面的语句计算乙醇类数据的 OCTANOL 平均值:
SELECT AVG(OCTANOL) FROM "Solubility" WHERE LABELS LIKE ‘%OL’
注意:使用聚合函数时,生成的 JMP 数据表中的列名为 Expr1000、Expr1001,依此类推。最好在完成获取后重命名这些列名。
GROUP BY 和 HAVING 命令特别适用于聚合函数。这两个命令支持您基于数据集中某个字段的值多次运行聚合函数。
例如,您可能想要计算数据表中每个 ETHER 值(ETHER=0、ETHER=1 等)的记录数。
• SELECT COUNT(ETHER) FROM "Solubility" GROUP BY (ETHER) 返回一列数据,列中每个条目对应 ETHER 的一个水平。
• SELECT COUNT(ETHER) FROM "Solubility" WHERE OCTANOL > 0 GROUP BY (ETHER) 的作用与上一语句相同,只不过是为 OCTANOL > 0 的行计算记录数。
对某列的聚合函数使用 GROUP BY 时,请将该列本身包含在 SELECT 语句中。例如,以下代码在返回计数之外还返回包含 ETHER 水平的一列:
SELECT ETHER, COUNT(ETHER) FROM "Solubility" GROUP BY (ETHER)
聚合函数还有助于计算要在 WHERE 语句中使用的值。例如,您可能希望获取大于 ETHER 平均值的所有值。换言之,您希望找到 ETHER 的平均值,然后仅选择值大于该平均值的记录。请记住 SELECT AVG(ETHER) FROM "Solubility" 语句可获取您想要的平均值。所以,正确的 SQL 命令会在 WHERE 条件语句中使用上述语句:
SELECT * FROM "Solubility" WHERE ETHER > (SELECT AVG(ETHER) FROM "Solubility")
构造查询之后,您可能希望以后重新运行该查询,但不想在每次想要使用该查询时都手动输入它。此时,您可以将该查询导出至外部文件。这需要在Figure 3.56 所示的窗口中点击导出 SQL 按钮。这将打开一个窗口,您可在其中将 SQL 查询另存为文本文件。
要加载保存的查询,请在Figure 3.56 所示的窗口中点击导入 SQL 按钮。这将打开一个窗口,您可在其中导航至已保存的查询。该查询一打开即加载到该窗口中。
JMP 可以帮助在 ODBC 导入期间生成 SQL 查询的 WHERE 子句。它提供 WHERE 子句编辑器,可帮助您使用 SQL 常用功能生成基本表达式,同时允许使用供应商特定的函数。例如,您不必了解 SQL 是使用“=”还是“==”来进行比较,也不必了解是使用 avg() 还是 average() 来求平均值。
此外,应该用单引号 (‘string’) 而不是双引号 (“string”) 将字符串文字引起来。
图 3.57 WHERE 子句编辑器
打开 WHERE 子句编辑器
1. 按照使用“打开表”连接至数据库中的步骤连接至某个数据库。
2. 在从数据库打开表窗口中,点击高级按钮。
3. 点击 Where 按钮。
使用 WHERE 子句编辑器从工作面板添加以下任何内容:表达式、函数和项。这些内容应用于突出显示的蓝框。
4. 点击“表名浏览器”选择某个表。
该表中的列显示在列表中。
5. 点击“SQL 供应商名称浏览器”选择要使用的 SQL 的类型:GenericSQL、Access、DB2、MySQL、Oracle、SQL Server 或以上全部类型。
通过点击列表中的某个函数或运算符并从出现的列表中选择运算符,执行所需操作。
注意:不支持以下 SQL Server 数据类型:二进制、地理和几何图形。
6. 通过点击公式编辑区域中的空公式元素将其选中。
出现红色外框时即被选中。相对于所点击位置的最小嵌套框内的所有项都将被选中。后续操作应用于这些组合元素。
7. 通过点击小键盘上的按钮向表达式添加运算符。
8. (可选)要定制 WHERE 子句,请从公式编辑器红色小三角中选择一个选项:
显示外框
显示或隐藏 WHERE 子句项的外框。
大字体
增大公式的字体大小。
小字体
减小公式的字体大小。
简化
尽量简化 WHERE 子句语句。
重置面板布局
显示Figure 3.57 中所示的面板。
WHERE 子句编辑器与“公式编辑器”(在“在 JMP 中创建公式”中介绍)的工作方式类似。