Windows 8

Создание запросов SQL. Основы SQL для начинающих с уроками Sql выборка из одной таблицы

Каждый веб-разработчик должен знать SQL, чтобы писать запросы к базам данных. И, хотя, phpMyAdmin никто не отменял, зачастую необходимо испачкать руки, чтобы написать низкоуровневый SQL.

Именно поэтому мы подготовили краткий экскурс по основам SQL. Начнем же!

1. Создание таблицы

Для создания таблиц предназначена инструкция CREATE TABLE . В качестве аргументов должно быть задано название столбцов, а также их типы данных.

Создадим простую таблицу по имени month . Она состоит из 3 колонок:

  • id – Номер месяца в календарном году (целое число).
  • name – Название месяца (строка, максимум 10 символов).
  • days – Количество дней в этом месяце (целое число).

Вот как будет выглядеть соответствующий SQL запрос:

CREATE TABLE months (id int, name varchar(10), days int);

Также при создании таблиц целесообразно добавить первичный ключ для одной из колонок. Это позволит держать записи уникальными и ускорит запросы на выборку. Пусть в нашем случае уникальным будет название месяца (столбец name )

CREATE TABLE months (id int, name varchar(10), days int, PRIMARY KEY (name));

Дата и время
Тип данных Описание
DATE Значения даты
DATETIME Значения даты и времени с точностью до минты
TIME Значения времени

2. Вставка строк

Теперь давайте заполнять нашу таблицу months полезной информацией. Добавление записей в таблицу производится через инструкцию INSERT . Есть два способа записи этой инструкции.

Первый способ не указать имена столбцов, куда будут вставлены данные, а указать только значения.

Этот способ записи прост, но небезопасен, поскольку нет гарантии, что по мере расширения проекта и редактировании таблицы, столбцы будут располагаться в том же порядке, что и ранее. Безопасный (и в тоже время более громоздкий) способ записи инструкции INSERT требует указания как значений, так и порядка следования столбцов:

Здесь первое значение в списке VALUES соответствует первому указанному имени столбца и т.д.

3. Извлечение данных из таблиц

Инструкция SELECT - наш лучший друг, когда мы хотим получить данные из базы данных. Она используется очень часто, так что отнеситесь к этому разделу очень внимательно.

Самый простое использование инструкции SELECT - запрос, который возвращает все столбцы и строки из таблицы (например, таблицы по имени characters ):

SELECT * FROM "characters"

Символ звездочка (*) означает, что мы хотим получить данные из всех столбцов. Так базы данных SQL обычно состоят из более чем одной таблицы, то требуется обязательно указывать ключевое слово FROM , следом за которым через пробел должно следовать название таблицы.

Иногда мы не хотим получить данные не из всех столбцов в таблице. Для этого, вместо звездочки (*) мы должны через запятую записать имена желаемых столбцов.

SELECT id, name FROM month

Кроме того, во многих случаях мы хотим, чтобы полученные результаты были отсортированы в определенном порядке. В SQL мы делаем это с помощью ORDER BY . Он может принимать опциональный модификатор – ASC (по-умолчанию) сортирующий по возрастанию или DESC , сортирующий по убыванию:

SELECT id, name FROM month ORDER BY name DESC

При использовании ORDER BY убедитесь, что оно будет последним в инструкции SELECT . В противном случае будет выдано сообщение об ошибке.

4. Фильтрация данных

Вы узнали, как выбрать из базы данных с помощью SQL запроса строго определенные столбцы, но что если нам нужно получить еще и определенные строки? На помощь здесь приходит условие WHERE , позволяющее нам фильтровать данные в зависимости от условия.

В этом запросе мы выбираем только те месяцы из таблицы month , в которых больше 30 дней с помощью оператора больше (>).

SELECT id, name FROM month WHERE days > 30

5. Расширенная фильтрация данных. Операторы AND и OR

Ранее мы использовали фильтрацию данных с использованием одного критерия. Для более сложной фильтрации данных можно использовать операторы AND и OR и операторов сравнения (=,<,>,<=,>=,<>).

Здесь мы имеем таблицу, содержащую четыре самых продаваемых альбомов всех времен. Давайте выберем те из них, которые классифицируются как рок и у которых менее 50 миллионов проданных копий. Это можно легко сделать путем размещения оператора AND между этими двумя условиями.


SELECT * FROM albums WHERE genre = "рок" AND sales_in_millions <= 50 ORDER BY released

6. In/Between/Like

WHERE также поддерживает несколько специальных команд, позволяя быстро проверять наиболее часто используемые запросы. Вот они:

  • IN – служит для указания диапазона условий, любое из которых может быть выполнено
  • BETWEEN – проверяет, находится ли значение в указанном диапазоне
  • LIKE – ищет по определенным паттернам

Например, если мы хотим выбрать альбомы с поп и соул музыкой, мы можем использовать IN("value1","value2") .

SELECT * FROM albums WHERE genre IN ("pop","soul");

Если мы хотим получить все альбомы, изданные между 1975 и 1985годами, мы должны записать:

SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;

7. Функции

SQL напичкан с функциями, которые делают разные полезные вещи. Вот некоторые из наиболее часто используемых:

  • COUNT() – возвращает количество строк
  • SUM() – возвращает общую сумму числового столбца
  • AVG() – возвращает среднее значение из множества значений
  • MIN() / MAX() – получает минимальное / максимальное значение из столбца

Чтобы получить самый последний год в нашей таблице мы должны записать такой SQL запрос:

SELECT MAX(released) FROM albums;

8. Подзапросы

В предыдущем пункте мы научились делать простые расчеты с данными. Если мы хотим использовать результат от этих расчетов, нам не обойтись без вложенных запросов. Допустим, мы хотим вывести artist , album и release year для старейшего альбома в таблице.

Мы знаем, как получить эти конкретные столбцы:

SELECT artist, album, released FROM albums;

Мы также знаем, как получить самый ранний год:

SELECT MIN(released) FROM album;

Все, что нужно сейчас, - это объединить два запроса с помощью WHERE:

