ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Секция FROM, логическое связывание таблицПеречень таблиц, из которых производится выборка данных, указывается
SELECT Employees.TabNum, Employees.Name,Departments.Name FROM Employees JOIN Departments ON Employees.DeptNum = Departments.DeptNum Результат запроса будет выглядеть следующим образом:
SELECT Employees.TabNum, Employees.Name, Departments.Name, Cities.Name FROM Employees JOIN Departments ON Employees.DeptNum = Departments.DeptNum JOIN Cities ON Departments.City = Cities.City Результат запроса будет выглядеть следующим образом:
Пример связывания таблиц по нескольким полям: SELECT Table1.Field1, Table2.Field2 FROM Table1 JOIN Table2 ON Table2.ID1 =Table1.ID1 AND Table2.ID2 =Table1.ID2 AND …. Существует несколько типов связывания:
Проиллюстрируем каждый тип примерами. Модель данных:
SELECT Table1.Field1, Table2.Field2 FROM Table1 JOIN Table2 ON Table1.Key1 = Table2.Key2 Результат:
SELECT Table1.Field1, Table2.Field2 FROM Table1 LEFT JOIN Table2 ON Table1.Key1 = Table2.Key2 Результат:
SELECT Table1.Field1, Table2.Field2 FROM Table1 RIGHT JOIN Table2 ON Table1.Key1 = Table2.Key2 Результат:
SELECT Table1.Field1, Table2.Field2 FROM Table1 FULL JOIN Table2 ON Table1.Key1 = Table2.Key2 Результат:
SELECT Table1.Field1, Table2.Field2 FROM Table1 CROSS JOIN Table2 Результат:
Секция WHERE Для фильтрации результатов выполнения запроса можно использовать условия выборки в секции WHERE. В общем виде синтаксис WHERE выглядит следующим образом: WHERE [ NOT ] <условие1>[ AND | OR <условие2>] Условие представляет собой конструкцию вида: <столбец таблицы, константа или выражение> <оператор сравнения> <столбец таблицы, константа или выражение> или IS [ NOT ] NULL или [ NOT ] LIKE <шаблон> или [ NOT ] IN (<список значений>) или [ NOT ] BETWEEN <нижняя граница> AND <верхняя граница> Операторы сравнения:
Примеры запросов с операторами сравнения: SELECT * FROM Table WHERE Field > 100 SELECT * FROM Table WHERE Field1 <= (Field2 + 25) Выражение IS [NOT] NULL проверяет данные на [не]пустые значения: SELECT * FROM Table WHERE Field IS NOT NULL SELECT * FROM Table WHERE Field IS NULL Необходимо отметить, что язык SQL, в отличие от языков программирования, имеет встроенные средства поддержки факта отсутствия каких-либо данных. Осуществляется это с помощью NULL -концепции. NULL не является каким-то фиксированным значением, хранящимся в поле записи вместо реальных данных. Значение NULL не имеет определенного типа. NULL – это индикатор, говорящий пользователю (и SQL) о том, что данные в поле записи отсутствуют. Поэтому его нельзя использовать в операциях сравнения. Для проверки факта наличия-отсутствия данных в SQL введены специальные выражения. Выражение [ NOT ] LIKE используется при проверке текстовых данных на [не]соответствие заданному шаблону. Символ ‘%’ (процент) в шаблоне заменяет собой любую последовательность символов, а символ ‘_’ (подчеркивание) – один любой символ. SELECT * FROM Employees WHERE Name LIKE ‘Иван%’ Попадающие под заданное условие фамилии: Иван ов SELECT * FROM Employees WHERE Name LIKE ‘__д%’ Попадающие под заданное условие фамилии: Си д оров Выражение [NOT] IN проверяет значения на [не]вхождение в определенный список: SELECT * FROM Employees WHERE Position IN (‘Начальник’, ‘Менеджер’) Выражение [ NOT ] BETWEEN проверяет значения на [не]попадание в некоторый диапазон: SELECT * FROM Employees WHERE Salary BETWEEN 200 AND 500 Этот запрос вернет список работников, зарплата которых больше либо равна 200 у.е. и меньше либо равна 500 у.е. Несколько условий поиска могут комбинироваться посредством логических операторов AND, OR или NOT: SELECT * FROM Employees WHERE Position IN (‘Начальник’, ‘Менеджер’) AND Salary BETWEEN 200 AND 500 SELECT * FROM Employees WHERE (Position = ‘Начальник’ OR Position = ‘Менеджер’) AND Salary BETWEEN 200 AND 500 SELECT * FROM Employees WHERE NOT (Position = ‘Начальник’ OR Position = ‘Менеджер’) Секция ORDER BY Необязательная секция ORDER BY в команде SELECT предназначена для сортировки строк результирующего набора данных. Формат этой секции в общем виде выглядит так: ORDER BY Field1 [ASC | DESC] [, Field2 [ASC | DESC] ] [, …] Ключевое слово ASC предписывает производить сортировку по возрастанию, а DESC – по убыванию. Если ASC и DESC отсутствуют, по умолчанию подразумевается ASC. Например, выберем записи о начальниках и отсортируем результат SELECT * FROM Employees WHERE Position = ‘Начальник’ ORDER BY Salary DESC Следующий запрос отсортирует сотрудников по отделам (в порядке возрастания номера отдела) и по размеру зарплат внутри каждого отдела (в порядке убывания зарплаты): SELECT * FROM Employees ORDER BY DeptNum ASC, Salary DESC Ключевое слово ASC можно опустить, ибо оно действует по умолчанию: SELECT * FROM Employees ORDER BY DeptNum, Salary DESC Групповые функции Если нас не интересуют строки таблицы как таковые, а интересуют некоторые итоги, мы можем использовать в процессе выборки колонок таблиц групповые функции. Основные групповые функции представлены ниже:
Например, чтобы узнать максимальную зарплату, получаемую сотрудниками в организации, можно выполнить запрос вида: SELECT MAX (SALARY) FROM Employees Общее количество записей в таблице вернет запрос вида: SELECT COUNT (*) FROM Employees Секция GROUP BY По умолчанию группой, на которой вычисляется групповая функция, является вся результирующая выборка. Если мы нуждаемся в вычислении промежуточных итогов, мы можем разбить итоговую выборку на подгруппы с помощью необязательной секции GROUP BY: GROUP BY Field1 [, Field2] [, …] Например, подсчитаем максимальную зарплату по отделам организации: SELECT DeptNum, MAX (SALARY) FROM Employees GROUP BY DeptNum В этом случае функция MAX будет считаться отдельно для всех записей с одинаковым значением поля DeptNum. Секция HAVING На промежуточные итоги может быть наложен дополнительный фильтр посредством секции HAVING. В нижеприведенном примере в результат попадут только отделы, максимальная зарплата в которых превышает 1000 у.е.: SELECT DeptNum, MAX (SALARY) FROM Employees GROUP BY DeptNum HAVING MAX (SALARY) > 1000 Важно понимать, что секции HAVING и WHERE взаимно дополняют друг друга. Сначала с помощью ограничений WHERE формируется итоговая выборка, затем выполняется разбивка на группы по значениям полей, заданных в GROUP BY. Далее по каждой группе вычисляется групповая функция и в заключение накладывается условие HAVING. Изменение данных Под изменением данных понимаются следующие операции:
Команда INSERT Добавление новых записей в таблицу осуществляется посредством команды INSERT. Она имеет следующий синтаксис: INSERT INTO <имя таблицы> [(<список имен колонок>)] VALUES (<список констант>) Например, для внесения сведений о новом работнике необходимо выполнить следующую команду: INSERT INTO Employees(TabNum, Name, Position, DeptNum, Salary) VALUES (45, ‘Сергеев’, ‘Старший менеджер’, 15, 850) После выполнения команды таблица Employees будет выглядеть следующим образом:
Если какая-либо колонка в списке будет опущена при вставке, в соответствующее поле записи автоматически будет занесено пустое значение (NULL): INSERT INTO Employees(TabNum, Name, DeptNum, Salary) VALUES (45, ‘Сергеев’, 15, 850) После выполнения команды таблица Employees будет выглядеть следующим образом:
Количество констант в секции VALUES всегда должно соответствовать количеству колонок. Список колонок в команде INSERT может быть опущен целиком. В этом случае список констант в секции VALUES должен точно соответствовать описанию колонок таблицы в словаре данных СУБД, иначе команда будет отвергнута ядром БД. Пример правильной команды: INSERT INTO Employees VALUES (45, ‘Сергеев’, ‘Старший менеджер’, 15, 850) Команда вида: INSERT INTO Employees VALUES (45, ‘Сергеев’, 15, 850) завершится ошибкой, так как количество констант не соответствует реальному количеству колонок в таблице. В колонку можно в явном виде внести пустое значение посредством ключевого слова NULL. Последний запрос можно переписать следующим образом: INSERT INTO Employees VALUES (45, ‘Сергеев’, NULL, 15, 850) В этом случае команда вставки отработает корректно, и в поле Position будет внесено пустое значение. Очевидно, что к аналогичному результату приведет INSERT INTO Employees(TabNum, Name, Position, DeptNum, Salary) VALUES (45, ‘Сергеев’, NULL, 15, 850) Кроме простого добавления новых записей, команда INSERT позволяет осуществлять пакетную перекачку данных из таблицы в таблицу. Синтаксис подобной команды следующий: INSERT INTO <имя таблицы> [(<список имен колонок>)] <команда SELECT> Например: INSERT INTO Table1(Field1, Field2) SELECT Field3, (Field4 + 5) FROM Table2 Команда DELETE Чтобы удалить ненужные записи из таблицы, следует использовать команду DELETE: DELETE FROM <имя таблицы> [ WHERE <условия поиска>] Если опустить секцию условий поиска WHERE, из таблицы будут удалены все записи. Иначе – только записи, удовлетворяющие критериям поиска. Форматы секций WHERE команд SELECT и DELETE аналогичны. Примеры команды DELETE: DELETE FROM Employees DELETE FROM Employees WHERE TabNum = 45 Команда UPDATE Изменить ранее внесенные командой INSERT данные можно с помощью команды UPDATE: UPDATE < имя таблицы> SET <имя колонки> = <новое значение>, <имя колонки> = <новое значение>, … WHERE <условия поиска>] Как и в случае команды DELETE, при отсутствии секции WHERE обновлены будут все строки таблицы. Иначе – только подходящие под заданные условия. Примеры: UPDATE Employees SET Salary = Salary + 100 UPDATE Employees SET Position = ‘Старший менеджер’, Salary = 1000 WHERE TabNum = 45 AND Position IS NULL Не нашли, что искали? Воспользуйтесь поиском:
|