На этом уроке мы поговорим о запросах к базе данных. В основе запросов лежит использование оператора SELECT, из операторов SQL являющегося, пожалуй, для уже сложившихся баз данных наиболее часто используемым
Основными на этом уроке будут следующие темы
• Что такое запрос к базе данных
• Использование оператора SELECT
• Добавление в запрос условий с помощью ключевого слова WHERE
• Использование псевдонимов столбцов
• Получение данных из таблиц других пользователей
Запрос — это обращение к базе данных с помощью оператора SELECT. Запросы используются для того, чтобы извлечь данные в том виде, который удобен пользователю. Например, с помощью соответствующего оператора SQL можно из таблицы с информацией о служащих извлечь имя служащего с максимальным уровнем оплаты. Такого вида запросы являются типичными для реляционных баз данных.
Оператор SELECT, представляющий язык запросов к данным (Data Query Language — DQL) в SQL, используется для составления запросов к базе данных. Оператор SELECT не используется сам по себе, а требует указания некоторых параметров с помощью ключевых слов. Кроме обязательных, у этого оператора имеется несколько необязательных ключевых слов, расширяющих его возможности. Оператор SELECT является, пожалуй, одним из наиболее полезных операторов SQL. С оператором SELECT должно использоваться ключевое слово FROM, которое для этого оператора является обязательным.
Оператор SELECT состоит из выражений, строящихся на основе следующих четырех ключевых слов.
• SELECT
• FROM
• WHERE
• ORDER BY Использование этих ключевых слов будет подробно рассмотрено в следующих разделах.
В операторе SELECT ключевое слово SELECT используется в совокупности с ключевым словом FROM для того, чтобы организовать извлечение данных из базы данных в удобном для чтения формате. Часть запроса, заданная ключевым словом SELECT, определяет источник отбора данных.
Синтаксис простого оператора SELECT следующий.
SELECT [ * | ALL | DISTINCT СТОЛБЕЦ1, СТОЛБЕЦ2 ]
FROM ТАБЛИЦА1 [ , ТАБЛИЦА2 ];
За ключевым словом SELECT в запросе следует список столбцов, значения которых вы хотели бы видеть в результате запроса За ключевым словом FROM следует список таблиц, из которых должны извлекаться данные. Звездочка (*) используется для указания того, что в результате запроса должны быть показаны значения всех столбцов таблицы. По поводу ее использования обратитесь к документации той реализации SQL, с которой работаете вы. Опция ALL используется тогда, когда нужно показать все значения столбца, включая и повторяющиеся. Опция DISTINCT используется для того, чтобы повторения исключить. Из этих опций используемой по умолчанию опцией является ALL, которую поэтому указывать не обязательно. Обратите внимание на то, что имена столбцов в списке, следующем за ключевым словом SELECT, разделяются запятыми, точно так же, как имена таблиц, следующие за ключевым словом FROM.
В операторах SQL запятые используются для разделения аргументов в списках Это могут быть, например, списки с именами столбцов в запросах, списки с именами таблиц, списки значений, помещаемых в таблицу или списки значений, задающих условия с ключевым словом WHERE.
Аргументы — это значения, предусмотренные в синтаксисе оператора или команды SQL. Аргументы могут быть как обязательными, так и необязательными.
Основные возможности оператора SELECT раскрываются в следующих примерах.
Давайте сначала выполним простой запрос по отношению к таблице PRODUCT S_TBL:
SELECT * FROM PRODUCTSJTBL;
PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75
13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1
90 ФОНАРИ 14.5
11 строк выбраны.
Звездочка означает выбор всех столбцов таблицы, которая, как видите, состоит из трех столбцов PROD_ID, PROD_DESC и COST. При выводе столбцы показываются в том порядке, в котором они расположены в таблице. В данной таблице 11 записей, на что указывает последняя строка вывода. Содержимое этой строки зависит от конкретной реализации SQL, например, в Oracle это будет 11 rows selected, а в другой реализации эта строка может выглядеть как 11 rows affected.
Теперь выберем данные из таблицы CANDY_TBL. Создадим эту таблицу из таблицы PRODUCTSJTBL специально для данного примера. Чтобы показать данные только одного столбца, укажем имя столбца после ключевого слова SELECT
SELECT PROD_DESC FROM CANDYJTBL;
PROD_DESC
СЛАДКАЯ КУКУРУЗА
СЛАДКАЯ КУКУРУЗА
ШОКОЛАД HERSHEYS
СНИКЕРС
4 строки выбраны.
В таблице CANDY_TBL четыре записи. В следующем примере для отображения всех записей используется опция ALL, чтобы показать, что эта опция необязательна и вообще лишняя. Нет необходимости указывать ALL, поскольку эта опция подразумевается по умолчанию.
SELECT ALL PROD_DESC FROM CANDYJTBL;
PROD_DESC
СЛАДКАЯ КУКУРУЗА
СЛАДКАЯ КУКУРУЗА
ШОКОЛАД HERSHEYS
СНИКЕРС
4 строки выбраны.
В следующем операторе использована опция DISTINCT, чтобы подавить вывод повторяющихся строк. Обратите внимание на то, что здесь значение СЛАДКАЯ КУКУРУЗА напечатано только один раз.
SELECT DISTINCT PROD_DESC FROM CANDYJTBL;
PROD_DESC
СЛАДКАЯ КУКУРУЗА
ШОКОЛАД HERSHEYS
СНИКЕРС
3 строки выбраны.
При использовании DISTINCT и ALL можно заключить имя соответствующего столбца в круглые скобки. Скобки часто используются в SQL, как и во многих других языках, для удобства чтения операторов.
SELECT DISTINCT(PROD_DESC) FROM CAHDYJTBL;
PROD_DESC
СЛАДКАЯ КУКУРУЗА
ШОКОЛАД HERSHEYS
СНИКЕРС
3 строки выбраны.
Ключевое слово FROM всегда используется с оператором SELECT. Это ключевое слово является обязательным элементом запроса. Целью задаваемого с помощью FROM выражения является сообщение базе данных о том, из какой таблицы или таблиц должны извлекаться данные. Выражение FROM может включать как одну, так и несколько таблиц.
Синтаксис задаваемого с помощью FROM выражения следующий.
FROM ТАБЛИЦА1 [ , ТАБЛИЦА2 ]
Использование условий для отбора данных
Условие — это часть запроса, содержащая информацию, на основе которой отбираются данные. Условие может принимать либо значение TRUE, либо значение FALSE, что и используется для отбора. Выражение WHERE используется в запросах для исключения из рассмотрения некоторых строк из тех, что при отсутствии условий были бы включены в результаты запроса.
В выражении WHERE может содержаться несколько условий. Если условий несколько, они связываются операциями AND и OR, обсуждение которых предполагается в ходе урока 8, "Операции в условиях для отбора данных". Из того же урока вы узнаете об использовании логических операций, с помощью которых можно конструировать условия в запросах. В ходе данного урока мы будем рассматривать только запросы с одним условием.
Операция — это символ или ключевое слово SQL, использующееся для связывания элементов в операторе SQL.
Синтаксис оператора SELECT, использующего выражение WHERE следующий.
SELECT [ ALL | * | DISTINCT СТОЛБЕЦ!, СТОЛБЕЦ2 ] FROM ТАБЛИЦА! [ , ТАБЛИЦА2 ] WHERE [ УСЛОВИЕ! | ВЫРАЖЕНИЕ! ] [ AND УСЛОВИЕ2 | ВЫРАЖЕНИЕ2 ];
Вот простой запрос без использования ключевого слова WHERE.
SELECT *
FROM PRODUCTS_TBL;
PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75
13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1
90 ФОНАРИ 14.5
15 КОСТЮМЫ В АССОРТИМЕНТЕ 10
9 СЛАДКАЯ КУКУРУЗА 1.35
6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45
87 ПЛАСТИКОВЫЕ ПАУКИ 1.05
119 МАСКИ В АССОРТИМЕНТЕ 4.95
1234 ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 5.95
2345 ПОЛОЧКА ИЗ ДУБА 59.99
11 строк выбраны.
Добавим в тот же запрос условие.
SELECT * FROM PRODUCTSJTBL WHERE COST < 5;
PROD_ID PROD_DESC COST
13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1
9 СЛАДКАЯ КУКУРУЗА 1.35
6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45
87 ПЛАСТИКОВЫЕ ПАУКИ 1.05
119 МАСКИ В АССОРТИМЕНТЕ 4.95
5 строк выбраны.
Теперь показаны только строки с информацией о товарах стоимостью меньше $5. С помощью следующего запроса извлекается информация о товаре с кодовым номером 119.
SELECT PROD_DESC,
COST FROM PRODUCTS_TBL
WHERE PROD_ID = '119';
PROD_DESC COST
МАСКИ В АССОРТИМЕНТЕ 4.95
1 строка выбрана.
Обычно требуется, чтобы выводимые данные были как-то упорядочены. Выводимые данные можно упорядочить с помощью выражения, связанного с ключевым словом ORDER BY. Упорядочение, задаваемое с помощью ключевого слова ORDER BY, по умолчанию будет упорядочением по возрастанию, обозначается A—Z (А—Я) в случае сортировки имен. Алфавитное упорядочение по убыванию соответствует порядку Z—А (Я—А). Для числовых значений между 1 и 9 упорядочение по возрастанию обозначается 1-9, а по убыванию — 9— 1.
Синтаксис оператора SELECT, использующего выражение ORDER BY, следующий.
SELECT [ ALL | * | DISTINCT СТОЛБЕЦ1, СТОЛБЕЦ2 ]
FROM ТАБЛИЦА1 [ , ТАБЛИЦА2 ]
WHERE [ УСЛОВИЕ1 | ВЫРАЖЕНИЕ1 ] [ AND УСЛОВИЕ2 | ВЫРАЖЕНИЕ2 ]
ORDER BY СТОЛБЕЦ1|ЦЕЛОЕ_ЗНАЧЕНИЕ [ ASC|DESC ];
Для примера использования ключевого слова ORDER BY расширим один из использовавшихся выше операторов. Отсортируем вывод по описаниям товаров в порядке возрастания (алфавитном порядке). Обратите внимание на использование опции ASC. В выражении, задаваемом ключевым словом ORDER BY, эта опция может указываться после имени каждого из столбцов.
SELECT PROD_DESC, PROD_ID, COST
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_DESC ASC;
PROD_DESC PROD_ID COST
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 13 1.1
КОСТЮМЫ В АССОРТИМЕНТЕ 15 10
МАСКИ В АССОРТИМЕНТЕ 119 4.95
ПЛАСТИКОВЫЕ ПАУКИ 87 1.05
ПЛАСТИКОВЫЕ ТЫКВЫ 222 7.75
СЛАДКАЯ КУКУРУЗА 9 1.35
ТЫКВЕННЫЕ КОНФЕТЫ б 1.45
ФОНАРИ 90 , 14.5
8 строк выбраны.
Ввиду того, что порядок по возрастанию является порядком, принимаемым по умолчанию, нет необходимости указывать ASC вообще.
Можно также использовать DESC, как это сделано в следующем примере, чтобы отсортировать вывод в порядке, обратном алфавитному.
SELECT PRODJDESC, PROD_ID, COST
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_DESC DESC;
PROD_DESC PROD_ID COST
ФОНАРИ 90 14.5
ТЫКВЕННЫЕ КОНФЕТЫ 6 1.45
СЛАДКАЯ КУКУРУЗА 9 1.35
ПЛАСТИКОВЫЕ ТЫКВЫ 222 7.75
ПЛАСТИКОВЫЕ ПАУКИ 87 1.05
МАСКИ В АССОРТИМЕНТЕ 119 4.95
КОСТЮМЫ В АССОРТИМЕНТЕ 15 10
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 13 1.1
8 строк выбраны.
В SQL предлагаются и некоторые сокращения. Столбец, указанный в списке ключевого слова ORDER BY, можно заменить числом. ЦЕЛОЕ_ЗНАЧЕНИЕ является значением, замещающим действительное имя столбца и соответствующим порядку столбца в списке после ключевого слова SELECT. Вот пример использования числового идентификатора вместо имени столбца.
SELECT PROD_DESC,
PROD_ID,
COST FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY 1;
PROD_DESC PROD_ID COST
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 13 1.1
КОСТЮМЫ В АССОРТИМЕНТЕ 15 10
МАСКИ В АССОРТИМЕНТЕ 119 4.95
ПЛАСТИКОВЫЕ ПАУКИ 8"? 1.05
ПЛАСТИКОВЫЕ ТЫКВЫ 222 7.75
СЛАДКАЯ КУКУРУЗА 9 1.35
ТЫКВЕННЫЕ КОНФЕТЫ 6 1.45
ФОНАРИ 90 14.5
8 строк выбраны.
В этом запросе целое значение 1 представляет столбец PROD_DESC. Точно так же 2 представляет столбец PROD_ID, 3 — COST и т.д.
Можно задать упорядочение по нескольким столбцам, используя либо имена столбцов, либо соответствующие им в списке SELECT номера:
ORDER BY 1,2,3
Столбцы в выражении ORDER BY не обязательно должны быть в том же порядке, каком они указаны в списке после ключевого слова SELECT, например, как в случае
ORDER BY 1,3,2
Для правильного применения запросов очень важно понимание принципов учета регистра символов в SQL. Обычно команды и ключевые слова SQL регистронезави-симы, т. е. вы имеете возможность комбинировать в них символы верхнего и нижнего регистров так, как вам нравится. Подробнее об этом говорилось в ходе урока 5, "Манипуляция данными".
Но при работе с данными регистр символов приходится учитывать. В большинстве случаев данные в реляционной базе данных следует сохранять в виде строк, состоящих исключительно из символов верхнего регистра, с целью обеспечения согласованности данных.
Например, данные могут не быть согласованными, если использовать символы верхнего и нижнего регистра одновременно:
SMITH Smith smith
В таком случае если имя хранится как smith, а вы обратитесь к базе данных со следующим запросом, запрос вернет вам пустую строку.
SELECT *
FROM EMPLOYEEJTBL
WHERE LAST_NAME = 'SMITH';
При ссылке на данные базы данных в запросе необходимо указывать данные в том виде, в каком они хранятся в базе данных. При вводе данных придерживайтесь правил, установленных в вашей компании для использования символов верхнего и нижнего регистров.
Приведем несколько примеров запросов, построенных на основе обсуждавшихся выше принципов. Начнем с самого простого запроса, а затем постепенно будем усложнять его. Для запроса используем таблицу EMPLOYEE_TBL.
Выберем все записи в таблице и все ее столбцы.
SELECT FROM EMPLOYEEJTBL;
Выберем все записи в таблице и отобразим ее заданный столбец.
SELECT EMP_ID FROM EMPLOYEE_TBL;
При этом можно разместить весь оператор в одной строке или разделить его на несколько строк.
SELECT EMP_ID FROM EMPLOYEEJTBL;
Выберем все записи в таблице и отобразим несколько ее столбцов.
SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL;
Отобразим данные, удовлетворяющие заданному условию.
SELECT EMP_ID, LAST_NAME
FROM EMPLOYEEJTBL
WHERE EMP_ID = '333333333';
Отобразим данные, удовлетворяющие заданному условию,'и отсортируем вывод.
SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE CITY = 'INDIANAPOLIS' ORDER BY EMP_ID;
Отобразим данные, удовлетворяющие заданному условию, и отсортируем вывод по нескольким столбцам, причем для одного из столбцов это порядок по убыванию.
SELECT EMP_ID, LAST_NAME
FROM EMPLOYEE_TBL
WHERE CITY = ' INDIANAPOLIS '
ORDER BY EMP_ID, LAST_NAME DESC;
Отобразим данные, удовлетворяющие заданному условию, и отсортируем вывод, указав вместо имени столбца для сортировки замещающее его целое значение.
SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE CITY = 'INDIANAPOLIS' ORDER BY 1;
Отобразим данные, удовлетворяющие заданному условию, и отсортируем вывод по нескольким столбцам, указав вместо имен столбцов для сортировки замещающие эти имена целые значения в порядке, отличном от порядка столбцов в списке после ключевого слова SELECT.
SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE CITY = 'INDIANAPOLIS' ORDER BY 2, 1;
При выборе всех столбцов из таблицы с большим числом строк можно получить в ответ очень большое количество данных.
С помощью простого запроса к таблице можно быстро получить информацию о числе содержащихся в таблице записей. Подсчет осуществляется с помощью функции COUNT. Хотя функции предполагается обсудить в книге позже, эту функцию мы приводим здесь ввиду того, что она часто используется в простых запросах.
Синтаксис использования функции COUNT в запросах следующий.
SELECT COUNT(*) FROM ИМЯ_ТАБЛИЦЫ;
Функция COUNT используется со скобками, в которых указывается столбец, по которому следует вести подсчет, либо звездочка, если нужно посчитать все строки в таблице. Подсчитаем все записи в таблице PRODUCTSJTBL.
SELECT COUNT(*) FROM PRODUCTS_TBL;
COUNT(*)
--------
9
1 строка выбрана.
Подсчитаем теперь число значений для столбца PROD_ID в таблице PRODUCTS_TBL.
SELECT COUNT(PROD_ID) FROM PRODUCTS_TBL;
COUNT(PROD_ID)
9
1 строка выбрана.
Подсчет числа значений в столбце даст тот же результат, что и подсчет числа всех строк таблицы, если столбец имеет атрибут NOT NULL (т. е задает обязательное поле).
Получение данных из таблиц других пользователей
Чтобы иметь возможность обратиться к данным другого пользователя, нужно иметь на это разрешение. Пользователи, не являющиеся владельцами таблицы, без разрешения получить доступ к этой таблице не могут. Только после того, как разрешение на доступ получено (соответствующая команда GRANT обсуждается в ходе урока 20, "Создание и использование представлений и синонимов"), вы получаете возможность извлечь данные из таблицы другого пользователя. Чтобы обратиться к данным таблицы другого пользователя с помощью оператора SELECT, перед именем таблицы укажите имя соответствующей схемы, как это сделано в следующем примере.
SELECT EMP_ID
FROM SCHEMA.EMPLOYEE_TBL
Если для таблицы, к которой нужно получить доступ, в бадеГданных-имзется синоним, имя схемы указывать не обязательно Синонимы — это альтернативные имена таблиц, они обсуждаются в ходе урока 21, "Работа с системным каталогом".
Псевдонимы столбцов в запросах назначаются столбцам для использования псевдонимов вместо имен при выводе результатов запроса.
SELECT ИМЯ_СТОЛБЦА ПСЕВДОНИМ FROM ИМЯ_ТАБЛИЦЫ;
Использование псевдонимов иллюстрируется следующим примером с таблицей PRODUCTS_TBL. Здесь столбец с описаниями товаров отображается дважды, но второй раз столбец отображается с именем ТОВАР (обратите внимание на названия выводимых столбцов).
SELECT PROD_DESC,
PROD_DESC ТОВАР FROM PRODUCTS_TBL;
PROD_DESC ТОВАР
КОСТЮМ ВЕДЬМЫ
КОСТЮМ ВЕДЬМЫ
ПЛАСТИКОВЫЕ ТЫКВЫ
ПЛАСТИКОВЫЕ ТЫКВЫ
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
ФОНАРИ
ФОНАРИ
КОСТЮМЫ В АССОРТИМЕНТЕ
КОСТЮМЫ В АССОРТИМЕНТЕ
СЛАДКАЯ КУКУРУЗА
СЛАДКАЯ КУКУРУЗА
ТЫКВЕННЫЕ КОНФЕТЫ
ТЫКВЕННЫЕ КОНФЕТЫ
ПЛАСТИКОВЫЕ ПАУКИ
ПЛАСТИКОВЫЕ ПАУКИ
МАСКИ В АССОРТИМЕНТЕ
МАСКИ В АССОРТИМЕНТЕ
ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ
ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ
ПОЛОЧКА ИЗ ДУБА
ПОЛОЧКА ИЗ ДУБА
11 строк выбраны.
Псевдонимы столбцов применяются для назначения столбцам более понятных имен при выводе данных, а также, в некоторых реализациях SQL, для использования при ссылках на столбцы более коротких имен.
Переименование столбца в операторе SELECT не означает переименование его в базе данных, а используется только для представления результатов выполнения данного конкретного оператора SELECT
Вы ознакомились с запросами к базе данных, которые являются основным средством извлечения информации из реляционной базы данных. В основе построения запросов лежит использование оператора SELECT, являющегося командой языка запросов к данным (DQL). Каждый оператор SELECT должен включать ключевое слово
FROM. Вы узнали о том, как с помощью ключевого слова WHERE в запросах задаются условия отбора, а с помощью ключевого слова ORDER BY — условия сортировки. Вы освоили основы создания запросов и после нескольких упражнений будете готовы к тому, чтобы учиться строить более сложные запросы на следующем уроке.
Почему оператор SELECT не может работать без ключевого слова FROM?
С помощью ключевого слова SELECT вы сообщаете базе данных, какие данные вы хотели бы увидеть, а с помощью ключевого слова FROM — где взять эти данные.
Когда я с помощью ключевого слова ORDER BY указываю обратный порядок сортировки, что происходит с данными?
Предположим, что в выражении для ORDER BY вы указали столбец last_name таблицы EMPLOYEE_TBL. При задании обратного порядка сортировки имена будут отсортированы по буквам от Z до А (и от Я до А). Но если с помощью ORDER BY вы отсортировали столбец с данными о зарплате из таблицы EMPLOYEE_PAY_TBL, то при задании обратного порядка сортировки данные будут упорядочены от самого высокого значения зарплаты до самого низкого.
В чем преимущества возможности переименования столбцов?
Новое имя столбца с точки зрения конкретного отчета может лучше подходить для отображаемых данных.
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
1. Назовите обязательные составляющие оператора SELECT.
2. Для всех ли данных в выражении ключевого слова WHERE обязательно нужно использовать кавычки?
3. К какому разделу SQL относится оператор SELECT?
4. Можно ли в выражении для ключевого слова WHERE задать несколько условий?
1. Рассмотрите следующие операторы SELECT и выясните, являются ли они правильными с точки зрения синтаксиса. Если нет, то что в них следует исправить? Здесь использовалась таблица EMPLOYEE_TBL.
а. SELECT EMP_ID, LAST_NAME, FIRST_NAME, FROM EMPLOYEE_TBL;
6. SELECT EMP_ID, LAST_NAME ORDER BY EMP_ID FROM EMPLOYEEJTBL;
B. SELECT EMP_ID, LAST_NAME, FIRST_NAME
FROM EMPLOYEEJTBL
WHERE EMP_ID = '333333333'
ORDER BY EMP_ID;
Г. SELECT EMP_ID SSN, FIRST_NAME
FROM EMPLOYEE_TBL
WHERE EMP_ID = '333333333'
ORDER BY 1;
д. SELECT EMP_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEEJTBL WHERE EMP__ID = '333333333' ORDER BY 3, 1, 2;