SELECT artist,album,released FROM albums WHERE released = (SELECT MIN(released) FROM albums);

9. Объединение таблиц

В более сложных базах данных существует несколько таблиц, связанных друг с другом. Например, ниже представлены две таблицы о видеоиграх (video_games ) и разработчиков видеоигр (game_developers ).


В таблице video_games есть колонка разработчик (developer_id ), но в ней содержится целое число, а не имя разработчика. Это число представляет собой идентификатор (id ) соответствующего разработчика из таблицы разработчиков игр (game_developers ), связывая логически два списка, что позволяет нам использовать информацию, хранящуюся в них обоих одновременно.

Если мы хотим создать запрос, который возвращает все, что нужно знать об играх, мы можем использовать INNER JOIN для связи колонок из обеих таблиц.

SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;

Это самый простой и наиболее распространенный тип JOIN . Есть несколько других вариантов, но они применимы к менее частым случаям.

10. Алиасы

Если вы посмотрите на предыдущий пример, то вы заметите, что существуют две колонки называемые name . Это сбивает с толку, так что давайте установим псевдоним одного из повторяющихся столбцов, например, name из таблицы game_developers будет называться developer .

Мы также можем сократить запрос задав псевдонимы имен таблиц: video_games назовем games , game_developers - devs :

SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;

11. Обновление данных

Часто мы должны изменить данные в некоторых строках. В SQL это делается с помощью инструкции UPDATE . Инструкция UPDATE состоит из:

  • Таблицы, в которой находится значение для замены;
  • Имен столбцов и их новых значений;
  • Выбранные с помощью WHERE строки, которые мы хотим обновить. Если этого не сделать, то изменятся все строки в таблице.

Ниже приведена таблица tv_series с сериалами с их рейтингом. Однако, в таблицу закралась маленькая ошибка: хотя сериал Игра престолов и описывается как комедия, он на самом деле ей не является. Давайте исправим это!

Данные таблицы tv_series UPDATE tv_series SET genre = "драма" WHERE id = 2;

12. Удаление данных

Удаление строки таблицы с помощью SQL - это очень простой процесс. Все, что вам нужно, - это выбрать таблицу и строку, которую нужно удалить. Давайте удалим из предыдущего примера последнюю строку в таблице tv_series . Делается это с помощью инструкции >DELETE

DELETE FROM tv_series WHERE id = 4

Будьте осторожными при написании инструкции DELETE и убедитесь, что условие WHERE присутствует, иначе все строки таблицы будут удалены!

13. Удаление таблицы

Если мы хотим, чтобы удалить все строки, но оставить саму таблицу, то воспользуйтесь командой TRUNCATE:

TRUNCATE TABLE table_name;

В случае, когда мы на самом деле хотим, чтобы удалить и данные, и саму таблицу, то нам пригодится команда DROP:

DROP TABLE table_name;

Будьте очень осторожны с этими командами. Их нельзя отменить!/p>

На этом мы завершаем наш учебник по SQL! Мы многое о чем не рассказали, но то, что вы уже знаете, должно быть достаточно, чтобы дать вам несколько практических навыков в вашей веб-карьере.

ПРОСТЫЕ ВЫБОРКИ ДАННЫХ

Предположим, что реляционная база данных, состоящая из одной или нескольких таблиц, создана и вы к ней уже подключились. В этом случае типичной практической задачей является получение (извлечение) нужных данных. Например, может потребоваться просто просмотреть все содержимое какой-либо таблицы из базы данных или некоторых ее полей. При этом возможно, вы захотите получить не все записи, а лишь те, которые удовлетворяют заданным условиям. Однако чаще возникает более интересная и сложная задача извлечения данных сразу из нескольких таблиц. Данные из двух и более таблиц необходимо скомпоновать в одну таблицу, чтобы представить ее для обозрения, анализа или последующей обработки. Язык SQL предоставляет для этого широкие возможности, которые мы и рассмотрим.

В результате выполнения выражения на языке SQL (SQL-выражения) создается таблица, которая либо содержит запрошенные данные, либо пуста, если данных, соответствующих запросу, не нашлось. Эта таблица, называемая еще результатной, существует только во время сеанса работы с базой данных и не присоединяется к числу таблиц, входящих в базу данных. Иначе говоря, она не хранится на жестком диске компьютера подобно исходным таблицам базы данных, и поэтому ее еще называют виртуальной.

Выборка данных из нескольких таблиц, их обработка, а также использование подзапросов (запросов, которые нужны в качестве промежуточных для получения окончательного результата) относятся к теме сложных запросов. Здесь мы остановимся на задаче выборки данных из одной таблицы при относительно простых условиях отбора, группировки и сортировки записей. Тем не менее, операторы SQL, применяемые в простых запросах на выборку данных, используются и в сложных запросах, направленных не только на получение, но и на изменение данных. Начните с простого, чтобы потом было легко понять сложное. Материал данной главы относится к фундаментальным темам SQL, хотя многие пользователи баз данных могут им и ограничиться. Последнее вполне вероятно, поскольку материал этой главы сам по себе исключительно практичен.

Все SQL-выражения, предназначенные для выборки данных из существующих таблиц базы данных, начинаются с ключевого слова (оператора) SELECT (выбрать). Для уточнения запроса служат дополнительные операторы, такие как FROM (из), WHERE (где) и др. Сейчас важно понять и запомнить, что результатом выполнения запроса, сформулированного в виде SQL-выражения, является таблица, содержащая запрошенные данные. Эта таблица виртуальна в том смысле, что только представляет результаты запроса и не принадлежит к базе данных. SQL позволяет изменять существующую базу данных - создавать и добавлять к ней новые таблицы, а также модифицировать и удалять уже существующие.

Основное SQL-выражение для выборки данных

Чтобы выбрать из таблицы базы данных требуемые записи, следует, по крайней мере, указать столбцы и имя этой таблицы. Это требование было бы естественно сформулировать так:

ВЫБРАТЬ такие-то столбцы ИЗ такой-то таблицы;

