Очковая коррекция пресбиопии. Подбор офисных очков

И над данными таблиц.

Язык SQL называют встроенным , т.к. он содержит функций полноценного языка разработки, а ориентируется на доступ к данным, вследствие чего он входит в состав средств разработки приложений. Стандарты языка SQL поддерживают языки программирования Pascal, Fortran, COBOL, С и др.

Существует 2 метода использования встроенного SQL :

  • статическое использование языка (статический SQL ) – в тексте программы содержатся вызовы функций SQL, которые включают в исполняемый модуль после компиляции.
  • динамическое использование языка (динамический SQL ) – динамическое построение вызовов функций SQL и их интерпретация. Например , можно обратиться к данным удаленной БД в процессе выполнения программы.

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

Определение 1

Представление – это таблица, которая формируется в результате выполнения запроса.

Основные операторы языка запросов SQL

Операторы языка SQL условно разделяются на 2 подъязыка :

  1. Язык определения данных DDL ;
  2. Язык манипулирования данными DML .

В таблице символом * помечены специфические операторы языка.

Рассмотрим важнейшие операторы SQL.

    Оператор создания таблицы:

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

    Для отдельных полей можно указывать дополнительные правила контроля значений, которые в них вводятся. Например, NOT NULL обозначает, что поле не может быть пустым и в него должно быть введено значение.

    Пример 1

    Для создания таблицы books каталога книг, которая содержит поля:

    type – тип книги,

    name – название книги,

    price – цена книги

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

    Оператор изменения структуры таблицы:

    При изменении структуры таблицы можно добавлять (ADD ), изменять (MODIFY ) или удалять (DROP ) один или несколько столбцов таблицы. Правила записи данного оператора такие же, как и для оператора CREATE TABLE . Чтобы удалить столбец указывать не нужно.

    Пример 2

    Для добавления к таблице books поля number , в котором будет храниться количество книг, можно записать оператор:

    Оператор удаления таблицы:

    Пример 3

    Например, чтобы удалить существующую таблицу с именем books достаточно воспользоваться оператором:

    Оператор создания индекса:

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

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

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

    Оператор удаления индекса:

    Оператор создания представления:

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

    Оператор удаления представления:

    Оператор выборки записей:

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

    Операнд FROM содержит список таблиц, из которых берутся записи для отбора данных.

    Оператор изменения записей:

    Новые значения полей в записях могут не содержать значений (NULL ) или вычисляться согласно арифметическому выражению.

    Оператор вставки новых записей:

    В первой записи оператора INSERT вводятся новые записи с заданными значениями в столбцах.

    Во втором записи оператора INSERT вводятся новые строки, отобранные из другой таблицы через предложение SELECT .

    Оператор удаления записей:

    В результате выполнения оператора удаляются из указанной таблицы строки, удовлетворяющие условию, которое определено необязательным операндом WHERE . Если операнд WHERE не указан, то удаляются все записи таблицы.

Дисциплина: Базы данных

Операторы языка SQL

Язык SQL включает в себя операторы разных катего­рий. Любой SQL-оператор состоит из зарезервированных слов и слов, опре­деляемых пользователем в соответствии с установленными синтаксическими правилами. Как и во многих языках программирования, большинство ком­понентов операторов языка не чувствительны к регистру. Исключение из этого правила как обычно составляют символьные данные, при задании ко­торых необходимо помнить о регистре и использовать тот, который необхо­дим для представления данных.

Для записи операторов в языке принят свободный формат, позволяющий посредством отступов и выравниваний придать SQL-программе более чита­бельный вид.

    каждая фраза в операторе должна начинаться с новой строки;

    начало каждой фразы должно быть выровнено с началом остальных фраз оператора;

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

    для записи операторов применяются некоторые соглашения:

    для записи зарезервированных слов используются прописные буквы;

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

    вертикальная черта "|"" указывает на необходимость выбора одного из не­скольких значений;

    фигурные скобки определяют обязательный элемент;

    квадратные скобки определяют необязательный элемент;

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

Операторы определения данных (табл.1) применяются для описания структур используемых данных. В состав этой категории входят следующие операторы: create table, drop table, alter table, create view, ALTER VIEW, DROP VIEW.

Таблица 1 . Операторы определения данных

Оператор Пояснение

create table Создать таблицу

DROP table Удалить таблицу

alter table Изменить таблицу

CREATE VIEW Создать представление

alter view Изменить представление

drop view Удалить представление

