پاورپوینت استفاده از جداول مرتبط (pptx) 26 اسلاید
دسته بندی : پاورپوینت
نوع فایل : PowerPoint (.pptx) ( قابل ویرایش و آماده پرینت )
تعداد اسلاید: 26 اسلاید
قسمتی از متن PowerPoint (.pptx) :
بنام خدا
استفاده از جداول مرتبط
SQL یک پایگاه داده رابطه ای است. یعنی می توان با چند جدول کار نمود و همزمان چندین جدول را مورد سوال قرار داد.
استفاده از چند جدول مختلف و مرتبط بصورت همزمان دارای مزایای زیر است:
می توان اطلاعات بیشتری را بدون تکرار کردن و اضافه کاری ذخیره نمود.
به روز رسانی جداول و تغییر آنها راحتتر است.
می توان انواع مختلفی از پرس و جوها را انجام داد و اطلاعات را منطبق بر نیازهای مساله بازیابی نمود.
پرس و جوهای پیشرفته
فرض کنید جداول زیر را تعریف نموده ایم.
mysql> describe clients;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| client_id | int(11) | NO | PRI | NULL | auto_increment |
| f_name | varchar(20) | YES | | NULL | |
| l_name | varchar(30) | NO | | | |
| address | varchar(40) | YES | | NULL | |
| city | varchar(30) | YES | | NULL | |
| postcode | varchar(12) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
mysql> describe purchases;
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| purchase_id | int(11) | NO | PRI | NULL | auto_increment |
| client_id | int(11) | NO | | | |
| date | date | NO | | | |
+-------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> describe itemlist;
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| item_id | int(11) | NO | PRI | NULL | auto_increment |
| purchase_id | int(11) | NO | | | |
| book_id | int(11) | NO | | | |
+-------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> describe books;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| book_id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(50) | NO | | | |
| pages | int(11) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql>
ادامه ....
در مساله قبلی، ما تعدادی مشتری داریم که خریدهای متفاوتی را انجام می دهند. هر خرید شامل چندین آیتم است. هر آیتم یک کتاب است که ممکن است توسط چندین مشتری خریداری شود.
تعریف جداول متفاوت به ما اجازه می دهد که از تکرار اطلاعات جلوگیری کنیم و به صورتهای مختلفی پرس و جو های مورد نیاز را انجام دهیم.
فیلد id به ما اجازه می دهد جداول را با هم استفاده کنیم. مثلا، هر مشتری یک client_id دارد که خریدهای متفاوتی را ممکن است انجام دهد. اگر در جدول خریدها دنبال client_id بگردیم می توانیم خریدهای مشتری را پیدا کنیم.
بطورمشابه می توانیم با جستجوی purchase_id در جدول itemlist آیتمهای خریداری شده را مشخص کنیم.
انتشار جداول
فرض کنید داده های زیر را در جداول تعریف شده ذخیره کرده ایم.
mysql> select * from clients;
+-----------+---------+--------+--------------------------+----------------+----------+
| client_id | f_name | l_name | address | city | postcode |
+-----------+---------+--------+--------------------------+----------------+----------+
| 1 | Russell | Martin | Dept of Computer Science | Liverpool | L69 3BX |
| 2 | Bob | Milnor | 12 Peachtree Ln | Liverpool | L12 3DX |
| 3 | Sarah | Ford | 542b Jersey Rd | West Kirby | L43 8JK |
| 4 | Larry | Vance | 76 Jarhead Ln | Liverpool | L12 4RT |
| 5 | Paul | Abbott | 90 Crabtree Pl | Leamingotn Spa | CV32 7YP |
+-----------+---------+--------+--------------------------+----------------+----------+
5 rows in set (0.01 sec)
mysql> select * from books;
+---------+---------------------+-------+
| book_id | title | pages |
+---------+---------------------+-------+
| 1 | Linux in a Nutshell | 120 |
| 2 | Learning SQL | 289 |
| 3 | Abstract Algebra | 320 |
| 4 | Rising Sun | 830 |
| 5 | Round the Moon | 136 |
| 6 | Blackbeard | 292 |
+---------+---------------------+-------+
6 rows in set (0.00 sec)
mysql>
ادامه...
mysql> SELECT * FROM purchases;
+-------------+-----------+------------+
| purchase_id | client_id | date |
+-------------+-----------+------------+
| 1 | 1 | 2007-11-09 |
| 2 | 1 | 2007-11-10 |
| 4 | 2 | 2007-11-20 |
| 5 | 4 | 2007-11-20 |
| 6 | 3 | 2007-11-21 |
| 7 | 5 | 2007-11-25 |
| 8 | 3 | 2007-11-25 |
+-------------+-----------+------------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM itemlist;
+---------+-------------+---------+
| item_id | purchase_id | book_id |
+---------+-------------+---------+
| 1 | 1 | 2 |
| 2 | 1 | 6 |
| 3 | 1 | 3 |
| 4 | 2 | 4 |
| 5 | 2 | 5 |
| 6 | 4 | 5 |
| 7 | 4 | 6 |
| 8 | 5 | 1 |
| 9 | 5 | 3 |
| 10 | 6 | 5 |
| 11 | 7 | 2 |
| 12 | 8 | 3 |
+---------+-------------+---------+
12 rows in set (0.00 sec)
mysql>
جستجوهای پیشرفته 1
myql> SELECT * from clients, purchases WHERE clients.client_id=purchases.client_id ORDER BY purchase_id;
+----------+---------+--------+--------------------------+----------------+----------+-------------+-----------+------------+
|client_id | f_name | l_name | address | city | postcode | purchase_id | client_id | date |
-----------+---------+--------+--------------------------+----------------+----------+-------------+-----------+------------+
| 1 | Russell | Martin | Dept of Computer Science | Liverpool | L69 3BX | 1 | 1 | 2007-11-09 |
| 1 | Russell | Martin | Dept of Computer Science | Liverpool | L69 3BX | 2 | 1 | 2007-11-10 |
| 2 | Bob | Milnor | 12 Peachtree Ln | Liverpool | L12 3DX | 4 | 2 | 2007-11-20 |
| 4 | Larry | Vance | 76 Jarhead Ln | Liverpool | L12 4RT | 5 | 4 | 2007-11-20 |
| 3 | Sarah | Ford | 542b Jersey Rd | West Kirby | L43 8JK | 6 | 3 | 2007-11-21 |
| 5 | Paul | Abbott | 90 Crabtree Pl | Leamingotn Spa | CV32 7YP | 7 | 5 | 2007-11-25 |
| 3 | Sarah | Ford | 542b Jersey Rd | West Kirby | L43 8JK | 8 | 3 | 2007-11-25 |
+----------+---------+--------+--------------------------+----------------+----------+-------------+-----------+------------+
7 rows in set (0.01 sec)
mysql>
جستجوهای پیشرفته 2
فیلد client_idتکرار شده است. زیرا ما تمام ستونها را انتخاب کرده ایم (استفاده از گزینه *).
برای جلوگیری از این امر بدین صورت عمل می کنیم.
mysql> SELECT clients.client_id, f_name, l_name, address, city, postcode, purchases.purchase_id,date from clients, purchases WHERE clients.client_id=purchases.client_id ORDER BY purchase_id;
+-----------+---------+--------+--------------------------+----------------+----------+-------------+------------+
| client_id | f_name | l_name | address | city | postcode | purchase_id | date |
+-----------+---------+--------+--------------------------+----------------+----------+-------------+------------+
| 1 | Russell | Martin | Dept of Computer Science | Liverpool | L69 3BX | 1 | 2007-11-09 |
| 1 | Russell | Martin | Dept of Computer Science | Liverpool | L69 3BX | 2 | 2007-11-10 |
| 2 | Bob | Milnor | 12 Peachtree Ln | Liverpool | L12 3DX | 4 | 2007-11-20 |
| 4 | Larry | Vance | 76 Jarhead Ln | Liverpool | L12 4RT | 5 | 2007-11-20 |
| 3 | Sarah | Ford | 542b Jersey Rd | West Kirby | L43 8JK | 6 | 2007-11-21 |
| 5 | Paul | Abbott | 90 Crabtree Pl | Leamingotn Spa | CV32 7YP | 7 | 2007-11-25 |
| 3 | Sarah | Ford | 542b Jersey Rd | West Kirby | L43 8JK | 8 | 2007-11-25 |
+-----------+---------+--------+--------------------------+----------------+----------+-------------+------------+
7 rows in set (0.00 sec)
mysql>
استفاده از گزینه NATURAL JOIN نتیجه مشابهی دارد.
mysql> SELECT * FROM clients NATURAL JOIN purchases;