Разумеется, вам может потребоваться выбрать не все записи таблицы, а лишь те, которые отвечают некоторому условию. На практике именно так и бывает. Отложим пока рассмотрение формирования условий отбора записей, а сконцентрируем внимание на выборке всех записей из заданной таблицы. SQL-запрос к базе данных, результатом которого является таблица, полученная из указанной в запросе, но отличающаяся от нее тем, что содержит лишь указанные столбцы, выглядит так:

SELECT списокСтолбцов FROM список Таблиц;

Операторы SELECT (выбрать) и FROM (из) в SQL-выражении, определяющем выборку данных, являются обязательными, т. е. ни один из них нельзя пропустить. SQL-выражение, содержащее только эти операторы, является основным выражением, определяющим запрос к базе данных на выборку данных. В результате выполнения этого запроса создается виртуальная таблица, содержащая указанные столбцы и все записи исходной таблицы.

Оператор SELECT осуществляет проекцию отношения, указанного в выражении FROM, на заданное множество атрибутов (столбцов), указанное в выражении SELECT.

В выражении FROM указывается список имен таблиц базы данных, из которых требуется выбрать данные. В простейшем случае списокТаблиц содержит лишь одно имя таблицы. Если же таблиц несколько, то их имена в списке разделяются запятыми. Если в выражении FROM указано более одной таблицы, то результатная таблица получается из декартового произведения перечисленных в списке таблиц. Иногда это используется для специальных целей, но чаще всего в выражении FROM указывается только одна таблица.

Список столбцов - это перечень имен столбцов, разделенных запятой, как они определены в таблице, указанной в выражении FROM. Разумеется, можно указать все или только некоторые столбцы. Если вы хотите получить все столбцы таблицы, то вместо списка столбцов достаточно указать символ (*). Если в выражении FROM указано несколько таблиц, то в выражении SELECT имена столбцов должны содержать префиксы, указывающие, к какой именно таблице они относятся. Префикс отделяется от имени столбца точкой. Например, выражение Клиенты.Адрес означает столбец Адрес из таблицы Клиенты.

Тривиальный запрос, возвращающий все данные (все столбцы и все записи) из одной таблицы, формулируется так:

SELECT * FROM имяТаблицы ;

Основное SQL-выражение может быть дополнено другими операторами, уточняющими запрос. Чаще всего употребляется оператор WHERE (где), с помощью которого можно задать условие выборки записей (строк таблицы). Таким образом, если выражение SELECT задает столбцы таблицы, указанной в операторе FROM, то выражение WHERE определяет записи (строки) из этой таблицы. Выражение, определяющее запрос на выборку данных, находящихся в некоторой таблице, имеет следующий вид:

SELECT * FROM имяТаблицы WHERE условиеПоиска ;

Условие, указанное в выражении WHERE, принимает одно из двух логических значений: true (ИСТИНА) или false (ЛОЖЬ). Другими словами, это логическое выражение. При обработке запроса условие проверяется для каждой записи таблицы. Если оно истинно для данной записи, то она выбирается и будет представлена в результатной таблице. В противном случае запись не выбирается и в результатную таблицу не попадает. Если выражение WHERE не указано в SQL-выражении, то результатная таблица будет содержать все записи из таблицы, заданной в выражении FROM. Таким образом, выражение WHERE определяет фильтр записей. Фильтр что-то пропускает в результатную таблицу, а что-то отбрасывает.

Фильтр - одно из основных понятий в области работы с базами данных. В литературе иногда можно встретить различные его трактовки. Так, "отфильтровать записи" может означать "получить записи", а может наоборот - "отбраковать записи". Здесь понятия "отфильтровать", "пропустить через фильтр" или "наложить фильтр" всегда означают "выбрать записи, удовлетворяющие условию фильтра".

Сразу за оператором SELECT до списка столбцов можно применять ключевые слова ALL (все) и DISTINCT (отличающиеся), которые указывают, какие записи представлять в результатной таблице. Если эти ключевые слова не используются, то подразумевается, что следует выбрать все записи, что также соответствует применению ключевого слова ALL. В случае использования DISTINCT в результатной таблице представляются только уникальные записи. При этом если в исходной таблице находятся несколько идентичных записей, то из них выбирается только первая.

Примечание

В Microsoft Access кроме ключевых слов ALL и DISTINCT после SELECT можно использовать ключевое слово ТОР с дополнительными параметрами. Выражение ТОР n требует, чтобы в выборку данных попали только первые n записей, удовлетворяющих заданному условию запроса. Это ограничение условия поиска нужных записей, формулируемого в выражении WHERE. Если исходная таблица очень большая, то DISTINCT может ускорить получение ответа.

В Access можно использовать и выражение ТОР n PERCENT, чтобы указать, что n выражается в процентах от общего количества записей. Не трудно понять, что использование такого выражения направлено не на ускорение поиска, а на получение таблицы, избавленной от лишних данных.

Заголовки столбцов в результатной таблице можно переопределить по своему усмотрению, назначив для них так называемые псевдонимы . Для этого в списке столбцов после соответствующего столбца следует написать выражение вида: AS заголовок_столбца

Например:

SELECT ClientName AS Клиент, Address AS Адрес FROM Клиенты;

Псевдонимы также можно задать и для каждой таблицы после ключевого слова FROM. Для этого достаточно указать псевдоним через пробел сразу после имени соответствующей таблицы. Псевдонимы таблиц, более короткие, чем их имена, удобно использовать в сложных запросах. Например:

SELECT Т1.Имя, Т2.Адрес FROM Клиенты Т1, Контакты Т2;

Уточнения запроса

Основное SQL-выражение для выборки данных имеет вид:

SELECT списокСтолбцов FROM списокТаблиц;

Такой запрос возвращает таблицу, полученную из указанной в операторе FROM путем выделения в ней только тех столбцов, которые определены в операторе SELECT. Для выделения требуемых записей (строк) исходной таблицы используется выражение, следующее за ключевым словом (оператором) WHERE. Оператор WHERE является наиболее часто используемым, хотя и не обязательным в SQL-выражении. Именно из-за популярности его можно считать основным компонентом SQL-выражения. Кроме WHERE, в SQL-выражениях используются и другие операторы, позволяющие уточнить запрос.

