Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆

Групповые функции. Если нас интересуют не строки таблицы, а некоторые итоги, мы можем использовать в процессе выборки колонок таблиц групповые функции (табл. 3.5.).

Таблица 3.5.

Основные групповые функции

Функция

Описание действия

SUM(Field)

Вычисляет сумму по указанной колонке

MIN(Field)

Вычисляет минимальное значение по указанной колонке

MAX(Field)

Вычисляет максимальное значение по указанной колонке

AVG(Field)

Вычисляет среднее значение по указанной колонке

COUNT(*)

Вычисляет количество строк в результирующей выборке

COUNT(Field)

Вычисляет количество не пустых значений в колонке

Например, чтобы узнать максимальную зарплату, получаемую сотрудниками в организации, можно выполнить запрос вида:

SELECT MAX(SALARY)FROM Employees

Общее количество записей в таблице вернет запрос вида:

SELECT COUNT(*)FROM Employees

По умолчанию группой, по которой вычисляется групповая функция, является вся результирующая выборка. Если мы нуждаемся в вычислении промежуточных итогов, то можем разбить итоговую выборку на подгруппы с помощью необязательной секции GROUP BY:

GROUP BY Field1 [, Field2] [, …]

Например, подсчитаем максимальную зарплату по отделам:

SELECT DeptNum, MAX(SALARY)

FROM Employees GROUP BY DeptNum

В этом случае функция MAX будет считаться отдельно для всех записей с одинаковым значением поля DeptNum.

Секция HAVING. На промежуточные итоги может быть наложен дополнительный фильтр посредством секции HAVING. В приведенном примере в результат попадут только отделы, максимальная зарплата в которых превышает 1000 у.е.:

SELECT DeptNum, MAX(SALARY) FROM Employees

GROUP BY DeptNum HAVING MAX(SALARY) > 1000

Важно понимать, что секции HAVING и WHERE взаимно дополняют друг друга. Сначала с помощью ограничений WHERE формируется итоговая выборка, затем выполняется разбивка на группы по значениям полей, заданных в GROUP BY. Далее по каждой группе вычисляется групповая функция и в заключение накладывается условие HAVING.

Команда insert. Добавление новых записей в таблицу осуществляется посредством команды insert. Она имеет следующий синтаксис:

INSERT INTO <имя таблицы> [(<список имен колонок>)]

VALUES(<список констант>)

Например, для внесения сведений о новом работнике необходимо выполнить следующую команду:

INSERT INTO Employees(TabNum, Name,Position,DeptNum,

Salary)VALUES(45, ‘Сергеев’, ‘Старший менеджер’,15,850)

После выполнения команды таблица Employees будет выглядеть следующим образом:

Employees

TabNum

Name

Position

DeptNum

Salary

1

Иванов

Начальник

15

1000

2

Петров

Инженер

15

500

3

Сидоров

Менеджер

10

700

45

Сергеев

Старший менеджер

15

850

Если какая-либо колонка в списке будет опущена при вставке – в соответствующее поле записи автоматически будет занесено пустое значение (NULL):

INSERT INTO Employees(TabNum, Name, DeptNum, Salary)

VALUES(45, ‘Сергеев’, 15, 850)

После выполнения команды таблица Employees будет выглядеть следующим образом:

Employees

TabNum

Name

Position

DeptNum

Salary

1

Иванов

Начальник

15

1000

2

Петров

Инженер

15

500

3

Сидоров

Менеджер

10

700

45

Сергеев

15

850

Количество констант в секции VALUES всегда должно соответствовать количеству колонок. Список колонок в команде INSERT может быть опущен целиком, в этом случае список констант в секции VALUES должен точно соответствовать описанию колонок таблицы в словаре данных СУБД, иначе команда будет отвергнута ядром БД. Пример правильной команды:

INSERT INTO Employees VALUES(45, ‘Сергеев’,

‘Старший менеджер’, 15, 850)

Команда вида:

INSERT INTO Employees VALUES(45, ‘Сергеев’, 15, 850)

завершится ошибкой, так как количество констант не соответствует реальному количеству колонок в таблице. В колонку можно в явном виде внести пустое значение посредством ключевого слова NULL. Последний запрос можно переписать следующим образом:

INSERT INTO Employees VALUES(45, ‘Сергеев’, NULL, 15, 850)

