SQL-запросы. Примеры для начинающих
- Категория: Код
- – Автор: Игорь (Администратор)
В рамках данной статьи, я расскажу вам самые азы баз данных и приведу примеры sql-запросов для начинающих.
Когда человек впервые начинает читать обзоры про базы данных, то его голова просто разрывается от огромной массы технических терминов. Все эти первичные и вторичные ключи, таблицы, связи, процедуры, представления, индексы, условия, подзапросы, колонки, типы данных и прочее. И все это "как бы" необходимо учитывать. Как говорится, "А-а-а-а-а".
Однако, в этом и состоит одна из самых больших ошибок - читать термины, а не понимать их суть. Поэтому, многие из таких любознательных и нетерпеливых либо бросают это дело, либо вскользь осваивают материал и потом пишут невесть что. Изучать базу данных нужно с самого простого - с основы. И уже только затем остальные возможности.
Прочитав этот обзор, вы усами убедитесь, что никаких сверх сложных тайн в базах данных нет, сложности лишь касаются отдельных технических аспектов, позволяющих, к примеру, оптимизировать скорость и потребляемую оперативную память.
Примечание: Материал предназначен для начинающих, но часть вещей может быть полезна и остальным.
Основа любой базы данных - таблицы и 4 типа запросов
Основой любой базы данных являются всего две вещи - это таблицы и 4 типа запросов. Именно с них и началось. Все эти сложности, которые описываются тысячами веб-сайтов в Интернете, появились уже после них и применяются к этим азам.
Первым делом, рассмотрим что такое таблица. Хоть раз, но каждый открывал эксельный файл или электронную таблицу OpenOffice (см. обзор офисных пакетов). Так вот это, по сути, и есть база данных. У вас есть колонки и строки, в пересечении которых вы заполняете данные (числа, текст, даты и прочее).
Однако, тут есть важный момент - если эксель позволяет произвольно вставлять данные в любую ячейку, то существующие базы данных имеют некоторые ограничения.
1. Каждая колонка имеет уникальное некое имя (аналогично A, B, C).
2. В каждой колонке могут располагаться данные только одного типа. К примеру, в любой ячейке колонки B только числа, в колонке C только текст, в колонке F только даты.
3. Количество колонок фиксировано и исчислимо. Простыми словами, в экселе вы можете в любой момент вставить некие данные в ячейку рядом с определенными колонками. В базах данных же, подобное требует, что бы вы сначала добавили колонку с именем и определили ее тип, а только лишь потом редактировали данные.
4. Единицей измерения таблицы принято считать не отдельную ячейку, а каждую строку. К примеру, если у вас в таблице три колонки "Имя (Name) / День рождения (Date) / Возраст (Age)", то единицей измерения считается "Вася / 12.12.2012 / 7", а не какое-либо отдельное значение. Конечно, редактировать или просматривать отдельные ячейки этой строки можно, но добавлять данные в таблицу можно только построчно.
5. Существует специальное значение NULL, которое обозначает отсутствие данных в ячейке. Понять суть можно из следующего момента - далеко не у всех типов данных можно установить такое значение, которое можно было бы считать отсутствием данных. К примеру, для текста отсутствие данных можно как-то сравнить с пустой строкой (хотя и это не всегда корректно), а вот для чисел такого значения просто не существует (0 это число; к примеру, "осталось 0 яблок"). Поэтому и было введено специальное значение NULL.
Пример таблицы somedata:
Name (текст) | Date (даты) | Age (цифры) |
---|---|---|
Вася | 12.12.2012 | 7 |
Анжелика | 22.02.2002 | 17 |
Кротомир | 30.08.1999 | 20 |
Рассмотрим основные 4 типа запросов. Не сложно догадаться, что подобную таблицу хотелось бы каким-то образом составлять под конкретные задачи, а так же получать отфильтрованные данные. Просто представьте, что в таблице выше не 3 строки, а целых 10 000. Найти что-либо или подкорректировать будет весьма проблематично. Именно поэтому и были введены следующие 4 типа запросов:
1. Вставка (insert) - позволяет вставлять в таблицу единицы измерения, то есть строки.
2. Удаление (delete) - позволяет удалять из таблицы строки данных.
3. Обновление (update) - позволяет изменять отдельные ячейки строк.
4. Выборка (select) - позволяет из данных таблицы получать произвольного вида подтаблицы с необходимыми результатами, которые так же называют выборками.
Рассмотрим все типы более подробно.
Но, перед этим, хотелось бы отметить, что будет использован синтаксис для базы данных MySQL. Однако, для азов это не так критично, так как приведенные примеры если и будут отличаться в разных базах данных, то весьма незначительно.
Запрос вставки (insert)
Запрос вставки строится следующим образом:
где insert into - это начало запроса, table - это конкретное название таблицы, (col1, col2, ..., colN) - это названия колонок в нужном порядке (сделано для удобства), values - указывает, что далее будут указаны строки для вставки, (val11, val12, ..., val1N), (val21, val22, ..., val2N), ..., (valM1, valM2, ..., valMN) - это конкретные значения для вставки (в соответствующем порядке с колонками). Важно, что после каждого sql-запроса необходимо ставить точку с запятой. Это позволяет отделять одни запросы от других.
К примеру, если бы потребовалось добавить две строки в таблицу из примера somedate, то sql-запрос выглядел бы так:
Это строчки появились бы в конце таблицы. Конечно, в реальных базах данных, размещение строчек может сильно зависеть от применяемых механизмов, однако по умолчанию это так.
Запрос для удаления данных (delete)
SQL-запрос для удаления данных строится следующим образом:
где delete from - это начало запроса, table - это конкретное название таблицы, where - указывает, что далее будут указаны фильтры строк, которые необходимо удалить, clause - это сами фильтры для выборки строк. После sql-запроса ставится точка с запятой.
Важно отметить, что фильтр может быть весьма сложным и состоять из большого количества условий. Для его составления используются три операнда - and (И), or (ИЛИ) и скобки (для отделения сложных выражений). Логика здесь аналогична самой простой математики.
Примечание: Важно отметить, что часть where с clause являются необязательными. То есть, если фильтр не требуется, то их можно не писать. Однако, если фильтр нужен, то обе составляющих необходимо использовать в запросе.
К примеру, представим, что вам необходимо удалить все строки, где возраст больше 1 и меньше 5, или же строки, в которых указывается имя Масяня. Тогда запрос выглядел бы так:
Если разбирать логику, то этот запрос говорит базе данных, чтобы она проверила каждую строчку таблицы somedate и если строка удовлетворяет условиям, то ее необходимо удалить.
Запрос обновления данных (update)
Запрос обновления данных строится следующим образом:
где update - это начало sql-запроса, table - это конкретное имя таблицы, set - обозначает, что далее будет список требуемых изменений, col1 = val1, col2 = val2, ..., colN = valN - это перечисление через запятую колонок с присваиваемыми им значениями, where - указывает, что далее будут перечислены условия отбора, clause - условие фильтра (аналогично delete). Запрос так же заканчивается точкой с запятой.
Примечание: Важно отметить, что часть where с clause являются необязательными. То есть, если фильтр не требуется, то их можно не писать. Однако, если фильтр нужен, то обе составляющих необходимо использовать в запросе.
К примеру, если необходимо не удалить все строки из примера ранее, а указать для всех этих строк дату рождения 31.12.2222 и возраст -203, то sql-запрос выглядел бы так:
Обратите внимание, что поля Age и Date изменяются только после проверки условий фильтра. Это важно, так как запрос позволяет использовать текущие значения колонок при фильтрации (иначе бы могли возникать несоответствия).
Запрос для выборки данных (select)
Это, пожалуй, один из самых часто используемых типов sql-запросов (ведь данные составляются не для хранения, а для их использования) и поэтому у него имеется масса дополнительных возможностей (сортировка, группировка и так далее; о них читайте в прочих обзорах, в рамках этого обзора они не столь важны).
Строится данный запрос следующим образом:
где select - это начало запроса, col1, col2, ..., colN - это перечисление колонок, которые необходимо отобразить (важно знать, что если требуются все колонки таблицы, то вместо перечисления можно указывать просто символ звездочки *, что очень удобно, особенно, если структура таблицы постоянно корректируется или же заранее не известны все доступные колонки, кроме тех, что в фильтре), from - обозначает, что далее будет указано имя таблицы, where - обозначает, что далее будет указан фильтр, clause - сам фильтр (аналогично delete и update). После sql-запроса ставится точка с запятой.
Примечание: Важно отметить, что часть where с clause являются необязательными. То есть, если фильтр не требуется, то их можно не писать. Однако, если фильтр нужен, то обе составляющих необходимо использовать в запросе.
Рассмотрим пример. Допустим, нам необходимо получить возраст и имя всех тех, чье день рождение было до 1-го января 1999 года. Тогда sql-запрос будет выглядеть так:
Обратите внимание, что порядок колонок после select может быть произвольным, что позволяет получать удобные для восприятия подтаблицы данных (выборки).
Послесловие
Стоит знать, что каждая из баз данных позволяет использовать рассмотренные sql-запросы с расширенными возможностями. К примеру, одновременное удаление из нескольких таблиц или же вставка строк с использованием запросов выборки. Поэтому, если у вас возникает необходимость в чем-то специфическом, то стоит более подробно изучать возможности каждой базы данных.
Как видите, основы баз данных не так уж сложны и их может освоить каждый. Тем не менее, пользы от их понимания много, так как все остальные сложные технические термины основываются или применяются для них. К примеру, ключи и индексы это не заумные вещи (хотя и могут быть непростыми), а лишь механизмы, которые позволяют быстрее осуществлять фильтрацию и поиск строк (например, из все той же простой таблички somedata). И это существенно легче понять и использовать, если знаешь как строится фундамент баз данных.
☕ Понравился обзор? Поделитесь с друзьями!
-
-
-
-
-
-
-
-
-
-
✎Простые решения JavaScript - ссылки Код