SQL: SELECT запросы

SQL: SELECT запросы

После того как мы создали таблицу нам необходимо с ней работать. Чтобы получить данные из таблицы используются SQL — запросы.
SQL — запрос SELECT — предназначен для выборки строк из таблицы.
Рассмотрим примеры:

Простая выборка из таблицы

SELECT — команда выборки.
* — указывает на то, что нам необходимо получить все данные из таблицы.
FROM — указывает откуда мы будем брать данные.
Users —  имя таблицы из которой мы возьмем данные.

Что получим на выходе:

idNameLoginuPasswordspecialtysalary
1Alicea1500
2Jonb2teacher10000
3Jonhc3teacher100000
4Kated4student100000
5Maxr5doctor100000
6Sarat6programmer100000

Ограничение по выборки данных

LIMIT 2,3 — устанавливает лимит; указывает что из таблицы будут взяты только 3 строки, начиная с 3.

idNameLoginuPasswordspecialtysalary
1Alicea1500
2Jonb2teacher10000
3Jonhc3teacher100000
4Kated4student100000
5Maxr5doctor100000
6Sarat6programmer100000

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

На выходе мы получим из таблицы только данные из столбцов Login и uPassword. Т.е. при выборке определенных столбцов таблицы их необходимо указать через запятую.
Столбцы будут выведены на экран в том порядке, в котором перечислены в запросе.

LoginuPassword
a1
b2
c3
d4
r5
t6

Сортировка полей из таблицы

По этому запросу будут выбраны данные из полей Name, Login и uPassword, далее они будут отсортированы по полю Name(по алфавиту).
Сортировку можно выполнять по любому количеству полей.

NameLoginuPassword
Aicea1
Jonb2
Jonhc3
Kated4
Maxr5
Petert6

Параметр ASC означает, что сортировка выполнится по возрастанию (устанавливается по умолчанию).

DESC означает, что сортировка выполнится по убыванию.

Удаление повторяющихся значений

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

Создадим две одинаковые строки(копируем 2 строку) и посмотрим что получится:

NameLoginuPassword
Aicea1
Jonb2
Jonhc3
Kated4
Maxr5
Petert6

 Условие WHERE

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

В итоге мы получим все строки у которых поле Name имеет значение ‘Alice’.

idNameLoginuPasswordspecialtysalary
1Alicea1500

Условий может быть несколько в этом случаи используются операторы: AND, OR или NOT. Так же в условии можно использовать операторы: ‘=’(равно), ‘<>’(неравно), ‘<‘(меньше), ‘>’(больше), ‘<=’(меньше равно),’>=’(больше равно).Например:

BETWEEN(Между) 

BETWEEN проверяет попадают ли значения проверяемого выражения в диапазон значений, связанных служебным оператором AND.

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

idNameLoginuPaswordspecialtysalary
1Aliccea1500
2Jonb2teacher10000

IN

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

В нашем случаи на выход получим только тех людей, зарплата которых соответствует значению 10000 и 100000.

idNameLoginuPasswordspecialtysalary
2Jonb2teacher10000
3Jonhc3teacher100000
4Kated4student100000
5Maxr5doctor100000
6Petert6programmer100000

IN так же может содержать в себе подзапрос. Тогда на выходе получим только тех людей, чей вес равняется 50,60 или 70 кг и вес равен значению, которому равны поля тех людей, чей возраст 18.

LIKE

LIKE сравнивает проверяемое значение с шаблоном в выражении.

На выходе мы получим все данные из таблицы Users, где значение поля Name будут начинаться с A.

idNameLoginuPasswordspecialtysalary
1Alicea1500

«%» — означает, любые символы.
Если мы поставим «а%», то получим все значения где встречен символ «а».
Если мы поставим «%а%», то получим все значения полей Name , в которых будет встречен символ «а».

Переименование полей

Иногда, нам необходимо переименовать поле. За эту операцию отвечает команда AS.

В итоге мы получим:

NameMinSalary
Alice500
Jon10000

Агрегатные функции в SQL

Для получения итоговых значений и вычисления выражений используются агрегатные функции в sql:

