You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

熟悉Access(SQL 92)语法,求SQL模式与Matlab 2015b表操作对应手册

作为长期用Access SQL又转Matlab表操作的人,我完全懂你想要把熟悉的SQL模式映射过来的需求!下面整理了几个你常用的SQL核心操作,对应Matlab 2015b里的实现方式,都是小型实用的例子,方便你快速对照:


1. 基础筛选(SELECT ... WHERE)

SQL模式(Access SQL 92)

SELECT CustomerID, Amount
FROM Orders
WHERE Amount > 100 AND OrderDate >= #2023-01-01#;

Matlab 2015b 实现

假设你已经把数据导入成Matlab的table类型(比如叫ordersTable),用逻辑索引实现筛选:

% 构建筛选条件(注意用元素级运算符&,日期用datetime类型)
filterMask = ordersTable.Amount > 100 & ordersTable.OrderDate >= datetime(2023,1,1);
% 提取符合条件的列和行
filteredTable = ordersTable(filterMask, {'CustomerID', 'Amount'});

2. 表连接(INNER/LEFT JOIN)

场景1:INNER JOIN

SQL模式

SELECT o.OrderID, c.CustomerName, o.Amount
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;

Matlab 2015b 实现

用innerjoin函数指定连接键:

% 执行内连接,自动匹配同名键列
joinedTable = innerjoin(ordersTable, customersTable, 'Keys', 'CustomerID');
% 选择需要的列
finalTable = joinedTable(:, {'OrderID', 'CustomerName', 'Amount'});

场景2:LEFT JOIN

SQL模式

SELECT c.CustomerName, o.OrderID, o.Amount
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

Matlab 2015b 实现

用outerjoin函数设置连接类型:

leftJoinedTable = outerjoin(customersTable, ordersTable, 'Keys', 'CustomerID', 'Type', 'left');
finalTable = leftJoinedTable(:, {'CustomerName', 'OrderID', 'Amount'});

3. 嵌套子查询(筛选高于平均值的记录)

SQL模式

SELECT OrderID, CustomerID, Amount
FROM Orders
WHERE Amount > (SELECT AVG(Amount) FROM Orders);

Matlab 2015b 实现

先计算聚合值,再用逻辑索引筛选:

% 计算平均金额(忽略空值,对应SQL的AVG自动处理NULL)
avgAmount = mean(ordersTable.Amount, 'omitNaN');
% 筛选高于平均值的记录
filteredTable = ordersTable(ordersTable.Amount > avgAmount, {'OrderID', 'CustomerID', 'Amount'});

4. 列与表别名(AS)

SQL模式

SELECT o.OrderID AS 订单编号, o.Amount AS 订单金额, c.CustomerName AS 客户名称
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;

Matlab 2015b 实现

  • 列别名:直接修改table的变量名,或创建新表时指定
% 方式1:修改现有表的列名
renamedTable = joinedTable;
renamedTable.Properties.VariableNames = {'订单编号', '客户ID', '订单金额', '客户名称'};

% 方式2:创建新表时指定别名
selectedCols = table(joinedTable.OrderID, joinedTable.Amount, joinedTable.CustomerName, ...
    'VariableNames', {'订单编号', '订单金额', '客户名称'});
  • 表别名:直接给table变量起短名即可,比如o = ordersTable; c = customersTable;,后续用短名操作

5. 排序(ORDER BY)

SQL模式

SELECT OrderID, Amount, OrderDate
FROM Orders
ORDER BY Amount DESC, OrderDate ASC;

Matlab 2015b 实现

用sortrows函数指定排序列和方向:

% 按Amount降序、OrderDate升序排序
sortedTable = sortrows(ordersTable, {'Amount', 'OrderDate'}, {'descend', 'ascend'});
finalTable = sortedTable(:, {'OrderID', 'Amount', 'OrderDate'});

6. 分组聚合(GROUP BY + HAVING)

SQL模式

SELECT CustomerID, COUNT(OrderID) AS 订单数量, SUM(Amount) AS 总消费
FROM Orders
GROUP BY CustomerID
HAVING SUM(Amount) > 500;

Matlab 2015b 实现

用findgroups+splitapply组合(R2015b新增函数,刚好适配你的版本):

% 按CustomerID分组
[groupIDs, uniqueCustomers] = findgroups(ordersTable.CustomerID);

% 对分组应用聚合函数
orderCount = splitapply(@numel, ordersTable.OrderID, groupIDs); % 对应SQL的COUNT
totalSpent = splitapply(@sum, ordersTable.Amount, groupIDs); % 对应SQL的SUM

% 生成聚合结果表
summaryTable = table(uniqueCustomers, orderCount, totalSpent, ...
    'VariableNames', {'CustomerID', '订单数量', '总消费'});

% 实现HAVING筛选
filteredSummary = summaryTable(summaryTable.总消费 > 500, :);

这些都是你日常用Access SQL时的高频操作模式,对应到Matlab 2015b的实现都是最直接的方式,你可以把这些小例子当成速查表,慢慢过渡到Matlab的表操作逻辑~

内容的提问来源于stack exchange,提问作者user36800

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:16:17