Для уточнения запроса на выборку данных служит ряд дополнительных операторов:

· WHERE (где) - указывает записи, которые должны войти в результатную таблицу (фильтр записей);

· GROUP BY (группировать по) - группирует записи по значениям определенных столбцов;

· HAVING (имеющие, при условии) - указывает группы записей, которые должны войти в результатную таблицу (фильтр групп);

· ORDER BY (сортировать по) - сортирует (упорядочивает) записи.

Эти операторы не являются обязательными. Их можно совсем не использовать, или использовать лишь некоторые из них, или все сразу. Если применяются несколько операторов, то в SQL-выражении они используются в указанном в списке порядке. Таким образом, запрос данных из таблицы с применением всех перечисленных операторов уточнения запроса имеет следующий вид:

SELECT списокСтолбцов FROM имяТаблицы

WHERE условиеПоиска

GROUP BY столбецГруппировки

HAVING условиеПоиска

ORDER BY условиеСортировки;

Порядок перечисления операторов в SQL-выражении не совпадает с порядком их выполнения. Однако знание порядка выполнения операторов поможет вам избежать многих недоразумений. Итак, перечисленные операторы SQL-выражения выполняются в следующем порядке, передавая друг другу результат в виде таблицы:

1. FROM - выбирает таблицу из базы данных; если указано несколько таблиц, то выполняется их декартово произведение и результирующая таблица передается для обработки следующему оператору.

2. WHERE - из таблицы выбираются записи, отвечающие условию поиска, и отбрасываются все остальные.

3. GROUP BY - создаются группы записей, отобранных с помощью оператора WHERE (если он присутствует в SQL-выражении); каждая группа соответствует какому-нибудь значению столбца группирования. Столбец группирования может быть любым столбцом таблицы, заданной в операторе from, а не только тем, который указан в SELECT.

4. HAVING - обрабатывает каждую из созданных групп записей, оставляя только те из них, которые удовлетворяют условию поиска; этот оператор используется только вместе с оператором GROUP BY.

5. SELECT - выбирает из таблицы, полученной в результате применения перечисленных операторов, только указанные столбцы.

6. ORDER BY - сортирует записи таблицы. При этом в условии сортировки можно обращаться лишь к тем столбцам, которые указаны в операторе SELECT.

Допустим, среди таблиц вашей базы данных имеется таблица Клиенты, которая содержит столбцы с именами: имя, Адрес, Сумма_заказа и, возможно, какие-то другие. Семантика этой таблицы тривиальна. В ней фиксируются данные о клиентах и денежные суммы, которые они заплатили вашей фирме, пользуясь ее услугами.

Рис. 1. Таблица Клиенты

Предположим, нас интересуют не все данные этой таблицы, а только те, которые касаются клиентов, заплативших фирме более 500 (сейчас не важно, в какой валюте производились оплаты). Точнее, нам нужны имена и адреса клиентов, которые заплатили фирме более 500 денежных единиц. Таким образом, нам необходимо получить не все, что содержится в таблице Клиенты, а лишь некоторую ее часть, как по столбцам, так и по записям. Для этой цели подойдет следующее SQL-выражение:

WHERE Сумма_заказа > 500;

Это SQL-выражение представляет собой запрос, который на естественном языке выглядит приблизительно так:

ВЫБРАТЬ СТОЛБЦЫ имя, Адрес ИЗ ТАБЛИЦЫ клиенты ГДЕ Сумма_заказа > 500;

Здесь из таблицы клиенты выбираются записи, в которых значение столбца Сумма_заказа превышает 500. При этом в результатной таблице будут представлены только два столбца таблицы Клиенты: Имя и Адрес.

Столбец Сумма_заказа, имеющийся в исходной таблице, в данном случае не выводится (отсутствует в результирующей таблице). Впрочем, если бы вам потребовалось увидеть конкретные суммы, превышающие 500, то для этого было бы достаточно указать в списке столбцов, следующем за оператором SELECT, еще и столбец Сумма_заказа.

Рис. 2. Результат запроса "WHERE Сумма_заказа > 500"

Следующее SQL-выражение создает виртуальную таблицу, содержащую три Столбца: Регион, Имя и Адрес. Из таблицы Клиенты выбираются только те записи, в которых Сумма__заказа превышает 500, и они группируются по значениям столбцов Регион, Имя и Адрес. Это означает, что в результатной таблице записи, имеющие одинаковые значения в столбце Регион, будут расположены рядом друг с другом. Наконец, все записи в результатной таблице упорядочиваются по значениям столбца Имя (рис. 3).

SELECT Регион, Имя, Адрес FROM Клиенты

WHERE Сумма_заказа > 500

GROUP BY Регион, Имя, Адрес

ORDER BY Имя;

Рис. 3. Результат запроса "WHERE Сумма_заказа > 500"
с группировкой "GROUP BY Регион, Имя, Адрес" и сортировкой "ORDER BY Имя"

Оператор выборки записей из исходной таблицы может соседствовать с другими SQL-операторами.

Оператор WHERE

Условия поиска в операторе WHERE (где) являются логическими выражениями, т. е. принимающими одно из двух возможных значений - true (ИСТИНА) или false (ЛОЖЬ). Например, выражение Сумма_заказа > 500 является истинным (имеет значение true), если в текущей записи таблицы значение столбца Сумма_заказа превышает 500. В противном случае это выражение ложно (имеет значение false). Одно и то же логическое выражение может быть истинным для одних записей и ложным для других. Вообще говоря, в SQL логические выражения могут принимать еще и неопределенное значение. Это происходит тогда, когда в выражении некоторые элементы имеют значение NULL. Тaким образом, в SQL мы имеем дело не с классической двузначной, а с трехзначной логикой.

