sql

SQL — язык манипулирования данными. Оператор SELECT

Для общения с базой данных есть язык 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. Он выбирает только одно упоминание значения, т.е. если несколько одинаковых значений, то выберется одно.




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

Ваш e-mail не будет опубликован.