НазваниеОписание
COUNT(*)Вернет количество строк в таблице. Учитывает NULL -
значения. Применима к любым типам данных.
COUNT(имя поля)Вернет количество значений в указанном столбце. Не учитывает NULL -
значения. Применима к любым типам данных.
MIN(имя поля)Вернет минимальное значение из указанного столбца. Применима к любым типам данных.
MAX(имя поля)Вернет максимальное значение из указанного столбца. Применима к любым типам данных.
SUM(имя поля)Вернет сумму значений из указанного столбца. Применима лишь к числовому типу данных.
AVG(имя поля)Вернет среднее арифметическое значение из указанного столбца. Применима лишь к числовому типу данных.

Все агрегатные функции возвращают единственное значение.
Например, используем функцию SUM() и посчитаем зарплату пользователей:

Salary
1220500

GROUP BY

Обычно GROUP BY относят к агрегатным функциям, но мы разберём его отдельно.
Когда запрос содержащий оператор GROUP BY, каждый набор строк, заданных в предложении GROUP BY, составляет группу, и агрегатные функции выполняются для каждой группы отдельно.
Рассмотрим пример. Существует некая таблица Job:

idNamespecialtyhoursalary
1Aliceteacher2500
2Maxteacher64200
3Alicedoctor41000
4Aliceteacher3750
5Maxdoctor21400

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

И в итоге получаем:

Namespecialtyhour
Aliceteacher9
Maxdoctor8

HAVING

С помощью оператора HAVING проверяется значение, полученное с помощью агрегатных функций с использованием GROUP BY. В такой проверке не может быть оператора WHERE.
Рассмотрим пример. Необходимо вывести пользователей, чья суммарная зарплата выше 2500.

NamespecialtySalary
Maxdoctor5600

Неявная операция соединения

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

Представим, что у нас есть две таблицы: Users(хранит информацию о пользователях(id, имя и специальность)) и  Job(хранит информацию о работе(id, имя работника, его специальность, отработанные часы и зарплата)). Предположим, что мы хотим вывести имя, специальность и зарплату. Первые два пункта возьмем из таблицы Users, последний из таблицы Job. Это будет возможно с помощью строки «Users.Name = Job.Name «. Здесь, таблицы соединяются через поля Name. В итоге получим:

Namespecialtyhour
Aliceteacher500
Aliceteacher1000
Aliceteacher750
Maxdoctor1400
Maxdoctor4200

Явное соединение

INNER JOIN

INNER JOIN — (внутреннее объединение) — выбираются только совпадающие данные из объединяемых таблиц.
Воспользуемся таблицами из примера выше. Предположим, что нам надо вывести имя, специальность и сумму выплаченной зарплаты. Воспользуемся INNER JOIN:

INNER JOIN — показывает какие таблицы мы хотим связать.
ON — указывает на то, через какие поля связывать таблицы.
На выходе получим:

NamespecialtySalary
Aliceteacher2250
Maxdoctor5600

OUTER JOIN

OUTER JOIN — (внешнее соединение) — выбираются совпадающие данные из объединяемых таблиц, плюс данные из внешней таблицы, которые не подходят по условию, заполнив недостающие значения NULL.

    1. LEFT OUTER JOIN  — (левое внешнее соединение) — внешней таблицей будет та, которая находится слева.

      На выходе получим:

      NamespecialtySalary
      Aliceteacher2250
      Maxdoctor5600
      Saradoctornull

      В нашем случаи из «левой» таблицы (Users) были взяты данные, не соответствующие условию(т.е. последняя строка).
    2. RIGHT OUTER JOIN — (внешнее правое соединение) — внешней таблицей будет та, которая находится справа.

      На выходе получим:

      NamespecialtySalary
      Aliceteacher2250
      Kimstudentnull
      Markstudentnull
      Maxdoctor5600

       

      В нашем случаи из «правой» таблицы (Job) были взяты данные, не соответствующие условию (т.е. вторая и третья строка).

UNION

UNION — объединяет несколько запросов (выходные строки из разных запросов объединятся в одну результирующую).
Для использования оператора UNION необходимо соблюдать следующие условия:

  1. Выходные столбцы в каждом запросе должны быть сравнимы между собой по типам данных.
  2. Количество выходных столбцов должно быть одинаковым.
  3. ORDER BY можно использовать только после объединенных запросов.
  4.  В итоговом наборе используются те имена, которые указаны в первом запросе.

На выходе получим:

Namespecialty
Aliceteacher
Maxdoctor
Saradoctor
Kimstudent
Markstudent

В этой статье мы разобрали основные возможности оператора SELECT.

Добавить комментарий