Разработка распределенной базы данных — КиберПедия 

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Разработка распределенной базы данных

2020-05-07 188
Разработка распределенной базы данных 0.00 из 5.00 0 оценок
Заказать работу

Методические указания

К практическим занятиям № 3

 

Разработка распределенной базы данных

по дисциплине

«Компьютерные технологии в области автоматизации и управления»

 

Уровень профессионального образования: высшее образование – магистратура

Направление подготовки:15.04.04 Автоматизация технологических процессов и производств

Профиль подготовки: Автоматизация технологических процессов и производств в машиностроении

Квалификация выпускника: Магистр

Форма обучения: очная, очно-заочная

 

Тула 2017

 

 


Методические указания к практическим занятиям составлены профессором Ямниковой О.А. и обсуждены на заседании кафедры «Технология машиностроения» политехнического института

 

протокол №13 от "_24_" апреля__2017_ г.

 

Зав. кафедрой ________________________ А.А. Маликов

 

 


Оглавление

1. Цель и задачи практического занятия. 4

2. План практического занятия. 4

3. Методические указания. 6

3.1 Язык запросов SQL.. 6

Состав языка SQL.. 7

3.2 Проектирование базы данных «Библиотека» в ACCESS. 34

3.3 Построение запросов в ACCESS. 38

4. Защита практической работы.. 38

5. Требования при подведении итогов текущей и промежуточной аттестаций. 38

6. Список использованных источников. 38


 

Цель и задачи практического занятия

Цель работы – освоить навыки применения и разработки SQL-запросов для базы данных.

Для достижения поставленной цели необходимо выполнить следующие задачи:

- Освоить принципы построения запросов.

- Разработать программный модуль обработки данных.

План практического занятия

 

1) Ознакомится теоретической справкой.

2) Разработать СУБД «Книги».

3) Сформировать и выполнить запрос на языке SQL по варианту.

4) Оформить отчет.

5) Защитить работу преподавателю.

Задание на работу (рабочее задание)

 

Разработать БД «Книги», включающую обработку следующих запросов:

ВАРИАНТЫ:

 

Вариант №1

 

1) Найти книги, авторы которых совпадают

2) Ввести данные об издательстве с добавлением недостающего города

3) Выдать список издательств, у которых нет книг в заданном году

 

Вариант № 2

 

1) Найти книги автора, которые были изданы в определенном издательстве

2) Добавить книгу в БД, если ее там нет

3) Отсортировать издательства по количеству книг

 

Вариант № 3

 

1) Всех авторов, которые издавались в определенном году

2) Ввести данные о книге с добавлением недостающих авторов

3) Вывести список книг, отсортированных по издательству и по автору

 

Вариант № 4

 

1) Всех авторов, которые издавались в определенном издательстве

2) Ввести данные о книге с добавлением недостающих издательств

3) Отсортировать авторов по количеству книг

 

Вариант №5

 

1) Найти книги, у которых более одного автора

2) Удалить данные об издательстве и о всех книгах, там изданных.

3) Выдать список издательств, у которых есть книги в заданном году

 

Вариант № 6

 

1) Найти все издательства в конкретном городе

2) Изменить в записях книг одного издательства на другое издательство

3) Выдать список книг, экземпляры которых изданы в разных издательствах

 

Вариант № 7

 

1) Выдать все книги, изданные в последние 5 лет

2) Удалить книги конкретного автора

3) Вывести список книг конкретного автора с расчетом % личного участия

 

Вариант № 8

 

1) Всех авторов, которые издавались в определенном городе

2) Ввести данные о новом издательстве книги с добавлением недостающих издательств

3) Отсортировать книги сначала по издательству, потом году издательства

 

Вариант №9

 

1) Найти книги конкретного автора и посчитать их количество

2) Выполнить коррекцию записи о книге

3) Выдать список издательств, у которых нет книг за последние 5 лет

 

Вариант № 10

 

1) Посчитать количество книг автора по издательствам

2) Удалить автора, если у него нет книг

3) Выдать список издательств, у которых есть книги за последние 5 лет

 


Вариант № 11

 

