Для общения с базой данных есть язык SQL. Это не язык программирования, это язык запросов. SQL (англ.Structured Query Language —язык структурированных запросов) — универсальный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.

Язык SQL делится на три части:

  • Операторы определения данных (Data Definition Language, DDL) — с их помощью создаются, добавляются структура, таблицы.
  • Операторы манипуляции данными (Data Manipulation Language, DML).
  • Операторы определения доступа к данным (Data Control Language, DCL) — права доступа, администрирование.

Существует стандарт SQL, который поддерживают все базы данных. Но большинство нормальных баз имеют свои диалекты (надстройки над этим языком: свои операторы, запросы по-другому построены). Не факт, что запрос в БД Oracle будет работать Mysql. Рассмотрим операторы манипулирования данными. Хотя SQL регистронезависим, операторы приянято писать большими буквами. Всевозможные пробелы, табуляции игнорируются, но принято для удобства их как-то логически разделять.

Запрос SELECT

Это запрос на выборку данных. Примеры:

SELECT name, addr, city FROM teachers ORDER BY name
SELECT title FROM courses WHERE length > 30
SELECT * FROM courses WHERE length > 30 AND title LIKE 'Web%'

По умолчанию записи приходят в том порядке, в каком они были добавлены, но можно и сортировать (ORDER BY). Редко все записи будут нужны. Обычно их выбирают по критериям (оператор WHERE — имя, длина и т.д.). Оператор LIKE подставляет шаблон для выборки, а вместо % подставляется все что угодно. Знак * означает все поля, ее можно при отладке и тесте кода. В реальности * использовать не надо, лучше перечислить нужные поля через запятую.

SELECT — объединение таблиц

Часто запрос адресуется сразу к нескольким таблицам, для этого их надо объединить. Например есть две таблицы:

база данных

Столбец tid — это идентификатор таблицы слева (т.е. иванов прочитал курс PHP и XML, а петров ничего не прочитал). Теперь делаем выборку из этих таблиц, используя внешние объединения (INNER JOIN):

SELECT t.name, t.code, l.course
FROM teachers t // псевдоним таблицы teachers - t
INNER JOIN lessons l ON t.id = l.tid //псевдоним таблицы lessons - l

Объединяем по критерию: id из левой таблицы должен совпадать с tid из правой таблицы. В примере выше мы обращаемся к таблицам по составному имени. Это полезно, т.к. в разных таблицах имена столбцов могут совпадать (id например). Кроме того, в реальности мы работаем с кодом, не видим перед собой графически таблиц, и если этих таблиц 20-40 штук, то удобней каждой таблице придумать составное имя (именам таблиц дать псевдонимы) и работать с ним. В ответ придет таблица:

база данных

А например запрос:

SELECT t.name, t.code, l.course
FROM teachers t // псевдоним таблицы
LEFT OUTER JOIN lessons l ON t.id = l.tid //левое внешнее объединение

выдаст таблицу:

база данных

Т.е. идет объединение по левой таблице (иванов и петров).

Есть также RIGHT OUTER JOIN — правое внешнее объединение, т.е. по правой таблице.

А вот пример объединения трех таблиц:

SELECT DISTINCT teachers.name
FROM teachers INNER JOIN
(lessons INNER JOIN courses
ON lessons.course = courses.id)
ON teachers.id = lessons.teacher
WHERE courses.title LIKE 'Web%'
ORDER BY teachers.name

Здесь есть оператор DISTINCT. Он выбирает только одно упоминание значения, т.е. если несколько одинаковых значений, то выберется одно.

Похожая запись

Добавить комментарий

Ваш адрес email не будет опубликован.