Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Оператор выборки данных select, использование условий поиска, сортировка результатов запроса. Синтаксис оператора select.

Поиск

Запросы - это наиболее часто используемый момент в SQL, ведь этот язык для них и был создан. Запрос представляет собой некую команду, которая обращается к БД и сообщает ей, чтобы она отобразила определенную информацию из таблиц в память. Эта информация обычно выводится непосредственно на экран компьютера, терминал, посылается принтеру, сохраняется в файле или служит исходными данными для другой команды или запроса. Все запросы в SQL состоят из одиночной команды SELECT с достаточно простой структурой, однако путем ее использования можно выполнить сложную обработку данных. В самой простой форме, команда SELECT просто обращается к БД, чтобы извлечь информацию из таблицы. Например, можно вывести таблицу студентов, дав следующий запрос: SELECT SNUM, SFAM, SIMA, SOTCH, STIP FROM STUDENTS;

Большинство программ, работающих с языком SQL. выдают заголовки полей, поэтому в дальнейшем результаты будут приводиться именно в такой форме. Детально поясним каждую часть этой команды:

SELECT - ключевое слово, которое сообщает БД, что эта команда является запросом, т.е. все запросы начинаются этим словом.

SNUM, SFAM, SIMA, SOTCH, STIP - список полей из таблицы, которые выбираются запросом. Поля. не перечисленные здесь, не будут включены в вывод команды.

FROM STUDENTS - ключевое слово, подобно SELECT, которое должно быть представлено в каждом запросе. STUDENTS-таблица, источник информации.

Точка с запятой (;) используется во всех интерактивных командах SQL для сообщения БД. что команда заполнена и готова выполниться.

Если необходимо получить каждое поле таблицы, имеется не обязательное сокращение в виде символа "звездочка" (*), которое можно использовать для вывода полного списка полей следующим образом: SELECT * FROM STUDENTS;

Команда SELECT способна извлечь строго определенную информацию из таблицы. Например, при необходимости вывода только определенных полей таблицы, просто из списка исключаются не нужные поля. Например, запрос Этот способ позволяет работать с большими таблицами, содержащих данные, не нужные в данный момент пользователю.

При работе с данными очень часто возникает потребность в удалении избыточных данных. Это реализуется с использованием DISTINCT - аргумент, который обеспечивает возможность устранять повторяющиеся значения из предложения SELECT. Например, необходимо узнать, какие студенты в настоящее время сдавали учебные предметы, причем не требуется уточнение полученной оценки и сдаваемого предмета. Запрос SELECT SNUM FROM USP; предоставит вывод, возможно в котором есть записи - дубликаты:

Для получения списка результатов без дубликатов в данном случае целесообразно воспользоваться следующим: SELECT DISTINCT SNUM FROM USP; Иначе, DISTINCT просматривает значения, которые были выведены ранее, и не дает им дублироваться в списке.

Использование условий поиска для отбора строк. Со временем таблицы становятся очень большими, т.к. увеличивается кол-во добавляемых в них записей. Обычно из всех записей интересуют только определенные, поэтому SQL дает возможность устанавливать критерии выбора записей для вывода.

WHERE – предложение (приложение) команды SELECT, которое позволяет устанавливать предикаты (назначать условия поиска), условие которых может быть или верным или неверным для любой записи таблицы. Команда извлекает только те записи из таблицы, для которой такое утверждение истинно. Предположим, что необходимо выбрать фамилии и размеры стипендии студентов, при этом интересуют только такие, которые получают стипендию в размере 25.50. Такой запрос будет иметь вид:

SELECT SPAM, STIP FROM STUDENTS WHERE STIP=25.50;

Когда WHERE имеет место, СУБД просматривает всю таблицу по одной записи, чтобы определить, является ли предикат истинным Предложение WHERE совместимо с уже рассмотренными фразами, используемыми в SELECT, т.е. можно использовать наименования полей, устранять дубликаты, или переупорядочивать поля. Но допускается изменять порядок столбцов для имен только в предложении SELECT, но не в предложении WHERE.

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

Вообще говоря, часто в предикатах требуется не только оценивать равенство оператора как истинного или ложного, но и осуществлять другие виды связей. Это реализуется с помощью булевых операторов и знаков отношения, причем предикат может содержать неограниченное число условий. В целом, реляционный оператор - это математический символ, который указывает на определенный тип сравнения между двумя значениями, при этом SQL располагает следующим их набором: = равный чему-либо; > больше чем; < меньше чем; >= больше чем или равно; <= меньше чем или равно; <> не равно.

Эти операторы имеют стандартные значения для числовых данных, а для символьных их определение зависит от кодов АSCII символов - они следуют в алфавитном порядке, причем заглавные буквы имеют меньший код, чем строчные, поэтому, например, "Z" < "а".

