You are on page 1of 14

SQL

SQL ,
.
,
, . , , SQL
SQL . ,
SQL
. SQL
.


, ,
, ( 1 ):

, 1 :

, m n . m x n
, Am x n

[A]m x n
1 . ,
3 4. 1 3 3.
, .
Am x n aij, 1 i m
1 j n. a23
. , a23 .
a23 = 20.


:
1)
, (. m x n).
C = A + B m x n , cij = aij + bij 1 i m 1
j n.
:

(. A + B = B + A) (e.g., C + (D
+ E) = (C + D) + E).

2)
( ) (. k x l).
D = A B k x l dij = aij bij 1 i k
1 j l.
:

.
3) :
m x n , B
= kA, bij = kaij 1 i m 1 j n..
B = 5A :

k(AB) = (kA)B = A(kB) = (AB)k

4)
( ) ,
() () .
, , .
,
:
Amxn Bnxp = Cmxp

. i-ti ,
i-ti -toj .
:
1. .
2.
.
.............
. Ns .
, .
.
2 Amxn Bnxp = Cmxp ( i = 1, 2,
. . m, j =1, 2, . . p.).

2.
i- ":
= .

C = A B , :

(. AB BA). , 4,
A3x2 B2x4 , A3x2 B2x4 . ,
B2x4 A3x2 ,
. , AB BA ,

, :

- A(BC) = (AB)C
- A(B + C) = AB + AC
- (A + B)C = AC + BC

5)
.
, Amxn. ,
n x m , Bnxm,
:
aixj = bjxi, .
A AT.
:

/ SQL
SQL,
, A5x5 B5x5)

IF EXISTS (SELECT * FROM sysobjects


WHERE ID=(OBJECT_ID('A')) AND xtype ='U')
DROP TABLE A
GO
IF EXISTS(SELECT * FROM sysobjects
WHERE ID=(OBJECT_ID('B')) AND xtype ='U')
DROP TABLE B
GO
--=====================================
CREATE TABLE A(
row# int NOT NULL,
[1] int NOT NULL,
[2] int NOT NULL,
[3] int NOT NULL,
[4] int NOT NULL,
[5] int NOT NULL
)
INSERT INTO A VALUES(1, -3, 5, -2, 8, 6);
INSERT INTO A VALUES(2, 3, 8, 6, 4, 9);
INSERT INTO A VALUES(3, 2, 8, 9, 3, 4);
INSERT INTO A VALUES(4, 1, -4, 4, 5, -1);
INSERT INTO A VALUES(5, 7, 6, 2, -9, 0);
--=====================================
CREATE TABLE B(
row# int NOT NULL,
[1] int NOT NULL,
[2] int NOT NULL,
[3] int NOT NULL,
[4] int NOT NULL,
[5] int NOT NULL
)

INSERT INTO B VALUES(1, 18, 5, 12, 8, 0);


INSERT INTO B VALUES(2, 0, 8, -6, 4, -2);
INSERT INTO B VALUES(3, 2 , 8, 9, 3, 4);
INSERT INTO B VALUES(4, 1, 9, 0, 5, 7);
INSERT INTO B VALUES(5, 7, 6, 2, 9, 7);
--=====================================
SELECT * FROM A;
SELECT * FRON B;
Results:
--=========== Matrice A ==============
row#
1
2
3
4
5
-------------------------------------1
-3
5
-2
8
6
2
3
8
6
4
9
3
2
8
9
3
4
4
1
-4
4
5
-1
5
7
6
2
-9
0
--============ Matrice B =============
row#
1
2
3
4
5
-------------------------------------1
18
5
12
8
0
2
0
8
-6
4
-2
3
2
8
9
3
4
4
1
9
0
5
7
5
7
6
2
9
7

.
, .
SQL :

