Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сведения о языке SQL.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
159.14 Кб
Скачать

Индексы

Индексы служат для сортировки таблиц по указанным столбцам. Они существенно ускоряют работу с большими данными. Ниже приведен минимальный синтаксис создания индекса.

-- пусть есть некая таблица tblname

-- со столбцом tblcol

create table tblname(

...

tblcol date;

...

);

-- создаем индекс ind_tblname_d для этой таблицы

CREATE INDEX ind_tblname_d ON tblname (tblcol);

В большинстве СУБД позволяется индексация по нескольким столбцам. Первичные и уникальные ключи обычно индексируются автоматически.

Представления

Представления позволяют сохранить код выборки в базе данных. После этого имя представления используется в других выборках также как и имя обычной таблицы. Таким образом, упрощается написание новых запросов. Для конкретности примера, пусть существуют следующие таблицы с данными.

-- создаем первую таблицу

create table dicevents(

id integer,

s varchar(45),

constraint pk_dicevents primary key(id)

);

-- вставка данных

insert into dicevents

values(1,'пожар');

insert into dicevents

values(2,'авария');

insert into dicevents

values(3,'взрыв газа');

-- создаем вторую таблицу

create table evt(

id integer,

d date,

summ double precision,

evtname integer,

constraint pk_evt primary key(id),

constraint fk_evt foreign key(evtname)

references dicevents(id)

);

-- вставка данных

insert into evt

values(1,date '2008-01-02',102000,1);

insert into evt

values(2,date '2007-12-31',67000,3);

insert into evt

values(3,date '2008-01-05',32020.3,2);

insert into evt

values(4,date '2008-01-06',99000,null);

Для создания представлений используется команда CREATE VIEW. По желанию в команду можно включить OR REPLACE. В этом случае новое представление заменит старое, если оно существует. Ниже приведены примеры создания представления на соединение наших таблиц.

CREATE OR REPLACE VIEW evtlst

AS -- далее следует запрос

select t.d as "дата",

dt.s as "событие",

t.summ as "ущерб"

from evt t left join dicevents dt on (t.evtname=dt.id)

order by t.d;

-- названия столбцов можно задать после

-- имени представления

-- в MySQL двойные кавычки возможны

-- только в режиме ANSI SQL

CREATE OR REPLACE VIEW evtlst

("дата","событие","ущерб")

as

select t.d, dt.s, t.summ

from evt t left join dicevents dt on (t.evtname=dt.id)

order by t.d;

Выборка из представления не отличается от выборки из обычной таблицы.

-- выборка из представления

select * from evtlist;

Для уничтожения представления используется команда DROP VIEW. Некоторые СУБД поддерживают расширенный синтаксис с IF EXISTS, позволяющий избежать ошибки, если уничтожаемого представления не существует.

-- уничтожение представления

DROP VIEW eventlist;

-- уничтожение представления, если оно

-- существует

DROP VIEW IF EXISTS eventlist;

Динамический sql (dsql)

Динамический SQL это расширение, позволяющее писать подпрограммы на процедурном языке с использованием команд SQL. PostgreSQL поддерживает несколько процедурных языков как PL/Tcl и PL/Perl. Здесь же рассматривается PL/pgSQL, который очень близок по синтаксису и своим возможностям с Oracle PL/SQL. Процедурный язык в MySQL более ограничен и находится на стадии разработки.

Для использования языка PL/pgSQL, его надо установить в БД командой CREATE LANGUAGE plpgsql;