ВЫБОРКА ДАННЫХ ИЗ БАЗЫ ДАННЫХ ОГРАНИЧЕНИЕ КОЛИЧЕСТВА ВЫБИРАЕМЫХ СТРОК ОСНОВНОЙ БЛОК ЗАПРОСА SELECT [DISTINCT] {*,column [alias],....} FROM table; SELECT задает столбцы, подлежащие выборке. FROM указывает, из какой таблицы КОМАНДЫ SQL • Команда может занимать одну или несколько строк • Для удобства чтения команды можно использовать табуляцию и отступы • Сокращение и перенос слов запрещены • Символы верхнего и нижнего регистров не различаются • Команды вводятся в буфер SQL ВЫБОРКА ВСЕХ СТОЛБЦОВ И СТРОК Простейшая команда SELECT содержит два следующих предложения: Предложение SELECT: - Звездочка ( * ) обозначает все столбцы Предложение FROM. SQL> SELECT * 2 FROM s dept; ВЫБОРКА ВСЕХ СТОЛБЦОВ И ВСЕХ СТРОК SQL> SELECT * 2 FROM s_dept ; ID NAME REGION_ID --- ----------------------10 Finance 1 31 Sales 1 32 Sales 2 33 Sales 3 34 Sales 4 35 Sales 5 41 Operations 1 42 Operations 2 43 Operations 3 44 Operations 4 45 Operations 5 50 Administration 1 12 rows selected. ВЫБОРКА ЗАДАННЫХ СТОЛБЦОВ SQL> SELECT dept_id, last_name, manager_id 2 FROM s_emp; Перечислить столбцы в предложении SELECT Разделить столбцы в списке запятыми Указать столбцы в порядке, в котором они должны появиться на выводе МЕТКИ СТОЛБЦОВ ПО УМОЛЧАНИЮ Выравнивание метки по умолчанию: • Слева: даты и символьные данные • Справа: числовые данные По умолчанию вывод меток производится в символах верхнего регистра АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ Создание выражений для типов данных NUMBER и DATE с помощью арифметических операторов Сложение + Вычитание Умножение * Деление / АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ Вывод годовой зарплаты всех служащих. SQL> SELECT last_name, salary * 12, commission_pct 2 FROM s_emp ; LAST_NAME --------------... Havel Magee Giljum Sedeghi Nguyen Dumas Maduro ... SALARY*12 ----------- 15684 16800 17880 18180 18300 17400 16800 COMMISSION_PCT -----------------10 12.5 10 15 17.5 ПОРЯДОК ВЫПОЛНЕНИЯ ОПЕРАТОРОВ • Умножение и деление выполняются до сложения и вычитания • Операторы, имеющие один и тот же приоритет, выполняются по очереди слева направо • Для изменения порядка вычислений и удобства чтения выражений можно использовать скобки ПСЕВДОНИМЫ СТОЛБЦОВ Псевдоним столбца заменяет его заголовок Особенно полезен при расчетах Следует сразу за заголовком столбца - Между заголовком и псевдонимом столбца может находиться необязательное ключевое слово AS Если псевдоним содержит пробелы и специальные символы или если в нем различаются символы верхнего и нижнего регистров, двойные кавычки обязательны ОПЕРАТОР КОНКАТЕНАЦИИ Оператор конкатенации: Обозначается двойной вертикальной чертой (||) Соединяет столбцы или текстовые строки с другими столбцами Создает столбец, являющийся символьным выражением ОПЕРАТОР КОНКАТЕНАЦИИ: ПРИМЕР Вывод имен и фамилий всех служащих под заголовком "Employees" SQL> SELECT 2 FROM first_name||last_name AS «Employees» s_emp; Employees -------------------------------CarmenVelasquez LaDorisNgao MidoriNagayama MarkQuick-To-See AudryRopeburn MollyUrguhart ... СТРОКА СИМВОЛОВ - ЛИТЕРАЛ Литерал - это строка символов, выражение или число, включенные в список SELECT Символьные литералы и литералы-даты должны быть заключены в апострофы Каждая строка символов выводится по одному разу для каждой возвращаемой строки таблицы СИМВОЛЬНАЯ СТРОКА: ПРИМЕР SQL> SELECT first_name||’ ‘||last_name 2 ||’, ’||title "Employees" 3 FROM s_emp; Employees -----------------------------------------Carmen Velasquez, President LaDoris Ngao, VP,Operations Midori Nagayama, VP,Sales Mark Quick-To-See, VP,Finance Audry Ropeburn, VP,Administration Molly Urguhart, Warehouse Manager ... ОБРАБОТКА НЕОПРЕДЕЛЕННЫХ ЗНАЧЕНИЙ Неопределенным значением (NULL) называется недоступное, неприсвоенное, неизвестное или неприменимое значение Неопределенное значение отличается от нуля и пробела Результатом арифметического выражения, содержащего неопределенное значение, также является неопределенное значение SQL> SELECT last_name, title, 2 salary*commission_pct/100 COMM 3 FROM s_emp; ФУНКЦИЯ NVL Для преобразования неопределенного значения в фактическое используется функция NVL Синтаксис NVL (выражение1, выражение2) где: выражение1 исходное или вычисленное значение, которое может быть неопределенным выражение2 значение, которое подставляется вместо неопределенного значения, по типу данных должно совпадать с выражением1 Примечание: Функцию NVL можно применять для преобразования любого типа данных, но результат всегда будет того же типа,что и выражение1 ФУНКЦИЯ NVL Преобразование NULL в фактическое значение с помощью функции NVL • Используемые типы данных: дата, символьные и числовые • Типы данных должны совпадать: NVL ( start_date, ’ 01- JAN - 95 ’ ) NVL ( title, ’ No Title Yet ’ ) NVL ( salary, 1000) SQL> SELECT last_name, title, 2> salary*NVL(commission_pct,0)/100 COMM 3> FROM s_emp; ПРЕДОТВРАЩЕНИЕ ВЫБОРКИ ДУБЛИКАТОВ СТРОК Пример вывода всех строк Вывод всех названий отделов из таблицы S_DEPT SQL> SELECT name 2 FROM s_dept; NAME -----------------------Finance Sales Sales Sales Sales Sales Operations ... 12 rows selected КЛЮЧЕВОЕ СЛОВО DISTINCT Пример вывода строк без дубликатов Вывод всех неповторяющихся названий отделов из таблицы S_DEPT. SQL> SELECT DISTINCT name 2 FROM s_dept; NAME ---------------------------Administration Finance Operations Sales ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА DISTINCT ДЛЯ НЕСКОЛЬКИХ СТОЛБЦОВ • Ключевое слово DISTINCT относится ко всем столбцам в списке SELECT SQL> SELECT DISTINCT dept_id, title 2 FROM s_emp; Результат применения DISTINCT к нескольким столбцам - вывод строк с неповторяющимися комбинациями значений этих столбцов СОРТИРОВКА СТРОК С ПОМОЩЬЮ ПРЕДЛОЖЕНИЯ ORDER BY Порядок строк, возвращаемых в результате запроса, не определен. Отсортировать строки можно с помощью предложения ORDER BY. Для сортировки можно задать выражение или позицию. Синтаксис SELECT выражение FROM таблица [ORDER BY {столбец, где: ORDER BY ASC DESC выражение} [ASC|DESC]]; задает порядок вывода строк сортирует строки в порядке возрастания; используется по умолчанию сортирует строки в порядке убывания ПРИМЕР Вывод из таблицы S_EMP фамилии, номера отдела и даты начала работы каждого служащего. Результат сортируется по фамилиям SQL> SELECT last_name, dept_id, start_date 2 FROM s_emp 3 ORDER BY last_name; LAST_NAME ----------Biri Catchpole Chang Danes Dumas Giljum Havel ... DEPT_ID ------43 44 44 45 35 32 45 START_DAT ---------07-APR-90 09-FEB-92 30-NOV-90 17-MAR-91 09-OCT-91 18-JAN-92 27-FEB-91 ПРЕДЛОЖЕНИЕ ORDER BY По умолчанию - сортировка возрастающем порядке Для сортировки в обратном порядке используется слово DESC. Возможна сортировка по выражениям или псевдонимам. SQL> SELECT last_name EMPLOYEE, start_date 2 FROM s_emp 3 ORDER BY EMPLOYEE DESC; Место неопределенных значений: - При сортировке по возрастанию - последние - При сортировке по убыванию - первые. СОРТИРОВКА ПО НЕСКОЛЬКИМ СТОЛБЦАМ Сортировка по позициям для экономии времени SQL> SELECT last_name, salary * 12 2 FROM s_emp 3 ORDER BY 2; SQL> SELECT last_name, dept_id, salary 2 FROM s_emp 3 ORDER BY dept_id, salary DESC; Последовательность сортировки определяется порядком столбцов в списке ORDER BY. Сортировать можно и по столбцам, не входящим в список SELECT. ОГРАНИЧЕНИЕ КОЛИЧЕСТВА СТРОК С ПОМОЩЬЮ ПРЕДЛОЖЕНИЯ WHERE Синтаксис SELECT выражение FROM таблица [WHERE условие] [ORDER BY выражение]; ------------------------------------------------------------------------------------WHERE ограничивает запрос строками, удовлетворяющими заданному условию Условие <выражение> <оператор> <выражение> состоит из имен столбцов, выражений, констант и операторов сравнения СТРОКИ СИМВОЛОВ И ДАТЫ Строки символов и даты заключаются в апострофы Числовые значения в апострофы не заключаются В символьных значениях различаются символы верхнего и нижнего регистров Формат даты по умолчанию - "DD-MON-YY" (числомесяц-год) SQL> SELECT first_name, last_name, title 2 FROM s_emp 3 WHERE last_name = 'Magee'; ОПЕРАТОРЫ СРАВНЕНИЯ И ЛОГИЧЕСКИЕ ОПЕРАТОРЫ Логические операторы сравнения = > >= < <= Операторы сравнения SQL - BETWEEN ... AND... - IN (list) - LIKE - IS NULL Логические операторы - AND - OR - NOT ОТРИЦАНИЕ ВЫРАЖЕНИЙ Иногда проще исключить строки, которые явно не требуются: Логические операторы != <> ^= Операторы SQL - NOT BETWEEN - NOT IN - NOT LIKE - IS NOT NULL ОПЕРАТОРЫ BETWEEN И IN ЯЗЫКА SQL Оператор BETWEEN используется для проверки вхождения значения в интервал значений (включая границы интервала) SQL> SELECT first_name, last_name, salary 2 FROM s_emp 3 WHERE salary BETWEEN 1000 AND 2000; • Оператор IN используется для проверки принадлежности значения к списку SQL> SELECT id, name, region_id 2 FROM s_dept 3 WHERE region_id IN (1,3); ОПЕРАТОР LIKE ЯЗЫКА SQL Используется для поиска строковых значений с помощью метасимволов (wildcards) Условия для поиска могут содержать символьные литералы или числа: - «%» представляет произвольное количество символов - «_» представляет один символ SQL> SELECT last_name 2 FROM s_emp 3 WHERE last_name LIKE 'M%'; ОПЕРАТОР IS NULL ЯЗЫКА SQL Неопределенные значения проверяются с помощью оператора IS NULL Пользоваться оператором "=" не следует SQL> SELECT id, name, credit_rating 2 FROM s_customer 3 WHERE sales_rep_id IS NULL; ВЫБОРКА ПО НЕСКОЛЬКИМ УСЛОВИЯ • Использование сложных критериев • Сочетание условий с помощью операторов AND и OR • AND требует выполнения обоих условий SQL> 2 3 4 SELECT last_name, salary, dept_id, title FROM s_emp WHERE dept_id = 41 AND title = ‘Stock Clerk’; OR требует выполнения хотя бы одного из условий SQL> SELECT last_name, salary, dept_id, title 2 FROM s_emp 3 WHERE dept_id = 41 4 OR title = 'Stock Clerk’; ТАБЛИЦЫ ИСТИННОСТИ Построение простого логического условия с оператором сравнения (TRUE - истинно, FALSE -ложно, NULL -неопределенное значение) AND TRUE FALSE NULL TRUE TRUE FALSE NULL NOT TRUE FALSE NULL FALSE TRUE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL ПОРЯДОК ВЫПОЛНЕНИЕ ОПЕРАЦИЙ Стандартный порядок выполнения операций отменяется скобками. Порядок вычисления 1 2 3 Операторы Все операторы сравнения, операторы SQL AND OR ПОРЯДОК ВЫПОЛНЕНИЕ ОПЕРАЦИЙ:ПРИМЕРЫ. Вывод информации о служащих отдела 44 с зарплатой 1000 и более и обо всех служащих отдела 42 SQL> 2 3 4 5 SELECT last_name, salary, dept_id FROM s_emp WHERE salary >= 1000 AND dept_id = 44 OR dept_id = 42; Вывод информации о всех служащих отделов 44 и 42, зарплата которых составляет 1000 и более SQL> 2 3 4 5 SELECT last_name, salary, dept_id FROM s_emp WHERE salary >= 1000 AND (dept_id = 44 OR dept_id = 42); ЗАКЛЮЧЕНИЕ SELECT FROM [WHERE [ORDER [DISTINCT] {*, column [alias], ...} table condition(s)] BY {column, expr, alias}[ASC|DESC]];