В этой лекции мы рассмотрим, как выбрать данные на основе условий SQL, представленных с помощью
Использовать их очень просто. Ниже показан оператор SELECT, который выводит имена сотрудников, которые получают более 70000, но меньше 90000.
SELECT f_name, l_name from employee_data where salary > 70000 AND salary < 90000;
На рис. 6.1. приведен результат запроса.
(рис 6.1) Имена сотрудников, которые получают более 70000, но меньше 90000Давайте выведем список сотрудников, фамилии которых начинаются с буквы К или Л.
SELECT l_name from employee_data where l_name like 'К%' OR l_name like 'Л%';
На рис. 6.2. приведен результат запроса.
(рис 6.2) Сотрудники, фамилии которых начинаются с буквы К или ЛВот более сложный пример: список имен и возраста сотрудников, фамилии которых не начинаются с К или Л, и которые младше 30 лет.
SELECT f_name, l_name , age from employee_data where (l_name not like 'К%' OR l_name not like 'Л%') AND age < 30;
На рис. 6.3. приведен результат запроса.
(рис 6.3) Список имен и возраста сотрудников, фамилии которых не начинаются с К или Л, и которые младше 30 летОбратите внимание на использование скобок в представленном выше операторе. Скобки предназначены для выделения различных логических условий и удаления двусмысленностей.
Оператор NOT поможет при поиске всех сотрудников, которые не являются программистами. (Программисты включают старших программистов, программистов мультимедиа и программистов).
SELECT f_name, l_name, title from employee_data where title NOT LIKE "%программист%";
На рис. 6.4. приведен результат запроса.
(рис 6.4) Поиск всех сотрудников, которые не являются программистамиИ последний пример перед упражнениями.
Показать всех сотрудников со стажем работы в компании более 3 лет, которые старше 30 лет.
select f_name, l_name from employee_data where yos > 3 AND age > 30;
На рис. 6.5. приведен результат запроса.
(рис 6.5) Все сотрудники, которые старше 30 лет, и имеют стаж работы более 3 лет1. Вывести имена и фамилии всех сотрудников, которые получают зарплату не более 90000 и не являются программистами, старшими программистами или программистами мультимедиа.
2. Что делает следующий оператор?
SELECT l_name, f_name from employee_data where title NOT LIKE '%продавец%' AND age < 30;
3. Вывести все идентификационные номера и имена сотрудников в возрасте между 32 и 40 годами.
4. Выберите имена всех сотрудников в возрасте 32 лет, которые не являются программистами.
mysql> select f_name, l_name from employee_data -> where salary <= 90000 -> AND title NOT LIKE '%программист%';
mysql> SELECT l_name, f_name from employee_data
-> where title NOT LIKE '%продавец%'
-> AND age < 30;
mysql> select emp_id, f_name, l_name from -> employee_data where age > 32 -> and age < 40;
mysql> select f_name, l_name from employee_data -> where age = 32 AND -> title NOT LIKE '%программист%';
Чтобы найти сотрудников, которые являются разработчиками Web или системными администраторами, можно использовать оператор SELECT следующего вида:
SELECT f_name, l_name, title from
-> employee_data where
-> title = 'разработчик Web' OR
-> title = 'системный адм.';
На рис. 6.6. приведен результат запроса.
(рис 6.6) Поиск сотрудников, которые являются разработчиками Web или системными администраторамиВ SQL имеется более простой способ сделать это с помощью IN (в множестве). Его использование не представляет никаких трудностей.
SELECT f_name, l_name, title from
-> employee_data where title
-> IN ('разработчик Web', 'системный адм.');
Результат будет аналогичен рис. 6.6.
Использование NOT перед IN позволяет вывести данные, которые не входят в множество, определяемое условием IN. Следующий оператор выводит список сотрудников, которые не занимают должность программиста или системного администратора.
SELECT f_name, l_name, title from
-> employee_data where title NOT IN
-> ('программист', 'системный адм.');
BETWEEN используется для определения целочисленных границ. Поэтому вместо age >= 32 AND age <= 40 можно использовать age BETWEEN 32 AND 40.
select f_name, l_name, age from
-> employee_data where age BETWEEN
-> 32 AND 40;
На рис. 6.7. приведен результат запроса.
(рис 6.7) Поиск сотрудников, возраст которых лежит в промежутке от 32-х до 40 летNOT также можно использовать вместе с BETWEEN, как в следующем операторе, который выводит сотрудников, зарплата которых меньше 90000 или больше 150000.
select f_name, l_name, salary
-> from employee_data where salary
-> NOT BETWEEN
-> 90000 AND 150000;
1. Найдите всех сотрудников, которые занимают должность "старший программист" и "программист мультимедиа".
2. Выведите список имен сотрудников, зарплата которых составляет от 70000 до 90000.
3. Что делает следующий оператор?
SELECT f_name, l_name, title from
employee_data where title NOT IN
('программист', 'старший программист',
'программист мультимедиа');
4. Вот более сложный оператор, который объединяет BETWEEN и IN. Что он делает?
SELECT f_name, l_name, title, age
from employee_data where
title NOT IN
('программист', 'старший программист',
'программист мультимедиа') AND age
NOT BETWEEN 28 and 32;
mysql> select l_name, f_name, title
-> from employee_data where
-> title IN
-> ('старший программист',
-> 'программист мультимедиа');
2. mysql> select f_name, l_name, salary from
-> employee_data where salary BETWEEN
-> 70000 AND 90000;
mysql> SELECT f_name, l_name, title from
-> employee_data where title NOT IN
-> ('программист', 'старший программист',
-> 'программист мультимедиа');
mysql> SELECT f_name, l_name, title, age from
-> employee_data where title NOT IN
-> ('программист', 'старший программист',
-> 'программист мультимедиа') AND
-> age NOT BETWEEN 28 AND 32;
Рассмотрим вопрос о том, как можно изменить ORDER BY оператора SELECT.
Извлекаемые до сих пор данные всегда выводились в том порядке, в котором они были сохранены в таблице. В действительности SQL позволяет сортировать извлеченные данные с помощью предложения ORDER BY. Это предложение требует имя столбца, на основе которого будут сортироваться данные. Давайте посмотрим, как можно вывести имена сотрудников с упорядоченными по алфавиту фамилиями сотрудников (в возрастающем порядке).
SELECT l_name, f_name from employee_data ORDER BY l_name;
А вот так сотрудников можно отсортировать по возрасту.
SELECT f_name, l_name, age from employee_data ORDER BY age;
Предложение ORDER BY может сортировать в возрастающем порядке ( ASCENDING или ASC ) или в убывающем порядке ( DESCENDING или DESC ) в зависимости от указанного аргумента.
Чтобы вывести список сотрудников в убывающем порядке, можно использовать следующий оператор.
SELECT f_name from employee_data ORDER by f_name DESC;
Примечание: Возрастающий порядок ( ASC ) используется по умолчанию.
1. Вывести список сотрудников в порядке, определяемом зарплатой, которую они получают.
2. Выведите список сотрудников в убывающем порядке их стажа работы в компании.
3. Что делает следующий оператор?
SELECT emp_id, l_name, title, age from employee_data ORDER BY title DESC, age ASC;
4. Вывести список сотрудников (фамилию и имя), которые занимают должность "программист" или "разработчик Web" и отсортировать их фамилии по алфавиту.
mysql> SELECT f_name, l_name, salary
-> from employee_data
-> ORDER BY salary;
mysql> SELECT f_name, l_name, yos
-> from employee_data
-> ORDER by yos DESC;
mysql> SELECT emp_id, l_name, title, age
-> from employee_data ORDER BY
-> title DESC, age ASC;
Примечание: Сначала сортируются должности в убывающем порядке. Затем для каждой должности сортируется возраст сотрудников в возрастающем порядке.
mysql> SELECT l_name, f_name from employee_data
-> where title IN ('программист',
-> 'разработчик Web') ORDER BY l_name;
Далее рассмотрим, как SELECT.
По мере увеличения таблиц возникает необходимость вывода только подмножества данных. Этого можно добиться с помощью предложения LIMIT.
Например, чтобы вывести из таблицы имена только первых пяти сотрудников, используется оператор LIMIT с аргументом равным 5.
SELECT f_name, l_name from employee_data LIMIT 5;
На рис. 6.8. приведен результат запроса.
(рис 6.8) Имена первых пяти сотрудниковЭто первые пять записей таблицы.
Можно соединить оператор LIMIT с оператором ORDER BY. Таким образом, следующий оператор выведет четверых самых старых сотрудников компании.
SELECT f_name, l_name, age FROM employee_data ORDER BY age LIMIT 4;
На рис. 6.9. приведен результат запроса.
(рис 6.9) Четверо самых старых сотрудников компанииАналогично можно вывести двух самых молодых сотрудников.
SELECT f_name, l_name, age from employee_data ORDER BY age LIMIT 2;
На рис. 6.10. приведен результат запроса.
(рис 6.10) Двое самых молодых сотрудниковLIMIT можно использовать также для
Общая форма оператора LIMIT имеет следующий вид:
SELECT (что-нибудь) from таблица LIMIT начальная строка, извлекаемое число записей; SELECT f_name, l_name from employee_data LIMIT 6,3;
На рис. 6.11. приведен результат запроса.
(рис 6.11) Извлечение трёх строк начиная с 6-йБудут извлечены три строки, начиная с седьмой.
SELECT emp_id, age, perks from employee_data ORDER BY perks DESC LIMIT 10;
mysql> SELECT f_name, l_name, age from
-> employee_data ORDER BY age
-> LIMIT 5;
mysql> SELECT * from employee_data
-> LIMIT 10, 5;
mysql> select f_name, l_name, salary
-> from employee_data
-> ORDER BY salary DESC
-> LIMIT 1;
mysql> SELECT emp_id, age, perks
-> from employee_data ORDER BY
-> perks DESC LIMIT 10;
Рассмотрим теперь, как выбрать и вывести записи таблиц MySQL с помощью DISTINCT (РАЗЛИЧНЫЙ), использование которого исключает появление повторяющихся данных.
Чтобы вывести все должности базы данных компании, можно выполнить следующий оператор:
select title from employee_data;
На рис. 6.12. приведен результат запроса.
(рис 6.12) Все должности базы данных компанииМожно видеть, что список содержит повторяющиеся данные. Предложение SQL DISTINCT выводит только уникальные данные. Вот как оно используется.
select DISTINCT title from employee_data;
На рис. 6.13. приведен результат запроса.
(рис 6.13) Все должности базы данных компании без повторовИз этого можно видеть, что в компании имеется 11 уникальных должностей.
Уникальные записи можно также отсортировать с помощью ORDER BY.
select DISTINCT age from employee_data ORDER BY age;
На рис. 6.14. приведен результат запроса.
(рис 6.14) Значения возраста сотрудников компании без повторовDISTINCT часто используется вместе с функцией COUNT, которая будет рассмотрена далее.
select distinct salary from employee_data order by salary DESC;
mysql> select distinct f_name from employee_data;
Команда UPDATE выполняет
UPDATE имя_таблицы SET имя_столбца_1 = значение_1, имя_столбца_2 = значение_2, имя_столбца_3 = значение_3, ... [WHERE условия];
Как и все другие команды SQL можно вводить ее на одной строке или на нескольких строках.
Рассмотрим несколько примеров.
Предположим, директор увеличил свою зарплату на 20000 и надбавки на 5000. Его предыдущая зарплата была 200000, а надбавки были 50000.
UPDATE employee_data SET salary=220000, perks=55000 WHERE title='директор';
На рис. 6.15. приведен результат запроса.
(рис 6.15) Данные обновленыМожно проверить эту операцию, выводя данные из таблицы.
select salary, perks from employee_data WHERE title = 'директор';
На рис. 6.16. приведен результат запроса.
(рис 6.16) Данные обновленыВ действительности предыдущую зарплату знать не требуется. Можно воспользоваться арифметическими операторами. Следующий оператор сделает то же самое, при этом исходные данные знать заранее не требуется.
UPDATE employee_data SET salary = salary + 20000, perks = perks + 5000 WHERE title='директор';
Результат запроса аналогичен рис. 6.15.
В качестве другого примера можно попробовать изменить название должности "разработчик Web" на "программист Web".
mysql> update employee_data SET
-> title = 'программист Web'
-> WHERE title = 'разработчик Web';
На рис. 6.17. приведен результат запроса.
(рис 6.17) Данные обновленыВажно также перед выполнением изменений внимательно изучить часть оператора с условием, так как легко можно изменить не те данные. Оператор UPDATE без условий изменит все данные столбца во всех строках. Надо быть очень осторожным при внесении изменений.
mysql> update employee_data SET
-> l_name = 'Петрова'
-> WHERE l_name = 'Чащина';
Примечание: Если бы были еще сотрудники с фамилией Чащина, то эти записи также были бы изменены. В таком случае может помочь столбец emp_id, так как он содержит уникальные значения. Лучше использовать значение emp_id вместо l_name, как в следующем примере:
mysql> update employee_data SET
-> l_name = 'Петрова'
-> WHERE emp_id = 4;
mysql> update employee_data set
-> title = 'специалист по мультимедиа'
-> where title = 'программист мультимедиа';
mysql> update employee_data set
-> salary = salary + 10000
-> where title != 'директор';
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.