วันจันทร์ที่ 8 กุมภาพันธ์ พ.ศ. 2559

W4 - Relational Algebra

Examples of queries in relational algebra

Select (σ)
σGenre = "Sci-Fi"^ReleaseYear = 2015(Movies)
SQL query
SELECT * FROM Movies
WHERE Genre = "Sci-Fi" AND ReleaseYear = 2015;
Output
Relation ที่ประกอบด้วย Tuples ที่มาจาก Movies ซึ่งมี Genre = "Sci-Fi" และ ReleaseYear =2015

Project ()
Name, Address, Postcode(Customers)
SQL query
SELECT DISTINCT Name, Address, Postcode
FROM Customers
Output
Relation ที่ประกอบด้วยคอลัมป์ Name, Address และPostcode ที่มาจาก Customers
Rename (ρ)
ρEmployee(EmData)
SQL query
RENAME TABLE EmData to Employee;
Output
Relation ที่มีชื่อเปลี่ยนจาก EmData เป็น Employee
Union (U)
FlightNumber(ArrivalFlight) FlightNumber(DepartureFlight)
SQL query
SELECT FlightNumber FROM ArrivalFlight
UNION
SELECT FlightNumber FROM DepartureFlight
Output
Project ที่ประกอบด้วยคอลัมป์ FlightNumber ที่มาจาก
FlightNumber ของ ArrivalFlight รวมกับ FlightNumber ของ DepartureFlight
Minus (-)
Cost(Account) Cost(Management)
SQL query
SELECT Cost FROM Account
EXCEPT
SELECT Cost FROM Management
Output
Project ที่ประกอบด้วยคอลัมป์ Cost ที่มาจาก
Account แต่ไม่มีอยู่ใน Management
Intersection (∩) **uncomplete**
StudentName(ComputerEngineering)  StudentName(ComputerClub)
SQL query
SELECT StudentName FROM ComputerEngineering
INTERSECT
SELECT StudentName FROM ComputerClub
Output
Project ที่ประกอบด้วยคอลัมป์ StudentName ที่มาจาก
ComputerEngineering และ ComputerClub
Cartesian Product (×)
(a) CUSTOMERS table is as follows:
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
(b) Another table is ORDERS as follows:
+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+
ID,NAME,AMOUNT,DATE(CUSTOMERS×ORDERS)
SQL query
SELECT ID,NAME,AMOUNT,DATE FROM CUSTOMERSORDERS;
Output
Relation ที่ประกอบด้วยทุก Tuples ที่เป็นไปได้มาจาก CUSTOMERS และ
ORDERS มาทำการจับคู่ไขว้กันทุกรูปแบบ
+----+----------+--------+---------------------+
| ID | NAME     | AMOUNT | DATE                |
+----+----------+--------+---------------------+
|  1 | Ramesh   |   3000 | 2009-10-08 00:00:00 |
|  1 | Ramesh   |   1500 | 2009-10-08 00:00:00 |
|  1 | Ramesh   |   1560 | 2009-11-20 00:00:00 |
|  1 | Ramesh   |   2060 | 2008-05-20 00:00:00 |
|  2 | Khilan   |   3000 | 2009-10-08 00:00:00 |
|  2 | Khilan   |   1500 | 2009-10-08 00:00:00 |
|  2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|  2 | Khilan   |   2060 | 2008-05-20 00:00:00 |
|  3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|  3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|  3 | kaushik  |   1560 | 2009-11-20 00:00:00 |
|  3 | kaushik  |   2060 | 2008-05-20 00:00:00 |
|  4 | Chaitali |   3000 | 2009-10-08 00:00:00 |
|  4 | Chaitali |   1500 | 2009-10-08 00:00:00 |
|  4 | Chaitali |   1560 | 2009-11-20 00:00:00 |
|  4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|  5 | Hardik   |   3000 | 2009-10-08 00:00:00 |
|  5 | Hardik   |   1500 | 2009-10-08 00:00:00 |
|  5 | Hardik   |   1560 | 2009-11-20 00:00:00 |
|  5 | Hardik   |   2060 | 2008-05-20 00:00:00 |
|  6 | Komal    |   3000 | 2009-10-08 00:00:00 |
|  6 | Komal    |   1500 | 2009-10-08 00:00:00 |
|  6 | Komal    |   1560 | 2009-11-20 00:00:00 |
|  6 | Komal    |   2060 | 2008-05-20 00:00:00 |
|  7 | Muffy    |   3000 | 2009-10-08 00:00:00 |
|  7 | Muffy    |   1500 | 2009-10-08 00:00:00 |
|  7 | Muffy    |   1560 | 2009-11-20 00:00:00 |
|  7 | Muffy    |   2060 | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+
example data from http://www.tutorialspoint.com/sql/sql-cartesian-joins.htm

Join ()

Reference
-------------------------------------------------------------------------------------------------------------------------------------------------
What is an inner join and outer join?

Inner Join จะสนใจข้อมูลใน Attribute ซึ่งทั้ง 2 ฝั่งมีเหมือนกัน จากนั้นจะนำ ข้อมูลใน Attribute (คอลัมป์) อื่นมารวมกันเป็นตารางใหม่

Outer Join จะยึดข้อมูลที่มีใน Attribute ของฝั่งใดฝั่งหนึ่งเป็นหลัก จากนั้นนำข้อมูลใน Attribute อื่นมารวม ซึ่งหาก tuple ใดที่มีข้อมูลอยู่ในตารางที่เป็นฝั่งที่ยึดถือไว้แต่ไม่มีอยู่ในอีกฝั่งจะมีค่าข้อมูลใน Attribute ที่ไม่มีเป็น NULL

Reference
-------------------------------------------------------------------------------------------------------------------------------------------------
What is a Division operation?
เป็น Binary Operation โดย R ÷ มีผลลัพธ์เป็น restrictions of tuples ก็คือ ได้เฉพาะ tuples ที่มีข้อมูลใน Attribute ที่ทั้ง R และ S มีเหมือนกัน ซึ่งอยู่ใน R มี Attribute ทีมีอยู่เฉพาะใน R ไม่มีใน S
R ÷ S = { t[a1,...,an] : t \in R \wedge \foralls \in S ( (t[a1,...,an\cup s\in R) }
Example
picture from http://www.cs.cornell.edu/projects/btr/bioinformaticsschool/slides/gehrke.pdf

Reference

Why it is not in the complete set of a relational algebra operation?
เนื่องจาก division operation สามารถเขียนได้โดย operation ตัวอื่น