Шрифт:
Интервал:
Закладка:
mysql> DELETE * FROM Db WHERE Db="test";
mysql> DELETE * FROM Db WHERE Db="test_%";
mysql> quit
17.5. Введение в язык SQL
17.5.1. Общие понятия
Если вы раньше работали с какой-нибудь СУБД (Система Управления Базой Данных), вы смело можете пропустить этот пункт — ничего нового для себя вы не прочитаете. Но если вы сталкиваетесь с СУБД впервые, без основных терминов вам не обойтись.
♦ Поле (field) — это неделимый элемент данных в БД. Поле имеет имя и тип. Подробнее о типах полей мы поговорим чуть позже.
♦ Запись (record) — набор полей, содержащих связанную информацию. Например, запись с полями C_No, C_Name и C_Address содержит информацию о клиенте — его номер, имя и адрес.
♦ Таблица (table) — это набор записей одинаковой структуры. Если у нас есть запись структуры C_No, C_Name, C_Address, то все записи в таблице Clients будут иметь такую структуру.
♦ База данных (database) — это совокупность связанных таблиц. Например, в одной таблице может храниться информация о клиенте, а в другой — информация о заказе, который сделал клиент.
♦ Индекс (index) — используется для быстрого поиска нужной записи в базе данных. Обычно поиск производится по значению одного поля или по значению нескольких полей.
♦ Первичный индекс (index) — управляет порядком отображения записей в таблице. Поле первичного индекса должно быть уникальным, то есть в одной таблице не должно быть двух записей, в которых это поле принимает одно и то же значение. В нашей таблице Clients, очевидно, первичный индекс должен строиться по полю C_No — по номеру клиента, который должен быть уникален.
♦ Вторичный индекс (secondary index) — в отличие от первичного индекса может строиться по нескольким полям и не обязан быть уникальным. Вторичные индексы используются для связывания таблиц. Индексы также называются ключами.
♦ Запрос (query) — оператор, выбирающий записи и поля, удовлетворяющий заданному условию, из одной или нескольких таблиц.
17.5.2. Краткий практический курс SQL
Как работает сервер SQL? Клиент посылает запрос, в котором указывает, какую информацию хочет получить от сервера или какую операцию с данными собирается выполнить. В ответ сервер посылает клиенту ответ, в котором указывает, выполнил ли сервер его запрос, и, если выполнил, сообщает результат запроса.
Для описания запросов клиента был разработан целый язык — SQL (Structured Query Language, Структурированный язык запросов). С помощью запросов SQL вы можете:
♦ Создавать базы данных и таблицы,
♦ Добавлять информацию в таблицы.
♦ Удалять информацию,
♦ Модифицировать информацию.
♦ Получать нужные вам данные.
В этой книге мы не будем подробно рассматривать язык SQL — ему посвящены отдельные книги, в два раза толще этой, в которых описываются различные варианты языка SQL.
Перед началом работы с SQL вам нужно интуитивно понимать, что такое база данных. Если вы имеете представление о ней, можете смело пропустить этот абзац. База данных состоит из таблиц, как книга MS Excel состоит из листов. Каждая таблица состоит из записей, а каждая запись — из полей. Каждое поле имеет свой домен, то есть тип данных, которые можно записать в это поле. Поле типа INT может содержать только целые числа, а поле типа CHAR — строки.
Вот теперь можно приступать к созданию новой базы данных. Для создания баз данных и таблиц в языке SQL обычно используется запрос CREATE. В случае с MySQL для создания базы нужно использовать программу mysqladmin:
$ mysqladmin -u admin -p create sklad
Естественно, пользователь admin должен существовать и обладать соответствующими правами. Откройте созданную базу:
$ mysql -u admin -p sklad
Каждый запрос MySQL должен заканчиваться точкой с запятой. Если вы введете SELECT * FROM test, клиент mysql будет ждать ввода точки с запятой:
->
Давайте договоримся, что будем писать запросы согласно стандарту SQL, то есть для улучшения восприятия будем разбивать их на части. Программа mysql допускает ввод запроса во всю строчку. Например, запрос, записанный в стандарте SQL,
SELECT *
FROM S
WHERE Q > 10
в программе mysql можно записать так:
SELECT * FROM S WHERE Q > 10
Теперь создадим три таблицы — Товар, Клиенты и Заказы.
CREATE TABLE CLIENTS (
C_NO int NOT NULL,
FIO char(40) NOT NULL,
ADDRESS char(30) NOT NULL,
CITY char(15) NOT NULL,
PHONE char(11) NOT NULL
);
Таблица CLIENTS содержит поля C_NO (номер клиента), FIO (Фамилия, Имя, Отчество), Адрес, Город и Телефон. Все эти поля не могут содержать пустого значения (NOT NULL).
ПримечаниеБольшинство серверов не требуют явного указания NOT NULL, но при этом значение по умолчанию может быть разным: одни сервер инициализируют столбцы значением NULL, а другие — NOT NULL, Поэтому лучше явно указать NOT NULL.
CREATE TABLE TOVAR (
T_NO int NOT NULL,
DSEC char(40) NOT NULL,
PRICE numeric(9,2) NOT NULL,
QTY numeric(9,2) NOT NULL
);
Эта таблица будет содержать данные о товарах. Тип numeric (9,2) означает, что 9 знаков отводятся под целую часть и два — под дробную, QTY — это количество товара на складе.
CREATE TABLE ORDERS (
O_NO int NOT NULL,
DATE date NOT NULL,
C_NO int NOT NULL,
T_NO int NOT NULL,
QUANTITY numeric(9,2) NOT NULL,
AMOUNT numeric(9,2) NOT NULL
);
Эта таблица содержит сведения о заказах — номер заказа (O_NO), дату заказа (DATE), номер клиента (C_NO), номер товара (T_NO), количество (QUANTITY) и стоимость заказа AMOUNT.
Теперь добавим данные в наши таблицы. Добавить данные можно с помощью оператора INSERT:
INSERT INTO CLIENTS
VALUES (1,'Иванов К.П.', 'Ленина 6', 'Кировоград','80522111111');
Добавляемые значения должны соответствовать тому порядку, в котором поля перечислены в операторе CREATE. Если вы хотите добавлять информацию в другом порядке, то вы должны указать этот порядок в операторе INSERT:
INSERT INTO CLIENTS (FIO,ADDRESS,C_NO,PHONE,CITY)
VALUES ('Петров', 'Пушкина 9',2,'-','Кировоград');
С помощью INSERT мы можем устанавливать значения только некоторых полей:
INSERT INTO CLIENTS (C_NO, FIO) VALUES (1,'Петров');
В нашем примере этот запрос выполнен не будет, поскольку все остальные поля равны NULL (пустое значение), а наша таблица пустых значений не допускает.
Добавим данные в таблицу TOVAR:
INSERT INTO TOVAR
VALUES (1,'Монитор LG',550.74);
Обратите внимание, что мы пока еще не указали первичные ключи таблицы, поэтому нам никто не мешает добавить в таблицу одинаковые записи.
Добавить дату в поле DATE можно с помощью функции TO_DATE:
INSERT INTO ORDERS
VALUES (1,TO_DATE('01/01/02,'DD/MM/YY'), 1,1,1,550.74);
Данная запись означает, что первого января 2002 года Иванов И.П. (С_NO = 1) заказал один (QUANTITY = 1) монитор LG (T_NO = l).
Предположим, что нам нужно обновить запись, например, клиент Иванов переехал в другой город. Это делается так:
UPDATE CLIENTS SET CITY = 'Киев' WHERE C_NO = 1;
Теперь удалим всех клиентов, номера которых превышают 10:
DELETE FROM CLIENTS
WHERE C_NO >10;
Если вторая часть запроса DELETE — WHERE — не указана, значит, действие оператора распространяется на все записи указанной таблицы.
Добавление, изменение и удаление записей — это, безусловно, очень важные команды, но чаще всего вы будете использовать запрос SELECT, который выбирает из таблицы данные, удовлетворяющие условию.
Например, для вывода всех записей из таблицы CLIENTS, введите:
SELECT * FROM CLIENTS;
В результате вы получите такой ответ от сервера:
C_NO FIO ADDRESS CITY PHONE
1 Иванов И.П. Ленина 6 Кировоград 80522111111
1 Иванов И.П. Ленина 6 Кировоград 805221111]1
2 Петров В.К. Пушкина 9 Кировоград 80522112111
Обратите внимание на первые две записи — они одинаковые. Теоретически добавление одинаковых записей возможно — мы ведь не указали первичный ключ таблицы. Если вы хотите исключить одинаковые записи из ответа сервера (но не из таблицы!), введите запрос:
SELECT DISTINCT *
FROM CLIENTS;
Если вы хотите вывести только некоторые поля, то запрос должен выглядеть так:
SELECT DISTINCT FIO, PHONE
FROM CLIENTS;
Теперь займемся усложнением наших запросов. Выведем все товары, цена которых превышает 500 рублей.
SELECT *
FROM TOVAR
WHERE PRICE > 500;
Вы можете использовать другие операторы отношений: <,>, = ,<>,
Если ваша компания обслуживает несколько однофамильцев и вы хотите вывести информацию обо всех Ивановых, используйте шаблон LIKE:
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение