В прошлом номере я познакомил тебя с основами баз данных. Вполне возможно, что это тебе пригодиться. Последнее, что я успел рассмотреть, это оператор DISTINCT. Давай продвигать наши знания об SQL дальше.
Сегодня мы начнём писать полноценные запросы. Если ты захочешь их отлаживать на какой-нибудь базе данных, то будь внимателен, тебя подстерегают некоторые опасности:
Некоторые базы данных чувствительны к регистру.
Возможно, что твоя база данных может воспринимать текст только в верхнем регистре.
Некоторые производители отклоняются от стандартов, и возможны отклонения от того, что я говорю.
Я уже предостерегал тебя в прошлом номере, но всё же мне захотелось повториться (повторенье - мать мученья).
Следующий оператор, с которым я хочу тебя познакомить, будет WHERE . Этот оператор задаёт критерии поиска. Например, мне надо выбрать все записи из таблицы User.db, где в поле Country содержится значение "USA". В этом случае я должен написать следующий запрос:
SELECT *
FROM User
WHERE Сountry LIKE "USA"
Результатом запроса будут все строки содержащие в поле Country значение "USA" . Если проговорить последнюю строку запроса, то она будет звучать так: "Где поле Country равно USA". Ещё одно замечание: в запросам, строки выделяются кавычками. В зависимости от базы данных, кавычки могут быть одинарными или двойными. В Delphi это одинарные кавычки, но я буду использовать в этих статьях двойные, как это предусмотрено стандартом.
Я немного поторопился и использовал в запросе ключевое слово LIKE . Это слово идентично знаку "=" (равно), только используется для сравнения строк. Если тебе надо сравнивать числа, то ты должен использовать знак равно (=), а если строки, то оператор LIKE .
Давай теперь рассмотрим, как этот запрос будет выглядеть при поиске по числам. Для этого найдём все строки из той же базы, где количество лицензий равно 1.
SELECT *
FROM User
WHERE LecNumber =1
В этом случае мы производим поиск по числовому полю, поэтому используем знак равно (=). Результатом запроса будут все строки, содержащие в поле LecNumber значение 1.
Во всех запросах я использовал единственный оператор "=" (равно). Но это не значит, что больше ничего нет. Стандарт разрешает использовать следующие операторы:
"=" - Равный
">" - Больше
"<" - Меньше
">=" - Больше или равно
"<=" - Меньше или равно
"<>" - Неравно
Операторы "больше", "меньше" и др. можно использовать не только с числами, но и со строками. В этом случае буква "А" будет меньше чем "Р". При сравнении строк разного регистра, меньшим оказывается строка в верхнем регистре, например, "А" будет меньше "а" и "Р" будет меньше "а". При сравнении строк, тебе также необходимо использовать кавычки.
SELECT *
FROM User
WHERE LecNumber >1
Результатом этого запроса будет строки, в которых количество лицензий больше 1.
Теперь усложним запрос с помощью булевых операторов. В стандарте предусмотрено три булевых оператора: AND (логическое "и"), OR (логическое "или"), NOT (логическое "не").Сразу же рассмотрим пример:
SELECT *
FROM User
WHERE Сountry LIKE "USA"
AND LecNumber >1
Результат запроса - все строки содержащие в поле "Сountry" значение "USA" и в поле LecNumber значение больше "1". Если какое-то из этих условий не выполнится, то строка не будет выбрана.
SELECT *
FROM User
WHERE Сountry LIKE "USA"
OR LecNumber =1
Результат запроса - все строки содержащие в поле "Сountry" значение "USA" или в поле LecNumber значение "1". Для того, чтобы строка была выбрана, необходимо чтобы хотя бы одно из этих условий выполнилось.
SELECT *
FROM User
WHERE Сountry LIKE "USA"
AND NOT LecNumber =1
Результат запроса - все строки содержащие в поле "Сountry" значение "USA" и в поле LecNumber значение не равное "1". Для того, чтобы строка была выбрана, необходимо чтобы оба условия были верны (потому что мы используем оператор "AND").
Обрати внимание, что во втором условии "NOT LecNumber =1" оператор "NOT" стоит вначале. Вот именно там он и должен стоять, и не вздумай его совать в середину или даже в конец условия. В принципе, это условие идентично условию "LecNumber <>1", но это не значит, что этот оператор не нужен. Иногда он действительно очень удобен.
При использовании булевых операторов ты можешь использовать скобки:
SELECT *
FROM User
WHERE Сountry LIKE "USA"
AND (LecNumber =1 OR LecNumber =2)
Результат запроса - все строки содержащие в поле "Сountry" значение "USA" и в поле LecNumber значение не равное "1" или "2". Для того, чтобы строка была выбрана, необходимо чтобы условие Сountry LIKE "USA" и условие в скобках были верны.
Если ты закончил хотя бы четыре класса, то никаких проблем с пониманием сегодняшнего занятия у тебя не возникло. Если нет, то я тебе сочувствую.