
Текст книги "Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики"
Автор книги: Максим Чалышев
сообщить о нарушении
Текущая страница: 2 (всего у книги 5 страниц)
Просмотр структуры таблиц
Выберите в выпадающем списке в левой верхней части формы TABLEs. Список отразит все таблицы, которые вам доступны.
Выберите любую из таблиц.
В правой части страницы отразится структура выбранной таблицы.

Также доступны следующие вкладки, которые показывают сведения о таблице:
• TABLE – структура избранной таблицы;
• Data – данные избранной таблицы;
• INdexes – сведения об индексах заданной таблицы;
• ConstraINts – ограничения заданной таблицы;
• Grants – права базы данных по заданной таблице;
• SQL – SQL-код таблицы. Если вам необходимо посмотреть SQL-код таблицы, тогда следует обратиться к этой вкладке.
Просмотр кода процедур
В некоторых шагах мы обращаемся к исходному коду процедур и функций.
Выберите в выпадающем списке одно из следующих наименований: SEQUENCEs, Function, Procedures, Packages.

Рисунок 5. Исходный код функции Fn_CITY_NAME
В правой части веб-страницы будет отображен исходный код выбранного объекта.
Вопросы учеников
Сколько времени следует уделять занятиям?
Рекомендую уделять занятиям не менее четырех часов в день, тогда за 20 дней вы успеете пройти все шаги.
Если я все же не могу найти ответ на вопрос или не могу решить задание, что мне делать?
На сайте sqladv.ru есть ссылка на нашу группу в «Фейсбуке», там вы наверняка найдете ответ и решение задачи, с которой испытываете трудности.
В SQLFIDele есть такие же возможности по просмотру и редактированию таблиц, как в ORACLE APEX?
Нет, SQLFIDele – это менее сложный инструмент, тем не менее его возможностей достаточно, чтобы выполнить большинство практических заданий из этой книги.
Сколько примерно времени в пропорции уделять теории, а сколько посвятить практике?
Лучше всего из четырех часов рабочего времени следует один час уделить теории, а три часа – практике. Таким образом, примерно 80 процентов вашего учебного времени должно занимать выполнение практических задач.
Контрольные вопросы и задания для самостоятельного выполнения
1. Сколько рекомендуется тратить времени на занятия?
2. Как сделать карточки с наиболее сложными для понимания вопросами?
3. Как в APEX посмотреть все таблицы схемы?
4. Как в APEX посмотреть структуру заданной таблицы?
Шаг 4. Таблицы в базе данных
Теория
База данных – это, прежде всего, таблицы. Таблицы базы данных можно представить как таблицы в WORD или EXCEL, где в каждой ячейке содержатся определенные данные, но также есть и некоторые отличия.
Дело в том, что таблицы в базах данных создаются по некоторым правилам, и вот основные правила для таблиц в базе данных.
Так как мы изучаем SQL-диалект ORACLE СУБД, то данные правила справедливы именно для СУБД ORACLE:
• любая таблица в базе имеет уникальное наименование в рамках схемы данных;
• у каждой таблицы всегда есть заданное количество колонок: больше нуля и меньше 1024;
• каждая колонка также должна иметь уникальное наименование, но уже в рамках данной таблицы;
• в таблице в базе данных может быть практически неограниченное количество строк, здесь ограничения касаются только объема диска базы данных;
• для данных в таблице можно создавать ограничения. Ограничения касаются всех данных в колонке, на которую установлено ограничение;
• имена таблиц, имена колонок имеют ограничения по количеству символов и не могут называться зарезервированным словом, например командой из языка SQL или PL SQL. Также наименование колонки таблицы не должно начинаться с цифр;
• имя колонки в рамках таблицы также должно быть уникальным.
Создание таблиц по указанным правилам – это первый шаг в разработке базы данных.
Таблицы в базе, состав колонок таблицы должны производиться в соответствии со стандартами проектирования реляционной базы данных.
Работа со структурой таблиц, данными в таблицах осуществляется c помощью языка запросов SQL.
Одна или несколько колонок в таблице могут быть обозначены как первичный ключ.
Первичным ключом обозначаются колонки таблицы, содержащие набор уникальных значений, по которым мы можем однозначно идентифицировать строчку в рамках этой таблицы. Первичный ключ не может содержать пустые значения, так как всегда имеет ограничение NOT NULL.
Вторичный ключ – так обозначается колонка таблицы, в которой есть данные, используемые для связи с другой таблицей.
Таблицы нашей учебной схемы
Наша учебная схема очень проста и состоит всего лишь из четырех таблиц.
Первая таблица MAN содержит сведения о людях, которые приобрели машины.
Колонки таблицы MAN:
• PHONEnum – уникальный телефонный номер человека, первичный ключ для таблицы MAN, содержит текстовые данные;
• CITYCode – код города, вторичный ключ для связи с таблицей CITY;
• FirstName – имя человека (текстовые данные);
• LAStName – фамилия человека (текстовые данные);
• YearOld – возраст человека (числовые данные).
Таблица CITY – справочник городов, состоит из трех колонок:
• CITYCODE – уникальный код города, ключевое поле для таблицы CITY (числовые данные);
• CITYNAME – наименование города (текстовые данные);
• PEOPLES – население города, количество человек, которые проживают в городе (числовые данные).
Таблица AUTO – сведения об автомобилях автосалона.
Колонки таблицы AUTO:
• REGnum – уникальный регистрационный номер автомобиля (содержит текстовые данные);
• PHONEnum – телефонный номер покупателя, вторичный ключ для связи с таблицей MAN;
• MARK – марка авто (текстовые данные);
• COLOR – цвет авто (текстовые данные);
• ReleASeDT – дата создания авто, дата/время (специальный тип данных).
Таблица AUTO1 является копией таблицы AUTO и имеет те же колонки, что и таблица AUTO, и достаточно похожие данные, эта таблица используется в нескольких учебных заданиях (так же, как CITY1, MAN1).
Следующее изображение показывает основные таблицы в учебной базе данных в виде схемы:

Рисунок 6. Учебная схема базы данных
Вопросы учеников
Вы сказали, что наименования таблиц должны быть уникальны в рамках одной схемы. Что такое схема?
В СУБД есть понятие схемы – это особая логическая область, ассоциированная с заданной учетной записью, которая объединяет несколько объектов базы данных.
Почему телефонный номер покупателя PHONEnum – текстовое поле, разве оно не должно быть числовым?
Иногда телефонный номер заполняют со скобками. Чтобы разрешить это противоречие, я использовал текстовый (VARCHAR2) тип данных для этой колонки; кроме того, так сделать правильно, так как это упрощает поиск нужных нам номеров по префиксу.
Какие команды SQL позволяют изменять структуру таблицы, добавлять новые колонки, например?
Это команда ALTER TABLE, с которой мы познакомимся чуть позже.
Контрольные вопросы и задания для самостоятельного выполнения
1. Могут ли колонки разных таблиц называться одинаково?
2. Что такое первичный ключ, какие колонки (первичные ключи) есть в нашей учебной схеме?
3. Какие данные находятся в учебной таблице CITY?
4. Какая колонка в таблице MAN нашей учебной схемы содержит данные о возрасте человека?
Шаг 5. Типы данных
Для удобства в SQL все данные разделены на различные типы: например, есть строковый тип, к которому относятся только строки и текст; есть целочисленный тип, к нему можно отнести только целые числа; определен специальный тип данных для чисел с плавающей точкой.
Каждой колонке в таблице назначается свой определенный тип данных, то есть каждая колонка таблицы может сохранять данные строго заданного типа и никаких данных другого типа, отличного от этого. Например, в одной из колонок могут находиться только строки и текст, а в другой – только числа.
Типов данных в SQL ORACLE-диалекте множество, мы же рассмотрим самые основные из них.
Теория и практика
Ниже приведена таблица основных типов данных, используемая в SQL ORACLE. В таблице колонка-размер означает, какой максимальный объем информации сможет вместить этот тип данных. Например, тип данных VARCHAR2 может вместить в строку длиной не более 4000 символов.

таблица. Типы данных