Выражение, следующее за оператором WHERE, возвращает одно из трех значений: true, false или NULL. При выполнении запроса (SQL-выражения) логическое выражение WHERE применяется ко всем записям исходной таблицы. Если оно истинно для данной записи исходной Таблицы, то эта запись выбирается и будет представлена в результатной таблице; в противном случае запись не попадет в результатную таблицу.

При составлении логических выражений используются специальные ключевые слова и символы операций сравнения, которые называют предикатами . Предикат впервые появился в SQL: 1999. Например, в выражении Сумма_заказа > 500 применен предикат сравнения (>).

Выражения с оператором WHERE используются не только при выборке данных (т.е. с оператором SELECT), но и при вставке, модификации и удалении записей. Таким образом, материал данного раздела имеет значение, выходящее за границы рассматриваемой темы о выборке данных.

Наиболее часто используются предикаты сравнения , такие как (=), (<),(>), (<>), (<=) и (>=). Однако имеются и другие. Далее приведен список всех предикатов:

· предикаты сравнения:

(=) - равно, (<) - меньше, (>) - больше, (< >) – не равно,

(<=) – меньше или равно (не больше), (>=) - больше или равно (не меньше);

· LIKE, NOT LIKE;

· ALL, SOME, ANY;

Примечание

В обычных процедурных языках программирования перечисленные символы сравнения называются операторами сравнения, а не предикатами, но как бы мы ни называли все, что связано с символами сравнения, суть остается неизменной.

Предикат BETWEEN (между) позволяет задать выражение проверки вхождения какого-либо значения в диапазон, определяемый граничными значениями. Например:

WHERE Сумма_заказа BETWEEN 100 AND 750

Здесь ключевое слово AND представляет собой логический союз И. Граничные значения (в примере это 100 и 750) входят в диапазон. Причем первое граничное значение должно быть не больше второго.

Эквивалентным приведенному является выражение с предикатами сравнения:

WHERE Сумма_заказа >= 100 AND Сумма_заказа <= 750

Кроме данных числового типа, в выражениях с BEETWEEN можно использовать данные следующих типов: символьные, битовые, даты-времени. Так например, чтобы выбрать записи, в которых имена клиентов находятся в диапазоне от А до Ж, можно использовать такое выражение:

SELECT Имя, Адрес FROM Клиенты

WHERE Имя BETWEEN "А" AND " Ж" ;

IN и NOT IN

Предикаты IN (в) и NOT IN (не в) применяются для проверки вхождения какого-либо значения в заданный список значений. Например, для выборки записей о клиентах из некоторых регионов можно использовать такое выражение:

SELECT Имя, Адрес FROM Клиенты

WHERE Регион IN ("Северо-запад", "Ставропольский край",

"Иркутская область");

Если требуется получить данные о всех клиентах не из Москвы и Северо-Запада, то можно использовать предикат NOT IN:

SELECT Имя, Адрес FROM Клиенты

WHERE Регион NOT IN ("Москва", "Санкт-Петербург");

LIKE и NOT LIKE

Предикаты LIKE (похожий) и NOT LIKE (не похожий) применяются для проверки частичного соответствия символьных строк. Например, столбец Телефон в некоторой таблице содержит полные номера телефонов, а вам требуется выбрать лишь те записи, в которых номера телефонов начинаются с 348 или содержат такое сочетание цифр.

Критерий частичного соответствия задается с помощью двух символов-масок: знака процента (%) и подчеркивания (_). Знак процента означает любой набор символов, в том числе и пустой, а символ подчеркивания - любой одиночный символ. Например, чтобы выбрать записи о клиентах, у которых номера телефонов начинаются с 348, можно использовать такое выражение:

WHERE Телефон LIKE "348%";

Допустим, столбец Адрес содержит полный почтовый адрес (индекс, название города, улицы и т. д.). Если вам требуется выбрать записи о клиентах, проживающих в Санкт-Петербурге, то для этого подойдет следующее выражение:

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Адрес LIKE "%Санкт-Петербург%";

Если вы хотите исключить всех клиентов, проживающих в Москве, то воспользуйтесь таким выражением:

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Адрес NOT LIKE "%Москва%";

Возможно, вам потребуется выбрать записи, срдержащие символы процента и/или подчеркивания. Тогда необходимо, чтобы такие символы воспринимались интерпретатором SQL не как символы-маски. Чтобы знак процента или подчеркивания воспринимался буквально, перед ним необходимо указать специальный управляющий символ. Этот символ можно определить произвольно, лишь бы он не встречался в качестве элемента данных. В следующем примере показано, как это можно сделать:

SELECT- Имя, Адрес, Процент_скидки FROM Клиенты

WHERE Процент_скидки LIKE "20#%"

Здесь за ключевым словом ESCAPE указывается символ, который используется в качестве управляющего. Таким же способом можно отключить и сам управляющий символ.

Предикат IS NULL применяется для выявления записей, в которых тот или иной столбец не имеет значения. Например, для получения записей о клиентах, для которых не указан адрес, можно использовать следующее выражение:

WHERE Адрес IS NULL;

Для получения записей, в которых столбец Адрес содержит некоторые определенные значения (т. е. отличные от NULL), можно использовать аналогичное выражение, но с логическим оператором NOT (не):

SELECT Имя, Адрес, Регион FROM Клиенты

WHERE Адрес IS NOT NULL;

Не следует использовать предикаты сравнения с NULL, такие как Адрес = NULL.

SQL - это аббревиатура выражения Structured Query Language (язык структурированных запросов). SQL основывается на реляционной алгебре и специально разработан для взаимодействия с реляционными базами данных.

SQL является, прежде всего, информационно-логическим языком, предназначенным для описания хранимых данных, их извлечения и модификации. SQL не является языком программирования. Вместе с тем конкретные реализации языка, как правило, включают различные процедурные расширения.

Язык SQL представляет собой совокупность операторов, которые можно разделить на четыре группы:

  • DDL (Data Definition Language) - операторы определения данных
  • DML (Data Manipulation Language) - операторы манипуляции данными
  • DCL (Data Control Language) - операторы определения доступа к данным
  • TCL (Transaction Control Language) - операторы управления транзакциями

