Основные сведения о языке SQL |
Язык SQL ориентирован на работу с таблицами БД, а также выполнение некоторых вспомогательных действий. Программу на языке SQL называют SQL-запросом. С помощью SQL-запроса можно:
Функции SQL Язык SQL предоставляет собой ряд функций, используемый в выражениях, из которых наиболее часто применяются следующие:
Характеристика оператора SELECT Отбор данных таблиц заключается в выборке из таблиц полей и записей, удовлетворяющих заданным условиям. Результат выполнения запроса, на основании которого отбираются записи, называется выборкой. Данные можно выбирать из одной или нескольких таблиц с помощью оператора SELECT. Оператор SELECT - важнейший оператор языка SQL. Он используется для отбора записей, удовлетворяющих сложным критериям поиска. Этот оператор имеет следующий формат: SELECT [DISTINCT] <Список полей> или * FROM <Список таблиц> [WHERE <Условия отбора>] [ORDER BY <Список полей для сортировки>] [GROUP BY <Список полей для группирования >] [HAVING <Условия группирования >]
Примечание: при описании операторов языка будем опускать несущественные операнды и элементы, для обозначения отдельных элементов использовать символы < и > (эти символы при программировании не указываются), необязательные элементы конструкций языка заключаются в квадратные скобки. Для наглядности зарезервированные слова языка SQL будем писать строчными, а имена прописными буквами. Элементы в списках, например, имена полей и таблиц должны быть разделены запятыми. Результатом выполнения оператора SELECT является набор данных, в котором могут быть разрешены или запрещены повторяющиеся записи (имеющие одинаковые значения всех полей). Этим управляет описатель DISTINCT. Если описатель отсутствует, то в набор данных могут входить записи, имеющие одинаковые значения всех полей. В описание оператора SELECT требуется включать список полей и операнд FROM. Остальные операнды не обязательны. В операнде FROM перечисляются имена таблиц, из которых отбираются записи. Список должен содержать, как минимум, одну таблицу. Список полей определяет состав полей результирующего набора данных, эти поля могут принадлежать разным таблицам. В списке должно быть задано хотя бы одно поле. Если в набор требуется включить все поля таблицы (таблиц), то вместо перечисления имен можно указать символ “*”. Если список содержит поля нескольких таблиц, то для указания принадлежности поля к той или иной таблице используют составное имя, которое включает имя таблицы и имя поля, разделенное точкой: <Имя таблицы>.<Имя поля>. Операнд WHERE задает критерии, которым должны удовлетворять записи в результирующем наборе данных. Выражение, описывающее условие отбора, является логическим. Его элементами могут быть имена полей, операции сравнения, арифметические и логические операции, скобки, функции LIKE, NULL, IN и др. Операнд GROUP BY позволяет выделять группы записей в результирующем наборе данных. Группой являются записи с одинаковыми значениями в полях, перечисленные после операнда GROUP BY. Выделение групп нужно для выполнения групповых операций над записями. Операнд HAVING используется совместно с операндом GROUP BY для отбора записей внутри групп. Правила записи условия группирования аналогичны правилам формирования условия отбора операнда WHERE. Операнд ORDER BY содержит список полей, определяющий порядок сортировки записей результирующего набора данных. По умолчанию сортировка по каждому полю выполняется в порядке возрастания значений. Если необходимо задать для поля сортировку по убыванию, то после имени этого поля указывается описатель DESC.
Примеры создания запросов Пример 1. Отбор всех полей. select * from t_locality В результате выполнения этого запроса из таблицы t_locality в набор данных попадают все поля и все записи. Порядок следования полей набора данных соответствует порядку расположения физических полей таблицы, определенному при ее создании.
Пример 2. Задание полей набора данных. select linksheet, linkobject from t_locality В набор данных, формируемый в результате SQL-запроса, включаются поля linksheet и linkobject всех записей из таблицы t_locality. Порядок полей в наборе данных будет соответствовать порядку полей в этом списке.
Пример 3. Отбор записей с уникальными значениями поля. select distinct linkobject from t_locality Записи выбираются из таблицы t_locality, при этом в набор данных каждое значение поля LINKOBJECT включается только один раз.
Пример 4. Отбор записей из двух таблиц. select * from t_locality, t_district Результирующий набор данных содержит все поля всех записей таблиц t_locality и t_district.
Пример 5. Отбор полей из разных таблиц. select t_locality. linkobject , t_district.info from t_locality, t_district Результирующий набор данных содержит поле linkobject из таблицы t_locality и поле l_info из таблицы t_district.
Простой критерий отбора записей В предыдущем примере попадали все записи из указанных таблиц, при этом разработчик мог управлять составом полей этих записей. На практике в набор данных обычно включаются записи, удовлетворяющие каким-либо определенным критериям, задаваемым с помощью операнда WHERE. Критерий отбора представляет собой логическое выражение, в котором можно использовать следующие операции:
В простом критерии отбора используется одна операция. Для операций сравнения и сравнения по шаблону критерий отбора имеет следующий формат: <Выражение1> < Операция сравнения > < Выражение2>
Пример 1. Отбор записей по значениям числового поля. select l_kladr from t_locality where linkobject >1000 Оператор задает получение списка кодов КЛАДР (Классификатор адресов России), имеющих номер объекта более 1000.
Пример2. Отбор записей по значениям символьного поля. select linkobject from t_locality where linksheet = ‘Московская область’ В данном примере составляется список номеров объектов Московской области.
Пример3. Проверка частичного совпадения. select linkobject from t_locality where linksheet like “мос%” Получение списка объектов, названия которых начинается с букв “Мос”. В выражениях операции LIKE используются специальные символы:
Сложные критерии отбора записей Можно использовать несколько операций при задании критерия отбора записей. Сложный критерий (логическое выражение) состоит из следующих элементов:
Пример. Сложный критерий отбора select * from t_locality where (linksheet = 'московская область' ) and (l_kladr = 5002100011500) В приведенном примере выбирается населенный пункт, который находится в Московской области и имеет значение кода КЛАДР 5002100011500.
Сортировка записей Сортировка – это упорядочение записей по возрастанию или убыванию значений полей. Поля, по которым выполняется сортировка, указываются в операнде ORDER BY. По умолчанию сортировка происходит в порядке возрастания значений полей.
Пример. Сортировка записей. select * from t_locality order by l_kladr Сортировка записей задана по полю l_kladr.
Редактирование записей Редактирование записей – это изменение значений поля в группе записей. Оно выполняется оператором UPDATE. UPDATE <Имя таблицы> SET <Имя поля>=<Выражение>, … <Имя поля>=<Выражение> [WHERE <Условие отбора>];
Пример. Изменение значений поля. update t_locality set linksheet = 'московская область' В поле LINKSHEET записывается значение Московская область.
Вставка записей Вставка записей в таблицу осуществляется с помощью оператора INSERT, который позволяет добавлять к таблицам одну или несколько записей. INSERT INTO <Имя таблицы> (<Список полей>) VALUES (<Список значений>); Пример. Добавление записи. insert into t_locality (linksheet, l_kladr) values(“московская область ”,5002100011500); В таблицу t_locality включается новая запись, содержащая название листа карты и значение кода КЛАДР.
Удаление записей Для удаления записей используется оператор DELETE , имеющий формат: DELETE FROM <Имя таблицы> [WHERE <Условие отбора>];
Пример. Удаление записи. delete from t_locality where linkobject =0 ; Из таблицы t_locality удаляются все записи, которые имеют нулевое значения в поле linkobject.
Соединение таблиц В набор данных можно включать поля из разных таблиц, подобное включение называется соединением (связыванием). Соединение таблиц может быть внутренним или внешним. Внутреннее соединение представляет простейший случай, когда после слова SELECT перечисляются поля разных таблиц.
Пример. Внутреннее соединение таблиц при использовании критерия отбора select t_locality.kladr, t_district.name_posel from t_locality, t_district where t_locality.posel_id = t_district.posel_id
Устанавливается связь между таблицами t_locality и t_district. Набор данных включает поле l_kladr из таблицы t_locality и поле d_name из таблицы t_district в соответствии с идентификатором поселения.
При внутреннем соединении таблицы, поля которых указываются в SQL-запросе, равноправны. При внешнем соединении таблиц можно указать, какая из таблиц будет главной, а какая – подчиненной. В этом случае формат операнда FROM имеет вид: FROM <Таблица1> [<Вид соединения>] JOIN < Таблица 2> ON <Условие отбора>
Критерий отбора после слова ON задает условие включения записей в набор данных; соединяемые (связываемые) таблицы указываются слева и справа от слова JOIN . Какая из двух таблиц будет главной, определяет вид соединения:
Пример. Внешнее соединение select t_locality.sem9,t_locality.l_kladr, t_district.d_name from t_locality left join t_district on t_locality. district_ref= t_district.id
Как и в предыдущем примере, связываются таблицы t_locality и t_district. |