основы sql. Основы языка sql аннотация
Скачать 88.91 Kb.
|
CREATE TABLE имя_табл (с_спецификация, ...); где с_спецификация имеет разнообразный синтаксис. Здесь же рассматриваются наиболее часто используемые ее формы. Описание столбца таблицы имя_столбца тип_данных [NULL] где имя_столбца - имя столбца таблицы, а тип_данных - спецификация одного из типов данных, рассмотренных в разделе ?Типы данных языка SQL?. Необязательное ключевое слово NULL означает, что ячейкам данного столбца разрешено быть пустыми (т.е. не содержать какого-либо значения). Описание столбца таблицы имя_столбца тип_данных NOT NULL [DEFAULT по_умолч] [PRIMARY KEY] где конструкция NOT NULL запрещает иметь в таблице пустые ячейки в данном столбце. Конструкция PRIMARY KEY указывает, что содержимое столбца будет играть роль первичного ключа для создаваемой таблицы. Конструкция DEFAULT по_умолч переопределяет имеющееся для столбцов каждого типа данных значение ?по умолчанию? (например, 0 для числовых типов), используемое при добавлении в таблицу оператором INSERT INTO строк, не содержащих значений в этом столбце. Описание первичного ключа PRIMARY KEY имя_ключа (имя_столбца, ...) Эта спецификация позволяет задать первичный ключ для таблицы в виде композиции содержимого нескольких столбцов. Описание вторичного ключа KEY имя_ключа (имя_столбца, ...) Примеры Ниже приводятся примеры использования оператора CREATE TABLE для создания четырех таблиц учебной БД. CREATE TABLE nodes ( id SMALLINT NOT NULL PRIMARY KEY, # номер узла x FLOAT NOT NULL, # x-координата y FLOAT NOT NULL); # y-координата CREATE TABLE elements ( id SMALLINT NOT NULL PRIMARY KEY, # номер КЭ n1 SMALLINT NOT NULL, # номер первой вершины n2 SMALLINT NOT NULL, # номер второй вершины n3 SMALLINT NOT NULL, # номер третьей вершины props CHAR(12) NOT NULL DEFAULT 'steel'); Столбец props таблицы elements предназначен для хранения названия материала КЭ и не может содержать ?пустых? полей, его значением ?по умолчанию? является строка символов ?steel? (сталь). CREATE TABLE materials ( name CHAR(12) NOT NULL PRIMARY KEY, # название материала density FLOAT NOT NULL, # плотность elastics FLOAT NOT NULL, # модуль Юнга poisson FLOAT NOT NULL, # к-т Пуассона strength FLOAT NOT NULL); # прочность CREATE TABLE loadings ( type CHAR(1) NOT NULL, # тип граничного условия direction CHAR(1), # направление действия node SMALLINT NOT NULL, # номер узла приложения value FLOAT, # числовое значение KEY key_node (node) ); # вторичный ключ В таблице граничных условий loadings поля столбцов direction и value могут быть пустыми (иметь значение NULL), поскольку не все виды нагрузок имеют направление действия и/или величину. Номер узла node приложения граничного условия определяется как ключ поиска в таблице, т.к. типичный запрос на поиск в таблице loadings - это запрос на определение граничных условий для конкретного узла. Однако этот ключ не может быть первичным, поскольку к одному узлу допустимо приложение нескольких граничных условий (например, момент внешних сил в шарнире). Следует отметить, что в этой таблице первичный ключ может быть сконструирован только составным из столбцов type, direction и node. Модификация таблицы Модификация существующей таблицы в БД реализуется оператором ALTER TABLE, имеющим следующий синтаксис ALTER TABLE имя_табл м_специкация [,м_спецификация ...] где м_спецификация имеет различные формы. Ниже рассматриваюся наиболее часто используемые. Добавление нового столбца ADD COLUMN с_спецификация где с_спецификация - описание добавляемого столбца в том виде, как оно используется для создания таблицы оператором CREATE TABLE. Удаление первичного ключа для таблицы DROP PRIMARY KEY Изменение/удаление значения ?по умолчанию? ALTER COLUMN имя_столбца SET по_умолч или ALTER COLUMN имя_столбца DROP DEFAULT Пример Предположим в нашей задаче моделирования состояния плоского механического объекта возникла необходимость учесть дополнительно тепловые эффекты. Для этого, в частности, необходимо иметь сведения о теплофизических параметрах материала объекта (теплоемкости и теплопроводности). Включение дополнительных сведений в таблицу materials требует ее расширения двумя новыми столбцами, что можно реализовать таким оператором языка SQL: ALTER TABLE materials ADD COLUMN capacity FLOAT NOT NULL, # теплоемкость ADD COLUMN conductivity FLOAT NOT NULL; # теплопроводность Удаление таблицы Удаление одной или сразу нескольких таблиц из БД реализуется оператором DROP TABLE, имеющим следующий простой синтаксис DROP TABLE имя_табл, ... Подчеркнем, что оператор DROP TABLE удаляет не только все содержимое таблицы, но и само описание таблицы из БД. Если требуется удалить только содержимое таблицы, то необходимо использовать оператор DELETE FROM. Добавление строк в таблицу Для добавления строк в таблицу SQL базы данных используется оператор INSERT INTO. Основные его синтаксические формы описываются ниже. Добавление строки перечислением значений всех ее ячеек INSERT INTO имя_табл VALUES (знач, ...); где знач - константное значение ячейки строки. Значения ячеек в списке должны соответствовать порядку перечисления спецификаций столбцов таблицы в операторе CREATE TABLE. Допустимо в качестве знач указывать ключевое слово NULL, что означает отсутствие значения для соответствующей ячейки строки. Перед добавлением новой строки в таблицу СУБД проверяет допустимость перечисленных значений, используя описание столбцов таблицы из оператора CREATE TABLE. Добавление строки с использованием списка имен столбцов INSERT INTO имя_табл (имя_столбца, ...) VALUES (знач, ...); Здесь списки имен столбцов и значений ячеек добавляемой строки должны быть согласованы, хотя нет никаких требований к их порядку. Допустимо опускать в списках информацию о некоторых ячейках строки, при этом ячейки, соответствующие столбцам со спецификацией NULL в операторе CREATE TABLE, будут пустыми; ячейки, соответствующие столбцам со спецификацией NOT NULL в операторе CREATE TABLE, заполняются значениями ?по умолчанию?. Добавление строк по результатам запроса к БД INSERT INTO имя_табл [(имя_столбца, ...)] SELECT ... Такой оператор дает возможность добавить в таблицу 0, 1 или сразу несколько новых строк, полученных в результате запроса к базе данных, реализуемого оператором SELECT. Пример Добавление информации о новом узле КЭ-сетки в таблицу nodes: INSERT INTO nodes VALUES (25, 6.3, 1.8); Отметим, что добавление новой строки будет удачным только в том случае, если узла с таким же идентификатором в таблице nodes еще нет - дело в том, что столбец id этой таблицы объявлен первичным ключом и, следоваательно, значения всех его ячеек должны быть уникальны. Пример Добавление информации о новом КЭ в таблицу elements: INSERT INTO elements (n1, n2, n3, id) VALUES (14, 25, 18, 46); В результате в таблице elements появится новая строка, содержащая в поле props значение ?steel?, как умолчательное значение, определенное при создании таблицы. Пример Включение в таблицу materials сведений о новом материале: INSERT INTO materials VALUES ( 'wood', 0.6, 2.0, 0.12, 50); Пример Добавление в таблицу граничных условий loadings информации об ориентированном горизонтально ?катке? в узле 2: INSERT INTO loadings VALUES ( 'r', 'x', 2, NULL); Выборка данных из таблиц Для извлечения данных, содержащихся в таблицах SQL БД, используется оператор SELECT, имеющий в общем случае сложный и многовариантный синтаксис. В данном учебном пособии рассматриваются только несложные и наиболее часто используемые примеры конструкций оператора SELECT. Упрощенно оператор SELECT выглядит следующим образом: SELECT [ALL | DISTINCT] в_выражение, ... FROM имя_табл [син_табл], ... [WHERE сложн_условие] [GROUP BY полн_имя_столбца|ном_столбца, ...] [ORDER BY полн_имя_столбца|ном_столбца [ASC|DESC], ...] [HAVING сложн_условие]; Результатом работы оператора является выводимая на стандартный вывод (экран дисплея) вновь построенная таблица, для которой количество и смысл (семантика) столбцов определяется списком элементов в_выражение; содержимое строк определяется содержимым исходных таблиц из списка FROM и критерием выборки, задаваемым сложн_условие. При описании синтаксиса оператора SELECT использованы следующие обозначения: син_табл - необязательный синоним имени таблицы, используемый для сокращения длины записи выражений и условий в операторе SELECT. полн_имя_столбца - полное имя столбца в виде [имя_табл|син_табл.]имя_столбца Конкретизирующий таблицу префикс в имени столбца необходим только для различения столбцов, имеющих одинаковое имя в разных таблицах из списка FROM. ном_столбца - номер столбца результирующей таблицы. Описание столбцов результирующей таблицы 1. Специальным (и часто используемым) видом в_выражение является символ ?*?, имеющий смысл ?все столбцы таблиц из списка FROM?. Пример Вывод всего содержимого таблицы materials. SELECT * FROM materials; +--------------+---------+----------+---------+----------+ | name | density | elastics | poisson | strength | +--------------+---------+----------+---------+----------+ | steel | 7.80 | 200.00 | 0.25 | 1000.00 | | aluminium | 2.70 | 65.00 | 0.34 | 600.00 | | concrete | 5.60 | 25.00 | 0.12 | 300.00 | | duraluminium | 2.80 | 70.00 | 0.31 | 700.00 | | titanium | 4.50 | 116.00 | 0.32 | 950.00 | | brass | 8.50 | 93.00 | 0.37 | 300.00 | +--------------+---------+----------+---------+----------+ 2. Простым (и также часто используемым) случаем в_выражение является полное имя столбца одной из таблиц списка FROM. Пример Пусть необходимо определить идентификаторы всех узлов КЭ-сетки, к которым приложено какое-либо граничное условие, при этом необходимо знать тип приложенного условия. Эта задача может быть решена с помощью следующего оператора: SELECT node, type FROM loadings; +------+------+ | node | type | +------+------+ | 1 | r | | 2 | r | | 3 | r | | 14 | h | | 27 | f | | 27 | f | +------+------+ Полученная результирующая таблица содержит дублирующие строки для узла 27. Избежать этого можно, добавив в оператор ключевое слово DISTINCT, запрещающее включение в итоговую таблицу одинаковых строк. SELECT DISTINCT node, type FROM loadings; +------+------+ | node | type | +------+------+ | 1 | r | | 2 | r | | 3 | r | | 14 | h | | 27 | f | +------+------+ 3. В общем случае в_выражение может представлять собой сложное скобочное выражение над содержимым столбцов таблицы, использующее арифметические, строковые, логические операции и функции. Наиболее часто используемые функции описаны ниже в таблицах 1, 2, 3. Пример Используемая нами таблица свойств материалов materials содержит в своих столбцах density и elastics значащие разряды чисел, выражающих, соответственно, плотность и модуль Юнга каждого материала. Для получения реальных значений этих свойств в системе единиц измерения СИ (кг/м3 и Па) необходимо домножить их на масштабные коэффициенты, что реализуется следующим оператором SELECT name, density*1000, elastics*1e+9 FROM materials; +--------------+--------------+-----------------+ | name | density*1000 | elastics*1e+9 | +--------------+--------------+-----------------+ | steel | 7800.00 | 200000000000.00 | | aluminium | 2700.00 | 65000000000.00 | | concrete | 5600.00 | 25000000000.00 | | duraluminium | 2800.00 | 70000000000.00 | | titanium | 4500.00 | 116000000000.00 | | brass | 8500.00 | 93000000000.00 | +--------------+--------------+-----------------+ Таблица 1. Арифметические функции
Примечание. x, y - числа или выражения, имеющие числовой результат. Таблица 2. Строковые функции
Примечание. s, s1,s2 - строки или выражения, имеющие результат в виде строки. n, m - числа или выражения, имеющие числовой результат. Таблица 3. Операторы и функции, возвращающие логическое значение (1 - ?истина?, 0 - ?ложь?)
Примечание. x, y, z - числа или выражения, имеющие числовой результат. l, l1, l2 - логические константы (1 или 0) или логические выражения. s - строка или выражение, имеющее результат в виде строки. v, v1, v2 - переменные или выражения. образец - константа в виде строки символов, возможно, содержащая метасимволы ?%? и ?_?. В образец метасимвол ?_? сопоставим с любым одиночным символом строки s, метасимвол ?%? - с любой цепочкой символов любой ( в том числе нулевой) длины. Пример Пусть необходимо при выводе информации о плотности материалов из таблицы materials идентифицировать материалы, имеющие в своем составе алюминий (правильнее, имеющие в своем названии упоминание об алюминии). Эта задача может быть решена с помощью следующего оператора. |