Предположим, что необходимо вывести список студентов, получающих стипендию, т.е. для которых STIP>0. Для этого воспользуемся следующим запросом: SELECT * FROM STUDENTS WHERE STIP > 0;

Стандартными булевыми операторами, которые используются в SQL, являются AND, OR и NOT. Напомним, как они работают:

∙AND использует два операнда в форме A AND В и оценивает их по отношению к истине: верны ли они оба;

∙OR использует два операнда в форме A OR В и оценивает на истинность: верен ли один из них;

∙NOT использует один операнд в форме NOT А и заменяет его значение с ИСТИНА на ЛОЖЬ, или наоборот.

Связывая предикаты с булевскими операторами, можно значительно увеличить возможности выборки данных. Например, по таблице с данными об успеваемости можно получить информацию о всех студентах, сдавших предмет с кодом 2003: SELECT * FROM USP WHERE OCENKA >=3 AND PNUM = 2003;

Если в аналогичном запросе использовать OR, то будет получена информация обо всех студентах, имеющих оценки 3 и выше, или сдававших (независимо от оценки) учебный предмет с кодом 2003:

SELECT * FROM USP WHERE OCENKA >=3 OR PNUM = 2003;

Условие NOT может использоваться для инвертирования логических значений. Например, для вывода информации о студентах. у которых оценки не являются 3, можно воспользоваться следующим запросом: SELECT * FROM USP WHERE NOT (OCENKA = 3);

Булевский оператор помещается перед реляционным оператором, на который он действует, а при необходимости расширения действия используются скобки. На╜пример, для вывода информации о студентах, у которых оценки не являются 3 и в то же время по учебному предмету с кодом, не равным 2005, можно воспользоваться таким запросом: SELECT * FROM USP WHERE NOT (OCENKA = 3 AND PNUM = 2005);

В предложении SELECT в дополнение к традиционным реляционным и булевским операторам, рассмотренным выше, могут быть использованы специальные операторы IN, BETWEEN, LIKE, и IS NULL.

Оператор IN определяет набор значений, в который данное значение должно быть включено. Например, если в соответствии с учебной БД возникает необходимость в выводе информации обо всех студентах, имя которых Анатолий или Владимир, нужно использовать следующий запрос: SELECT * FROM STUDENTS WHERE SIMA = 'Анатолий' OR SIMA = 'Владимир';

Оператор BETWEEN несколько похож на IN, но, в отличие от определения из набора. BETWEEN определяет диапазон значений, в который должны умещаться искомые значения, что и делает предикат верным. Структура оператора BETWEEN следующая: вводится начальное значение, ключевое слово AND и конечное значение Следующий пример будет извлекать из таблицы успеваемости номера и оценки всех студентов, оценки которых заключены между 3 и 5: SELECT SNUM, OCENKA FROM USP WHERE OCENKA BETWEEN 3 AND 5;

BETWEEN может работать с символьными полями в эквивалентах ASCII, что означает возможность использования BETWEEN для выбора фрагмента из упорядоченных по алфавиту значений. Для примера приведем запрос, выбирающий всех студентов, чьи фамилии попали в определенный алфавитный диапазон: SELECT SFAM, SIMA, SOTCH FROM STUDENTS WHERE SFAM BETWEEN 'К' AND 'С';

Оператор LIKE применим только к полям типа CHAR или VARCHAR, в которых он ищет подстроки, т.е. он ищет символы и проверяет, совпадают ли они с условием. В качестве условия оператор использует групповые символы - специальные символы, которые соответствуют чему-либо. Существует два типа групповых символов, используемых с LIKE:

∙- символ подчеркивания замещает любой одиночный символ, например, 'М_Л' будет соответствовать словам 'МОЛ' или 'МЕЛ', но не будет соответствовать 'МЕТАЛЛ':

∙- знак процента замещает последовательность любого числа символов, в том числе нулевой длины. Например, '%М%Л' будет соответствовать словам 'МЕЛ' или 'ПОМОЛ', но не соответствует 'МОЛОКО'.

В качестве примера найдем всех преподавателей, чьи фамилии начинаются с буквы К: SELECT TFAM, TIMA, ТОТСН FROM TEACHERS WHERE TFAM LIKE 'K%'; Оператор LIKE может быть полезен, например, при поиске значения, если точное его написание неизвестно. Групповой символ % в конце строки необходим в большинстве случаев, если длина оцениваемой строки неизвестна или длина поля больше, чем число символов в оцениваемой строке.

