- •ВВЕДЕНИЕ
- •1.2. Перенаправление стандартных ввода, вывода и ошибок
- •1.3. Создание цепочек и группирование команд
- •1.4. Основы сценариев командной строки
- •1.5. Операторы циклов в командной строке
- •Задания для самостоятельной работы
- •2.2. Использование оператора SELECT
- •Задания для самостоятельной работы
- •2.3. Разделы WHERE и ORDER BY оператора SELECT
- •Задания для самостоятельной работы
- •2.4. Использование однострочных функций
- •Задания для самостоятельной работы
- •2.5. Использование условных выражений
- •Задания для самостоятельной работы
- •2.6. Работа с функциями даты и времени
- •Задания для самостоятельной работы
- •2.7. Запросы из нескольких таблиц
- •Задания для самостоятельной работы
- •2.8. Агрегирующие функции, раздел GROUP BY
- •Задания для самостоятельной работы
- •2.9. Подзапросы
- •Задания для самостоятельной работы
- •2.10. Операция над множествами
- •Задания для самостоятельной работы
- •2.11. Вставка, модификация и удаление данных
- •Задания для самостоятельной работы
- •2.12. Транзакции
- •Задания для самостоятельной работы
- •2.13. DDL. Определение таблиц
- •Задания для самостоятельной работы
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Теперь запустим файл 1.bat. В результате на экране появится последовательность сообщений:
Таким образом, вызов из одного пакетного файла другого при помощи командыcall останавливает исполнение пакетного файла до тех пор, пока не завершится выполнение пакетного файла, вызванного командой call. При этом после завершения вызываемого файла управление возвращается в исходный файл на команду, непосредственно следующую за командой call.
Теперь изменим файл 1.bat , заменив команду call простым указанием имени файла 2.bat:
Снова запустим файл 1.bat на выполнение и получим результат:
Видно, что возврата в исходный файл в этом случае не произошло.
1.5. Операторы циклов в командной строке
Довольно часто необходимо выполнить какое-либо действие для группы файлов. Для этих целей используется команда for, которую можно использовать и в сценариях, и в командной строке.
В первом случае используется синтаксис:
for %%переменная in (множество) do команда,
а во втором случае:
for %переменная in (множество) do команда
Параметр %%переменная или %переменная представляет подставляемую переменную. Команда for заменяет эту переменную текстом каждой строки в заданном множестве, пока команда после ключевого слова do не обработает все файлы. «Множество» задает один или более файлов или текстовых строк, которые необходимо обработать с помощью заданной команды (скобки обязательны), «команда» — команду, выполняемую для каждого включенного в множество файла, «параметры» — параметры данной команды (если она их использует). in и do — это не параметры, а обязательные ключевые слова команды for.
Ниже представлен пример использования команды for для последовательного вывода на экран монитора содержимого всех пакетных файлов каталога bat диска с:
Если включена поддержка расширенной обработки команд, то командойfor можно обрабатывать не только файлы, но и каталоги. В этом случае команда for используется с ключом /d.
14
Пример. Необходимо вывести на экран список всех подкаталогов первого уровня корневого системного каталога Windows (рис. 1).
for /d %B in (%SystemRoot%\s*) do echo %B
Рис. 1. Результат выполнения сценария с командой for для каталогов
Описанные выше возможности широко используются в сценариях, разрабатываемых для автоматизации администрирования вычислительной системы, работающей под управлением ОС Windows.
Задания для самостоятельной работы
Необходимо написать пакетный файл, соответствующий следующему описанию. Пакетный файл запускается с указанием параметра, значение которого проверяется на
совпадение со строкой IFO.
Если параметр при запуске пакетного файла не задан, пользователю выдается сообщение о необходимости указать параметр и после нажатия любой клавиши работа пакетного файла заканчивается.
Если указанное пользователем значение параметра не совпадает со строкой IFO, пользо-
вателю выдается сообщение вида "Нет заданий для студентов специальности <......>". И после нажатия любой клавиши работа пакетного файла заканчивается.
Если параметр указан и его значение совпало с контрольной строкой, на экран выводится список курсов с 1-го по 3-й, и пользователю предлагается указать курс,на котором он обучается.
Если номер курса не равен 2, то пользователю выдается сообщение вида "Для студентов 1-го курса заданий нет", и после нажатия любой клавиши вновь выводится экран с запросом номера курса.
При вводе значения, содержащего курс 2, необходимо осуществить следующие действия
ипроверки:
–если в текущем каталоге нет каталога ARHIV, то его нужно создать;
–поставить в соответствие каталогу ARHIV логический диск E:;
–если в каталоге ARHIV есть файл, имя и тип которого совпадают с именем и типом выполняющегося пакетного файла, то файл в архиве должен быть переименован с заменой типа файла-копии на bak. При этом все существующие в каталоге ARHIV файлы с типом bak должны быть предварительно удалены;
–текущий пакетный файл должен быть скопирован в каталог ARHIV с сохранением имени
итипа. При выполнении операций копирования на экран не должно выводиться системных сообщений.
15
2. ТИПОВАЯ ОРГАНИЗАЦИЯ СОВРЕМЕННОЙ СУБД НА ПРИМЕРЕ ORACLE 11G 2.1. Инсталляция СУБД Oracle 11g
СУБД Oracle 11g работает на большинстве современных платформ и под управлением большинства современных ОС. Перед инсталляцией необходимо определиться с платформой и ОС, на которую будет производиться установка, и получить необходимый дистрибутив с сайта
Oracle: http://www.oracle.com/technetwork/products/express-edition/downloads/index.html.
Дистрибутив можно бесплатно скачать, установить и использовать в ознакомительных целях. В некоторых случаях удобно устанавливать СУБД Oracle ненапрямую, а в специально созданную виртуальную машину. Например, на платформе Microsoft Windows можно использовать
Oracle VM VirtualBox http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html
для создания виртуальной машины, внутри которой уже произвести установку СУБД Oracle. Подробные инструкции по установке можно найти в дистрибутивах или на сайте
http://docs.oracle.com/.
2.2. Использование оператора SELECT
Базовый синтаксис оператора SELECT состоит из двух классов: SELECT и FROM. Класс SELECT определяет, что (какие столбцы) извлекать, а класс FROM указывает откуда (из какой таблицы) извлекать данные:
SELECT *|{[DISTINCT] столбец|выражение [псевдоним],...} FROM таблица;
Для выбора всех столбцов используется символ «*», например:
SELECT * FROM departments;
Для выбора конкретных столбцов надо их перечислить в классе SELECT, например:
SELECT last_name, phone_number FROM employees;
Помимо имен столбцов, в SELECT можно использовать арифметические выражения, например:
SELECT last_name, salary, salary * 0.87 FROM employees;
По умолчанию заголовком столбца полученной выборки является имя столбца, но можно задать и другое имя для столбца выборки при помощи использования алиаса, например:
SELECT last_name, salary,
salary * 0.87 as "Salary after tax" FROM employees;
Ключевое слово “as” при задании алиаса можно опустить, а если алиас состоит только из одного слова, то можно не заключать его в кавычки:
SELECT last_name, salary, salary * 0.13 Tax FROM employees;
Помимо арифметических выражений в SELECT можно использовать оператор конкатенации строк (обозначается «||»). Соединять можно как содержимое столбцов, так и литеральные константы, которые следует заключать в апострофы, например:
SELECT first_name||' '||last_name as "Full Name" FROM employees;
По умолчанию SELECT выдает все строки, включая возможные дубликаты
SELECT first_name FROM employees;
Для устранения дубликатов можно использовать ключевое слово DISTINCT:
SELECT DISTINCT first_name FROM employees;
16
Задания для самостоятельной работы
1.Выберите все данные из таблицы DEPARTMENTS.
2.Покажите структуру таблицы EMPLOYEES. Составьте запрос для вывода имени каждого служащего, должности, даты найма и номера.
3.Составьте запрос для вывода неповторяющихся должностей из таблицы EMPLOYEES.
4.Выполните запрос из задания 2, назвав столбцы Emp #, Employee, Job и Hire Date.
5.Выведите на экран имя, соединенное с идентификатором должности через запятую и пробел. Назовите новый столбец Employee and Title.
2.3. Разделы WHERE и ORDER BY оператора SELECT
Количество возвращаемых оператором SELECT строк можно ограничить при помощи класса WHERE, наложив условие, какие именно строки следует возвращать:
SELECT *|{[DISTINCT] столбец|выражение [псевдоним],...} FROM таблица
[WHERE условие(я)];
Например, для того чтобы выбрать всех сотрудников отдела 90:
SELECT * FROM employees WHERE department_id = 90;
При формулировании условий символьные значения заключаются в апострофы:
SELECT last_name, job_id, department_id FROM employees
WHERE last_name = 'King';
Можно использовать различные условия сравнения:
SELECT last_name, salary FROM employees WHERE salary <= 3000;
Помимо простых условий сравнения, можно использовать более сложные конструкции:
Оператор |
Значение |
BETWEEN {A} AND {B} |
Находится в диапазоне от A до B (включительно) |
IN ({список}) |
Совпадает с каким-либо значением списка |
LIKE {шаблон} |
Подходит подсимвольный шаблон |
IS NULL |
Является неопределенным значением |
SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500;
SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);
При формулировании шаблона для оператора LIKE «%» означает ноль или больше любых символов, «_» — ровно один любой символ. Например:
SELECT first_name FROM employees WHERE first_name LIKE 'S%'; SELECT last_name FROM employees WHERE last_name LIKE '_o%';
17
Для проверки на неопределенное значение используется специальный оператор IS NULL, так как оператор сравнения с неопределенностью ( = NULL) всегда будет возвращать ложь:
SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL;
Несколько простых условий внутри класса WHERE можно комбинировать в одно сложное при помощи логических операторов AND, OR и NOT:
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000
AND job_id LIKE '%MAN%';
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 OR job_id LIKE '%MAN%';
SELECT last_name, job_id FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
Общий приоритет исполнения операторов приведен ниже:
Приоритет |
Оператор |
1 |
Арифметические операторы |
2 |
Конкатенация |
3 |
Сравнение |
4 |
IS [NOT] NULL, [NOT] LIKE, [NOT] IN |
5 |
[NOT] BETWEEN |
6 |
NOT |
7 |
AND |
8 |
OR |
Таким образом, сначала выполняются арифметические операции, потом конкатенация и т.д., согласно приоритету, вплоть до логического оператора OR, который выполняется в последнюю очередь:
SELECT last_name, job_id, salary FROM employees
WHERE job_id = 'SA_REP' OR job_id = 'AD_PRES' AND salary > 15 000;
Изменить штатный приоритет исполнения операторов можно при помощи круглых скобок:
SELECT last_name, job_id, salary FROM employees
WHERE (job_id = 'SA_REP' OR job_id = 'AD_PRES') AND salary > 15 000;
По умолчанию оператор SELECT возвращает строки в произвольном (удобном СУБД) порядке. Для упорядочивания выборки используется класс ORDER BY, указываемый последним. Сортировать можно как по возрастанию (ASC), так и по убыванию значений (DESC). Если порядок в явном виде не указан, применяется сортировка по возрастанию:
SELECT *|{[DISTINCT] столбец|выражение [псевдоним],...} FROM таблица [WHERE условие(я)]
[ORDER BY {столбец, выражение, псевдоним} [ASC|DESC]];
18
