Запросы на языке sql. Исключение избыточных данных. Обычная выборка данных

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

Синтаксис оператора

Чтобы правильно использовать любой оператор, необходимо сперва ознакомиться с синтаксисом рассматриваемого языка программирования. Когда говорим конкретно про язык SQL, Select (оператор) имеет следующий синтаксис:

Это так называемый «краткий» синтаксис оператора, однако он указывает нам на то, что без ключевых слов Select и from СУБД наш запрос не выполнит.

Полный синтаксис оператора представлен на следующем рисунке:

Здесь предложение Where позволяет уточнить поиск, задав условие.

Для группировки значений и применения к ним агрегатной функции используется предложение Group by, а чтобы уточнить результат уже после группировки, используется предложение Having.

Order by позволит отсортировать значения выбранных столбцов по возрастанию либо по убыванию.

Чтобы более наглядно ознакомиться с оператором Select, представим, что в нашей базе данных есть следующая таблица Cats с информацией:

Birthday

Бурмилла

Каждая строка таблицы содержит уникальный номер котенка, его породу, кличку, дату рождения и расцветку. Далее будем рассматривать, как работает оператор Select (SQL), уже опираясь на данные из этой таблицы.

Как происходит выборка данных из таблицы

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

После ключевого слова Select указываются столбцы для вывода. Можно сделать перечень нужных столбцов через запятую, тогда вся конструкция будет выглядеть так:

Результат приведенного запроса - вся таблица Cats, представленная в том виде, в каком она содержится в конце прошлого раздела.

Многие интересуются тем, как разместить результаты выполнения в SQL Select в строку. Чаще всего это требуется, когда необходимо объединить фамилию, имя и отчество человека, размещенные в разобщенных столбцах.

В нашем случае объединим породу и окрас кошек из таблицы Cats. Нюанс заключается в том, что разные СУБД используют для строковой конкатенации разные символы. В одних случаях это просто плюс (+), в других - двойная прямая черта (||) или знак амперсанда (&), порой используется и операнд Concat. Поэтому перед объединением необходимо прочитать аннотацию к конкретной СУБД, с которой вы работаете.

Исключение избыточных данных

Distinct - функция Select (SQL), позволяющая исключить дублирование абсолютно идентичных строк из результата выборки.

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

Как видим, порода бобтейл дублируется два раза. Аргумент Distinct позволит исключить дублирование, достаточно лишь дописать запрос:

Select distinct breed

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

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

Таким предложением служит Where. В этом предложении применяется предикат - условное выражение, дающее на выходе значение "истина" или "ложь". Оператор Select извлечет только те данные из таблицы, для которых условное выражение будет иметь значение True, или "истина".

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

Также можно комбинировать условия, используя логические операторы And, Or, Not.

Предложение Group by

Предложение Group by, используемое в Select (SQL), позволяет сгруппировать запросы по значению определенного столбца (или столбцов), а затем применить к ним агрегатную функцию.

К агрегатным функциям относятся:

  • Count - вычисляет количество строк, отобранных запросом.
  • Sum - арифметическая сумма всех отобранных значений столбца.
  • Min - выводит минимальное из отобранных значений столбца.
  • Max - соответственно, максимальное из отобранных значений столбца.
  • Avg - среднее значение.

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

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

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

Select breed, count(*)

Having count(*) <=10

Поскольку условие мы задали «количество котят каждой породы не более 10», то результат получим такой же, как в примере без уточнения. Но тут важно понять саму схему работы предложения Having. А вот если изменим логическое условие на Having count(*) =1, то результат сократится до трех строк и выведет породы котят, которых осталось всего по одному.

Сортировка

Познакомимся с Order by - предложением оператора Select (SQL), позволяющим отсортировать выводимые строки по возрастанию или убыванию значений в одном или нескольких столбцах.

Важно помнить, что Order by - это заключительное предложение всей конструкции оператора Select. Оно размещается после Select, From, Where, Group by, Having.

При проведении сортировки есть три важных момента:

1) Можно указать любое количество столбцов, каждый из которых по отдельности можно отсортировать либо по возрастанию (ASC), либо по убыванию (DESC).