SQL является стандартизированным языком. Стандартный SQL поддерживается комитетом стандартов ANSI (Американский национальный институт стандартов), и соответственно называется ANSI SQL.

Многие разработчики СУБД расширили возможности SQL, введя в язык дополнительные операторы или инструкции. Эти расширения необходимы для выполнения дополнительных функций или для упрощения выполнения определенных операций. И хотя часто они очень полезны, эти расширения привязаны к определенной СУБД и редко поддерживаются более чем одним разработчиком. Все крупные СУБД и даже те, у которых есть собственные расширения, поддерживают ANSI SQL (в большей или меньшей степени). Отдельные же реализации носят собственные имена (PL-SQL, Transact-SQL и т.д.). Transact-SQL (T-SQL) – реализация языка SQL корпорации Microsoft, используемая, в частности, и в SQL Server.

Запросы на выборку данных (оператор SELECT)

SELECT – наиболее часто используемый SQL оператор. Он предназначен для выборки информации из таблиц. Чтобы при помощи оператора SELECT извлечь данные из таблицы, нужно указать как минимум две вещи - что вы хотите выбрать и откуда.

Выборка отдельных столбцов

SELECT

FROM Product

В приведенном выше операторе используется оператор SELECT для выборки одного столбца под названием Description из таблицы Product. Искомое имя столбца указывается сразу после ключевого слова SELECT, а ключевое слово FROM указывает на имя таблицы, из которой выбираются данные.

Для создания и тестирования данного запроса в Management Studio выполните следующие шаги:

Выборка нескольких столбцов

Для выборки из таблицы нескольких столбцов используется тот же оператор SELECT. Отличие состоит в том, что после ключевого слова SELECT необходимо через запятую указать несколько имен столбцов.

SELECT , InStock

FROM Product

Выборка всех столбцов

Помимо возможности осуществлять выборку определенных столбцов (одного или нескольких), при помощи оператора SELECT можно запросить все столбцы, не перечисляя каждый из них. Для этого вместо имен столбцов вставляется групповой символ “звездочка” (*). Это делается следующим образом.

SELECT *

FROM Product

Сортировка данных

В результате выполнения запроса на выборку данные выводятся в том порядке, в котором они находятся в таблице. Для точной сортировки выбранных при помощи оператора SELECT данных используется предложение ORDER BY. В этом предложении указывается имя одного или нескольких столбцов, по которым необходимо отсортировать результаты. Взгляните на следующий пример.

FROM Product

ORDER BY InStock

Это выражение идентично предыдущему, за исключением предложения ORDER BY, которое указывает СУБД отсортировать данные по возрастанию значений столбца InStock.

Сортировка по нескольким столбцам

Чтобы осуществить сортировку по нескольким столбцам, просто укажите их имена через запятую. В следующем коде выбираются три столбца, а результат сортируется по двум из них - сначала по количеству, а потом по названию.

SELECT IdProd, , InStock

FROM Product

ORDER BY InStock,

Важно понимать, что при сортировке по нескольким столбцам порядок сортировки будет таким, который указан в запросе. Другими словами, в примере, приведенном выше, продукция сортируется по столбцу Description, только если существует несколько строк с одинаковыми значениями InStock. Если никакие значения столбца InStock не совпадают, данные по столбцу Description сортироваться не будут.

Указание направления сортировки

В предложении ORDER BY можно также использовать порядок сортировки по убыванию. Для этого необходимо указать ключевое слово DESC. В следующем примере продукция сортируется по количеству в убывающем порядке плюс по названию продукта.

SELECT IdProd, , InStock

FROM Product

ORDER BY InStock DESC ,

Ключевое слово DESC применяется только к тому столбцу, после которого оно указано. В предыдущем примере ключевое слово DESC было указано для столбца InStock, но не для Description. Таким образом, столбец InStock отсортирован в порядке убывания, а столбец Description в возрастающем порядке (принятым по умолчанию).



Содержание статьи
1. Самые простые MySQL запросы
2. Простые SELECT (выбрать) запросы
3. Простые INSERT (новая запись) запросы
4. Простые UPDATE (перезаписать, дописать) запросы
5. Простые DELETE (удалить запись) запросы
6. Простые DROP (удалить таблицу) запросы
7. Сложные MySQL запросы
8. MySQL запросы и переменные PHP

1. Самые простые SQL запросы

1. Выведет список ВСЕХ баз.

SHOW databases;
2. Выведет список ВСЕХ таблиц в Базе Данных base_name.

SHOW tables in base_name;

2. Простые SELECT (выбрать) запросы к базе данных MySQL

SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так - ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.

1. Выбирает ВСЕ данные в таблице tbl_name.

SELECT * FROM tbl_name;
2. Выведет количество записей в таблице tbl_name.

SELECT count(*) FROM tbl_name;
3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.

SELECT * FROM tbl_name LIMIT 2,3;
4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.

SELECT * FROM tbl_name ORDER BY id;
5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.

SELECT * FROM tbl_name ORDER BY id DESC;
6. Выбирает (SELECT ) ВСЕ (*) записи из (FROM ) таблицы users и сортирует их (ORDER BY ) по полю id в порядке возрастания, лимит (LIMIT ) первые 5 записей.

SELECT * FROM users ORDER BY id LIMIT 5;
7. Выбирает все записи из таблицы users , где поле fname соответствует значению Gena .

SELECT * FROM users WHERE fname="Gena";
8. Выбирает все записи из таблицы users , где значение поля fname начинается с Ge .

SELECT * FROM users WHERE fname LIKE "Ge%";
9. Выбирает все записи из таблицы users , где fname заканчивается на na , и упорядочивает записи в порядке возрастания значения id .

SELECT * FROM users WHERE fname LIKE "%na" ORDER BY id;
10. Выбирает все данные из колонок fname , lname из таблице users .

SELECT fname, lname FROM users;

11. Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users колонки country будут выведены ВСЕ УНИКАЛЬНЫЕ значения

SELECT DISTINCT country FROM users;
12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.

