Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Краткие ответы.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
111.53 Кб
Скачать

Тема 3: Язык sql.

  1. Основные разделы языка SQL. Примеры операторов по каждому разделу.

Международный стандарт языка SQL реализован в наст.время в большинстве реляционных СУБД. Целью стандартизации является переносимость приложений между различными СУБД. Но во всех диалектах языка SQL существуют конструкции, не являющиеся стандартными. Использование таких конструкций с одной стороны расширяют возможности конкретных СУБД, а с другой затрудняют переносимость приложений. Язык SQL называют реляционно-полным, т.к. любая операция реляционной алгебры мб выражена через соответствующие операторы языка SQL. Хотя язык SQL и основан на реляционной теории, но в некоторых местах отходит от нее. Например, отношение в реляционной теории не может иметь одинаковых кортежей, а таблица в терминологии языка SQL может содержать одинаковые строки.

Язык SQL состоит из следующих подмножеств:

  1. язык определения данных DDL (Data Definition Language): его основные операторы CREATE, ALTER, DROP.

  2. язык манипулирования данными DML (Data Manipulation Language): SELECT, INSERT, UPDATE, DELETE.

  3. язык управления данными DCL (Data Control Language): GRANT(разрешение), DENY(запрещение), REVOKE(отмена разрешения и запретов)

  4. язык управления транзакциями TCL(Transaction Control Language): COMMIT, ROLLBACK

_____________________________________________________________________________

  1. Синтаксис оператора SELECT. Пример.

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

SELECT <список столбцов> FROM <список таблиц> [WHERE <условие выбора строк>] [GROUP BY <условие группировки>] [HAVING <условие выбора групп>][ORDER BY <условие сортировки>]

В предложении SELECT перечисленные имена столбцов в указанном порядке. Если имя столбца содержит разделение, например, пробелы, то оно заключается в скобки: [N студента]. Если разные таблицы имеют одинаковые имена столбцов, то такие имена записывают как составные: <имя таблицы>.<имя столбца>.

_____________________________________________________________________________

  1. Предложение SELECT и FROM оператора SELECT. Выборка. Исключение строк-дубликатов. Построение вычисляемых полей. Пример.

В предложении FROM перечисленные имена таблиц, которые содержат столбцы, указанные после слова SELECT. ПР., вывести всю информацию о деталях из таблицы D.

  • SELECT dnum, dname, dprice

  • FROM D.

Список всех столбцов заменяем символом *.

Чтобы удалить строки дубликаты используют оператор DISTINCT.

  • SELECT DISTINCT pnum

  • FROM PD.

DISTINCT можно задавать только 1 раз для одного оператора SELECT.

  1. Сравнение значений в предложении WHERE. Операции IN, BETWEEN. Пример.

WHERE. В нем указываются условия выборки строк, помещаемые в результирующую таблицу. Основные типы условий: сравнение значений атрибутов со скалярными выражениями, др. атрибутами и результатами вычисления выражений: <,>,>=, <=, <>, =, OR, AND, NOT.

Пример: вывести информацию о деталях болт и гайка.

  • SELECT *

  • FROM D

  • WHERE dname= ‘болт’ OR dname=’гайка

IN. Проверка на принадлежность множеству выполняется с помощью IN.

  • SELECT *

  • FROM D

  • WHERE dname IN (‘болт’,’гайка’).

BETWEEN. Проверка на принадлежность диапазону значений выполняется с помощью оператора BETWEEN. Оператор задает min и max границы диапазона, в которые должно попадать значение. Обе границы считываются принадлежащему диапазону. Пример: вывести информацию о деталях с ценой от 10 до 20 руб.

  • SELECT *

  • FROM D

  • WHERE dprice BETWEEN 10 AND 20

_____________________________________________________________________________

  1. Операции LIKE, IS NULL в предложении WHERE. Пример.

LIKE. Проверка строкового значения на соответствие шаблону выполняется с помощью оператора LIKE. Операция использования для поиска подстрок… ПР. вывести информацию о поставщиках начин. с буквы «и»

  • SELECT *

  • FROM P

  • WHERE pname LIKE ‘и%’

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

  • SELECT *

  • FROM D

  • WHERE dprice IS NULL

_____________________________________________________________________________

  1. Использование агрегатных функций в предложениях оператора SELECT. Пример.

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

Доступны следующие основные итоговые функции:

  1. Count определяет количество записей в выходном наборе SQL запроса;

  2. Min/Max 

  3. Avg среднее значение

  4. Sum 

ПР. определить общ. объем пост. деталей

  • SELECT SUM (volume) AS SUM

  • FROM PD

_____________________________________________________________________________

  1. Группировка с помощью предложения GROUP BY оператора SELECT. Пример.

Использование GROUP BY позволяет разбить табл. на логические группы и применять агрегатные функции к каждой из этих групп, в итоге получим единственное значение для каждой из групп. ПР. для кажд. поставщика вывести сумм. объем поставляемой детали

  • SELECT pnum, SUM (volume)

  • FROM PD

  • GROUP BY pnum

  1. Использование предложений GROUP BY и HAVING оператора SELECT. Пример.

Использование GROUP BY позволяет разбить табл. на логические группы и применять агрегатные функции к каждой из этих групп, в итоге получим единственное значение для каждой из групп. ПР. для кажд. поставщика вывести сумм. объем поставляемой детали

  • SELECT pnum, SUM (volume)

  • FROM PD

  • GROUP BY pnum

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

ПР.: вывести номера поставщиков, которые в сумме поставляют > 500 деталей.

  • SELECT pnum, SUM (volume)

  • FROM PD

  • GROUP BY pnum

  • HAVING SUM (volume) > 500

_____________________________________________________________________________

  1. Сортировка в операторе SELECT. Использование предложения TOP. Пример.

При выполнение запроса СУБД возвр. строки в случайно порядке, предложение ORDER BY позволяет упорядочить выходные данные. ПР.: отсортировать таблицу PD в порядке убывания номеров поставщиков.

  • SELECT *

  • FROM PD

  • ORDER BY pnum DESC, dnum ASC ASC – возрастающий порядок

  • HAVING SUM (volume) > 500 DESC – убывающий

Ограничивает число строк, возвращаемых в результирующем наборе запроса до заданного числа или процентного значения. Если предложение TOP используется совместно с предложением ORDER BY, то результирующий набор ограничен первыми N строками отсортированного результата. В противном случае возвращаются первые N строк в неопределенном порядке. ПР.: опр-ть номера первых двух деталей в таблице D.

  • SELECT TOP 2 dnum

  • FROM D

_____________________________________________________________________________

  1. Декартово произведение с помощью оператора SELECT. Соединение с помощью предложения WHERE. Пример.

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

  • SELECT *

  • FROM A, B

Чаще перечисление таблиц используется совместно с условием соединения записей из разных таблиц, указываемых в предложении WHERE (напр., соединение только тех строк таблиц, у которых в указанных полях находятся равные значения). ПР.:

a

b

1

2

2

1

c

d

2

4

3

3

a

b

c

d

1

2

2

4

1

2

3

3

2

1

2

4

2

1

3

3


  • SELECT *

  • FROM A, B

  • a

    b

    c

    d

    2

    1

    2

    4

    SELECT *
  • FROM A, B

  • WHERE a=c

  1. Типы соединений в предложении FROM. Пример.

  • INNER JOIN – внутреннее. В результирующий набор попадут только те соединения строк 2х таблиц, для которых значение предиката = true.

  • LEFT/RIGHT JOIN – левое/правое внешнее. В результирующий набор попадут все строки из левой/правой таблицы, при этом отсутствующие значения полей из правой/левой таблицы буду заполнены NULL- значениями.

  • FULL – полное внешнее.

A

b

c

d

2

1

2

4

ПР.:
  • SELECT *

  • FROM A INNER JOIN B ON A.a=B.c

  • A

    b

    c

    d

    1

    2

    null

    null

    2

    1

    2

    4

    SELECT *
  • FROM A LEFT JOIN B ON A.a=B.c

A

b

c

d

2

1

2

4

null

null

3

3


  • SELECT *

  • FROM A RIGHT JOIN B ON A.a=B.c

A

b

c

d

1

2

null

null

2

1

2

4

null

null

3

3


  • SELECT *

  • FROM A FULL JOIN B ON A.a=B.c

_____________________________________________________________________________

  1. Оператор объединения UNION. Пример.

Объед. запросы дб совместимы между собой, что в терминологии sql означает «они должны иметь одинаковое количество столбцов»

ПР.: вывести инф-ю о деталях. Для деталей, у кот-х не указана цена вывести: «цены нет».

  • Select dnum, dname, dprice

  • FROM D

  • WHERE dprice IS NOT NULL

  • UNION

  • SELECT dnum, dname, ‘цены нет

  • FROM D

  • WHERE dprice IS NULL

  • ORDER BY dnum

_____________________________________________________________________________

  1. Операторы вычитания EXCEPT и пересечения INTERSECT. Пример.

Вычит. запросы дб совместимы между собой, что в терминологии sql означает «они должны иметь одинаковое количество столбцов»

ПР.: вывести номера поставщиков, которые не поставляют детали в настоящее время.

  • Select pnum

  • FROM P

  • EXCEPT

  • SELECT pnum

  • SELECT dnum, dname, ‘цены нет

  • FROM D

Пересек. запросы дб совместимы между собой, что в терминологии sql означает «они должны иметь одинаковое количество столбцов»

ПР.: вывести номера деталей, которые поставщики с номерами 1 и 2.

  • Select dnum

  • FROM PD

  • WHERE pnum=1

  • INTERSECT

  • SELECT dnum

  • FROM PD

  • WHERE pnum=2

  1. Подзапросы. Классификация подзапросов. Пример простого скалярного подзапроса. Пример.

Подзапрос представляет собой оператор, вложенный в тело другого оператора.

По количеству возвращающих значений:

  1. Скалярные – возвращают одно значение

  2. Табличные – возвращают таблицу значений

По способу формирования:

  1. Простые – может выполняться независимо от вн. запроса.

  2. Сложные – не может рассм. независимо от вн. запроса

ПР.: определить наименование деталей, цена которых больше цены детали «болт»

  • SLECT dname

  • FROM D

  • WHERE dprice > (select dprice from D where dname=’болт’)

_____________________________________________________________________________

  1. Простые табличные подзапросы. Пример.

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

  • IN осуществляет проверку на принадлежащие значения множеству

ПР.: опр-ь наименование поставщиков, которые поставляют детали в настоящее время.

  • SELECT pname

  • FROM P

  • WHERE pnum IN (select pnum FROM PD)

  • ANY условие сравн. счит. выполн., когда оно выполняется хотя бы для одного знач.

ПР.: опр-ь наименование поставщиков, которые поставляют детали в настоящее время.

  • SELECT pname

  • FROM P

  • WHERE pnum = ANY (select pnum FROM PD)

  • ALL условие сравнения счит. выполн. если оно выполняется для всех значений, которое получается после выполнения подзапроса.

ПР.: Определить наименование детали с max ценой

  • SELECT pname

  • FROM D

  • WHERE dprice>=ALL (SELECT dprice FROM D)

_____________________________________________________________________________

  1. Сложные табличные подзапросы. Пример.

Результат выполнения таких операций – TRUE и FALSE. Для EXISTS – TRUE, если в возвращаемом подзапросе таблице есть хоть одна строка. Если таблица пуста то – FALSE.

Для NOT EXISTS используются обратные правила обработки.

ПР.: вывести наименование поставщиков, которые поставляют детали в наст. время

  • SELECT pname

  • FROM D

  • WHERE EXISTS (SELECT * FROM PD where PD.pnum=P.pnum)

_____________________________________________________________________________

  1. Оператор INSERT INTO…VALUES. Оператор UPDATE. Пример.

INSERT INTO < имя таблицы>

VALUES <список значений>

Если вставленные в таблицу значение столбцов в строгом соответствии с описанием таблицы, то список столбцов можно не указывать.

ПР.:

  • INSERT INTO P

  • VALUES (5, ‘Бугаков’)

  • INSERT INTO D (dnum, dname)

  • VALUES (10, ‘8’)

  1. Оператор INSERT INTO…SELECT. Оператор UPDATE. Пример.

INSERT INTO < имя таблицы>

<SELECT-оператор>

Данная форма оператора позволяет скопировать в существующую таблицу строки, которые отбирает оператор SELECT.

UPDATE < имя таблицы>

SET <стобец>

[WHERE <условие выбора строк>]

Данная форма оператора позволяет скопировать в существующую таблицу строки, которые отбирает оператор SELECT.

ПР.: увеличить цену детали «болт» на 10%

  • UPDATE D

  • SET dprice=dprice*1,1

  • WHERE dname= ‘болт

_____________________________________________________________________________

  1. Оператор UPDATE. Оператор DELETE. Пример.

UPDATE < имя таблицы>

SET <стобец>

[WHERE <условие выбора строк>]

Данная форма оператора позволяет скопировать в существующую таблицу строки, которые отбирает оператор SELECT.

ПР.: увеличить цену детали «болт» на 10%

  • UPDATE D

  • SET dprice=dprice*1,1

  • WHERE dname= ‘болт

DELETE [<таблица>]

FROM <список таблиц>

[WHERE <условие выбора строк>]

ПР.: удалить всю информацию из таблицы PD

  • DELETE

  • FROM PD

___________________________________________________________________________