Таблица. Типы данных
Важные замечания
Для удобства (во избежание излишней путаницы) в учебных примерах для этой книги рассматриваются в основном только три типа данных, однако нам достаточно этих типов для решения большинства учебных задач и понимания учебного материала.
Основные типы данных, используемые в книге в практических задачах:
• VARCHAR2 (n) – тип для хранения текстовой информации, в скобках указывается максимальное количество символов в строке. Данный тип используется при работе со строковыми данными разной длины, память под такие данные выделяется динамически;
• NUMBER – тип данных для хранения числовой информации, причем можно использовать как для целых чисел, так и для чисел с плавающей точкой;
• DATE – специальный тип данных для сохранения специальной информации – дата-время, например дата и время создания записи, дата и время электронной подписи документа, дата и время заключения сделки.
Эти типы данных достаточно часто используются на практике и применяются в работе.
Вопросы учеников
Вы рассказали про тип данных VARCHAR2 для хранения строк, но в виде строки можно записать и числа, и даты тоже. Зачем так много разных типов, может, они не нужны?
Да, вы можете сохранять числа как строки, но в дальнейшем вам будет сложно работать с этими данными, обработка будет затруднена. Например, со строками нельзя производить математических вычислений, и вам придется применять операции преобразования, что негативно скажется на качестве и скорости работы вашей программы.
Типы данных в других SQL СУБД, отличных от ORACLE, также различаются?
Есть незначительные различия, например в MS SQL используется VARCHAR, а не VARCHAR2, или вместо CLOB используется тип TEXT. Необходимо обратиться к соответствующему разделу документации выбранной СУБД, чтобы понять, какие именно типы данных различаются.
Почему в ORACLE SQL используется именно VARCHAR2, а не просто VARCHAR, как в MS SQL-сервер?
В ORACLE SQL тоже существует тип VARCHAR, но исторически сложилось так, что в ORACLE SQL между этими двумя типами существует разница:
• VARCHAR может хранить до 2000 символов, а VARCHAR2 может хранить до 4000 символов;
• если мы объявим тип данных как VARCHAR, то будет зарезервировано место для пустых NULL VALUES.
Поэтому чаще всего на практике в ORACLE используется VARCHAR2.
Контрольные вопросы и задания для самостоятельного выполнения
1. Для чего используется тип DATE?
2. Нам необходимо в одной из колонок таблиц сохранять целые числа, какой тип следует использовать?
3. Какой тип правильно использовать для хранения данных о цвете автомобиля?
4. Какой тип данных необходимо использовать для хранения сведений о росте человека?
День второй
Шаг 6. Создание таблиц
Как мы уже поняли, основная информация, с которой нам предстоит работать в базе данных, находится в таблицах. Из шага 4 (таблицы в базе данных) про таблицы мы узнали следующие важные сведения:
• каждая таблица обладает уникальным наименованием;
• у таблицы обязательно должны быть колонки, каждая из которых обладает уникальным наименованием в рамках этой таблицы;
• для каждой колонки таблицы задается свой тип данных (про типы данных подробно рассказывается в предыдущем шаге).
Важные замечания
1. Имена таблиц, имена колонок в SQL имеют ограничение по количеству символов и не могут называться зарезервированным словом, таким как команда из языка SQL.
Например, нельзя назвать таблицу или колонку GROUP, это зарезервированное слово, часть команды GROUP BY, или же недопустимо называть таблицу или колонку таблицы FROM, SELECT, INSERT, KEY.
2. Имена таблиц и имена колонок не могут начинаться с цифр; также принято использовать при именовании таблиц и колонок латинские буквы, хотя, впрочем, вполне возможно назвать таблицы и колонки таблиц на русском, китайском и даже хинди (я видел и такое), но подобные выкрутасы не приветствуются.
3. Очень желательно, чтобы наименования таблиц, а также наименования колонок таблиц отражали смыл относительно данных, которые содержатся в этих таблицах, например: MANS, CARS, STAFF – люди, машины, персонал, GOODS – товары, ITEMS – элементы.
Теория и практика
Теперь, когда мы разобрались с теоретической частью, самое время заняться практическими упражнениями.
Разберемся на практике, как создавать таблицы в базе, используя язык SQL.
Для создания таблиц используется специальная команда SQL CREATE TABLE.
Синтаксис упрощенный.
CREATE TABLE имя таблицы (
Column_NAME1 column_type (NUMBER, или VARCHAR2 (n) или DATE) primary KEY,
Column_NAME 2 column_type (NUMBER, или VARCHAR2 (n) или DATE),
Column_NAMEn column_type (NUMBER или VARCHAR2 (n) или DATE)
);
Для простоты на начальном этапе в наших практических примерах мы будем использовать три основных типа данных.
(NUMBER, VARCHAR2 (n), DATE), соответственно, для хранения чисел, строковых данных и данных календарного типа (дата/время).
Для текстового типа VARCHAR2 (n) после VARCHAR2 в скобках указывается количество символов для данной колонки.
Итак, сначала идет команда создания таблицы CREATE TABLE, далее – наименование таблицы: MANS, GOODS, ITEMS или любое другое.
Далее в скобках через запятую перечисляются наименования колонок и тип колонок.
Вот несколько примеров, как создавать таблицы в языке SQL:
1. Создать таблицу «Мебель»:
• артикул;
• наименование;
• количество;
• номер партии.
CREATE TABLE furnit (artikl VARCHAR2 (50) PRIMARY KEY, NAME VARCHAR2 (50),partCOUNT NUMBER, partnum NUMBER);
2. Создать таблицу «Корзина для веб-магазина»:
• артикул;
• наименование товара;
• имя покупателя;
• количество;
• дата покупки.
CREATE TABLE shopINgcart (
article VARCHAR2 (50) PRIMARY KEY
,itemNAME VARCHAR2 (50)
,buyerNAME VARCHAR2 (50)
,itemCOUNT NUMBER
,dtbuy DATE
);
Создать таблицу «Предприятие»:
• название бригады;
• номер бригады;
• количество человек;
• дата создания;
• направление деятельности.
CREATE TABLE plant
(
NAMEteam VARCHAR2 (15),
numteam NUMBER PRIMARY KEY,
MANCOUNT NUMBER,
crDATE DATE,
dirToDo VARCHAR2 (30)
);
Вопросы учеников
Можно ли использовать заглавные буквы в языке SQL и когда это допустимо?
Язык SQL не зависит от регистра, то есть при составлении команд можно писать и заглавными, и строчными буквами.
Примеры
Create TABLE Tab1 (TABno INteger PRIMARY KEY, NAME VARCHAR2 (10));
Create TABLE Tab1 (TABno INteger PRIMARY KEY, NAME VARCHAR2 (10));
CREATE TABLE Tab1 (TABNo INTEGER PRIMARY KEY, NAME VARCHAR2 (10));
Как переносить команды SQL на другую строку, если в одну строчку не помещается, существуют ли какие-то специальные правила?
Язык SQL допускает достаточно вольный перенос строк, главное, не разделять этим переносом осмысленные команды, а также соблюдать последовательность команд.
Примеры
Можно написать так:
CREATE TABLE TAB1 (TABno INteger PRIMARY KEY, NAME VARCHAR2 (10));
А можно и так:
CREATE TABLE
TAB1 (
TABno INteger PRIMARY KEY,
NAME VARCHAR2 (10));
А вот такая запись уже неверна:
CREATE TABLE TAB1 (TABno INteger PRIMARY
KEY, NAME VARCHAR2
(10));
Еще один пример неверной записи:
CREATE TABLE
PRIMARY KEY
TAB1 (TABno INteger,
NAME VARCHAR2 (10));
Контрольные вопросы и задания для самостоятельного выполнения
1. Найдите ошибку в скрипте создания таблицы.
CREATE TABLE ORACLE1 (81NAME VARCHAR2 (20), ITEMS NUMBER);
2. Найдите ошибку в другом скрипте создания таблицы.
CREATE TABLE DELTA (SELECT VARCHAR2 (20), COUNT NUMBER);
3. Можно ли при наименовании таблицы использовать строчные и заглавные символы?
4. Создайте самостоятельно таблицу «Запчасти», задайте имена колонок и название таблицы сами, правильно определите типы данных.
Таблица «Запчасти»:
• номер запчасти;
• марка авто;
• название запчасти;
• количество данных запчастей;
• стоимость запчасти.
Создайте самостоятельно таблицу «Фото», задайте имена колонок и название таблицы сами, правильно определите типы данных.
Таблица «Фото»:
• название фото;
• размеры;
• подпись;
• дата создания.
Создайте самостоятельно таблицу «Уроки» («Занятия»), задайте имена колонок и название таблицы сами:
• название занятия;
• день недели;
• дата начала занятия;
• дата окончания занятия.
Шаг 7. Структура таблицы
Введение
Мы научились создавать таблицы на предыдущем шаге. Таблицы и колонки таблиц, их названия, расположение, последовательность колонок, типы данных колонок называются структурой таблицы.
Структуру таблицы можно менять, то есть добавлять новые колонки в таблицу, удалять колонки из таблицы, менять типы данных у заданной колонки. Также, если таблица нам больше не нужна или просто надоела, существует возможность такую таблицу удалить.
Теория и практика
Существует несколько команд для изменения структуры таблицы, добавления, удаления или изменения типа данных колонки таблицы.
Все эти команды объединяет то, что они начинаются с ключевой команды ALTER TABLE.
Добавление колонки.
Добавляем новую колонку к нашей таблице.
Синтаксис:
ALTER TABLE TABLE_NAME ADD (column_NAME column_type);
TABLE_NAME – наименование таблицы.
Column_NAME – наименование колонки.
Column_type – тип данных колонки (VARCHAR (n) или NUMBER или DATE).
Примеры:
Пусть у нас есть таблица GOODS, необходимо добавить колонку itemprice типа NUMBER, цена изделия.
ALTER TABLE GOODS ADD (itemprice NUMBER);
Пусть у нас есть таблица MANS, необходимо добавить колонку DATEreg типа DATE, дата регистрации, и колонку patronymic – отчество VARCHAR2 (50).
ALTER TABLE MANS ADD (DATEreg DATE);
ALTER TABLE MANS ADD (patronymic VARCHAR2 (50));
Удаление колонки
Также мы можем удалить колонку из заданной таблицы с помощью специальной SQL-команды DROP COLUMN.
Синтаксис:
ALTER TABLE TABLE_NAME DROP COLUMN column_NAME;
Примеры:
Пусть у нас есть таблица GOODS, необходимо удалить колонку COLOR.
ALTER TABLE GOODS DROP COLUMN COLOR;
Пусть у нас есть таблица MANS, необходимо удалить колонку YEAROLD.
ALTER TABLE MANS DROP COLUMN YEAROLD;
Меняем тип данных для колонки таблицы.
Синтаксис изменения типа колонки:
ALTER TABLE TABLE_NAME MODIFY (column_NAME DATA_type);
Сolumn_NAME – наименование колонки.
Data_type – тип данных колонки (VARCHAR (n) или NUMBER или DATE).
Примеры:
– заменить в таблице MANS тип поля NAME на VARCHAR2 (90);
ALTER TABLE MANS MODIFY (NAME VARCHAR2 (90));
– заменить в таблице GOODS тип поля INSERT_DATE на DATE;
ALTER TABLE GOODS MODIFY (INSERT_DATE DATE);
Удаляем таблицу из базы данных.
Синтаксис команды SQL для удаления таблицы:
DROP TABLE TABLE_NAME;
Здесь TABLE_NAME – наименование таблицы.
Примеры:
– удалить таблицу DOC;
DROP TABLE doc;
– удалить таблицу ITEMS;
DROP TABLE ITEMS;
– удалить таблицу BILLING_PERIOD со связанными данными в таблице PERIODS.
DROP TABLE BILLING_PERIODS CASCADE;
Важные замечания
1. При выполнении действий по изменению структуры таблицы следует быть особенно осторожным, следует тщательно взвешивать свои действия: восстановление таблицы в прежнем виде может быть затруднительно или невозможно.
2. Если вы используете команды изменения типов данных и встречаетесь с ошибкой ORA-01439, модифицируемый столбец при смене типа данных должен быть пуст. Сохраните данные в столбце и используйте специальные преобразования, о которых будет рассказано в следующих шагах.
3. В некоторых случаях удаление таблицы или колонки таблицы будет запрещено, поскольку могут быть еще таблицы со связанными данными. Требуется сначала удалить данные в связанных таблицах, а уже затем удалять таблицу либо колонку. Или же воспользоваться специальной командой DROP CASCADE.
Вопросы учеников
Можно ли переименовать таблицу?
Да, вполне, и для этого есть две команды:
ALTER TABLE TABLE_NAME RENAME TO new_TABLE_NAME;
или же
RENAME
TO
Универсальный же синтаксис предполагает использование ALTER TABLE.
Примеры:
Переименуем таблицу с названием STAFF в EMP:
ALTER TABLE STAFF RENAME TO emp;
Переименуем таблицу с названием TRADES в TRADE:
ALTER TABLE trades RENAME TO trade;
Можно ли переименовать столбец в таблице?
ALTER TABLE TABLE_NAME RENAME COLUMN old_column_NAME to new_column_NAME;
Пример:
Переименовать колонку с наименованием NAME в таблице STAFF в колонку LASTNAME:
ALTER TABLE STAFF RENAME COLUMN NAME TO LASTNAME;
Контрольные вопросы и задания для самостоятельного выполнения
1. С помощью какой команды можно добавить колонку к заданной таблице?
2. Повторите команды изменения структуры таблицы.
3. К таблице «Запчасти» добавить колонку «Вес запчастей» – напишите SQL-команду.
4. Удалите из таблицы FOTO колонку Fotosize – напишите SQL-команду.
5. У нас есть таблица «Предметы» («Уроки в школе»), необходимо добавить колонку «Преподаватель» – напишите SQL-команду.
6. Удалите из базы данных таблицу FOTO.