1) Посчитать количество книг автора по годам

2) Удалить издательство, если в нем не издавали книг

3) Отсортировать книги данного издательства по годам издательства

 

Вариант № 12

 

1) Посчитать количество книг по годам и издательствам

2) Удалить из базы книги старше 10 лет

3) Подсчитать количество книг данного издательства по годам издательства

 

Методические указания

3.1 Язык запросов SQL

SQL символизирует собой Структурированный Язык Запросов. Это - язык, который дает Вам возможность создавать и работать в реляционных базах данных, являющихся наборами связанной информации, сохраняемой в таблицах.

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

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

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

Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов) и в данное время также принимается ISO (Международной Организацией по Стандартизации). Однако, большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя различные особенности в этот язык, которые, как они считают, будут весьма полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами " рынка " сами по себе в силу полезности своих качеств.

На данном уроке мы будем, в основном, следовать стандарту ANSI, но одновременно иногда будет показывать и некоторые наиболее общие отклонения от его стандарта.

Точное описание особенностей языка приводится в документации на СУБД, которую Вы используете. SQL системы InterBase 4.0 соответствует стандарту ANSI-92 и частично стандарту ANSI-III.

Состав языка SQL

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

Поэтому, в язык SQL в качестве составных частей входят:

язык манипулирования данными (Data Manipulation Language, DML)

язык определения данных (Data Definition Language, DDL)

язык управления данными (Data Control Language, DCL).

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

Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд:

SELECT (выбрать)
INSERT (вставить)
UPDATE (обновить)
DELETE (удалить)

Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей - таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются:

1. CREATE DATABASE (создать базу данных)
2. CREATE TABLE (создать таблицу)
3. CREATE VIEW (создать виртуальную таблицу)
4. CREATE INDEX (создать индекс)
5. CREATE TRIGGER (создать триггер)
6. CREATE PROCEDURE (создать сохраненную процедуру)
7. ALTER DATABASE (модифицировать базу данных)
8. ALTER TABLE (модифицировать таблицу)
9. ALTER VIEW (модифицировать виртуальную таблицу)
10. ALTER INDEX (модифицировать индекс)
11. ALTER TRIGGER (модифицировать триггер)
12. ALTER PROCEDURE (модифицировать сохраненную процедуру)
13. DROP DATABASE (удалить базу данных)
14. DROP TABLE (удалить таблицу)
15. DROP VIEW (удалить виртуальную таблицу)
16. DROP INDEX (удалить индекс)
17. DROP TRIGGER (удалить триггер)
18. DROP PROCEDURE (удалить сохраненную процедуру)

Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать "язык управления доступом". Он состоит из двух основных команд:

GRANT (дать права)
REVOKE (забрать права)

С точки зрения прикладного интерфейса существуют две разновидности команд SQL:

интерактивный SQL

встроенный SQL.

Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне. Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе комбинируя set-ориентированный и record-ориентированный подходы.

Мы не будем приводить точный синтаксис команд SQL, вместо этого мы рассмотрим их на многочисленных примерах, что намного более важно для понимания SQL, чем точный синтаксис, который можно посмотреть в документации на Вашу СУБД.

Итак, начнем с рассмотрения команд языка манипулирования данными.

Реляционные операции. Команды языка манипулирования данными

Наиболее важной командой языка манипулирования данными является команда SELECT. За кажущейся простотой ее синтаксиса скрывается огромное богатство возможностей. Нам важно научиться использовать это богатство!

На данном уроке предполагается, если не оговорено противное, что все команды языка SQL вводятся интерактивным способом. В качестве информационной основы для примеров мы будем использовать базу данных "Служащие предприятия" (employee.gdb), входящую в поставку Delphi и находящуюся (по умолчанию) в поддиректории \IBLOCAL\EXAMPLES.

Начнем с базовых операций реляционных баз данных. Таковыми являются:

выборка (Restriction)

проекция (Projection)

соединение (Join)

объединение (Union)

Операция выборки позволяет получить все строки (записи) либо часть строк одной таблицы.

SELECT * FROM country

Получить все строки таблицы Country