2) Все указанные столбцы в предложении Order by должны обязательно присутствовать среди выбираемых столбцов в Select.

3) Необязательно перечислять конкретные имена столбцов для сортировки, можно просто указать их номера, под которыми они идут в инструкции Select.

Надеемся, что с помощью нашей статьи вы получили базовые знания об использовании SQL запросов и теперь без труда выберете необходимую информацию из вашей СУБД.


Содержание статьи
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";

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

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

Но, несмотря на постоянное использование баз данных, даже для многих разработчиков программных систем остается много «белых пятен» из-за разного толкования одних и тех же терминов. Мы дадим краткое определение основных терминов баз данных перед рассмотрением языка SQL. Итак.

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

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

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

Столбец и строка - все мы работали с электронными таблицами, в которых также присутствуют строки и столбцы. Любая реляционная база данных работает с таблицами аналогичным образом. Строки иногда называют записями.

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

Что такое SQL?

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

С 1992 г. существует общепринятый стандарт, называемый ANSI SQL. Он определяет базовый синтаксис и функции операторов и поддерживается всеми лидерами рынка СУБД, такими как ORACLE Рассмотреть все возможности языка в одной небольшой статье невозможно, поэтому мы кратко рассмотрим только основные SQL запросы. Примеры наглядно показывают простоту и возможности языка:

  • создание баз и таблиц;
  • выборка данных;
  • добавление записей;
  • модификация и удаление информации.

Типы данных SQL

Все столбцы в таблице базы данных хранят один тип данных. Типы данных в SQL такие же, как и в других языках программирования.

Создаем таблицы и базы данных

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

  • Операторами SQL через консоль СУБД
  • Используя интерактивные средства администрирования, входящие в состав сервера баз данных.

Создается новая база данных оператором CREATE DATABASE <наименование базы данных>; . Как видим, синтаксис прост и лаконичен.

Таблицы внутри базы данных создаем оператором CREATE TABLE со следующими параметрами:

  • наименование таблицы
  • имена и типы данных столбцов

В качестве примера создадим таблицу Commodity со следующими столбцами:

Создаем таблицу:

CREATE TABLE Commodity

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Таблица состоит из пяти столбцов. После наименования идет тип данных, столбцы разделяются запятыми. Значение столбца может принимать пустые значения (NULL) или должно быть обязательно заполнено (NOT NULL), и это определяется при создании таблицы.

Выборка данных из таблицы

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

SELECT commodity_name FROM Commodity

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

Результатом выполнения запроса будут все строки таблицы со значениями Commodity_name в том порядке, в котором они были внесены в базу данных т.е. без всякой сортировки. Для упорядочивания результата используется дополнительный оператор ORDER BY.

Для запроса по нескольким полям перечисляем их через запятую, как в следующем примере:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Есть возможность получить как результат запроса значение всех столбцов строки. Для этого используется знак «*»:

SELECT * FROM Commodity

  • Дополнительно SELECT поддерживает:
  • Сортировку данных (оператор ORDER BY)
  • Выбор согласно условиям (WHERE)
  • Группировку срок (GROUP BY)

Добавляем строку

Для добавления строки в таблицу используются SQL запросы с оператором INSERT. Добавление может производиться тремя способами:

  • добавляем новую целую строку;
  • часть строки;
  • результаты запроса.

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

INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1.68", "No Alcogol ,)

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

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

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 ", ‘50", "Coca-Cola",)

Мы ввели только идентификаторы товара, поставщика и его наименование, а остальные поля отставили пустыми.

Добавление результатов запроса

В основном INSERT используется для добавления строк, но может использоваться и для добавления результатов оператора SELECT.

Изменение данных

Для изменения информации в полях таблицы базы данных необходимо использовать оператор UPDATE. Оператор может применяться двумя способами:

  • Обновляются все строки в таблице.
  • Только для определенной строки.

UPDATE состоит из трех основных элементов:

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

Рассмотрим пример. Допустим, у товара с ID=106 изменилась стоимость, поэтому эту строку необходимо обновить. Пишем следующий оператор:

UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

Мы указали имя таблицы, в нашем случае Commodity, где будет производиться обновление, затем после SET - новое значение столбца и нашли нужную запись, указав в WHERE нужное значение ID.

Для изменения нескольких столбцов после оператора SET указываются несколько пар столбец-значение, разделенных запятыми. Смотрим пример, в котором обновляется наименование и цена товара:

UPDATE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

Для удаления информации в столбце можно присвоить ему значение NULL, если это позволяет структура таблицы. Необходимо помнить, что NULL - это именно «никакое» значение, а не нуль в виде текста или числа. Удалим описание товара:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Удаление строк

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

  • в таблице удаляются определенные строки;
  • удаляются все строки в таблице.

Пример удаления одной строки из таблицы:

DELETE FROM Commodity WHERE commodity_id = "106"

После DELETE FROM указываем имя таблицы, в которой будут удаляться строки. Оператор WHERE содержит условие, по которому будут выбираться строки для удаления. В примере мы удаляем строку товара с ID=106. Указывать WHERE очень важно т.к. пропуск этого оператора приведт к удалению всех строк в таблице. Это относится и к изменению значения полей.

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

Использование SQL в Microsoft Access

Обычно используется в интерактивном режиме для создания таблиц, баз данных, для управления, изменения, анализа данных в базе данных и с целью внедрить запросы SQL Access через удобный интерактивный конструктор запросов (Query Designer), используя который можно построить и немедленно выполнить операторов SQL любой сложности.

Также поддерживается режим доступа к серверу, при котором СУБД Access может использоваться как генератор SQL-запросов к любому ODBC источнику данных. Эта возможность позволяет приложениям Access взаимодействовать с любого формата.

Расширения SQL

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

Наиболее распространенные диалекты языка:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL в Интернет

СУБД MySQL распространяется под свободной лицензией GNU General Public License. Имеется коммерческая лицензия с возможностью разработки заказных модулей. Как составная часть входит в наиболее популярные сборки Интернет-серверов, таких как XAMPP, WAMP и LAMP, и является самой популярной СУБД для разработки приложений в сети Интернет.

Была разработана компанией Sun Microsystems и в настоящий момент поддерживается корпорацией Oracle. Поддерживаются базы данных размером до 64 терабайт, стандарт синтаксиса SQL:2003, репликация баз данных и облачных сервисов.

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

Что такое база данных SQL?

Структурированный язык запросов (Structured Query Language) – стандарт коммуникации с базой данных, который поддержан ANSI. Самая последняя версия – SQL-99, хотя новый стандарт SQL-200n уже находится в разработке. Большинство баз данных твердо придерживается стандарта ANSI-92. Было много обсуждений по поводу введения более современных стандартов, но изготовители коммерческих баз данных отклоняются от этого, развивая свои новые концепции манипуляции хранимыми данными. Почти каждая отдельная база данных использует некоторый уникальный набор синтаксиса, хоть и очень сильно подобного стандарту ANSI. В большинстве случаев, этот синтаксис является расширением базового стандарта, хотя бывают случаи, когда такой синтаксис приводит к различным результатам для разных баз данных. Всегда неплохой идеей будет просмотр документации к базе данных, особенно, если получаются неожиданные результаты.

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

В общих терминах, «SQL база данных» является общим названием для реляционной системы управления базами данных (РСУБД). Для некоторых систем, «база данных» также относится к группе таблиц, данных, конфигурационной информации, которые являются неотъемлемо отдельной частью от других, подобных конструкций. В этом случае, каждая инсталляция SQL базы данных может состоять из нескольких баз данных. В других системах, они упомянуты как таблицы.

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

Каждый столбец представляет собой атрибут или совокупность атрибутов объектов, например идентификационные номера служащих, рост, цвет машин и т.п. Часто в отношении столбца используется термин поле с указанием имени, например «в поле Name». Поле строки является минимальным элементом таблицы. Каждый столбец в таблице имеет определенное имя, тип данных и размер. Имена столбцов должны быть уникальны в пределах таблицы.

