VR
Virtual Reality On-line   SQL
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык запросов SQL.
Работа с несколькими таблицами
:

С одной таблицей мы научились работать. Теперь пора научиться связывать несколько таблиц, как мы это уже делали на уроках программирования Delphi и базы данных. Помимо этого, нас ждёт несколько приёмов, украшающих вывод.

Ещё на первом занятии я нарисовал схему из трёх баз данных. Если ты забыл, то взгляни на рисунок 1, чтобы освежить ту схему в своей оперативной памяти.
Logo
Рис 1. Связь между таблицами.

До сегодняшнего дня, мы обращались только к одной таблице. Сейчас мы выведем сразу две, причём с учётом связи. Сначала я покажу пример, а потом мы рассмотрим всё построчно.

SELECT *
FROM Prog, User
WHERE Prog.Key1=User.Key2

Первая строка, как всегда говорит, что надо вывести все поля (SELECT *). Вторая строка говорит, из каких баз данных надо это сделать (FROM Prog, User). На этот раз у нас здесь указано сразу две базы. Третья строка показывает связь (Prog.Key1=User.Key2). Для того, чтобы указать к какой базе относиться ключ Key1, я записываю полное имя поля как ИмяБазы.ИмяПоля. Если имя поля уникально для обеих таблиц (как Key1, которое есть только в таблице User), то можно имя таблицы опускать. Например, запрос мог выглядеть так:

SELECT *
FROM Prog, User
WHERE Prog.Key1= Key2

А вот Key1 записать без имени таблицы нельзя, потому что такое имя поля есть в обеих таблицах. Поэтому необходимо явно указать, Key1 какой именно таблицы интересует нас. Представим, что у нас есть две таблицы:

Prog.db                                  
Key1  ProgName     Cost 
------------------------------------
1     Windows 95    100
2     Windows 98    120 

User.db
Key1 Key2  LastName
---------------------------------
1    1     Иванов
2    1     Петров
3    2     Сидоров

Тогда результатом такого запроса может быть:

Prog.db                       User.db
Key1  ProgName     Cost       Key1 Key2  LastName
------------------------------------------------------
1     Windows 95    100        1    1    Иванов
1     Windows 95    100        2    1    Петров
2     Windows 98    120        3    2    Сидоров

Рассмотрим ещё пример:

SELECT *
FROM Prog, User
WHERE Prog.Key1= Key2 
       AND ProgName LIKE 'Windows 95'

Результатом этого запроса, при тех же таблицах будет:

Prog.db                       User.db
Key1  ProgName     Cost       Key1 Key2  LastName
----------------------------------------------------------------------------
1     Windows 95    100        1   1     Иванов
1     Windows 95    100        2   1     Петров

Как видишь, всё очень просто. Ты можешь использовать с такими запросами всё, что мы уже изучали и практически всё, что ещё изучим. Давай теперь приукрасим наши запросы. Например, представим, что цена указана в долларах :), а мы хотим перевости в рубли. Корректируем немного запрос:

SELECT Prog.Key1, Prog.ProgName, Prog.Cost*2, 
  Cost.Key1, Cost.Key2, Cost.LastName
FROM Prog, User
WHERE Prog.Key1= Key2

Под цифрой 2 внутри запроса (Prog.Cost*2) я подразумеваю курс доллара (размечтался я). Результат запроса будет:

Prog.db                       User.db
Key1  ProgName     Cost       Key1 Key2  LastName
----------------------------------------------------------------------------
1     Windows 95    200       1    1     Иванов
1     Windows 95    200       2    1     Петров

Давай ещё немного украсим:

SELECT Prog.Key1, Prog.ProgName, Prog.Cost*2 'руб', 
  Cost.Key1, Cost.Key2, Cost.LastName
FROM Prog, User
WHERE Prog.Key1= Key2

Prog.Cost*2 'руб' - эта запись говорит, что к каждому значению полю надо прибавить строку 'руб'. Результат этого запроса:

Prog.db                           User.db
Key1  ProgName     Cost           Key1 Key2  LastName
-------------------------------------------------------
1     Windows 95   200 руб        1    1     Иванов
1     Windows 95   200 руб        2    1     Петров

Здесь есть маленький недостаток, приходиться перечислять поля, которые нужно вывести и * уже не работает. Так что если понадобиться вывести все поля, то придётся их все писать после команды SELECT.

Вот стало и ещё красивее. Теперь остаётся мне выполнить обещание, и показать, как сортируется вывод. Для сортировки используется команда ORDER BY . После этого пишутся поля, по которым надо отсортировать. В самом конце нужно поставить АSC (сортировать в порядке возрастания) или DESC (в порядке убывания). Если ты не ставишь АSC или DESC , то таблица сортируется по возрастанию и подразумевается параметр АSC . Например:

SELECT *
FROM Prog
ORDER BY ProgName

Результатом будет таблица Prog, отсортированная по полю ProgNamе в порядке возрастания . Если ты хочешь отсортировать в обратном порядке, то нужно обязательно поставить DESC :

SELECT *
FROM Prog
ORDER BY ProgName DESC

Связанные таблицы сортируются также:

SELECT *
FROM Prog, User
WHERE Prog.Key1= Key2 
ORDER BY ProgName, Country ASK

Вот и всё. Теперь попробуй поиграть с новыми командами на практике. Удачи!!!


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©