Сортировка результатов запроса. Большинство БД, работающих с SQL, предоставляют специальные средства, позволяющие совершенствовать вывод запросов. Предположим, что есть необходимость выполнить простые числовые вычисления с данными, выводимыми в качестве результата запроса. SQL позволяет помещать выражения и константы среди выбранных полей. Эти выражения могут дополнять или замещать поля в предложениях SELECT, при этом они могут включать в себя одно или более выбранных полей. Например, если необходимо просмотреть проиндексированную стипендию, увеличив ее в два раза, то можно воспользоваться запросом: SELECT SFAM, SIMA, SOTCH, STIP*2 FROM STUDENTS; Часто возникает необходимость в размещении текста в выводе запроса. Например, для повышения удобства, работы с результатами предыдущего запроса, можно вставить сокращенное название единицы измерения проиндексированной стипендии - условных единиц, что выполняется следующим запросом: SELECT SFAM, SIMA, SOTCH, 'y.e.', STIP*2 FROM STUDENTS;

Для упорядочения вывода полей таблиц SQL использует команду ORDER BY, позволяя сортировать вывод запроса согласно значениям в том или ином количестве выбранных столбцов. Если указывается несколько полей, то столбцы вывода упорядочиваются один внутри другого, при этом можно определять возрастание (ASC) или убывание (DESC) для каждого столбца. По умолчанию установлено возрастание. В качестве примера используем запрос, выводящий таблицу с информацией о студентах в алфавитном порядке фамилий: SELECT * FROM STUDENTS ORDER BY SFAM ASC;

Пример для упорядочивания информации по нескольким столбцам. Например, информацию из таблицы с данными о студентах упорядочим по уменьшению размера стипендии, а для студентов, имеющих одинаковый ее размер - в алфавитном порядке их фамилий. Для этого воспользуемся запросом: SELECT * FROM STUDENTS ORDER BY STIP DESC, SFAM ASC;

Аналогичным образом допускается использовать ORDER BY сразу с любым числом столбцов, однако поля, по которым происходит упорядочивание, должны быть указаны в SELECT. Поэтому запрос вида: SELECT SNUM, STIP FROM STUDENTS ORDER BY SFAM ASC; будет запрещен, т.к. поле SFAM не было выбранным полем, и GROUP BY не смог его найти для упорядочения вывода.

ORDER BY может использоваться с GROUP BY для упорядочения групп, при этом ORDER BY должен быть последним. Например, выведем уже рассмотренный нами отчет о количестве студентов, получающих ту или иную стипендию, но с упорядочиванием по убыванию размеров их стипендий: SELECT COUNT (DISTINCT SNUM), 'студ. получают стипендию ', STIP, ' у. е.'

FROM STUDENTS GROUP BY STIP ORDER BY STIP DESC;

Основная цель ключевого слова ORDER BY - дать возможность использовать эту команду со столбцами вывода так же, как и со столбцами таблицы - ведь иногда требуется произвести упорядочивание вывода по столбцам, производимым агрегатной функцией, константами или выражениями в предложении SELECT запроса. Например, попробуем рассмотреть отчет о количестве студентов, получающих ту или иную стипендию, но с упорядочиванием по убыванию количества студентов: SELECT COUNT (DISTINCT SNUM), 'студ. получают стипендию ', STIP, ' у. е.' FROM STUDENTS GROUP BY STIP ORDER BY 1 DESC;

Следовательно, необходимо использовать номер столбца, т.к. столбец вывода не имеет имени; и нельзя использовать саму агрегатную функцию.

 


Тема 12. Специальные аспекты работы с БД. Процедура индексирования. Создание процедур и функций. Контроль целостности данных с использованием триггеров. Средства обработки транзакций. Методы блокировки.

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

Язык SQL/92 позволяет определить ограничения целостности, относящиеся к общему состоянию базы данных и включающие ссылки на произвольное число таблиц. Семантика (смысл) таких ограничений целостности может быть существенно шире, чем ограничения, задаваемые связями 1 к n (один к одному) и даже n к m (1-to-many и many-to-many). Поэтому часто ограничения общего вида не выводятся автоматически из концептуальной схемы базы данных, и их приходится добавлять к реляционной схеме вручную. Для того чтобы понять, какие ограничения общего вида должны быть включены в реляционные схемы разделов, приходится возвращаться к документу, содержащему анализ требований корпорации. Задача проектировщика состоит в том, чтобы, с одной стороны, выявить все необходимые ограничения целостности и, с другой стороны, не перегрузить базу данных необязательными ограничениями (любое дополнительное ограничение целостности вызывает дополнительные проверки на стороне сервера при выполнении операций изменения базы данных; проверки для ограничений общего вида могут быть весьма громоздкими). Конечно, если предполагается использование распределенной базы данных, то опять придется учитывать возможности сервера по части ссылок на объекты "чужих" разделов. Это может повлиять на выбор ограничений целостности и/или повлечь создание новой декомпозиции общей базы данных на разделы.



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 298; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.181.112 (0.011 с.)