Операторы манипулирования данными, образующие следующую категорию операторов, предназначены для заполнения таблиц данными и для обновле­ния загруженной в них информации. К данной категории относятся сле­дующие операторы: delete, insert, update (табл.2).

Таблица 2 . Операторы манипулирования данными

Оператор Пояснение

Delete Удаляет одну или несколько строк, соответствующих условиям

фильтрации, из базовой таблицы

INSERT Вставляет одну строку в базовую таблицу

update Обновляет значения одного или нескольких столбцов в одной или

нескольких строках, соответствующих условиям фильтрации

Для выборки информации из базы данных предназначен язык запросов, ко­торый в языке SQL представлен одним оператором select (табл.3).

Таблица 3. Язык запросов

Оператор Пояснение

select Выбирает строки; оператор, позволяющий сформировать результирующую

таблицу, соответствующую запросу

Кроме указанных категорий операторов, назначение которых не сложно представить, прочитав пояснения в таблицах, необходимо выделить еще две: операторы управления транзакциями (табл. 4) и средства администриро­вания данных (табл. 5).

Таблиц 4. Управление транзакциями

Оператор Пояснение

commit Завершить транзакцию- завершить обработку информации,

объединенную в транзакцию

rollback Откатить транзакцию- отменить изменения, проведенные в ходе выполнения

состояние БД, пометить его для то­го, чтобы можно было в дальнейшем к нему вернуться

Таблица 5 . Администрирование данных

Оператор Пояснение

ALTER DATABASE Изменить набор основных объектов в базе данных, ограниче­ний, касающихся

всей базы данных

ALTER DBAREA Изменить ранее созданную область хранения

ALTER PASSWORD Изменить пароль для всей базы данных

CREATE DATABASE Создать новую базу данных

CREATE DBAREA Создать новую область хранения и сделать ее доступной для размещения

DROP DATABASE Удалить существующую базу данных

DROP DBAREA Удалить существующую область хранения (если в ней на на­стоящий момент не

располагаются активные данные)

GRANT Предоставить права доступа на ряд действий над некоторым объектом БД

REVOKE Лишить прав доступа к некоторому объекту или некоторым действиям над

объектом

В коммерческих СУБД набор основных операторов расширен. В большин­ство СУБД включены операторы определения и удаления индекса запуска хранимых процедур и операторы определения триггеров.

Начинать знакомство с данным языком принято с рассмотрения возможно­стей языка запросов, который в языке SQL представлен одним оператором select, потому что этот мощный оператор, естественно, является и самым сложным. К тому же в дальнейшем интересно посмотреть, как его можно использовать совместно с операторами манипулирования данными.

    Оператор выбора SELECT . Формирование запросов к базе данных

Назначение оператора selecт состоит в выборке и отображении данных од­ной или нескольких таблиц БД. Этот исключительно мощный, наиболее часто используемый оператор реализует все операции реляционной алгебры. Один и тот же запрос может быть реализован несколькими способами, которые могут су­щественно отличаться по времени исполнения.

Формат оператора select:

SELECT *|<список полей> FROM <список таблиц>

Указанный порядок следования фраз в операторе select не может быть из­менен, но не все его части являются обязательными. К обязательным пред­ложениям относятся только фразы select и from. Все остальные части опе­ратора могут быть использованы по усмотрению программиста. Пояснение:

□ Фраза select :

Наличие ключевого слова all (по умолчанию) означает, что в резуль­тирующую таблицу включаются все строки, удовлетворяющие услови­ям запроса, что может привести к появлению в результирующей таб­лице одинаковых строк;

Ключевое слово distinct предназначено для приведения таблицы в соответствие с принципами теории отношений, где предполагается отсутствие дубликатов строк;

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

□ Во фразе from задается перечень исходных таблиц запроса.

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

Сравнения "= , <>, >, <, >=, <=" - для сравнения результатов вы­числения двух выражений; более сложные выражения строятся с по­мощью логических операторов AND, OR, NOT; значения выражений вычисляются в порядке, который определяется приоритетом исполь­зуемых операторов и наличием скобок в выражении;

between А and В - предикат истинен, когда вычисленное значение выражения попадает в заданный диапазон (предикат not between a and В истинен тогда, когда сравниваемое значение не попадает в заданныйинтервал);

in - предикат истинен тогда, когда сравниваемое значение входит в множество заданных значений; при этом множество значений может быть задано простым перечислением или встроенным подзапросом (предикат not in истинен тогда, когда сравниваемое значение не вхо­дит в заданное множество);