SELECT * FROM users WHERE age IN (18,19,21);
13. Выбирает МАКСИМАЛЬНОЕ значение age в таблице users . То есть если у Вас в таблице самое большее значение age (с англ. возраст) равно 55, то результатом запроса будет 55.

SELECT max(age) FROM users;
14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.

SELECT name, min(age) FROM users;
15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.

SELECT name FROM users WHERE id!="2";

3. Простые INSERT (новая запись) запросы

INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.

1. Делает новую запись в таблице users , в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.

INSERT INTO users (name, age) VALUES ("Сергей", "25");

4. Простые UPDATE запросы к базе данных MySQL

UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.

1. В таблице users age становится 18.

UPDATE users SET age = "18" WHERE id = "3";
2. Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более.
В таблице users ГДЕ id равно 3 значение поля age становится 18, а country Россия.

UPDATE users SET age = "18", country = "Россия" WHERE id = "3";

5. Простые DELETE (удалить запись) запросы к базе данных MySQL

DELETE – запрос, который удаляет строку из таблицы.

1. Удаляет строку из таблицы users ГДЕ id равен 10.

DELETE FROM users WHERE id = "10";

6. Простые DROP (удалить таблицу) запросы к базе данных MySQL

DROP – запрос, который удаляет таблицу.

1. Удаляет целиком таблицу tbl_name .

DROP TABLE tbl_name;

7. Сложные запросы к базе данных MySQL

Любопытные запросы, которые могут пригодиться даже опытным пользователям

SELECT id,name,country FROM users,admins WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date) <= 14 AND activation != "0" ORDER BY registration_date DESC;
Данный сложный запрос ВЫБИРАЕТ колонки id,name,country В ТАБЛИЦАХ users,admins ГДЕ registration_date (дата) не старше 14 дней И activation НЕ РАВНО 0 , СОРТИРОВАТЬ по registration_date в обратном порядке (новое в начале).

UPDATE users SET age = "18+" WHERE age = (SELECT age FROM users WHERE male = "man");
Выше указан пример так называемого запроса в запросе в SQL. Обновить возраст среди пользователей на 18+, где пол - мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных - они будут прорабатываться быстрее.

8. Запросы к базе данных MySQL и PHP

В MySQL запросы в PHP странице можно вставлять переменные в качестве сравниваемых и тп значений. Пара примеров

1. Выбирает все записи из таблицы users , где поле fname соответствует значению переменной $name .

SELECT * FROM users WHERE fname="$name";
2. В таблице users ГДЕ id равно 3 значение поля age изменяется на значение переменной $age.

UPDATE users SET age = "$age" WHERE id = "3";

Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!

Инструкция

Для получения из таблиц БД хранящуюся информацию составьте запрос на - SELECT. При наличии связей между таблицами данные можно брать по соответствующим условиям из любых столбцов связанных таблиц. Все нужные перечислите после оператора SELECT. Используемые в запросе таблицы укажите в выражении FROM. В самом простом виде запрос на выборку выводит все строки указанных столбцов заданной таблицы: SELECT col1, col2 FROM my_table.

При необходимости задайте условие для выборки строк. Условие задается инструкцией WHERE. Установите значение нужного вам параметра после данной инструкции. Здесь также может быть использован расчет функции и операции . Так, вида WHERE col1 > 3 позволяет вывести строки таблицы, в которых значение столбца col1 больше 3. Для задания нужного выражения используйте комбинации операторов AND, OR, а также условные операторы языка SQL.

Для вставки новых строк в напишите запрос INSERT. С его помощью можно вставлять новые данные того же типа, что и уже существующие в таблице. Синтаксис данного оператора очень прост: INSERT INTO my_table (col1, col2, col3) VALUES (‘new_data1’, ‘new_data2’, ‘new_data3’). Здесь оператор VALUES задает значения новой строки каждому имеющемуся столбцу таблицы my_table.

Изменение данных в любой строке таблицы осуществляется с помощью запроса UPDATE. Причем можно поставить условие отбора WHERE, при котором выполняется изменение информации в базе данных. Определите данные для изменения и условие выполнения вашего запроса. Для этого запишите строку вида: UPDATE my_table SET col1 = ‘new_data1’, col3 = ‘new_data3’ WHERE col3 = 10. Запрос выполнит изменение данных, указанное в инструкции SET, только при удовлетворении условия в выражении WHERE.

Запрос DELETE пишется для удаления целой строки из таблицы данных. Причем строка удаляется лишь при задании условия выполнения WHERE. Запишите выражение: DELETE FROM my_table WHERE col1 = ‘data1’. При выполнении данного запроса будет удалена строка таблицы, содержащая в столбце col1 значение data1.

Обратите внимание

Если в запросе DELETE не будет задано условия на удаляемые строки, будет удалена вся таблица.

Одной из наиболее широко распространенных систем управления базами данных (СУБД) сегодня является MySQL. Не в последнюю очередь ее популярности способствует удачно сконструированное и активно развивающееся приложение PhpMyAdmin, которое позволяет непосредственно через браузер управлять базами данных. Его достаточно простой интерфейс дает возможность составлять необходимые SQL-запросы даже без знания этого языка.

Инструкция

Загрузите интерфейс PhpMyAdmin, авторизуйтесь и щелкните в списке баз данных ту, в которой вам требуется создать SQL-запрос. Этот список помещен в левый фрейм интерфейса приложения. Последовательность дальнейших действий зависит от того, какого рода запрос необходимо создать.

Если запрос должен осуществить поиск указанного вами значения во всех полях таблиц выбранной базы, то щелкните закладку «Поиск» в меню правого фрейма. В текстовое поле введите значение, которое должно быть отправлено в запросе, в поле «Искать» выберите один из вариантов поиска, а в списке таблиц этой базы данных выберите все или только часть таблиц, которые должны составить область поиска. Затем нажмите кнопку «OK» и приложение на основе введенных вами данных составит по одному запросу на каждую из выбранных таблиц и отправит их все на сервер. Результат для каждой таблицы будет сведен в одну общую таблицу, а нажав кнопку «Обзор» в какой-либо строке вы увидите текст SQL-запроса, составленного для выбранной таблицы и результаты поиска в ней. При необходимости этот составленный программой код запроса можно скопировать и использовать по своему усмотрению.

