Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реляционный способ доступа к данным. Язык SQL. 
:(
    Опции темы
Pakshin A. S.
Дата 2.11.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Реляционный способ доступа к данным основывается на операциях с группами записей. Для задания операций используются средства языка структурированных запросов – SQL (Structured Query Language), поэтому реляционный способ доступа к данным называется также SQL-ориентированным.
Основным достоинством реляционного способа доступа является небольшая загрузка сети, поскольку передаются только запросы и результат их выполнения.

ОСНОВНЫЕ СВЕДЕНИЯ О ЯЗЫКЕ SQL
Язык SQL ориентирован на выполнение действий с таблицами БД и данными в этих таблицах, а также некоторых вспомогательных действий. Составленную на языке SQL программу также называют SQL-запросом.
В дальнейшем при описании операторов языка мы будем опускать несущественные операнды и элементы, используя для обозначения отдельных элементов символы  < >, а необязательные конструкции заключать в квадратные скобки. Зарезервированные слова будут писаться строчными, а имена – прописными буквами. Регистр букв не влияет на интерпретацию операторов языка. Элементы в списках, например, имена полей и таблиц, должны быть разделены запятой.
В SQL-запросе допускаются комментарии, поясняющие текст программы. Комментарий ограничивается символами /* и */

ФУНКЦИИ ЯЗЫКА
Вот некоторые, наиболее употребляемые функции
1) Агрегатные функции:
AVG() – среднее значение
MAX() – максимальное значение
MIN() – минимальное значение
SUM() – сумма
COUNT() – количество значений
COUNT(*) – количество ненулевых значений
2) Функции для работы со строками
UPPER(Str) – переход к верхнему регистру
LOWER(Str) – переход к нижнему регистру
TRIM(Str) – удаление пробелов в начале и конце строки
SUBSTRING(Str FROM n1 TO n2) – выделение подстроки начиная с позиции n1 и заканчивая позицией n2
CAST(<Expression> AS <Type>) – приведение выражения к типу
3) Функции декодирования даты и времени
EXTRACT(<Элемент> FROM <Выражение>) – из выражения извлекается значение, соответствующее элемента. Элемент может содержать: YEAR, MONTH, DAY, HOUR, MINUTE или SECOND

СОЗДАНИЕ И УДАЛЕНИЕ ТАБИЦЫ
Для создания таблиц служит оператор CREATE TABLE:
Код

CREATE TABLE <Имя таблицы>
 (<Имя поля> <Тип данных>,
 …
 <Имя поля> <Тип данных>);

В SQL-запрос должен входить минимум одно поле с соответствующим типом данных!
Типы данных: 
SMALLINT
INTEGER
DECIMAL(X, Y)
NUMERIC(X, Y)
FLOAT(X, Y)
CHARACTER(N)
VARCHAR(N)
DATE
BOOLEAN
BLOB(N, 1)
BLOB(N, 2)
BLOB(N, 3)
BLOB(N, 4)
BLOB(N, 5)
TIME
TIMESTAMP
MONEY
AUTOINC
BYTES(N)

Пример запроса:
Код

CREATE TABLE Demo
(Number INTEGER,
Name VARCHAR(20),
BirthDay DATE);


Для удаления таблицы предназначен оператор:
Код

DROP TABLE <Имя таблицы>;

Пример:
Код

DROP TABLE Demo;


ИЗМЕНЕНИЕ СОСТАВА ТАБЛИЦЫ
Изменение состава полей таблицы выполняется оператором:
Код

ALTER TABLE <Имя таблицы>
ADD <имя поля> <тип данных>,
DROP <имя поля>,
…;

Операнд ADD добавляет в таблице новое поле, а операнд DROP удаляет из таблицы поле.
Пример:
Код

ALTER TABLE Demo
ADD Section SMALLINT,
ADD Note VARCHAR(30),
DROP position;


СОЗДАНИЕ И УДАЛЕНИЕ ИНДЕКСА
Индекс обеспечивает быстрый доступ к данным, хранимым в поле, для которого создан.
Индекс создается оператором:
Код

CREATE INDEX
<Имя индекса> ON <Имя таблицы> (<Имя поля>, …, [<Имя поля>]);

Пример:
Код

CREATE INDEX
indNamePostition ON Demo (Name, Position);

Для удаления индекса используется:
Код

DROP INDEX
<Имя таблицы>.<Имя индекса>;

Пример:
Код

DROP INDEX
Demo.indNamePosition;


ОТБОР ДАННЫХ ИЗ ТАБЛИЦ
Отбор данных из таблиц заключается в получении из них полей и записей, удовлетворяющих заданным условиям. Результат выполнения запроса, на основании которого отбираются записи, называется выборкой. Данные можно выбирать из одной или нескольких таблиц с помощью оператора SELECT:
Код

SELECT [DISTINCT] {* | <Список полей>}
FROM <Список таблиц>
[WHERE <Условие отбора>]
[ORDER BY <Список полей для сортировки>]
[GROUP BY <Список полей для группирования>]
[HAVING <Условия группировки>]
[UNION <Вложенный оператор SELECT>];

Теперь всё постепенно…
Управление полями.
Пример отбора всех полей в таблице:
Код

SELET * FROM Demo;

Пример отбора только нескольких полей из таблицы:
Код

SELECT Name, Note
FROM Demo;

