- •Лекция 6 команды категории извлечения данных структурированного языка запросов sql
- •Выборка определенных столбцов таблицы
- •Устранение избыточных данных
- •Устранение избыточных данных
- •Пример 3. Выбрать сведения о сотрудниках отдела о100, индивидуальный коэффициент которых выше 1,5.
- •Объединение записей в многотабличном запросе в субд access (sql ядра Jet).
- •Специальные операторы в условиях (in, between, like)
- •Пример 8. Выбрать сведения о сотрудниках, принятых на работу в период с 2000 по 2005 годы, оклады которых находятся в пределах от до 250 000 до 500000 ден. Ед.
Пример 3. Выбрать сведения о сотрудниках отдела о100, индивидуальный коэффициент которых выше 1,5.
SELECT ФИО, [Код отдела], [Индивидуальный коэффициент]
FROM Штаты
WHERE [Код отдела])="О100" AND [Индивидуальный коэффициент] >1.5;
ФИО |
Код отдела |
Индивидуальный коэффициент |
Белов П.Д. |
О100 |
1,8 |
Пашков А.А |
О100 |
1,6 |
Рожков А.Р. |
О100 |
1,6 |
Кроме того, в предложении WHERE может указываться условие связывания таблиц, если выбор производится не из одной таблицы, а из нескольких.
Таким образом, SQL-запрос обеспечивает возможность определять связи между множеством таблиц и отображать содержащуюся в них информацию в терминах этих связей в рамках единственной команды. Операции такого рода называются соединением (join) и являются одним из самых мощных преимуществ реляционных БД.
Объединение записей в многотабличном запросе в SQL ANSI
При операции соединения имена таблиц перечисляются через запятую в предложении FROM. Предикат (условие) запроса может ссылаться на любой столбец любой из соединяемых таблиц и использоваться для установления связей между ними. Записи из двух таблиц объединяются при обнаружении совпадающих значений в объединяемых полях. При этом поля должны иметь одинаковый тип данных, но могут иметь разные имена. Обычно предикат сравнивает значения в столбцах различных таблиц для того, чтобы определить, выполняется ли условие WHERE.
Например,
Должности.[Код должности] = Штаты.[Код должности] или
Отделы.[Код отдела]= Штаты.[Код отдела]
Объединение записей в многотабличном запросе в субд access (sql ядра Jet).
Для любой пары связных таблиц может быть выбран один из трех способов объединения записей:
-
способ 1 – объединение только тех записей, в которых связные поля обеих таблиц совпадают. В этом случае SQL ядра Access объединяет их, используя операцию INNER JOIN как часть параметра FROM. Объединение производится при условии равенства полей, приведенных после ключевого слова ON, в записях таблиц, указанных в операции INNER JOIN. Например,
FROM Отделы INNER JOIN [Штаты]
ON Отделы.[Код отдела] = [Штаты].[Код отдела]
-
способ 2 – объединение тех записей, в которых связные поля обеих таблиц совпадают, а также объединение всех записей из первой таблицы, для которых нет связных во второй, с пустой записью второй таблицы. В этом случае SQL ядра Access объединяет их, используя операцию LEFT JOIN (левое внешнее объединение) как часть параметра FROM. Объединение производится при условии равенства полей, приведенных после ключевого слова ON, в записях таблиц, указанных в операции LEFT JOIN. Например,
FROM Отделы LEFT JOIN [Штаты]
ON Отделы.[Код отдела] = [Штаты].[Код отдела]
Самостоятельно: В таблицу Отделы добавьте Отдел Дизайна (код О107) и проверьте объединение на примере любого запроса. Удалите внесенную запись.
-
способ 3 – объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из второй таблицы, для которых нет связанных в первой, с пустой записью первой таблицы. В этом случае SQL ядра Access объединяет их, используя операцию RIGHT JOIN (правое внешнее объединение) как часть параметра FROM. Объединение производится при условии равенства полей, приведенных после ключевого слова ON, в записях таблиц, указанных в операции RIGHT JOIN. Например,
FROM Отделы RIGHT JOIN [Штаты]
ON Отделы.[Код отдела] = [Штаты].[Код отдела]
Самостоятельно. В таблицу Штаты добавьте запись, касающуюся сотрудника, работающего в отделе О107 и проверьте объединение на примере любого запроса. При этом в таблицу Отделы отдел с кодом О107 добавлять не нужно. Удалите внесенную запись.
SQL ANSI при любом способе объединения таблиц оформляет объединение как часть условия WHERE:
WHERE Менеджеры.[№ менеджера]=[Клиенты-счета].[№ менеджера]
Пример 4. Выбор данных из двух таблиц.1
Вывести информацию о сотрудниках (ФИО, Должность, Стаж, Индивидуальный коэффициент), которые работают в компании менее 10 лет, но имеют Индивидуальный коэффициент выше 1.4. Использовать таблицы Должности и Штаты.
SELECT ФИО, Должность, [Индивидуальный коэффициент], Стаж
FROM Должности, Штаты
WHERE [Индивидуальный коэффициент]>=1.4 AND Стаж>=#1/1/2002#
AND Должности.[Код должности] = Штаты.[Код должности];
ФИО |
Должность |
Индивидуальный коэффициент |
Стаж |
Иванова Т.М. |
Психолог |
1,5 |
01.11.2006 |
Пример 6. Обновление значений поля с использованием данных из двух таблиц.
Рассчитать поле Оклад таблицы Штаты.
UPDATE Должности, Штаты SET
Оклад = [Индивидуальный коэффициент]*Ставка
WHERE Должности.[Код должности] = Штаты.[Код должности];
!!! Для следующих запросов повысить всем ставки с помощью UPDATE в два раза.