Если запрос должен добавлять в какую-либо из таблиц новую строку, то выберите таблицу и щелкните по закладке «Вставить» в меню правого фрейма. В открывшейся странице с формой заполните значениями поля, соответствующие полям таблицы и нажмите кнопку «OK». PhpMyAdmin составит запрос, отправит его на сервер и покажет вам сам SQL-запрос и отчет о его выполнении. Этот запрос тоже можно скопировать и использовать в дальнейшем, например, для вставки в код PHP-скрипта, работающего с базой данных.

Если запрос должен просто получать данные некоторого количества строк из какой-либо таблицы базы, то выберите нужную таблицу и щелкните по закладке «Обзор». Приложение составит запрос, отправит на сервер, а затем покажет сам запрос, а также полученный ответ в табличной форме.

Если вы хотите самостоятельно вводить текст запроса, то выберите ссылку «SQL». Программа предоставит вам многострочное текстовое поле для ввода запроса, в которое будет помещена заготовка - вариант простейшего, но наиболее часто используемого запроса, осуществляющего строк таблицы. Изменив заготовку нужным образом, нажмите кнопку «OK» для отправки его на SQL-сервер.

SQL – это язык запросов, который обычно используется для осуществления операций в рамках определенной СУБД. Освоив SQL, вы сможете писать различные web-приложения, с использованием БД MySQL или Oracle.С помощью языка запросов осуществляется создание всех таблиц в базе данных, а также происходит хранение определенных данных, их изменение и получение.

Инструкция

Команды SQL можно разделить на несколько групп:
- DDL, которые используются для изменения и удаления объектов в рамках БД;

DCL, которые управляют доступом к БД;

TCL, которые определяют исход транзакций;

DML, которые отвечают за перемещение данных.

Самой основной командой для создания запросов можно считать SQL Create Table. Она описывает структуру создаваемой таблицы. В рамках этого запроса можно определить локальные столбцы, определяющие тип и имена данных в заданном столбце. Например:
CREATE TABLE Firsttable (

name varchar(255),

surname varchar(255)

);
Запрос создаст таблицу Firsttable со слобцами id, name и surname, которые могут принимать соответствующие значения.

Другой важной командой является INSERT, которая вставляет определенные данные в уже созданную таблицу, и имеет синтаксис:
INSERT INTO `table` (`column1`, `column2`) VALUES (“val1”, “val2”)
Где column1, column2 – созданные столбцы, а val1 и val2 – нужные для вставки значения.

Для извлечения данных для вывода или других операций применяется запрос SELECT, который имеет вид:
SELECT * FROM `table`
Дополнительно можно задать параметры для извлечения данных из какого-либо столбика в отдельности. Например, если мы хотим извлечь name из таблицы Firsttable, то запрос будет выглядеть следующим образом:
SELECT * FROM `Firsttable` WHERE name = ‘$name’

Вы можете писать запрос в.txt или.sql файле при помощи обычного Блокнота. Напишите ваши команды, после чего вы можете загрузить их, например, через интерфейс phpMyAdmin в панели управления вашим хостингом или СУБД.

Обратите внимание

Перед использованием SQL при создании WEB-проекта прочитайте соответствующую литературу по созданию безопасных запросов, чтобы уберечь свой сайт от SQL-инъекций и прочих хакерских уловок.

Полезный совет

При программировании старайтесь не пользоваться подзапросами, без них можно обойтись в подавляющем большинстве случаев. Подзапросы лишь нагружают код и ухудшают его читабельность.

SQL – компьютерный язык для написания запросов к таблицам в реляционных базах данных. Его универсальность позволяет использовать одни и те же операторы в различных СУБД даже переносить программный код из одной в другую без значительных изменений.

Инструкция

Базы данных имеют широкое распространение в компьютерной среде, в том числе они используются при создании сайтов и блогов. Основное достоинство этого типа хранения данных – в их структурированности по схожим признакам.

Например, чтобы изменить какой-либо одинаковый признак у элементов одной таблицы, например, отредактировать некоторую часть постов блога, который уже разросся до больших размеров. В частности, поменять одну фразу или слово на другое. При этом не нужно отслеживать все записи и проводить изменения вручную, достаточно воспользоваться sql-запросом.

Чтобы делать sql-запросы, необязательно быть гуру программирования. Однако определенный знаний и умений это потребует. Например, необходимо разбираться в строении базы данных или хотя бы в той ее части, к которой вы имеете доступ. Знать название таблиц, нужных столбцов (колонок), а также название и назначение операторов языка.

Чаще всего используются операторы манипуляции данными. Это select (выбрать), insert (добавить), update (изменить) и delete (удалить). Эти операторы применяются для работы с данными внутри таблицы или нескольких таблиц и имеют следующие конструции:select ,…, from ; - выбор из всей таблицы;select ,…, from where = and/or = ; - выбор из таблицы по условиям;select * from ; - выбор всего из таблицы.

insert into () values (); - добавление в таблицу строки с указанными значениями полей;insert into values (); - добавление в таблицу всех полей.

Операторы более высокого уровня доступны администраторам БД. Это операторы создания, изменения и удаления объектов базы данных, а именно самой базы, ее таблиц, пользователей и пр. таких операторов три: create, alter и drop. create table (, …,); - создание таблицы.

alter table column ; - изменение полей таблицы (добавление, модификация, удаление).drop table ; - удаление таблицы. Эта операция выполняется успешно, если нет связей с другими таблицами.

Видео по теме

Обратите внимание

Знак ‘;’ в любой sql-команде означает подтверждение команды, которое называется commit. Этот оператор можно использовать и отдельно, например, в больших запросах, состоящих из нескольких конструкций.

После написания запрос необходимо выполнить. Если вы неуверенны в его содержании, используйте команду commit только после того, как убедитесь в правильности полученного результата.