Также в запрос могут входить и вычисляемые поля:
Код

SELECT Name, Code*2
FROM Demo;

Таким образом, мы получим поле Name и новое поле, созданное на основе данного Code*2, при этом ни состав, ни данные в таблице изменены не будут.
Также к какому-либо полю можно присоединить символ при помощи конкатенации (||):
Код

SELECT “- “ || Name
FROM Demo;

Таким образом, получаем при выводе «- Name», где Name – значение поля Name в таблице Demo.
Записи могут иметь одинаковые значения некоторых полей. Для избежания повторений при выводе используется перед списком полей описатель DESTINCT:
Код

SELECT DISTINCT Position
FROM Demo;

Ещё одним достоинством SQL является простота объединения в результирующем наборе данных, содержащихся в нескольких таблицах. Для этого используется список таблиц:
Код

SELECT * FROM Demo1, Demo2;

или
Код

SELECT Demo1.*, Demo2.* FROM Demo1, Demo2;

Простое условие отбора записей.
На практике набор данных обычно ограничивается записями, удовлетворяющими каким-либо определенным условиям (критериям) отбора, задаваемым с помощью операнда WHERE. 
Критерий отбора представляет собой логическое выражение, в котором можно использовать операции:
1) Сравнение
 = - равно
 > - больше
 < - меньше
 >= - больше или равно
 <= - меньше или равно
 <> или != - не равно
 !> - не больше
 !< - не меньше
2) LIKE – сравнение по шаблону
3) IS NULL – проверка на нулевое значение
4) IN – проверка на вхождение
5) BETWEEN – проверка на вхождение в диапазон
Пример простого запроса с отбором
Код

SELECT Name
FROM Demo
WHERE Salary >= 4000;

Здесь продемонстрирован пример выбора по числовому полю
Пример выбора по символьному полю:
Код

SELECT *
FROM Demo
WHERE Name = ‘Кто-то’;

Для проверки нулевого значения выражения служит операция IS NULL, которая имеет следующий формат:
Код

<Выражение> IS [NOT] NULL

Пример:
Код

SELECT *
FROM Demo
WHERE Price IS NULL

Проверка на вхождение выражения в список выполняется с помощью операции IN следующего формата:
Код

<Выражение> [NOT] IN <Список значений>

Пример:
Код

SELECT *
FROM Demo
WHERE LOWER(Name) IN (‘кто-то’, ‘somebody’);

В этом запросе приведен пример работы со встроенной функцией приведения строки к нижнему регистру LOWER().
Операция BETWEEN выполняет проверку вхождения в диапазон и имеет форма:
Код

<Выражение> [NOT] BETWEEN <Минимальное значение> AND <Максимальное значение>

Пример:
Код

SELECT *
FROM Demo
WHERE BirthDay BETWEEN ’21.5.01’ AND ’27.5.01’;

Сложные критерии выбора.
Сложный критерий состоит из: простых условий, логических операций( AND – логическое и, OR – логическое или, NOT – логическое не) и круглых скобок.
Пример:
Код

SELCT * 
FROM Demo
WHERE (LOWER(Name) IN (‘кто-то’, ‘somebody’)) AND (BirthDay BETWEEN ’21.5.01’ AND ’27.5.01’);

Группировка записей.
Записи результирующего набора могут быть сгруппированы по некоторому признаку. Группу образую записи с одинаковыми значениями в полях, перечисленных в списке операнда GROUP BY. Группирование записей автоматически исключает повтор значений в полях, заданных для группировки. Совместно с операндом GROUP BY можно использовать операнд HAVING, с помощью которого задаются дополнительные условия группировки (сравнимо с WHERE).
Пример:
Код

SELECT * 
FROM Demo
WHERE BirthDay BETWEEN ’21.5.01’ AND ’27.5.01’
GROUP BY Name;

Сортировка записей.
Сортировка представляет собой упорядочивание записей по возрастанию или по убыванию значений полей. Список полей, по которым выполняется сортировка, указывается в операнде ORDER BY. Для указания обратной сортировки по какому-либо полю нужно указать после имени соответствующего поля описатель DESC.
Пример:
Код

SELECT *
FROM Demo
ORDER BY Name;


РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
Редактирование записей представляет собой изменение значений полей в группе записей. Оно выполняется оператором UPDATE:
Код

UPDATE <Имя таблицы>
SET <Имя поля> = <выражение,

<Имя поля> = <выражение>
[WHERE <Условие  отбора>]
Пример:
[code=sql]
UPDATE Demo
SET Name = ‘asdf’
WHERE LOWER(Name) = ‘кто-то’;


ВСТАВКА ЗАПИСЕЙ
Вставка записей осуществляется  с помощью оператора INSERT, который позволяет добавлять к таблицам одну или несколько записей:
Код

INSERT INTO <Имя таблицы>
[(<Список полей>)]
VALUES (<Список значений>);

Пример:
Код

INSERT INTO Demo
(Name, Note)
VALUES (‘Кто-то1’, ‘BlaBlaBla’);


УДАЛЕНИЕ ЗАПИСЕЙ
Для удаления группы записей используется оператор DELETE:
Код

DELETE FROM <Имя таблицы>
[WHERE <Условие отбора>];

Пример:
Код

DELETE FROM Demo
WHERE LOWER(Name) = ‘кто-то’;

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0704 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.