Обновление данных или команда UPDATE

Назначение команды UPDATE – обновление существующих записей в указанной таблице. Указываем, где и чего хотим изменить, а после ключевого слова WHERE устанавливаем критерии отбора обновляемых записей. В команде обновления данных, как и в других SQL запросах, можно использовать подзапросы: например, можно определить в качестве присваиваемого полю значения результат подзапроса, который возвращает только одну колонку и одну строчку. UPDATE <таблица> SET {<поле> = <выражение>} [WHERE <список условий>] или UPDATE <таблица> SET {<поле> = (SELECT <значение> FROM <откуда> WHERE <список условий>)} [WHERE <список условий>] Добавление данных или команда INSERT Добавление новых записей в указанную таблицу. Здесь тоже ничего сложного. Указываем таблицу, список полей и список добавляемых в эти поля значений. Что может дать использование SQL подзапроса тоже догадаться несложно - копирование выбранного с помощью SELECT массива данных в указанную таблицу (в перечисленные через запятую поля). Естественно, что количество и тип колонок в запросе SELECT должен соответствовать количеству и типу полей таблицы, куда производится вставка. INSERT INTO <таблица> [(<список полей>)] VALUES (<список значений>) или INSERT INTO <таблица> [(<список полей>)] (SELECT <список значений> FROM <откуда> WHERE <список условий>) Удаление данных или команда DELETE Удаление строк из одной таблицы или сразу из нескольких таблиц, строки которых объединены условиями. Здесь все также очевидно. Указываем, из какой таблицы удаляем данные, а в части WHERE отбираем удаляемые данные. Во втором варианте SQL запроса с использованием инструкции DELETE показан обобщенный синтаксис удаления записей сразу из нескольких таблиц. В условиях отбора (в части WHERE) также можно использовать подзапросы.DELETE FROM <таблица> [WHERE <список условий>] или DELETE <список таблиц> FROM <список источников> [WHERE <список условий>]

29.Обзор дополнительных операций объединения полей, таких как FULL JOIN и CROSS JOIN,
UNION.

FULL JOIN - возвращает строки, когда есть хоть одно совпадение в любой из таблиц.

Синтаксис SQL FULL JOIN

SELECT column_name(s)

FROM table_name1

FULL JOIN table_name2

ON table_name1.column_name=table_name2.column_name

 

Есть таблица "Persons":

Есть таблица "Orders":

Теперь мы хотим получить список всех людей и заказов.

Для этого используем такой запрос:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsFULL JOIN OrdersON Persons.P_Id=Orders.P_IdORDER BY Persons.LastNameFULL JOIN - возвращает строки, когда есть хоть одно совпадение в любой из таблиц.

Синтаксис SQL FULL JOIN

SELECT column_name(s)

FROM table_name1

FULL JOIN table_name2

ON table_name1.column_name=table_name2.column_name

Есть таблица "Persons":

Есть таблица "Orders":

Теперь мы хотим получить список всех людей и заказов.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

FULL JOIN Orders

ON Persons.P_Id=Orders.P_Id

ORDER BY Persons.LastName

UNION - данный оператор используется для объединения запросов SELECT.

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

Синтаксис SQL UNION

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

Замечание:оператор UNION выбирает только разные значения. Чтобы разрешить выборку повторяющихся значений, используйте UNION ALL.

Синтаксис SQL UNION ALL

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

Итак, мы хотим перечислить "всех" возможные сотрудников в Norway и USA.

Для этого используем такой запрос:

SELECT E_Name FROM Employees_NorwayUNIONSELECT E_Name FROM Employees_USA

30.Работа с множествами. Операции IN и NOT INОператоры IN и NOT IN – это два SQL оператора для работы с множествами. Это еще один способ организовать критерии отбора записей с использованием конструкции WHERE. Ниже два простейших примера их использования, взятых из шага 18.Этот с операцией IN:

SELECT S_POSITION, COUNT(S_POSITION) AS [КОЛИЧЕСТВО S_POSITION]

FROM D_STAFF

WHERE S_POSITION IN (22,24)

GROUP BY S_POSITION

HAVING COUNT(S_POSITION)>1

А этот с операцией NOT IN>:

SELECT S_POSITION, COUNT(S_POSITION) AS [КОЛИЧЕСТВО S_POSITION]

FROM D_STAFF

WHERE S_POSITION NOT IN (23)

GROUP BY S_POSITION

HAVING COUNT(S_POSITION)>1

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

SELECT PROFILE_ID, COUNT(PROFILE_ID) AS [КОЛИЧЕСТВО S_POSITION]

FROM D_STAFF_PROFILE

WHERE PROFILE_ID NOT IN (SELECT XD_IID FROM D_PROFILE WHERE P_NAME LIKE'Ф%')

GROUP BY PROFILE_ID Множество, с которым имеет дело оператор NOT IN, формируется из значений XD_IID, отобранных внутренним SELECT. Здесь мы получим список идентификаторов профилей с количеством их связей в таблице D_STAFF_PROFILE. Наименования профилей не должны начинаться на букву ‘Ф’. Таким образом, мы не увидим в списке значения 21, 22, 23, которые соответствуют профилям, связанным с Финансами.