metBD (1084482), страница 31

Файл №1084482 metBD (Учебное пособие) 31 страницаmetBD (1084482) страница 312018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 31)

В языке SQL предусмотрено четыре предложения манипули­рования данными: SELECT, UPDATE, DELETE и INSERT. В этой и следующей главе рассматривается предложение SELECT. В части 8.4 рассматриваются три других предложения. Предполагается также, если не оговорено противное, что все предложения языка вводятся интерактивным способом.

Примечание. Многие из примеров, особенно в следующей главе, являются весьма сложными. Дело, скорее, в том, что обычные операции настолько просты в SQL (а фак­тически, в большинстве реляционных языков), что примеры та­ких операций оказываются довольно неинтересными и не иллю­стрируют полной мощности этого языка. Сначала, конечно, приво­дятся некоторые простые примеры затем более сложная, но чрезвычайно важ­ная возможность, называемая соединением.

Примеры запросов

Начнем с простого примера — с запроса «Выдать номера и состояния для поставщиков, находящихся в Париже». Этот запрос может быть выражен в SQL следующим образом:

SELECT НОМЕР_ПОСТАВЩИКА, СОСТОЯНИЕ

FROM S

WHERE ГОРОД =Париж’;

В качестве результата получим:

НОМЕР_ПОСТАВЩИКА

СОСТОЯНИЕ

S2

10

S3

30

Этот пример иллюстрирует самую общую форму предложения SELECT в языке SQL—

SELECT (выбрать) специфицированные поля

FROM (из) специфицированной таблицы

WHERE (где) некоторое специфицированное условие является истинным”

Заметим, что результатом запроса является другая таблица — таблица, которая некоторым образом получается из заданных в базе данных таблиц. Иными словами, в реляционной системе типа ORACLE пользователь всегда действует в рамках простой таб­личной структуры, и это — весьма привлекательная особенность таких систем.

В данном случае было бы вполне возможно сформулировать запрос, используя уточненные имена полей:

SELECT S.HOMEP_ПОСТАВЩИКА, S.СОСТОЯНИЕ

FROM S

WHERE S.ГОРОД =Париж’;

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

Для справочных целей ниже показана общая форма предло­жения SELECT, в которой, однако, опущена возможность UNION, обсуждаемая в следующей части:

SELECT [DISTINCT] элемент(ы)

FROM таблица (или таблицы)

[WHERE предикат]

[GROUP BY поле (или поля) [HAVING предикат] ]

[ORDER BY поле (или поля) ];

Перейдем теперь к иллюстрации основных особенностей этого предложения с помощью весьма продолжительной серии приме­ров.

Простая выборка

Выдать номера для всех поставляемых деталей:

SELECT НОМЕР_ДЕТАЛИ

FROM SP;

Имеем результат:

НОМЕР_ДЕТАЛИ

P1

P2

P3

P4

P5

P6

P1

P2

P2

P2

P4

P5

Обратим внимание на дубликаты номеров деталей в этом ре­зультате. Система не исключает дубликатов из результата предложения SELECT, если пользователь явно не потребует это сделать с помощью ключевого слова DISTINCT (различный, раз­личные), как показано в следующем примере.

Выборка с исключением дубликатов

Выдать номера для всех поставляемых деталей, исключая из­быточные дубликаты:

SELECT DISTINCT НОМЕР_ДЕТАЛИ

FROM SP;

В этом случае результат таков:

НОМЕР_ДЕТАЛИ

P1

P2

P3

P4

P5

P6

Выборка вычисляемых значений

Выдать номер и вес каждой детали в граммах для всех дета­лей, предполагая, что в таблице P веса деталей заданы в фун­тах (454 грамма):

SELECT НОМЕР_ДЕТАЛИ, ВЕС*454

FROM Р;

Получаем результат:

НОМЕР_ДЕТАЛИ

P1

5448

P2

7718

P3

7718

P4

6356

P5

5448

P6

8626

Фраза SELECT (и фраза WHERE) может включать ариф­метические выражения, а также простые имена полей. Можно, кроме того, осуществлять выборку просто констант. Например:

SELECT НОМЕР_ДЕТАЛИ, ’Вес в граммах = , ВЕС*454

FROM P;

Получаем результат:

НОМЕР_ДЕТАЛИ

P1

Вес в граммах =

5448

P2

Вес в граммах =

7718

P3

Вес в граммах =

7718

P4

Вес в граммах =

6356

P5

Вес в граммах =

5448

P6

Вес в граммах =

8626

Заметим, что в этом результате три столбца.

В связи с этим примером возникает следующий вопрос: что произойдет, если вес какой-либо детали имеет неопределенное значение (NULL)? Напомним, что NULL представляет неизвест­ное значение. Предположим, например, что вес детали Р1 задан в базе данных как неопределенное значение вместо значения 12. Каково тогда значение выражения ВЕС*454 для этой детали? Ответ состоит в том, что оно также является неопределенным зна­чением. В общем случае фактически любое арифметическое вы­ражение считается имеющим неопределенное значение, если ка­кой-либо из его операндов сам имеет неопределенное значение. Иными словами, если оказывается, что вес имеет неопределенное значение, то неопределенное значение имеют и все следующие выражения:

ВЕС+454

ВЕС — 454

ВЕС*454

ВЕС/454

Неопределенные значения показываются на терминале как тире или дефис.

Простая выборка «select *»

Выдать полные характеристики для всех поставщиков:

SELECT *

FROM S;

Результатом служит копия полной таблицы S.

Здесь звезда или звездочка служит кратким обозначением списка всех имен полей в таблице (таблицах), указанной(ых) во фразе FROM (из) в том порядке, в котором эти поля опреде­ляются в соответствующем(их) предложении(ях) CREATE TABLE. Таким образом, записанное выше предложение SELECT эквивалентно следующему:

SELECT НОМЕР_ПОСТАВЩИКА, ФАМИЛИЯ, СОСТОЯНИЕ, ГОРОД

FROM S;

Обозначение в виде звездочки удобно для интерактивных за­просов, поскольку оно уменьшает число ударов по клавишам. Од­нако оно таит потенциальную опасность при использовании во встроенном SQL (т. е. в предложениях SQL в прикладной про­грамме), поскольку смысл знака «*» может измениться, если для этой программы перегенерируется план прикладной задачи, а в данном промежутке времени к рассматриваемой таблице был добавлен другой столбец. В этом пособии «SELECT *» будет ис­пользоваться только в таких контекстах, где так делать без­опасно (в основном только в интерактивных контекстах), и фак­тическим пользователям рекомендуется поступать подобным образом.

Отметим, наконец, что «*» может уточняться именем соответ­ствующей таблицы. Допустима, например, следующая форма записи:

SELECT S.*

FROM S;

Ограниченная выборка

Выдать номера поставщиков, которые находятся в Париже и имеют состояние большее, чем 20:

SELECT НОМЕР_ПОСТАВЩИКА

FROM S

WHERE ГОРОД = ’Париж’

AND СОСТОЯНИЕ > 20;

Результат:

НОМЕР_ПОСТАВЩИКА

S3

Условие, или предикат, следующий за ключевым словом WHERE, может включать операторы сравнения =, != (неравно), >, >=, <, и <=, булевские операторы AND (и), OR (или) и NOT (нет), а скобки указывают требуемый порядок вы­числений. В таком предикате числа сравниваются алгебраиче­ски — отрицательные числа считаются меньшими, чем положи­тельные, независимо от их абсолютной величины. Строки литер сравниваются в соответствии с их представлением в коде ASCII. Если нужно сравнить две строки литер, имеющих разные длины, более короткая строка концептуально дополняется справа пробе­лами для того, чтобы обе строки имели одинаковую длину перед тем, как будет осуществляться их сравнение.

Выборка с упорядочением

Выдать номера и состояния поставщиков, находящихся в Па­риже, в порядке убывания их состояния:

SELECT НОМЕР_ПОСТАВЩИКА, СОСТОЯНИЕ

FROM S

WHERE ГОРОД = ’Париж’

ORDER BY СОСТОЯНИЕ DESC;

Результат:

НОМЕР_ПОСТАВЩИКА

СОСТОЯНИЕ

S3

30

S2

10

В общем случае не гарантируется, что результирующая таб­лица будет упорядочена каким-либо определенным образом. Здесь, однако, пользователь специфицировал, что результат перед тем, как он будет показан, должен быть организован в опреде­ленной последовательности. Упорядочение может быть специфи­цировано таким же образом, как в предложении CREATE INDEX:

имястолбца [упорядочение] [, имястолбца [упорядочение]] ...,

где «упорядочение», как и ранее, это ASC (возрастание) или DECS (убывание), и по умолчанию принимается ASC. Каждое «имя—столбца» должно идентифицировать некоторый столбец ре­зультирующей таблицы. Поэтому, например, следующее предло­жение недопустимо:

SELECT НОМЕР_ПОСТАВЩИКА

FROM S

ORDER BY ГОРОД;

Разрешается также идентифицировать столбцы во фразе ORDER BY (упорядочить по) «номерами—столбцов» вместо «имен—столбцов», где «номер—столбца» указывает порядковую позицию (слева направо) данного столбца в результирующей таб­лице запроса. Благодаря этому возможно упорядочение резуль­тата на основе «вычисляемых столбцов», которые не обладают именем. Например, упорядочить результат по воз­растанию номера детали в рамках возрастания веса в граммах:

SELECT НОМЕР_ДЕТАЛИ, ВЕС*454

FROM P

ORDER BY 2, НОМЕР_ДЕТАЛИ; [или ORDER BY 2,1;]

Здесь «2» ссылается на второй столбец результирующей таблицы.

Характеристики

Тип файла
Документ
Размер
1,9 Mb
Тип материала
Предмет
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее