Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 
Объединение таблиц заключается в приравнивании колонок двух таблиц:
SELECT book, title, author, name
FROM author, book
WHERE book, author = author, id
Рассмотрим базу данных, в которой таблица book имеет вид, как в таблице 6-3.
Таблица 6-3. Таблица книг
IDTitleAuthorPages1The Green Mile48942Guards, Guards!2302
IDTitleAuthorPages3Imzadi33544Gold14055Howling Mad3294А таблица авторов author 
имеет вид таблицы 6-4. 
Таблица 6-4. Таблица авторов
IDNameCitizen1Isaac AsimovUS2Terry PratchetUK3Peter Davidus4Stephen Kingus5Neil 
GaimanUKВ результате внутреннего объединения создается таблица, в которой 
объединяются поля обеих таблиц для строк, удовлетворяющих запросу в обеих 
таблицах. В нашем примере запрос указывает, что поле author в таблице book 
должно совпадать с полем id таблицы author. Результат выполнения этого запроса 
представлен в таблице 6-5.
Таблица 6-5. Результаты запроса с внутренним объединением
Book TitleAuthor NameThe Green MileStephen KingGuards, Guards!Terry Pratchet
ImzadiPeter DavidGoldIsaac AsimovHowling MadPeter DavidВ этих результатах нет 
автора с именем Neil Gaiman, поскольку его author, id не найден в таблице book, 
author. Внутреннее объединение содержит только те строки, которые точно 
соответствуют запросу. Позднее в этой главе мы обсудим понятие внешнего 
объединения, которое оказывается полезным в случае, когда в базу данных внесен 
писатель, у которого нет в этой базе книг.
Псевдонимы
Полные имена, содержащие имена таблиц и колонок, зачастую весьма громоздки. 
Кроме того, при использовании функций SQL, о которых мы будем говорить ниже, 
может оказаться затруднительным ссы-
латься на одну и ту же функцию более одного раза в пределах одной команды. 
Псевдонимы, которые обычно короче и более выразительны, могут использоваться 
вместо длинных имен внутри одной команды SQL, например:
# Псевдоним колонки
SELECT long_field_names_are_annoying AS myfield
FROM table_name
WHERE myfield = 'Joe'
# Псевдоним таблицы в MySQL
SELECT people.names, tests.score
FROM tests, really_long_people_table_name AS people
# Псевдоним таблицы в mSQL
SELECT people.names, tests.score
FROM tests, really_long_people_table_name=people
mSQL полностью поддерживает псевдонимы для таблиц, но не поддерживает 
псевдонимы для колонок.
Группировка и упорядочение
По умолчанию порядок, в котором появляются результаты выборки, не определен. К 
счастью, SQL предоставляет некоторые средства наведения порядка в этой 
случайной последовательности. Первое средство -упорядочение - есть и в MySQL, и 
в mSQL. Вы можете потребовать от базы данных, чтобы выводимые результаты были 
упорядочены по некоторой колонке. Например, если вы укажете, что запрос должен 
упорядочить результаты по полю last_name , то результаты будут выведены в 
алфавитном порядке по значению поля last_name . Упорядочение осуществляется с 
помощью предложения ORDER BY:
SELECT last_name, first_name, age
FROM people
ORDER BY last_name, first_name
В данном случае упорядочение производится по двум колонкам. Можно проводить 
упорядочение по любому числу колонок, но все они должны быть указаны в 
предложении SELECT. Если бы в предыдущем примере мы не выбрали поле last_name , 
то не смогли бы упорядочить по нему.
Группировка — это средство ANSI SQL, реализованное в MySQL, но не в mSQL. 
Поскольку в mSQL нет агрегатных функций, то группировка просто не имеет смысла. 
Как и предполагает название, группировка позволяет объединять в одну строки с 
аналогичными значениями с целью их совместной обработки. Обычно это делается 
для применения к результатам агрегатных функций. О функциях мы поговорим 
несколько позднее.
Рассмотрим пример:
mysql> SELECT name, rank, salary FROM people\g

5 rows in set (0.01 sec)
После группировки по званию (rank) выдача изменяется:
mysql> SELECT rank FROM people GROUP BY rank\g

3 rows in set (0.01 sec)
После применения группировки можно, наконец, найти среднюю зарплату (salary) 
для каждого звания. О функциях, используемых в этом примере, мы поговорим 
позднее.
mysql> SELECT rank, AVG(salary) FROM people GROUP BY rank\g

3 rows in set (0.04 sec)
Мощь упорядочения и группировки в сочетании с использованием функций SQL 
 
<<-[Весь Текст]
Страница: из 157
 <<-