Базы данных Язык запросов SQL. Команда SELECT
Команда SELECT – выборка данных Общий синтаксис: SELECT [{ ALL | DISTINCT }] { список_вывода | * } FROM имя_таблицы1 [ алиас1 ] [, имя_таблицы2 [ алиас2 ].,..] [ WHEREусловие_отбора_записей ] [ GROUP BY { имя_поля | выражение }.,.. ] [ HAVING условие_отбора_групп ] [ UNION [ALL] SELECT …] [ ORDER BY имя_поля1 | целое [ ASC | DESC ] [, имя_поля2 | целое [ ASC | DESC ].,..]]; Примеры: select * from departs; select name, post from emp;
Формирование списка вывода (проекция) Общий синтаксис списка вывода: [{all | distinct}] { * | выражение1 [алиас1] [, выражение2 [алиас2].,..]} Список ввода находится между ключевыми словами SELECT и FROM. Вывести все поля всех записей из таблицы Проекты (Project): select * from project; 2.Вывести список сотрудников с указанием их должности и отдела: select depno, name, post from emp; 3.Вывести список сотрудников с указанием их должности и зарплаты: select name 'ФИО', post 'Должность', salary*0.87 'Зарплата' from emp; Установить другой формат вывода даты: alter session set nls_date_format = 'dd/mm/yyyy';
Формирование списка вывода (проекция) 1.Вывести должности и оклады сотрудников: select post, salary from emp; 2.Вывести должности и оклады сотрудников без повторов: select DISTINCT post, salary from emp; 3.Вывести отделы и должности сотрудников без повторов: select DISTINCT depno, post from emp; 4.Задание: вывести список сотрудников с указанием ФИО, даты рождения и адреса. select name 'ФИО', born 'Дата рождения', adr 'Адрес' from emp;
Упорядочение результата 1.Вывести данные из таблицы Проекты в порядке даты начала проекта: select * from Project order by dbegin; 2.Упорядочить список сотрудников по отделам и по ФИО: select depno, name, post from emp order by depno, name; -- order by 1,2; 3.Упорядочить сотрудников по зарплате (от большей к меньшей): select name 'ФИО', post 'Должность', salary 'Зарплата' from emp order by 3 DESC; 4.Упорядочить данные об отделах, должностях и зарплатах: select depno 'Номер отдела', post 'Должность', salary 'Зарплата' from emp order by 1, 3 DESC, 2;
Выбор данных из таблицы (селекция) WHERE – содержит условия выбора отдельных записей. Условие является логическим выражением и может принимать одно из 3-х значений: TRUE – истина, FALSE – ложь, NULL – неизвестное, неопределённое значение (интерпретируется как ложь). Условие формируется путём применения различных операторов и предикатов. Операторы сравнения: = равно, , != не равно, > больше, >= больше или равно, sysdate; -- sysdate – функция, возвращающая текущую дату
Логические операторы Для формирования условий используются следующие логические операторы: AND – логическое произведение (И), OR – логическая сумма (ИЛИ), NOT – отрицание (НЕ). Операция И:Операция ИЛИ: aba AND b aba OR b Операция НЕ: aNOT a 01 10
Выбор данных из таблицы по условию 1.Вывести список сотрудников 2-го отдела с зарплатой больше рублей: select * from emp where depno = 2 AND salary > ; 2.Вывести список сотрудников-мужчин, родившихся после 1979 года: select * from emp where born > '31/12/1979' AND sex = 'м'; 3.Вывести список сотрудников 2-го и 5-го отделов: select * from emp where depno=2 OR depno = 5; 4.Вывести список сотрудников 2-го и 5-го отделов в зарплатой не менее 30000: select * from emp where (depno=2 OR depno = 5) AND salary >= ; 5.Вывести список всех сотрудников, кроме сотрудников 2-го и 5-го: select * from emp where NOT (depno=2 OR depno = 5);
Выбор данных из таблицы по условию Задание 1: вывести список текущих проектов стоимостью более 2 млн. рублей. select * from project where dend > sysdate AND cost > ; Задание 2: вывести список сотрудников, работающих в должностях 'инженер' и 'ведущий инженер'. select * from emp where post = 'инженер' OR post = 'ведущий инженер' ; Задание 3: вывести список сотрудников, работающих в должности 'охранник', с зарплатой более рублей. select * from emp where post = 'охранник' AND salary > 20000;
Предикаты формирования условия Предикат вхождения в список значений: имя_поля IN ( значение1 [, значение2,... ] ) выражение IN ( значение1 [, значение2,... ] ) Примеры: Список сотрудников отделов 5, 8 и 9: select * from emp where depno IN ( 5, 8, 9 ) ; Список сотрудников, работающих в должностях 'инженер' и 'ведущий инженер' : select * from emp where post IN ( 'инженер', 'ведущий инженер' );
Предикаты формирования условия Предикат вхождения в диапазон: имя_поля BETWEEN минимальное_значение AND максимальное_значение выражение BETWEEN минимальное_значение AND максимальное_значение Минимальное значение должно быть меньше либо равно максимальному. Примеры: Список всех сотрудников со 2-го по 5-й отделы: select * from emp where depno BETWEEN 2 AND 5 ; Список сотрудников с чистой зарплатой от 20 до 30 тысяч рублей: select * from emp where salary*0.87 BETWEEN AND 30000;
Предикаты формирования условия Предикат поиска подстроки:имя_поля LIKE 'шаблон' Этот предикат применяется только к полям типа CHAR и VARCHAR. Возможно использование шаблонов: '_' – один любой символ, '%' – произвольное количество любых символов (в т.ч., ни одного). Примеры: Список всех сотрудников-экономистов: select * from emp where post LIKE '%экономист%' ; Список всех инженеров-специалистов (кроме просто инженеров): select * from emp where post LIKE 'инженер_%' ; Экранировать специальное значение символов '_' и '%' можно так: where LIKE '_#%' ESCAPE '#'; Символ экранирования (escape) может быть любым. В примере первый символ % будет искаться как символ, а второй имеет специальное значение.
Предикаты формирования условия Предикат поиска неопределенного значения: значение IS [NOT] NULL Если значения является неопределенным (NULL), то предикат IS NULL выдаст истину, а предикат IS NOT NULL – ложь. Примеры: Список всех сотрудников, у которых нет телефона (номер телефона неопределен): select * from emp where phone IS NULL ; Список все проекты, у которых определена стоимость: select * from project where cost IS NOT NULL ;
Использование предикатов Задание 1: вывести список сотрудников, которых зовут 'ЮРИЙ'. select * from emp where name LIKE '%ЮРИЙ%'; Задание 3: вывести список сотрудников, которые являются начальниками отделов. select * from emp where post LIKE 'нач%отдел%'; Задание 2: вывести список проектов стоимостью от 1 до 2 млн. рублей. select * from project where cost BETWEEN AND ;