`a`

and `b`

are two sparse matrices. We want to perform `a * b`

as shown below:

```
0 1 0 0 9 1 0 0 0 0 0
0 0 3 0 0 \ / 0 0 0 ----- 0 21 0
0 0 0 2 0 * 0 7 0 ----- 0 0 4
0 0 0 0 0 / \ 0 0 2 0 0 0
0 0 0
```

We can represent a sparse matrix in a relational database as a table `matrix_name(row_num, col_num, value)`

.
Each non-zero cell in the matrix is represnted as a record (i, j, value) in the table.

Here's how to do the multiplication. First, create the tables:

```
CREATE TABLE a (
row_num INT,
col_num INT,
value INT,
PRIMARY KEY(row_num, col_num)
);
CREATE TABLE b (
row_num INT,
col_num INT,
value INT,
PRIMARY KEY(row_num, col_num)
);
```

Next, insert values into the tables:

```
INSERT INTO a VALUES
(1, 2, 1),
(1, 5, 9),
(2, 3, 3),
(3, 4, 2);
INSERT INTO b VALUES
(1, 1, 1),
(3, 2, 7),
(4, 3, 2);
```

Finally, perform the multiplication using the following query:

```
SELECT a.row_num, b.col_num, SUM(a.value*b.value)
FROM a, b
WHERE a.col_num = b.row_num
GROUP BY a.row_num, b.col_num;
2|2|21
3|3|4
```

To see how this query works, remember the formula for cell (i,j) of the product. It is the sum of a(i,k)*b(k,j) for all k.
The `JOIN`

condition `a.col_num = b.row_num`

makes sure that both `a.value`

and `b.value`

has the same k.
The `GROUP BY`

clause makes sure that we sum over all k's.