--ADDITION A+B
SELECT
A.[1] + B.[1] as [1],
A.[2] + B.[2] as [2],
A.[3] + B.[3] as [3],
A.[4] + B.[4] as [4],
A.[5] + B.[5] as [5]
FROM A INNER JOIN B ON A.row# = B.row#
Result:
1
2
3
4
5
---------------------------15
10
10
16
6
3
16
0
8
7
4
16
18
6
8
2
5
4
10
6

14
12
4
0
7
--=====================================
--SUBTRACTION AB
SELECT
A.[1] - B.[1] as [1],
A.[2] - B.[2] as [2],
A.[3] - B.[3] as [3],
A.[4] - B.[4] as [4],
A.[5] - B.[5] as [5]
FROM A INNER JOIN B ON A.row# = B.row#
Result:
1
2
3
4
5
-----------------------------21
0
-14
0
6
3
0
12
0
11
0
0
0
0
0
0
-13
4
0
-8
0
0
0
-18
-7

SQL
SQL
. ,
: .
:
1. .
2. .
3. .
, . ,
, A7x8 B8x9.
IF EXISTS(SELECT * FROM sysobjects
WHERE ID=(OBJECT_ID('A')) AND xtype ='U')
DROP TABLE A
GO
IF EXISTS(SELECT * FROM sysobjects
WHERE ID=(OBJECT_ID('B')) AND xtype ='U')
DROP TABLE B
GO
--===============================================
CREATE TABLE A(
row# int NOT NULL,
[1] int NOT NULL,
[2] int NOT NULL,
[3] int NOT NULL,
[4] int NOT NULL,
[5] int NOT NULL,

[6] int NOT NULL,


[7] int NOT NULL,
[8] int NOT NULL

)
INSERT INTO A VALUES(1, -3, 5, -2, 8, 6, 8, 9, 0);
INSERT INTO A VALUES(2, 3, 8, 6, 4, 9, 3, 6, -7);
INSERT INTO A VALUES(3, 2, 8, 9, 3, 4, 3, 7, 9);
INSERT INTO A VALUES(4, 1, -4, 4, 5, 7, 9, 9, 5);
INSERT INTO A VALUES(5, 7, 6, 2, -9, 7, 9, 9, 6);
INSERT INTO A VALUES(6, 5, 2, 9, 6, 5, 8, 6, 8);
INSERT INTO A VALUES(7, 4, 0, 2, 5, 9, 5, 8, 3);
--==============================================
CREATE TABLE B(
row# int NOT NULL,
[1] int NOT NULL,
[2] int NOT NULL,
[3] int NOT NULL,
[4] int NOT NULL,
[5] int NOT NULL,
[6] int NOT NULL,
[7] int NOT NULL,
[8] int NOT NULL,
[9] int NOT NULL
)
INSERT INTO B VALUES(1,
INSERT INTO B VALUES(2,
INSERT INTO B VALUES(3,
INSERT INTO B VALUES(4,
INSERT INTO B VALUES(5,
INSERT INTO B VALUES(6,
INSERT INTO B VALUES(7,
INSERT INTO B VALUES(8,

18, 5, 12, 8, 0, 8, 9, -2, 1);


0, 8, -6, 4, -2, 3, 6, 5, 6);
2 , 8, 9, 3, 4, 3, 7, 4, 9);
1, 9, 0, 5, 7, 9, -9, 5, 3);
7, 6, 2, 9, 7, 9, 9, 6, 8);
5, 0, 9, 6, 5, 8, 6, 8, 9);
0, 4, 2, 5, 9, 0, 8, 6, 1);
5, 9, 5, 3, 7, -3, 0, 2, 6);

Results:
--==================== Matrix A ========================
row#
1
2
3
4
5
6
7
8
-------------------------------------------------------1
-3
5
-2
8
6
8
9
0
2
3
8
6
4
9
3
6
-7
3
2
8
9
3
4
3
7
9
4
1
-4
4
5
7
9
9
5
5
7
6
2
-9
7
9
9
6
6
5
2
9
6
5
8
6
8
7
4
0
2
5
9
5
8
3
--======================== Matrix B ==========================
row#
1
2
3
4
5
6
7
8
9
-------------------------------------------------------------1
18
5
12
8
0
8
9
-2
1
2
0
8
-6
4
-2
3
6
5
6
3
2
8
9
3
4
3
7
4
9
4
1
9
0
5
7
9
-9
5
3

