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