Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб-1-2-теория.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Ограничение количества извлекаемых данных

Далее рассмотрим, как ограничить число записей, выводимых оператором SELECT.

По мере увеличения таблиц возникает необходимость вывода только подмножества данных. Этого можно добиться с помощью предложения LIMIT.

Общая форма оператора LIMIT имеет следующий вид:

SELECT (что-нибудь) from таблица LIMIT начальная строка, извлекаемое число записей;

Например, чтобы вывести из таблицы имена только первых пяти сотрудников, используется оператор LIMIT с аргументом равным 5.

SELECT f_name, l_name from employee_data LIMIT 5;

Имена первых пяти сотрудников. Это первые пять записей таблицы

Можно соединить оператор LIMIT с оператором ORDER BY. Таким образом, следующий оператор выведет четверых самых молодых сотрудников компании.

SELECT f_name, l_name, age from employee_data ORDER BY age LIMIT 4;

Четверо самых молодых сотрудников компании

Аналогично можно вывести двух самых старших сотрудников.

SELECT f_name, l_name, age from employee_data ORDER BY age LIMIT 2;

Двое самых старших сотрудников

LIMIT можно использовать также для извлечения подмножества данных, используя дополнительные аргументы.

SELECT f_name, l_name from employee_data LIMIT 6,3;

Извлечение трёх строк начиная с 6-й. Будут извлечены три строки, начиная с шестой.

Ключевое слово distinct

Рассмотрим теперь, как выбрать и вывести записи таблиц MySQL с помощью ключевого слова DISTINCT (РАЗЛИЧНЫЙ), использование которого исключает появление повторяющихся данных.

Чтобы вывести все должности базы данных компании, можно выполнить следующий оператор:

select title from employee_data;

Все должности базы данных компании

Можно видеть, что список содержит повторяющиеся данные. Предложение SQL DISTINCT выводит только уникальные данные. Вот как оно используется.

select DISTINCT title from employee_data;

Все должности базы данных компании без повторов. Из этого можно видеть, что в компании имеется 11 уникальных должностей.

Уникальные записи можно также отсортировать с помощью ORDER BY.

select DISTINCT age from employee_data ORDER BY age;

Значения возраста сотрудников компании без повторов

DISTINCT часто используется вместе с функцией COUNT, которая будет рассмотрена далее.

Вложенные запросы

В SQL предусмотрена возможность объединять запросы в один путем превращения одного из них в подзапрос (вложенный запрос).

В одном запросе может быть несколько подзапросов, синтаксис у такого запроса следующий:

SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN

(SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN

(SELECT имя_столбца FROM имя_таблицы WHERE условие))

Пример:

Узнаем, кто создал тему «велосипеды» на форуме:

То есть, после ключевого слова WHERE, в условие мы записываем еще один запрос. MySQL сначала обрабатывает подзапрос, возвращает id_author=2, и это значение передается в предложение WHERE внешнего запроса.

Обратите внимание, что подзапросы могут выбирать только один столбец, значения которого они будут возвращать внешнему запросу. Попытка выбрать несколько столбцов приведет к ошибке.

Пример 2:

Узнаем, какие сообщения на форуме оставлял автор темы «велосипеды»:

Теперь усложним задачу, узнаем, в каких темах оставлял сообщения автор темы "велосипеды":

Давайте разберемся, как это работает.

  • Сначала MySQL выполнит самый глубокий запрос:

SELECT id_author FROM topics WHERE topic_name='велосипеды'

  • Полученный результат (id_author=2) передаст во внешний запрос, который примет вид: SELECT id_topic FROM posts WHERE id_author IN (2);

  • Полученный результат (id_topic:4,1) передаст во внешний запрос, который примет вид: SELECT topic_name FROM topics WHERE id_topic IN (4,1);

  • И выдаст окончательный результат (topic_name: о рыбалке, о рыбалке). Т.е. автор темы "велосипеды" оставлял сообщения в теме "О рыбалке", созданной Сергеем (id=1) и в теме "О рыбалке", созданной Светой (id=4).

Есть два момента, на которые стоит обратить внимание:

  • Не рекомендуется создавать запросы со степенью вложения больше трех. Это приводит к увеличению времени выполнения и к сложности восприятия кода.

  • Приведенный синтаксис вложенных запросов, скорее наиболее употребительный, но вовсе не единственный. Например, мы могли бы вместо запроса

SELECT name FROM users WHERE id_user IN

(SELECT id_author FROM topics WHERE topic_name='велосипеды');

написать

SELECT name FROM users WHERE id_user =

(SELECT id_author FROM topics WHERE topic_name='велосипеды');

Т.е. мы можем использовать любые операторы, используемые с ключевым словом WHERE.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]