В этой статье мы рассмотрим некоторые базовые запросы SQL, с изучения которых стоит начинать новичкам в этом языке. Вы научитесь создавать базу данных и таблицы, вносить в них данные и делать выборки нужных сведений.
Аббревиатура SQL расшифровывается как «Structured Query Language» — язык структурированных запросов. С помощью этого языка вы можете работать с записями в базах данных.
SQL состоит из команд и декларативных ключевых слов, которые являются как бы инструкциями для базы данных.
При помощи команд SQL можно создавать и удалять таблицы в базах данных, добавлять в них данные или вносить изменения, искать и быстро находить нужные сведения.
В этой статье мы рассмотрим основные ключевые слова и операторы SQL и разберем, как с их помощью запрашивать конкретную информацию из базы данных.
Структура базы данных
Прежде чем мы начнем разбирать запросы, нужно, чтобы вы поняли иерархию базы данных.
База данных SQL — это набор взаимосвязанных сведений, хранящихся в таблицах. В каждой таблице есть столбцы, описывающие хранящиеся в них данные, и строки, в которых эти данные хранятся. Поле — это отдельный кусочек данных в строке. Чтобы найти нужные данные, мы должны написать, что именно мы хотим получить.
Возьмем для примера некую компанию, штат которой разбросан по всему миру. Допустим, у этой компании есть много баз данных. Чтобы увидеть их полный список, нужно набрать SHOW DATABASES;
Результат может выглядеть как-то так:
+--------------------+ | Databases | +--------------------+ | mysql | | information_schema | | employees | | test | | sys | +--------------------+
В каждой отдельной базе данных может быть много таблиц. Чтобы увидеть, какие таблицы есть в базе данных employees
из нашего примера, нужно набрать SHOW TABLES in employees;
. В таблицах могут содержаться данные по разным командам, что отражается в названиях: engineering, product, marketing, sales.
+----------------------+ | Tables_in_employees | +----------------------+ | engineering | | product | | marketing | | sales | +----------------------+
Все таблицы состоят из различных столбцов, описывающих данные.
Чтобы просмотреть столбцы таблицы Engineering, используйте Describe Engineering;
. Каждый столбец этой таблицы может описывать какой-то один атрибут сотрудника, например: employee_id
, first_name
, last_name
, email
, country
и salary
.
Вывод:
+-----------+-------------------+--------------+ | Name | Null | Type | +-----------+-------------------+--------------+ |EMPLOYEE_ID| NOT NULL | INT(6) | |FIRST_NAME | NOT NULL |VARCHAR2(20) | |LAST_NAME | NOT NULL |VARCHAR2(25) | |EMAIL | NOT NULL |VARCHAR2(255) | |COUNTRY | NOT NULL |VARCHAR2(30) | |SALARY | NOT NULL |DECIMAL(10,2) | +-----------+-------------------+--------------+
Таблицы также состоят из строк — отдельных записей. В нашем примере в строках будут указаны id, имена, фамилии, email, зарплата и страны проживания сотрудников. Каждая строка будет касаться одного сотрудника, допустим, из команды Engineering.
Базовые запросы SQL
Все операции, которые можно осуществлять с данными, входят в понятие «CRUD».
CRUD расшифровывается как Create, Read, Update и Delete (создать, прочесть, обновить, удалить). Это четыре основных операции, которые мы осуществляем, делая запросы к базе данных.
Мы создаем информацию в базе (CREATE
), мы читаем, получаем информацию из базы (READ
), мы обновляем данные или осуществляем какие-то манипуляции с ними (UPDATE
) и, при желании, можем удалять данные (DELETE
).
Для осуществления различных операций с данными в SQL есть специальные ключевые слова (операторы). Ниже мы рассмотрим некоторые простые запросы SQL и их синтаксис.
Ключевые слова в SQL
CREATE DATABASE
Для создания базы данных с именем engineering
мы используем следующий код:
CREATE DATABASE engineering;
CREATE TABLE
Синтаксис:
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype );
Этот запрос создает новую таблицу в базе данных.
В нем задается имя таблицы, а также имена столбцов, которые нам нужны.
Что касается типов данных (datatype), они могут быть разными. Самые распространенные — INT, DECIMAL, DATETIME, VARCHAR, NVARCHAR, FLOAT и BIT.
В нашем примере запрос может быть таким:
CREATE TABLE engineering ( employee_id int(6) NOT NULL, first_name varchar(20) NOT NULL, last_name varchar(25) NOT NULL, email varchar(255) NOT NULL, country varchar(30), salary decimal(10,2) NOT NULL );
Таблица, созданная по этому запросу, будет выглядеть так:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
|
ALTER TABLE
После создания таблицы мы можем изменять ее путем добавления столбцов.
Синтаксис:
ALTER TABLE table_name ADD column_name datatype;
Допустим, мы хотим добавить в только что созданную таблицу столбец с днями рождения сотрудников. Это можно сделать так:
ALTER TABLE engineering ADD birthday date;
Теперь таблица выглядит немного иначе:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | BIRTHDAY | |
|
INSERT
Это ключевое слово служит для вставки данных в таблицы и создания новых строк. В аббревиатуре CRUD это соответствует букве C.
Синтаксис:
INSERT INTO table_name(column1, column2, column3,..) VALUES(value1, 'value2', value3,..);
Этот запрос создает новую запись в таблице, т. е. новую строку.
В части INSERT INTO
мы указываем столбцы, которые хотим заполнить информацией. В VALUES
указана информация, которую нужно сохранить.
При вставке строковых значений их нужно брать в одинарные кавычки.
Например:
INSERT INTO table_name(employee_id,first_name,last_name,email,country,salary) VALUES (1,'Timmy','Jones','timmy@gmail.com','USA',2500.00); (2,'Kelly','Smith','ksmith@gmail.com','UK',1300.00);
Теперь таблица будет выглядеть так:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
SELECT
Это ключевое слово служит для выборки данных из базы. В CRUD эта операция соответствует букве R.
Синтаксис:
SELECT column1,column2 FROM table_name;
В нашем примере этот запрос будет выглядеть следующим образом:
SELECT first_name,last_name FROM engineering;
Результат:
+-----------+----------+ |FirstName | LastName | +-----------+----------+ | Timmy | Jones | | Kelly | Smith | +-----------+----------+
Ключевое слово SELECT
указывает на конкретный столбец, из которого мы хотим выбрать данные.
В части FROM
определяется сама таблица.
Вот еще один пример запроса SELECT
:
SELECT * FROM table_name;
Астериск (звездочка) означает, что нам нужна вся информация из указанной таблицы (а не отдельный столбец).
WHERE
WHERE
позволяет составлять более специфичные (конкретные) запросы.
Например, мы можем использовать WHERE
, чтобы выбрать из нашей таблицы Engineering
сотрудников с определенным уровнем зарплаты.
SELECT employee_id,first_name,last_name,email,country FROM engineering WHERE salary > 1500
Таблица из предыдущего примера:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
Теперь вывод будет такой:
+-----------+----------+----------+----------------+------------+ |employee_id|first_name|last_name |email |country | +-----------+----------+----------+----------------+------------+ | 1| Timmy |Jones |timmy@gmail.com | USA | +-----------+----------+----------+----------------+------------+
Данные отфильтрованы, и нам показывается только то, что отвечает условию. То есть в выводе мы получаем только строки, где зарплата больше 1500.
Операторы AND, OR, BETWEEN в SQL
Эти операторы позволяют еще больше уточнить запрос. С их помощью можно добавить больше критериев в блоке WHERE
.
Оператор AND принимает два условия, причем, чтобы строка попала в результат, оба условия должны быть истинными.
SELECT column_name FROM table_name WHERE column1 =value1 AND column2 = value2;
OR
тоже принимает два условия, но чтобы строка попала в результат, достаточно истинности хотя бы одного.
SELECT column_name FROM table_name WHERE column_name = value1 OR column_name = value2;
Оператор BETWEEN
отфильтровывает результаты в определенном диапазоне чисел или текста.
SELECT column1,column2 FROM table_name WHERE column_name BETWEEN value1 AND value2;
Все эти операторы можно комбинировать друг с другом.
Допустим, наша таблица выглядит так:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
3 | Jim | White | jwhite@gmail.com | UK | 1200.76 |
4 | José Luis | Martìnez | jmart@gmail.com | Mexico | 1275.87 |
5 | Emilia | Fischer | emfis@gmail.com | Germany | 2365.90 |
6 | Delphine | Lavigne | lavigned@gmail.com | France | 2108.00 |
7 | Louis | Meyer | lmey@gmail.com | Germany | 2145.70 |
Если мы напишем такой запрос:
SELECT * FROM engineering WHERE employee_id BETWEEN 3 AND 7 AND country = 'Germany';
Мы получим следующий результат:
+------------+-----------+-----------+----------------+--------+--------+ |employee_id | first_name| last_name | email |country |salary | +------------+-----------+-----------+----------------+--------+--------+ |5 |Emilia |Fischer |emfis@gmail.com | Germany| 2365.90| |7 |Louis |Meyer |lmey@gmail.com | Germany| 2145.70| +------------+-----------+-----------+----------------+--------+--------+
Были выбраны все столбцы, где employee_id от 3 до 7, а страна проживания — Германия.
ORDER BY
Ключевое слово ORDER BY
позволяет отсортировать выдачу по столбцам, указанным в SELECT
.
Отсортированные результаты выводятся в порядке возрастания или убывания.
По умолчанию сортировка идет по возрастанию. Но мы можем указать желаемый порядок явно — при помощи команды ORDER BY column_name DESC | ASC
.
SELECT employee_id, first_name, last_name,salary FROM engineering ORDER BY salary DESC;
В этом примере мы отсортировали зарплату сотрудников в команде engineering и представили вывод в порядке убывания числовых значений (DESC — от англ. descending — «нисходящий»).
GROUP BY
Ключевое слово GROUP BY в SQL позволяет комбинировать строки с идентичными и похожими данными.
Это полезно для приведения в порядок дублирующихся данных и записей, которые повторяются в таблице многократно.
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
Здесь COUNT(*)
подсчитывает все строки и возвращает число строк в указанной таблице, группируя строки-дубликаты.
От редакции Techrocks: о COUNT и других агрегатных функциях можно почитать в статье «Агрегатные функции в SQL: объяснение с примерами запросов».
LIMIT
При помощи LIMIT
можно указать максимальное число строк, которые должны попасть в результат.
Это бывает полезно при работе с большими наборами данных. Если данных много, запрос может обрабатываться слишком долго. Но когда будет достигнут лимит результатов, обработка прекратится.
Синтаксис:
SELECT column1,column2 FROM table_name LIMIT number;
UPDATE
Ключевое слово UPDATE позволяет обновлять записи в таблице. В CRUD этой операции соответствует буква U.
Синтаксис:
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
В условии WHERE
указывается запись, которую нужно отредактировать.
UPDATE engineering SET country = 'Spain' WHERE employee_id = 1
Прежде наша таблица выглядела так:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
1 | Timmy | Jones | timmy@gmail.com | USA | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
3 | Jim | White | jwhite@gmail.com | UK | 1200.76 |
4 | José Luis | Martìnez | jmart@gmail.com | Mexico | 1275.87 |
5 | Emilia | Fischer | emfis@gmail.com | Germany | 2365.90 |
6 | Delphine | Lavigne | lavigned@gmail.com | France | 2108.00 |
7 | Louis | Meyer | lmey@gmail.com | Germany | 2145.70 |
Теперь, после выполнения запроса, она выглядит так:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | COUNTRY | SALARY | |
1 | Timmy | Jones | timmy@gmail.com | Spain | 2500.00 |
2 | Kelly | Smith | ksmith@gmail.com | UK | 1300.00 |
3 | Jim | White | jwhite@gmail.com | UK | 1200.76 |
4 | José Luis | Martìnez | jmart@gmail.com | Mexico | 1275.87 |
5 | Emilia | Fischer | emfis@gmail.com | Germany | 2365.90 |
6 | Delphine | Lavigne | lavigned@gmail.com | France | 2108.00 |
7 | Louis | Meyer | lmey@gmail.com | Germany | 2145.70 |
Обновилась страна проживания сотрудника с id 1.
Обновить информацию можно и с помощью значений из другой таблицы. Для этого применяется ключевое слово JOIN.
UPDATE table_name SET table_name1.column_name1 = table_name2.column_name1 table_name1.column_name2 = table_name2.column2 FROM table_name1 JOIN table_name2 ON table_name1.column_name = table_2.column_name;
DELETE
Ключевое слово DELETE
служит для удаления записей из таблицы. В CRUD операция удаления представлена буквой D.
Синтаксис:
DELETE FROM table_name WHERE condition;
Пример с нашей таблицей:
DELETE FROM engineering WHERE employee_id = 2;
При выполнении запроса будет удалена запись о сотруднике с id 2 из команды engineering.
DROP COLUMN
Чтобы удалить из таблицы столбец, можно воспользоваться следующим кодом:
ALTER TABLE table_name DROP COLUMN column_name;
DROP TABLE
Для удаления всей таблицы выполните следующий запрос:
DROP TABLE table_name;
Итоги
В этой статье мы пробежались по самым базовым запросам, с которых начинают все новички в SQL.
Мы научились создавать таблицы и строки, группировать и обновлять данные и, наконец, удалять их. Попутно мы также разобрали SQL-запросы в привязке к операциям CRUD.
Перевод статьи «Learn SQL Queries – Database Query Tutorial for Beginners».
От редакции Techrocks. Вам также могут быть интересны другие статьи по теме SQL:
- Топ-30 вопросов по SQL на технических собеседованиях
- ТОП-10 сайтов, на которых можно потренировать SQL-запросы
- Порядок выполнения SQL-операций
- Выражение CASE в SQL: объяснение на примерах
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]