COUNTRY CURRENCY
USA Dollar
England Pound
Canada CdnDlr
Switzerland SFranc
Japan Yen
Italy Lira
France FFranc
Germany D-Mark
Australia ADollar
Hong Kong HKDollar
Netherlands Guilder
Belgium BFranc
Austria Schilling
Fiji Fdollar

В этом примере и далее - для большей наглядности - все зарезервированные слова языка SQL будем писать большими буквами. Красным цветом будем записывать предложения SQL, а светло-синим - результаты выполнения запросов.

SELECT * FROM country

WHERE currency = "Dollar".

Получить подмножество строк таблицы Country,удовлетворяющее условию Currency = "Dollar"

Результат последней операции выглядит следующим образом:

COUNTRY    CURRENCY

=============== ==========

USA        Dollar

Операция проекции позволяет выделить подмножество столбцов таблицы. Например:

SELECT currency FROM country.

Получить список денежных единиц

CURRENCY

==========

Dollar

Pound

CdnDlr

SFranc

Yen

Lira

FFranc

D-Mark

ADollar

HKDollar

Guilder

BFranc

Schilling

FDollar

На практике очень часто требуется получить некое подмножество столбцов и строк таблицы, т.е. выполнить комбинацию Restriction и Projection. Для этого достаточно перечислить столбцы таблицы и наложить ограничения на строки. SELECT currency FROM country WHERE country = "Japan".

Найти денежную единицу Японии

CURRENCY

==========

Yen

SELECT first_name, last_name

FROM employee

WHERE first_name = "Roger"

Получить фамилии работников, которых зовут "Roger"

FIRST_NAME LAST_NAME
Roger De Souza
Roger Reeves

Эти примеры иллюстрируют общую форму команды SELECT в языке SQL (для одной таблицы):

SELECT (выбрать) специфицированные поля
FROM (из) специфицированной таблицы
WHERE (где) некоторое специфицированное условие является истинны

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

SELECT first_name, last_name, proj_name

FROM employee, project

WHERE emp_no = team_leader

Получить список руководителей проектов

FIRST_NAME LAST_NAME PROJ_NAME
Ashok Ramanathan Video Database
Pete Fisher DigiPizza
Chris Papadopoulos AutoMap
Bruce Young MapBrowser port
Mary S. MacDonald Marketing project 3

Операция объединения позволяет объединять результаты отдельных запросов по нескольким таблицам в единую результирующую таблицу. Таким образом, предложение UNION объединяет вывод двух или более SQL-запросов в единый набор строк и столбцов.

SELECT first_name, last_name, job_country

FROM employee

WHERE

UNION

SELECT contact_first, contact_last, country customer

Получить список работников и заказчиков, проживающих во Франции

FIRST_NAME LAST_NAME JOB_COUNTRY
Jacques Glon France
Michelle Roche France

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

SELECT [DISTINCT] список_выбираемых_элементов (полей)
FROM список_таблиц (или представлений)
[WHERE предикат]
[GROUP BY поле (или поля) [HAVING предикат]]
[UNION другое_выражение_Select]
[ORDER BY поле (или поля) или номер (номера)];

 

Отметим, что под предикатом понимается некоторое специфицированное условие (отбора), значение которого имеет булевский тип. Квадратные скобки означают необязательность использования дополнительных конструкций команды. Точка с запятой является стандартным терминатором команды. Отметим, что в WISQL и в компоненте TQuery ставить конечный терминатор не обязательно. При этом там, где допустим один пробел между элементами, разрешено ставить любое количество пробелов и пустых строк - выполняя желаемое форматирование для большей наглядности.

Гибкость и мощь языка SQL состоит в том, что он позволяет объединить все операции реляционной алгебры в одной конструкции, "вытаскивая" таким образом любую требуемую информацию, что очень часто и происходит на практике.

Команда SELECT

Простейшие конструкции команды SELECT

Итак, начнем с рассмотрения простейших конструкций языка SQL. После такого рассмотрения мы научимся:

- назначать поля, которые должны быть выбраны

- назначать к выборке "все поля"

