Назначение команды 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.OrderNo FROM Persons FULL JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName 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.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_Norway UNIONSELECT E_Name FROM Employees_USA30.Работа с множествами. Операции 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, которые соответствуют профилям, связанным с Ф инансами.