Язык программирования SQL

 Язык программирования SQL

[quote]
Содержание
1. Оператор выбора SELECT
2. Операции в SQL
2.1. Операции сравнения
2.2. Равенство
2.3. Неравенство
2.4. „Меньше" и „больше"
3. Примеры комбинирования операций сравнения
4. Логические операции
4.1. IS NULL
4.2. BETWEEN
4.3. IN
4.4. LIKE
4.5. EXISTS
4.6. UNIQUE
4.7. ALL И ANY
5. Операции конъюнкции и дизъюнкции
5.1. AND
5.2. OR
6. Отрицание условий с помощью операции отрицания
6.1. Неравенство
6.2. NOT BETWEEN
6.3. NOT IN
6.4. NOT LIKE
6.5. IS NOT NULL
6.6. NOT EXISTS
6.7. NOT UNIQUE
7. Арифметические операции
7.1. Сложение
7.2. Вычитание
7.3. Умножение
7.4. Деление
8. Комбинирование арифметических операций
9. Список литературы

1.Оператор выбора SELECT
Язык запросов ( Data Query Language ) в SQL состоит из единственного оператора SELECT . Этот единственный оператор поиска реализует все операции реляци¬ онной алгебры. Как просто, всего один оператор. Однако писать запросы на языке SQL (грамотные запросы) сначала совсем не просто. Надо учиться, так же как надо учиться решать математические задачки или составлять алгоритмы для решения непростых комбинаторных задач. Один и тот же запрос может быть реализован несколькими способами, и, будучи все правильными, они, тем не ме¬ нее, могут существенно отличаться но времени исполнения, и это особенно важ¬ но для больших баз данных.
Синтаксис оператора SELECT имеет следующий вид:
SELECT [ALL | DISTINCT] < список полей >|*)
FROM < Слисок таблиц >
[ WHERE < Предикат - условие выборки или соединения >]
[ GROUP BY < Список полей результата >]
[ HAVING < Предикат - условие для группы >]
[ ORDER BY < Список полей , по которым упорядочить вывод >]
Здесь ключевое слово ALL означает, что в результирующий набор строк включа¬ются все строки, удовлетворяющие условиям запроса. Значит, в результирующий набор могут попасть одинаковые строки. И это нарушение принципов теории отношений (в отличие от реляционной алгебры, где по умолчанию предполага¬ется отсутствие дубликатов в каждом результирующем отношении). Ключевое слово DISTINCT означает, что в результирующий набор включаются только раз¬ личные строки, то есть дубликаты строк результата не включаются в набор.
Символ *. (звездочка) означает, что в результирующий набор включаются все столбцы из исходных таблиц запроса.
В разделе FROM задается перечень исходных отношений (таблиц) запроса. В разделе WHERE задаются условия отбора строк результата или условия соедине¬ ния кортежей исходных таблиц, подобно операции условного соединения в реляционной алгебре.
В разделе GROUP BY задается список полей группировки.
В разделе HAVING задаются предикаты-условия, накладываемые на каждую группу.
В части ORDER BY задается список полей упорядочения результата, то есть список полей, который определяет порядок сортировки в результирующем отношении. Например, если первым полем списка будет указана Фамилия, а вторым Номер группы, то в результирующем отношении сначала будут собраны в алфавтном порядке студенты, и если найдутся однофамильцы, то они будут расположены в порядке возрастания номеров групп.
В выражении условий раздела WHERE могут быть использованы следующие предикаты:
• Предикаты сравнения {=, , >, =, IS NULL и < имя атрибута > IS NOT NULL.
Если в данном кортеже (в данной строке) указанный атрибут имеет неопределенное значение, то предикат IS NULL принимает значение «Истина» ( TRUE ), а предикат IS NOT NULL — «Ложь» ( FALSE ), в противном случае предикат IS NULL принимает значение «Ложь», а предикат IS NOT NULL принимает значение «Истина».
Введение Null -значений вызвало необходимость модификации классической дву¬значной логики и превращения ее в трехзначную. Все логические операции, производимые с неопределенными значениями, подчиняются этой логике в соот¬ ветствии с заданной таблицей истинности:
А В Not A AAB A V В
TRUE TRUE FALSE TRUE TRUE
TRUE FALSE FALSE FALSE TRUE
TRUE Null FALSE Null TRUE
FALSE TRUE TRUE FALSE TRUE
FALSE FALSE TRUE FALSE FALSE
FALSE Null TRUE FALSE Null
Null TRUE Null Null TRUE
Null FALSE Null FALSE Null
Null Null Null Null Null
Q Предикаты существования EXIST и несуществования NOT EXIST . Эти предикаты относятся к встроенным подзапросам, и подробнее мы рассмотрим их, когда коснемся вложенных подзапросов.
В условиях поиска могут быть использованы все рассмотренные ранее предикаты.
Отложив на время знакомство с группировкой, рассмотрим детально первые три строки оператора SELECT :
• SELECT — ключевое слово, которое сообщает СУБД, что эта команда — запрос. Все запросы начинаются этим словом с доследующим пробелом, За ним может следовать способ выборки — с удалением дубликатов ( DISTINCT ) или без удаления ( ALL , подразумевается по умолчанию). Затем следует список перечисленных через запятую столбцов, которые выбираются запросом из таблиц, или символ '*' (звездочка) для выбора всей строки. Любые столбцы, не перечисленные здесь, не будут включены в результирующее отношение, соответствующее выполнению команды. Это, конечно, не значит, что они будут удалены или их информация будет стерта из таблиц, потому что запрос не воздействует на информацию в, таблицах — он только показывает данные.
• FROM — ключевое слово, подобно SELECT , которое должно быть представлено в каждом запросе. Оно сопровождается пробелом и затем именами таблиц, используемых в качестве источника информации. В случае если указано более одного имени таблицы, неявно подразумевается, что над перечисленными таблицами осуществляется операция декартова произведения. Таблицам можно присвоить имена-псевдонимы, что бывает полезно для осуществления операции соединения таблицы с самой собою или для доступа из вложенного подзапроса к текущей записи внешнего запроса (вложенные подзапросы здесь не рассматриваются).

Все последующие разделы оператора SELECT являются необязательными.
Самый простой запрос SELECT без необязательных частей соответствует просто декартову произведению. Например, выражение
SELECT * FROM Rl,. R 2
соответствует декартову произведению таблиц R 1 и R 2. Выражение
SELECT Rl.A. R2.B FROM Rl. R 2
соответствует проекции декартова произведения двух таблиц на два столбца А из таблицы R 1 и В из таблицы R 2, при этом дубликаты всех строк сохранены, в отличие от операции проектирования в реляционной алгебре, где при проектиро¬ вании по умолчанию все дубликаты кортежей уничтожаются.
• WHERE — ключевое слово, за которым следует предикат — условие, налагаемое на запись в таблице, которому она должна удовлетворять, чтобы попасть в выборку, аналогично операции селекции в реляционной алгебре.
Рассмотрим базу данных, которая моделирует сдачу сессии в некотором учебном заведении. Пусть она состоит из трех отношений R 1 , R 2 , R3- Будем считать, что они представлены таблицами R1 , R 2 и R 3 соответственно.

R1=- (ФИО, Дисциплина, Оценка); R 2 = (ФИО, Группа);
R3=(Группы, Дисциплина >


R1
ФИО Дисциплина Оценка
Петров Ф. И. Базы данных ; 5
Сидоров К. А. Базы данных 4
Миронов А. В. Базы данных 2
Степанова К. Е. Базы данных 2
Крылова Т. С. Базы данных 5
Сидоров К. А. Теория информации 4
Степанова К. Е. Теория информации 2
Крылова Т. С. Теория информации 5
Миронов А. В. Теория информации Null
Владимиров В. А. Базы данных 5
Трофимов П. А. Сети и телекоммуникации 4
Иванова Е. А. Сети и телекоммуникации 5
Уткина Н. В. Сети и телекоммуникации 5
Владимиров В. А. Английский язык 4
Трофимов П. А. Английский язык 5
Иванова Е. А. Английский язык 3
Петров Ф. И. Английский язык 5
R2
ФИО Группа
Петров Ф. И. 4906
Сидоров К. А. 4906
Миронов А. В. 4906
Крылова Т. С. 4906
Владимиров В. А. 4906
Трофимов П. А. 4807
Иванова Е. А. 4807
Уткина Н. В. 4807
R3
Группа Дисциплина
4906 Базы данных
4906 Теория информации
4906 Английский язык
4807 Английский язык
4807 Сети и телекоммуникации
Приведем несколько примеров использования оператора SELECT .
• Вывести список всех групп (без повторений), где должны пройти экзамены.
SELECT DISTINCT Группы FROM R3
Результат:
Группа
4906
4807
• Вывести список студентов, которые сдали экзамен по дисциплине «Базы данных» на «отлично».
SELECT ФИО
FROM R 1
WHERE Дисциплина = " Базы данных " AND Оценка = 5
Результат:
ФИО
Петров Ф. И.
Крылова Т. С.

• Вывести список всех студентов, которым надо сдавать экзамены с указанием названий дисциплин, по которым должны проводиться эти экзамены.
SELECT ФИО , Дисциплина
FROM R2.R3
WHERE R2.Группа =R 2.Группа :
Здесь часть WHERE задает условия соединения отношений R 2 и R 3, при отсутствии условий соединения в части WHERE результат будет эквивалентен расширенному декартову произведению, и в этом случае каждому студенту были бы приписаны все дисциплины из отношения R 3, а не те, которые должна сдавать его группа.
Результат:
ФИО Дисциплина
Петров Ф. И. Базы данных
Сидоров К. А. Базы данных
Миронов А. В. Базы данных
Степанова К. Е. Базы данных
Крылова Т. С. Базы данных
Владимиров В. А. Базы данных
Петров Ф. И. Теория информации
Сидоров К. А. Теория информации
Миронов А. В. Теория информации
Степанова К. Е. Теория информации
Крылова Т. С. Теория информации
Владимиров В. А. 'Теория информации
Петров Ф. И. Английский язык
Сидоров К. А. Английский язык
Миронов А. В. Английский язык
Степанова К. Е. Английский язык
Крылова Т. С- Английский язык
Владимиров В. А. Английский язык
Трофимов П. А. Сети и телекоммуникации
Иванова Е. А. Сети и телекоммуникации
Уткина Н. В. Сети и телекоммуникации
Трофимов П. А. Английский язык
Иванова Е. А. Английский язык
Уткина К. Е. Английский язык
• Вывести список лентяев, имеющих несколько двоек.
SELECT DISTINCT R1.ФИО
FROM R1 a. R2 b :
WHERE a. ФИО =- Ь .ФИО AND
a. Дисциплина b. Дисциплина AND
а.Оценка

Толық нұсқасын 30 секундтан кейін жүктей аласыз!!!


Қарап көріңіз 👇


Пайдалы сілтемелер:
» Туған күнге 99 тілектер жинағы: өз сөзімен, қысқаша, қарапайым туған күнге тілек
» Абай Құнанбаев барлық өлеңдер жинағын жүктеу, оқу
» Дастархан батасы: дастарханға бата беру, ас қайыру