- управлять "вертикальным" и "горизонтальным" порядком выбираемых полей

- подставлять собственные заголовки полей в результирующей таблице

- производить вычисления в списке выбираемых элементов

- использовать литералы в списке выбираемых элементов

- ограничивать число возвращаемых строк

- формировать сложные условия поиска, используя реляционные и логические операторы

- устранять одинаковые строки из результата.

- Список выбираемых элементов может содержать следующее:

- имена полей

- *

- вычисления

- литералы

- функции

- агрегирующие конструкции

Список полей

SELECT first_name, last_name, phone_no

FROM phone_list

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

FIRST_NAME LAST_NAME PHONE_NO
Terri Lee (408) 555-1234
Oliver H. Bender (408) 555-1234
Mary S. MacDonald (415) 555-1234
Michael Yanowski (415) 555-1234
Robert Nelson (408) 555-1234
Kelly Brown (408) 555-1234
Stewart Hall (408) 555-1234
...    

Отметим, что PHONE_LIST - это виртуальная таблица (представление), созданная в InterBase и основанная на информации из двух таблиц - EMPLOYEE и DEPARTMENT. Она не показана на рис.1, однако, как мы уже указывали в общей структуре команды SELECT, к ней можно обращаться так же, как и к "настоящей" таблице.

Все поля

SELECT *

FROM phone_list

получить список служебных телефонов всех работников предприятия со всей необходимой информацией

EMP_NO FIRST_NAME LAST_NAME PHONE_EXT LOCATION PHONE_NO
12 Terri Lee 256 Monterey (408) 555-1234
105 Oliver H. Bender 255 Monterey (408) 555-1234
85 Mary S. MacDonald 477 San Francisco (415) 555-1234
127 Michael Yanowski 492 San Francisco (415) 555-1234
2 Robert Nelson 250 Monterey (408) 555-1234
109 Kelly Brown 202 Monterey (408) 555-1234
14 Stewart Hall 227 Monterey (408) 555-1234
...          

Вычисления

SELECT emp_no, salary, salary * 1.15

FROM employee

получить список номеров служащих и их зарплату, в том числе увеличенную на 15%

EMP_NO SALARY  
2 105900.00 121785
4 97500.00 112125
5 102750.00 118162.5
8 64635.00 74330.25
9 75060.00 86319
11 86292.94 99236.87812499999
12 53793.00 61861.95
14 69482.62 79905.01874999999
...    

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

Например, в выражении col1 + col2 * col3 сначала находится произведение значений столбцов col2 и col3, а затем результат этого умножения складывается со значением столбца col1. А в выражении (col1 + col2) * col3 сначала выполняется сложение значений столбцов col1 и col2, и только после этого результат умножается на значение столбца col3.

Литералы

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

SELECT first_name, "получает", salary,

  "долларов в год"

FROM employee

получить список сотрудников и их зарплату

FIRST_NAME   SALARY
Robert Получает 105900.00 долларов в год
Bruce Получает 97500.00 долларов в год
Kim Получает 102750.00 долларов в год
Leslie Получает 64635.00 долларов в год
Phil Получает 75060.00 долларов в год
K. J. Получает 86292.94 долларов в год
Terri Получает 53793.00 долларов в год

Конкатенация

Имеется возможность соединять два или более столбца, имеющие строковый тип, друг с другом, а также соединять их с литералами. Для этого используется операция конкатенации (||).

SELECT "сотрудник " || first_name || " " ||

    last_name

FROM employee

получить список всех сотрудников

==============================================

сотрудник Robert Nelson

сотрудник Bruce Young

сотрудник Kim Lambert

сотрудник Leslie Johnson

сотрудник Phil Forest

сотрудник K. J. Weston

сотрудник Terri Lee

сотрудник Stewart Hall

...

Работа с датами

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

"October 27, 1995"

"27-OCT-1994"

"10-27-95"

"10/27/95"

"27.10.95"

Кроме абсолютных дат, в SQL-выражениях можно также пользоваться относительным заданием дат:

"yesterday" - вчера

"today" - сегодня

"now" - сейчас (включая время)

"tomorrow" - завтра

Дата может неявно конвертироваться в строку (из строки), если:

строка, представляющая дату, имеет один из вышеперечисленных форматов;

выражение не содержит неоднозначностей в толковании типов столбцов.

SELECT first_name, last_name, hire_date

FROM employee

WHERE hire_date > '1-1-94'

получить список сотрудников, принятых на работу после 1 января 1994 года

FIRST_NAME LAST_NAME HIRE_DATE
Pierre Osborne 3-JAN-1994
John Montgomery 30-MAR-1994
Mark Guckenheimer 2-MAY-1994

Значения дат можно сравнивать друг с другом, сравнивать с относительными датами, вычитать одну дату из другой.

SELECT first_name, last_name, hire_date

FROM employee

WHERE 'today' - hire_date > 365 * 7 + 1

получить список служащих, проработавших на предприятии к настоящему времени более 7 лет

FIRST_NAME LAST_NAME HIRE_DATE
Robert Nelson 28-DEC-1988
Bruce Young 28-DEC-1988

Агрегатные функции

К агрегирующим функциям относятся функции вычисления суммы (SUM), максимального (SUM) и минимального (MIN) значений столбцов, арифметического среднего (AVG), а также количества строк, удовлетворяющих заданному условию (COUNT).

SELECT count(*), sum (budget), avg (budget),

min (budget), max (budget)

FROM department

WHERE head_dept = 100

вычислить: количество отделов, являющихся подразделениями отдела 100 (Маркетинг и продажи), их суммарный, средний, мини- мальный и максимальный бюджеты

COUNT SUM AVG MIN MAX
5 3800000.00 760000.00 500000.00 1500000.00

Операции сравнения

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

Что же может быть элементом сравнения? Элементом сравнения может выступать:

значение поля

литерал

арифметическое выражение

агрегирующая функция

другая встроенная функция

значение (значения), возвращаемые подзапросом.

При сравнении литералов конечные пробелы игнорируются. Так, предложение WHERE first_name = 'Петр ' будет иметь тот же результат, что и предложение WHERE first_name = 'Петр'.

SELECT first_name, last_name, dept_no

FROM employee

WHERE job_code = "Admin"

получить список сотрудников (и номера их отделов), занимающих должность администраторов

FIRST_NAME LAST_NAME DEPT_NO
Terri Leev 000
Ann Bennet 120
Sue Anne O'Brien 670
Kelly Brown 600

SELECT first_name, last_name, dept_no,

  job_country

FROM employee

WHERE job_country <> "USA"

получить список сотрудников (а также номера их отделов и страну), работающих вне США

FIRST_NAME LAST_NAME DEPT_NO JOB_COUNTRY
Ann Bennet 120 England
Roger Reeves 120 England
Willie Stansbury 120 England
Claudia Sutherland 140 Canada
Yuki Ichida 115 Japan
Takashi Yamamoto 115 Japan
Roberto Ferrari 125 Italy
Jacques Glon 123 France
Pierre Osborne 121 Switzerland

BETWEEN

Предикат BETWEEN задает диапазон значений, для которого выражение принимает значение true. Разрешено также использовать конструкцию NOT BETWEEN.

SELECT first_name, last_name, salary

FROM employee

WHERE salary BETWEEN 20000 AND 30000

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

FIRST_NAME LAST_NAME SALARY
Ann Bennet 22935.00
Kelly Brown 27000.00

Тот же запрос с использованием операторов сравнения будет выглядеть следующим образом:

SELECT first_name, last_name, salary

FROM employee

WHERE salary >= 20000

AND salary <= 30000

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

FIRST_NAME LAST_NAME SALARY
Ann Bennet 22935.00
Kelly Brown 27000.00

Запрос с предикатом BETWEEN может иметь следующий вид:

SELECT first_name, last_name, salary

FROM employee

WHERE last_name BETWEEN "Nelson" AND "Osborne"

получить список сотрудников, фамилии которых начинаются с "Nelson" и заканчиваются "Osborne"