like и not like - предикаты, смысл которых противоположен, тре­буют задания шаблона, с которым сравнивается заданное значение; предикат like истинен тогда, когда сравниваемое значение соответст­вует шаблону, и ложен в противном случае;

IS null - предикат, применяющийся для выявления равенства зна­чения некоторого атрибута неопределенному значению:

    <имя атрибута> IS null - принимает значение true, если в дан­ной строке указанный атрибут имеет неопределенное значение и значение false, в противном случае;

    <имя атрибута> IS NOT null - все происходит наоборот.

exist и not exist , используемые во встроенных подзапросах.

□ Во фразе group by задается список полей группировки.

□ Во фразе having задаются предикаты-условия, накладываемые на каждую группу.

□ Во фразе order by задается список полей упорядочения результата, то есть список полей, который определяет порядок сортировки в результи­рующей таблице.

В стандарте SQL определено понятие NULL-значения, которое вызвало необхо­димость применения трехзначной логики, где все логические операции выпол­няются в соответствии с приведенной ниже таблицей истинности (табл.6).

Таблица 6 . Таблица истинности

A AND B

Т RUE

1.1. Простые запросы

Запрос 1

Вывести сведения о кафедрах университета.

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

SELECT * FROM kafedra

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

Kod kaf

Name kaf

Nom_telef

Nom_Auditoria

Col_sotr

Иванов Т.М.

Общей математики

Махов К Л.

Росс Л.Т.

Фирсов С.С.

Прикладной математики

Ляхова И.Т.

Запрос 2

Вывести номера телефонов кафедр университета.

Результат такого запроса должен содержать только два столбца: Name _ kaf и Nom _ telef , поэтому сам запрос должен выглядеть следующим образом:

SELECT Name_kaf, Nom_telef FROM kafedra

Результирующая таблица:

Name kaf Nomjelef

Физики 23-34-24

Общей математики 23-65-43

Истории 23-78-72

Графики 23-99-77

Прикладной математики 23-66-62

В сформированных выше запросах требовалось вывести все строки таблицы, указанной в предложении from. Если при выборке требуется ограничить ко­личество выводимых строк в соответствии с каким-то условием, то этого можно достичь, используя в запросе предложение where. В предложение where можно включить одно или несколько условий отбора строк.

Запрос 3

Вывести сведения о кафедре графики.

SELECT * FROM kafedra WHERE Name_kaf = "Графики"

Ответ на такой запрос будет содержать только одну строку:

Kod.kaf Name_kaf Nomjelef Nom_Auditoria Col_sotr Zav_kaf

004 Графики 23-99-77 385 18 Фирсов C.C.

Запрос 4

Вывести сведения о кафедрах университета, находящихся на первом этаже, учитывая тот факт, что номера аудиторий первого этажа лежат в диапазо­не от 1 до 99.

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

SELECT * FROM kafedra WHERE Nom_Auditoria BETWEEN 1 AND 99

Результат запроса:

Kodjcaf Name_kaf Norn lelef Norn Audit oria Coi_sotr Zavkaf

002 Общей мате- 23-65-43 003 22 Махов К.Л.

математики

В общем случае строки в результирующей таблице выводятся в неупорядоченном каким-либо образом состоянии. Просматривать и анализировать такой материал не всегда удобно. Для сортировки строк по какому-либо столбцу применяется фраза order by. Она включает список разделенных запятыми наименований столбцов, по которым требуется упорядочить вы­водимую информацию. Данная фраза должна всегда располагаться последней в операторе select и при ее наличии появляется возможность отсортировать строки по возрастанию (asc) или убыванию (desc) значений указанного столбца или комбинации указанных столбцов, независимо о" того, присутствуют эти столбцы в результирующей таблице или нет.

Запрос 5

Вывести сведения о кафедрах университета в виде, отсортированном т столбцу Name _ kaf в порядке возрастания.

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

SELECT * FROM kafedra ORDER BY Name_caf ASC

Результат данного запроса:

Kod_kaf Name_kaf Nomjelef Nom_Auditoria Col_sotr Zav kaf

004 Графики 23-Э9-77 385 18 ФирсовС.С.

003 Истории 23-78-72 465 16 Росс Л.Т.

002 Общей ма- 23-65-43 003 22 Махов К.Л.

тематики

005 Прикладной 23-66-62 028 24 Ляхова И.Т.

математики

001 Физики 23-34-24 132 25 Иванов Т.М.

Часто для улучшения наглядности выводимую информацию полезно отсор­тировать по нескольким столбцам. Для этого имена столбцов сортировки необходимо перечислить через запятую во фразе order by. При этом выво­димая таблица будет содержать строки, упорядоченные по первому указан­ному во фразе order by столбцу, а строки, имеющие равные значения в этом столбце, будут упорядочены по значениям второго столбца и т. д. слева направо.

Как уже говорилось, в 1970-х годах Эдгар Кодд предложил использовать реляционную модель. Помимо самой модели, он так же предложил язык для работы с данными в рамках этой модели, названный DSL/Alpha. Впоследствии, на основе DSL/Alpha появился язык SQUARE, а на его основе, в свою очередь, язык SEQUEL, который (ввиду некоторой путаницы в торговых марках) был переименован позже в SQL.

Здесь constraint_* может иметь следующие значения (или их комбинации):

  • NOT NULL – не может быть “пустым”
  • UNIQUE – значение уникально
  • PRIMARY KEY – комбинация первых двух
  • FOREIGN KEY – указание внешнего ключа
  • CHECK – значение должно удовлетворять условию
  • DEFAULT – значение по умолчанию

Присутствуют некоторые разночтения в разных реализациях.

Если первичный ключ состоит из нескольких столбцов, необходимо выносить его после объявления столбцов в виде

CONSTRAINT pk_table PRIMARY KEY (col1, col2, .. .)

где pk_table – уникальное название ограничения.

Во многих реализациях, часть CONSTRAINT pk_table можно опустить. В таком случае имя будет сгенерировано автоматически.

Внешний ключ в любом случае объявляется после объявления колонок.

Синтаксис:

CONSTRAINT fk_table FOREIGN KEY (col1, .. .) REFERENCES tbl_name (ref_col1, .. .) ON UPDATE upd_action ON DELETE del_action;

где fk_table – уникальное название ограничения, col1, ... – названия колонок данной таблицы, входящих во внешний ключ, tbl_name – таблица, для которой указанный внешний ключ является первичным, ref_col1, ... – названия соответствующих колонок в tbl_name . upd_action и del_action определяют, как БД реагирует на изменение и удаление записей из tbl_name , и могут принимать одно из значений:

  • SET NULL – ссылающиеся колонки col1, ... устанавливается в NULL
  • RESTRICT – если есть записи, ссылающиеся на обновляемое/удаляемое значение, обновление/удаление завершается ошибкой
  • CASCADE – обновляет/удаляет все ссылающиеся записи
  • NO ACTION – ничего не делать

Во многих реализациях, часть CONSTRAINT fk_table можно опустить. В таком случае имя будет сгенерировано автоматически.

Синтаксис оператора SELECT имеет следующий вид:

SELECT <список атрибутов>/* FROM <список таблиц>

В квадратных скобках указываются элементы, которые могут в запросе отсутствовать.

Выдать список всех студентов .

SELECT * FROM student

SELECT id_st, surname FROM student

Заметим, что если добавить к данному запросу предложение ORDER BY surname, то список будет упорядочен по фамилии. По умолчанию подразумевается, что сортировка производится по возрастанию. Если необходимо упорядочение по убыванию, после имени атрибута добавляется слово DESC .

Выдать список оценок, которые получил студент с кодом "1" .

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

В предложении WHERE можно записывать выражение с использованием арифметических операторов сравнения (<, >, и т.д.) и логических операторов (AND, OR, NOT ) как и в обычных языках программирования.

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

  • IN – вхождение в некоторое множество значений;
  • BETWEEN – вхождение в некоторый диапазон значений;
  • LIKE – проверка на совпадение с образцом;
  • IS NULL – проверка на неопределенное значение.

Оператор IN используется для проверки вхождения в некоторое множество значений. Так, запрос

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

Того же результата можно добиться, используя оператор BETWEEN :

Выдать список всех студентов, фамилии которых начинаются с буквы А .

В этом случае удобно использовать оператор LIKE .

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

_ (символ подчеркивания) – замещает любой одиночный символ;

% (знак процента) – замещает последовательность любого числа символов.

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

  • MIN – минимальное значение в столбце;
  • MAX – максимальное значение в столбце;
  • SUM – сумма значений в столбце;
  • AVG – среднее значение в столбце;
  • COUNT – количество значений в столбце, отличных от NULL.

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

SELECT AVG(mark) FROM mark_st

Естественно, можно использовать агрегатные функции совместно с предложением WHERE :

Данный запрос вычислит средний балл студента с кодом 100 по результатам всех сданных им экзаменов.

Данный запрос вычислит средний балл студентов по результатам сдачи экзамена с кодом 10.В дополнение к рассмотренным механизмам