В этом случае команда вставки отработает корректно и в поле Position будет внесено пустое значение. Очевидно, что к аналогичному результату приведет и следующая команда:

INSERT INTO Employees(TabNum, Name, Position, DeptNum,

Salary)

VALUES(45, ‘Сергеев’, NULL, 15, 850)

Кроме простого добавления новых записей команда INSERT позволяет осуществлять пакетную перекачку данных из таблицы в таблицу. Синтаксис подобной команды следующий:

INSERT INTO <имя таблицы> [(<список имен колонок>)]

<команда SELECT>

Например:

INSERT INTO Table1(Field1, Field2)

SELECT Field3, (Field4 + 5) FROM Table2

Чтобы удалить ненужные записи из таблицы, следует использовать команду DELETE:

DELETE FROM <имя таблицы> [WHERE <условия поиска>]

Если опустить секцию WHERE, из таблицы будут удалены все записи. Иначе – только записи, удовлетворяющие критериям поиска. Примеры команды DELETE:

DELETE FROM Employees

DELETE FROM Employees WHERE TabNum = 45

Изменить ранее внесенные командой INSERT данные можно с помощью команды UPDATE:

UPDATE < имя таблицы>

SET <имя колонки> = <новое значение> , <имя колонки> =

<новое значение>, …

WHERE <условия поиска>]

При отсутствии секции WHERE обновлены будут все строки таблицы. Иначе – только подходящие под заданные условия. Примеры:

UPDATE Employees SET Salary = Salary + 100

UPDATE Employees

SET Position = ‘Старший менеджер’, Salary = 1000

WHERE TabNum = 45 AND Position IS NULL

Для создания новых таблиц используется команда CREATE TABLE. В общем виде ее синтаксис следующий:

CREATE TABLE <имя таблицы>

(

<имя колонки> <тип колонки>[(<размер колонки>)] [<ограничение целостности уровня колонки>]

[, <имя колонки> <тип колонки>[(<размер колонки>)] [<ограничение целостности уровня колонки>]]

[, …]

[<ограничение целостности уровня таблицы>]

[,<ограничение целостности уровня таблицы>]

[, …]

)

Примеры:

CREATE TABLE Departments

(DeptNum int NOT NULL PRIMARY KEY,

Name varchar(80) NOT NULL)

CREATE TABLE Employees

(

TabNum int NOT NULL PRIMARY KEY,

Name varchar(100) NOT NULL,

Position varchar(200),

DeptNum int,

Salary decimal(10, 2) DEFAULT 0,

CONSTRAINT FK_DEPARTMENT FOREIGN KEY (DeptNum)

REFERENCES Departments(DeptNum)

)

Созданную таблицу можно изменить с помощью команды ALTER TABLE. Команда ALTER TABLE позволяет добавлять новые колонки и ограничения целостности, удалять их, менять типы колонок, переименовывать колонки. Примеры различных вариантов:

ALTER TABLE Departments ADD COLUMN City int

ALTER TABLE Departments DROP COLUMN City

Удаление ранее созданной таблицы производится командой DROP TABLE:

DROP TABLE Departments

Система управления базой данных MySQL. Многопользовательский, многопоточный сервер базы данных. Имеет хорошую скорость и гибкость, если использовать его для хранения изображений и файлов. MySQL соответствует спецификации ANSI 92 SQL. Основные достоинства MySQL – скорость, устойчивость и легкость в работе. Другие преимущества:

поддержка нескольких одновременных запросов (многопоточность);

возможность записи фиксированной, а также переменной длины;

оптимизация связей с присоединением многих данных за один проход;

гибкая система паролей и доступов;

ODBC драйвер в комплекте с исходником;

интерфейс с языками C и perl;

легко управлять таблицей (включая добавление и удаление ключей и полей);

поддержка ключевых полей, а также специальных полей в операторе CREATE. До 16 ключей в таблице (в каждом ключе до 15 полей);

поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк переменной длины и меток времени;

утилита проверки и ремонта таблицы (isamchk);

быстрая система памяти, основанная на потоках;

псевдонимы применимы не только к таблицам, но также к отдельным колонкам в таблице;

все поля имеют значение по умолчанию. INSERT можно использовать на любом подмножестве полей.