FIRST_NAME LAST_NAME SALARY
Robert Nelson 105900.00
Carol Nordstrom 42742.50
Sue Anne O'Brien 31275.00
Pierre Osborne 110000.00

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

SELECT first_name, last_name, salary

FROM employee

WHERE last_name BETWEEN "Nel" AND "Osb"

получить список сотрудников, фамилии которых находятся между "Nel" и "Osb"

FIRST_NAME LAST_NAME SALARY
Robert Nelson 105900.00
Carol Nordstrom 42742.50
Sue Anne O'Brien 31275.00

В данном примере значений "Nel" и "Osb" в базе данных нет. Однако, все сотрудники, входящие в диапазон, в нижней части которого начало фамилий совпадает с "Nel" (т.е. выполняется условие "больше или равно"), а в верхней части фамилия не более "Osb" (т.е. выполняется условие "меньше или равно" - а именно "O", "Os", "Osb"), попадут в выборку. Отметим, что при выборке с использованием предиката BETWEEN поле, на которое накладывается диапазон, считается упорядоченным по возрастанию.

Предикат BETWEEN с отрицанием NOT (NOT BETWEEN) позволяет получить выборку записей, указанные поля которых имеют значения меньше нижней границы и больше верхней границы.

SELECT first_name, last_name, hire_date

FROM employee

WHERE hire_date NOT BETWEEN "1-JAN-1989" AND "31-DEC-1993"

получить список самых "старых" и самых "молодых" (по времени поступления на работу) сотрудников

FIRST_NAME LAST_NAME HIRE_DATE
Robert Nelson 28-DEC-1988
Bruce Young 28-DEC-1988
Pierre Osborne 3-JAN-1994
John Montgomery 30-MAR-1994
Mark Guckenheimer 2-MAY-1994

IN

Предикат IN проверяет, входит ли заданное значение, предшествующее ключевому слову "IN" (например, значение столбца или функция от него) в указанный в скобках список. Если заданное проверяемое значение равно какому-либо элементу в списке, то предикат принимает значение true. Разрешено также использовать конструкцию NOT IN.

SELECT first_name, last_name, job_code

FROM employee

WHERE job_code IN ("VP", "Admin", "Finan")

получить список сотрудников, занимающих должности "вице-президент", "администратор", "финансовый директор"

FIRST_NAME LAST_NAME JOB_CODE
Robert Nelson VP
Terri Lee Admin
Stewart Hall Finan
Ann Bennet Admin
Sue Anne O'Brien Admin
Mary S. MacDonald VP
Kelly Brown Admin

А вот пример запроса, использующего предикат NOT IN:

SELECT first_name, last_name, job_country

FROM employee

WHERE job_country NOT IN

("USA", "Japan", "England")

получить список сотрудников, работающих не в США, не в Японии и не в Великобритании

FIRST_NAME LAST_NAME JOB_COUNTRY
Claudia Sutherland Canada
Roberto Ferrari Italy
Jacques Glon France
Pierre Osborne Switzerland

LIKE

Предикат LIKE используется только с символьными данными. Он проверяет, соответствует ли данное символьное значение строке с указанной маской. В качестве маски используются все разрешенные символы (с учетом верхнего и нижнего регистров), а также специальные символы:

% - замещает любое количество символов (в том числе и 0),

_ - замещает только один символ.

Разрешено также использовать конструкцию NOT LIKE.

SELECT first_name, last_name

FROM employee

WHERE last_name LIKE "F%"

получить список сотрудников, фамилии которых начинаются с буквы "F"

FIRST_NAME LAST_NAME
Phil Forest
Pete Fisher
Roberto Ferrari

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "%er"

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

FIRST_NAME LAST_NAME
Roger De Souza
Roger Reeves
Walter Steadman

А такой запрос позволяет решить проблему произношения (и написания) имени:

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "Jacq_es"

найти сотрудника(ов), в имени которого неизвестно произношение буквы перед окончанием "es"

FIRST_NAME LAST_NAME
Jacques Glon

Что делать, если требуется найти строку, которая содержит указанные выше специальные символы ("%", "_") в качестве информационных символов? Есть выход! Для этого с помощью ключевого слова ESCAPE нужно определить так называемый escape-символ, который, будучи поставленным перед символом "%" или "_", укажет, что этот символ является информационным. Escape-символ не может быть символом "\" (обратная косая черта) и, вообще говоря, должен представлять собой символ, никогда не появляющийся в упоминаемом столбце как информационный символ. Часто для этих целей используются символы "@" и "~".

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "%@_%" ESCAPE "@"

получить список сотрудников, в имени которых содержится "_" (знак подчеркивания)

CONTAINING

Предикат CONTAINING аналогичен предикату LIKE, за исключением того, что он не чувствителен к регистру букв. Разрешено также использовать конструкцию NOT CONTAINING.

SELECT first_name, last_name

FROM employee

WHERE last_name CONTAINING "ne"

получить список сотрудников, фамилии которых содержат буквы "ne", "Ne", "NE", "nE"

FIRST_NAME LAST_NAME
Robert Nelson
Ann Bennet
Pierre Osborne

IS NULL

В SQL-запросах NULL означает, что значение столбца неизвестно. Поисковые условия, в которых значение столбца сравнивается с NULL, всегда принимают значение unknown (и, соответственно, приводят к ошибке), в противоположность true или false, т.е.

WHERE dept_no = NULL

или даже

WHERE NULL = NULL.

Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов "IS NULL" имеет значение null (пусто, не определено). Разрешено также использовать конструкцию IS NOT NULL, которая означает "не пусто", "имеет какое-либо значение".

SELECT department, mngr_no

FROM department

WHERE mngr_no IS NULL

получить список отделов, в которых еще не назначены начальники

DEPARTMENT MNGR_NO
Marketing <null>
Software Products Div. <null>
Software Development <null>
Field Office: Singapore <null>

Предикаты EXIST, ANY, ALL, SOME, SINGULAR мы рассмотрим в разделе, рассказывающем о подзапросах.

Логические операторы

К логическим операторам относятся известные операторы AND, OR, NOT, позволяющие выполнять различные логические действия: логическое умножение (AND, "пересечение условий"), логическое сложение (OR, "объединение условий"), логическое отрицание (NOT, "отрицание условий"). В наших примерах мы уже применяли оператор AND. Использование этих операторов позволяет гибко "настроить" условия отбора записей.

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

Оператор OR означает, что общий предикат будет истинным, когда хотя бы одно из условий, связанных по "OR", будет истинным.

Оператор NOT означает, что общий предикат будет истинным, когда условие, перед которым стоит этот оператор, будет ложным.

В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем - AND и только после этого - оператор OR. Для изменения порядка выполнения операторов разрешается использовать скобки.

SELECT first_name, last_name, dept_no,

  job_code, salary

FROM employee

WHERE dept_no = 622

OR job_code = "Eng"

AND salary <= 40000

ORDER BY last_name

получить список служащих, занятых в отделе 622 или на должности "инженер" с зарплатой не выше 40000

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
Jennifer M. Burbank 622 Eng 53167.50
Phil Forest 622 Mngr 75060.00
T.J. Green 621 Eng 36000.00
Mark Guckenheimer 622 Eng 32000.00
John Montgomery 672 Eng 35000.00
Bill Parker 623 Eng 35000.00
Willie Stansbury 120 Eng 39224.06

SELECT first_name, last_name, dept_no,

  job_code, salary

FROM employee

WHERE (dept_no = 622

OR job_code = "Eng")

AND salary <= 40000

ORDER BY last_name

получить список служащих, занятых в отделе 622 или на должности "инженер", зарплата которых не выше 40000

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
T.J. Green 621 Eng 36000.00
Mark Guckenheimer 622 Eng 32000.00
John Montgomery 672 Eng 35000.00
Bill Parker 623 Eng 35000.00
Willie Stansbury 120 Eng 39224.06

Преобразование типов (CAST)

В SQL имеется возможность преобразовать значение столбца или функции к другому типу для более гибкого использования операций сравнения. Для этого используется функция CAST.

Типы данных могут быть конвертированы в соответствии со следующей таблицей:

Из типа данных В ти

Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.243 с.