Каждая строка (или запись) представляет собой совокупность атрибутов конкретного объекта, например, в строке может содержаться идентификационный номер служащего, размер его зарплаты, год его рождения и т.д. Строки таблиц не имеют названий. Чтобы обратиться к конкретной строке, пользователю необходимо указать какой-то атрибут (или набор атрибутов), уникально ее идентифицирующий.

Одной из важнейших операций, которые выполняются при работе с данными, является выборка хранящейся в базе данных информации. Для этого пользователь должен выполнить запрос (query).

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

Типы запросов данных

Есть четыре основных типа запросов данных в SQL, которые относятся к так называемому языку манипулирования данными (Data Manipulation Language или DML):
SELECT – выбрать строки из таблиц;
INSERT – добавить строки в таблицу;
UPDATE – изменить строки в таблице;
DELETE – удалить строки в таблице;

Каждый из этих запросов имеет различные операторы и функции, которые используются для того, чтобы произвести какие-то действия с данными. Запрос SELECT имеет самое большое количество опций. Существуют также дополнительные типы запросов, используемых вместе с SELECT, типа JOIN и UNION. Но пока, мы сосредоточимся только на основных запросах.

Использование запроса SELECT для выборки нужных данных

Чтобы получить информацию, хранящуюся в базе данных используется запрос SELECT. Базовое действие этого запроса ограничено одной таблицей, хотя существуют конструкции, обеспечивающие выборку с нескольких таблиц одновременно. Для того, чтобы получить все строки данных для специфических столбцов, используется запрос такого вида:
SELECT column1, column2 FROM table_name;

Также, можно получить все столбцы из таблицы, используя подстановочный знак «*»:
SELECT * FROM table_name;

Это может быть полезно в том случае, когда вы собираетесь выбрать данные с определенным условием WHERE. Следующий запрос возвратит все столбцы со всех строк, где «column1» содержит значение «3»:
SELECT * FROM table_name WHERE column1=3;

Кроме «=» (равно), существуют следующие условные операторы:

Условные операторы:
= Равно
<> Не равно
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно

Дополнительно можно использовать условия BITWEEN и LIKE для сравнения с условием WHERE, а так же комбинации операторов AND и OR.
SELECT * FROM table_name WHERE ((Age >= 18) AND (LastName BETWEEN ‘Иванов’ AND ‘Сидоров’)) OR Company LIKE ‘%Motorola%’;

Что в переводе на русский язык означает: выбрать все столбцы из таблицы table_name, где значение столбца age больше или равно 18, а также значение столбца LastName находится в алфавитном промежутке от Иванов до Сидоров включительно, или же значением столбца Company является Motorola.

Использование запроса INSERT для вставки новых данных

Запрос INSERT используется для создания новой строки данных. Для обновления уже существующих данных или пустых полей строки нужно использовать запрос UPDATE.

Примерный синтаксис запроса INSERT:
INSERT INTO table_name (column1, column2, column3) VALUES (‘data1’, ‘data2’, ‘data3’);

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

Изменяется уже существующая информация в базе данных очень похожим образом.

Запрос UPDATE и условие WHERE

UPDATE используется для того, чтобы изменить существующие значения или освободить поле в строке, поэтому новые значения должны соответствовать существующему типу данных и обеспечивать приемлемые значения. Если вы не хотите изменить значения во всех строках, то нужно использовать условие WHERE.
UPDATE table_name SET column1 = ‘data1’, column2 = ‘data2’ WHERE column3 = ‘data3’;

Вы можете использовать WHERE для любого столбца, включая тот, который хотите изменить. Это используется когда необходимо заменить одно определенное значение на другое.
UPDATE table_name SET FirstName = ‘Василий’ WHERE FirstName = ‘Василий’ AND LastName = ‘Пупкин’;

Будьте осторожны! Запрос DELETE удаляет целые строки

Запрос DELETE полность удаляет строку из базы данных. Если вы хотите удалить одно единственное поле, то нужно использовать запрос UPDATE и установить для этого поля значение, которое будет являться аналогом NULL в вашей программе. Будьте внимательны, и ограничивайте ваш запрос DELETE условием WHERE, иначе вы можете потерять все содержимое таблицы.
DELETE FROM table_name WHERE column1 = ‘data1’;

Как только строка была удалена из вашей базы данных, она не подлежит восстановлению, поэтому желательно иметь столбец по имени «IsActive», или что-то типа того, который вы можете изменить на ноль, что будет указывать на блокировку представления данных из этой строки.

Теперь вы знаете основы SQL запросов

SQL – язык баз данных, и мы рассмотрели наиболее важные и базовые команды, используемые в запросах данных. Множество основных концепций не были затронуты (SUM и COUNT например), но те немногие команды, которые удалось перечислить выше, должны побудить вас к активным действиям и более глубокому изучению замечательного языка запросов под именем SQL.

SQL - Оператор SELECT

Название SQL (Structured Query Language – язык структурированных запросов) отражает тот факт, что запросы являются наиболее часто используемым элементом SQL. Запрос – это оператор, который посылает команду Системе Управления Базой Данных (СУБД) произвести манипуляцию или отобразить определенную информацию. Все запросы по выборке данных в SQL конструируются с помощью оператора SELECT. Он позволяет выполнять довольно сложные проверки и обработку данных.

Запрос может выводить данные из определенного столбца или изо всех столбцов таблицы. Чтобы создать простейших SELECT запрос, необходимо указать имя столбца и название таблицы.

Синтаксис оператора SELECT

SELECT column_list FROM table_name

SELECT Ключевое слово, которое сообщает базе данных о том, что оператор является запросом. Все запросы начинаются с этого слова, за ним следует пробел.

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

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

Код в скобках является не обязательным в операторе SELECT. Он необходим для более точного определения запроса.

Также необходимо сказать, что SQL код является регистронезависимым. Это означает, что запись SELECT можно написать как select. СУБД не отличит эти две записи, однако советуют все операторы SQL писать прописными буквами, чтобы его легко можно было отличить от другого кода.

Примеры рассмотрим на таблице Salespeople (продавцы) из классического учебника по SQL Мартина Грабера.
Вот MySQL код для создания тестовой таблицы:

CREATE TABLE `salespeople` (`snum` INTEGER(11) NOT NULL AUTO_INCREMENT, `sname` VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, `city` VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, `comm` DOUBLE(15,3) DEFAULT NULL, PRIMARY KEY (`snum`))ENGINE=InnoDB CHARACTER SET "cp1251" COLLATE "cp1251_general_ci" COMMENT="InnoDB free: 5120 kB"; INSERT INTO `salespeople` (`snum`, `sname`, `city`, `comm`) VALUES (1001,"Peel","London",0.120), (1002,"Serres","San Jose",0.130), (1003,"Axelrod","New York",0.100), (1004,"Motika","London",0.110), (1007,"Rifkin","Barcelona",0.150); COMMIT;

Таблица выглядит так:

Пример использования оператора SELECT

1. Необходимо вывести список продавцов, и отобразить их имена (sname)

SELECT sname FROM Salespeople

Результат:

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

3. Необходимо вывести всю таблицу

Для этого можно использовать разный синтаксис написания запросов. Перечисляем каждый столбец после оператора SELECT:

SELECT snum , sname , city , comm FROM Salespeople

Или можно добиться того же результата, используя сокращенную запись:

SELECT * FROM Salespeople Результат:

snum sname city comm
1001 Peel London 0,12
1002 Serres San Jose 0,13
1003 Axelrod New York 0,1
1004 Motika London 0,11
1007 Rifkin Barcelona 0,15
Также хочется дать небольшой совет. Для удобства отладки запросов, некоторые люди пишут перечень столбцов, которые необходимо вывести, в отдельной строке. Это облегчает комментирование кода. Для комментирования кода в SQL используется такой синтаксис - /* закомментированный код */ .Пример: SELECT snum ,sname , city , comm FROM Salespeople

Так будут выведены 4 столбца, однако при такой записи можно легко закомментировать ненужный столбец. Например так:

SELECT /* snum , */ sname , city , comm FROM Salespeople