5
6
7
8

7
5
0
5

6
0
4
9

2
9
2
5

9
6
5
3

7
5
9
7

9
8
0
-3

9
6
8
0

6
8
6
2

8
9
1
6

A7x8 B8x9 , A7x8


B8x9. - C7x9
: A7x8 B8x9 = C7x9.
.

--===== Transform matrix A into array A ======
;WITH arr_A AS
(SELECT row# AS Row,
Col,
Val
FROM A
UNPIVOT (Val
FOR Col IN ([1],[2],[3],[4],[5],[6],[7],[8])) unpvt
),
--===== Transform matrix B into array B ======
arr_B AS
(SELECT row# AS Row,
Col,
Val
FROM B
UNPIVOT (Val
FOR Col IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])) unpvt
),
--===== Calculate Product A*B =================
product AS
(
SELECT rowA as Row, colB as Col, sum(product) Val
FROM
(SELECT arr_A.row rowA, arr_A.col colA,
arr_B.row rowB, arr_B.col colB,
arr_A.val * arr_B.val as product
FROM arr_A INNER JOIN arr_B
ON arr_A.col = arr_B.row) t1
GROUP BY colB, rowA
)
--===== Back to matrix form (reverse transformation) =======
SELECT
Row,
[1],
[2],
[3],

[4],
[5],
[6],
[7],
[8],
[9]
FROM
(SELECT Row, Col, Val FROM product) t1
PIVOT (MAX(Val)
FOR Col IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])
) AS pvt
ORDER BY Row;
Results:
--===================== Product-Matrix ========================
Row
1
2
3
4
5
6
7
8
9
--------------------------------------------------------------1
32
153
18
177
201
175
91
217
162
2
113
178
64
202
119
228
228
178
180
3
145
306
151
206
210
127
212
195
260
4
150
173
210
206
269
173
157
197
204
5
245
150
209
221
150
116
383
159
216
6
229
293
263
252
259
212
207
212
282
7
184
194
160
223
224
195
180
173
180


. 2 .
SQL .
,
.
SQL
,
, .
, ,

--===== Transform matrix A into array A ======


;WITH arr_A AS
(SELECT row# AS Row,
Col,
Val
FROM A
UNPIVOT (Val
FOR Col IN ([1],[2],[3],[4],[5],[6],[7],[8])) unpvt
)
--=== Transform array into matrix with rows/columns exchange==
SELECT
Col as Row,
[1],
[2],
[3],
[4],
[5],
[6],
[7]
FROM
(SELECT Row, Col, Val FROM arr_A) t1
PIVOT
(MAX(Val)
FOR Row IN ([1],[2],[3],[4],[5],[6],[7])
) AS pvt
ORDER BY Col;
Results:
--=========== Transposed Matrix A ==============
Row
1
2
3
4
5
6
7
-----------------------------------------------1
-3
3
2
1
7
5
4
2
5
8
8
-4
6
2
0
3
-2
6
9
4
2
9
2
4
8
4
3
5
-9
6
5
5
6
9
4
7
7
5
9
6
8
3
3
9
9
8
5
7
9
6
7
9
9
6
8
8
0
-7
9
5
6
8
3
Compare to the original Matrix A:
--================ Original Matrix A =================
row#
1
2
3
4
5
6
7
8
------------------------------------------------------1
-3
5
-2
8
6
8
9
0
2
3
8
6
4
9
3
6
-7
3
2
8
9
3
4
3
7
9
4
1
-4
4
5
7
9
9
5
5
7
6
2
-9
7
9
9
6
6
5
2
9
6
5
8
6
8
7
4
0
2
5
9
5
8
3

You might also like