熟悉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
相关产品推荐
相关产品推荐