Теперь столбец snum выводиться не будет, потому что он закомментирован. Очень быстро и удобно. Как писать SQL код, решать конечно Вам, но знать такие вещи иногда бывает полезно.

Использование выражений (expressions) в операторе SELECT

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

4. Необходимо вывести комиссионные (comm) продавцов в виде процентов, а не десятичных чисел

SELECT snum, sname, city, comm * 100 FROM Salespeople

Результат:

snum sname city comm
1001 Peel London 12
1002 Serres San Jose 13
1003 Axelrod New York 10
1004 Motika London 11
1007 Rifkin Barcelona 15
В последнем столбце все полученные данные умножаются на 100, и выводятся в виде процентов.

Этот столбец не имеет названия, потому что не содержит измененные данные и поэтому именуется по усмотрению СУБД (например MySQL именует столбец comm * 100, в примерах М.Граббера столбец имеет имя 4, т.е его номер).

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

SELECT snum, sname, city, comm * 100 AS "percent" FROM Salespeople Результат:

snum sname city percent
1001 Peel London 12
1002 Serres San Jose 13
1003 Axelrod New York 10
1004 Motika London 11
1007 Rifkin Barcelona 15

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

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

SELECT snum, sname, city, comm * 100 AS percent , "%" FROM Salespeople Результат:

snum sname city percent %
1001 Peel London 12 %
1002 Serres San Jose 13 %
1003 Axelrod New York 10 %
1004 Motika London 11 %
1007 Rifkin Barcelona 15 %

Видно, что после вывода строки из БД, появился новый столбец, заполненный знаком процента (%).

Если Вас не устраивает вывод данных и дополняющего текста в разных столбцах, то можно использовать специальные функции Вашей СУБД, для объединения в один столбец.

В MySQL для этого используется функция CONCAT . Вот ее определение из справочника:

CONCAT(str1,str2,...)
Возвращает строку, являющуюся результатом конкатенации аргументов. Если хотя бы один из аргументов равен NULL, возвращается NULL. Может принимать более 2 аргументов. Числовой аргумент преобразуется в эквивалентную строковую форму.

Пример: SELECT snum, sname, city , CONCAT(comm * 100, "%") AS "persent" FROM salespeople Результат:

snum sname city persent
1001 Peel London 12.000%
1002 Serres San Jose 13.000%
1003 Axelrod New York 10.000%
1004 Motika London 11.000%
1007 Rifkin Barcelona 15.000%

В данном запросе, функция CONCAT принимает 2 аргумента, это comm * 100 и знак процента ("%"). После этого с помощью AS мы именуем столбец.

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

Исключение избыточных данных

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

5. Необходимо вывести города (city), где есть продавцы

Запрос без исключений:

SELECT city FROM salespeople Результат:

Повторяющиеся значение London исключены из результата, что и требовалось.

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

Оператор SELECT выводит данные в произвольной последовательности. Для сортировки результата по определенному столбцу, в SQL используется оператор ORDER BY (т.е. упорядочить по….). Этот оператор позволяет изменить порядок вывода данных. ORDER BY упорядочивает результат запроса в соответствии со значениями одного или нескольких столбцов, выбранных в предложении SELECT. При этом для каждого столбца можно задать сортировку по возрастанию – ascending (ASC) (этот параметр используется по умолчанию) или по убыванию – descending (DESC).

Отсортируем результат по столбцу sname. После оператора ORDER BY указываем по какому столбцу сортировать, затем необходимо указать способ сортировки

Пример – сортировка по возрастанию:

SELECT * FROM Salespeople ORDER BY sname ASC

Результат:


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

SELECT snum, sname, city FROM Salespeople ORDER BY sname DESC, city DESC Результат:

snum sname city
1002 Serres San Jose
1007 Rifkin Barcelona
1001 Peel London
1004 Motika London
1003 Axelrod New York

Несколько важных замечаний:
- столбец, по которому происходит сортировка, обязательно должен быть указан в SELECT (можно использовать *)
- оператор ORDER BY всегда пишется в конце запроса

Понравилась статья? Поделиться с друзьями: