Оператор SELECT в SQL
В этой статье вы узнаете, как выбирать записи из таблиц базы данных с помощью конструкции SELECT FROM в SQL.
В предыдущей статье мы узнали, как вставлять данные в таблицу базы данных. Теперь пришло время выбрать данные из существующих таблиц с помощью SQL-запроса.
Оператор SELECT
используется для выбора или получения данных из одной или нескольких таблиц. Вы можете использовать этот оператор для получения всех строк из таблицы за один раз, а также для получения только тех строк, которые удовлетворяют определенному условию или комбинации условий.
Синтаксис
Основной синтаксис для выбора данных из таблицы выглядит так:
SELECT имя_столбца1, имя_столбца2, имя_столбцаN FROM имя_таблицы;
имя_столбца1
, имя_столбца2
и т.д. — это имена столбцов или полей таблицы базы данных, значения которых вы хотите получить.
Если вам нужно получить значения всех столбцов в таблице, используйте символ *
:
SELECT * FROM имя_таблицы;
Символ *
после SELECT
указывает, что нужно вернуть все столбцы таблицы — в том порядке, в котором они находятся в исходной таблице.
Используем SELECT
Для практики будем использовать данные с сайта data.world.
У них есть статистика по приютам для животных в городе Остине (США) по состоянию на 7 декабря 2017 года.
Для начала скачайте таблицу Austin_Animal_Center_Intakes.csv (Google Disc →) и установите ее в свою СУБД — с именем austin_animal_center_intakes.
Чтобы посмотреть все содержимое таблицы, воспользуемся SELECT *
.
SELECT * FROM austin_animal_center_intakes
Вы увидете первые строки таблицы — вот они:
animal_id |
name |
datetime |
monthyear |
found_location |
intake_type |
intake_condition |
animal_type |
sex_upon_intake |
age_upon_intake |
breed |
color |
A006100 |
Scamp |
2017-12-07T14:07:00 |
2017-12 |
Colony Creek And Hunters Trace in Austin (TX) |
Stray |
Normal |
Dog |
Neutered Male |
10 years |
Spinone Italiano Mix |
Yellow/White |
A006100 |
Scamp |
2014-12-19T10:21:00 |
2014-12 |
8700 Research Blvd in Austin (TX) |
Public Assist |
Normal |
Dog |
Neutered Male |
7 years |
Spinone Italiano Mix |
Yellow/White |
A191351 |
Bri-Bri |
2015-11-13T15:57:00 |
2015-11 |
1912 E William Cannon Rd in Austin (TX) |
Stray |
Normal |
Cat |
Intact Female |
16 years |
Domestic Longhair Mix |
Black/White |
A322813 |
Tyson |
2015-03-05T14:49:00 |
2015-03 |
Austin (TX) |
Public Assist |
Normal |
Dog |
Neutered Male |
11 years |
Rottweiler Mix |
Black/Brown |
A553074 |
Jo Jo |
2016-03-27T00:04:00 |
2016-03 |
3614 Bill Price in Travis (TX) |
Public Assist |
Normal |
Dog |
Spayed Female |
7 years |
Labrador Retriever/German Shepherd |
Brown/Black |
A672744 |
Oso |
2014-02-17T17:10:00 |
2014-02 |
Travis (TX) |
Owner Surrender |
Normal |
Dog |
Intact Male |
3 years |
Rottweiler Mix |
Black/Tan |
A672744 |
Oso |
2014-02-17T17:10:00 |
2014-02 |
Austin (TX) |
Public Assist |
Normal |
Dog |
Intact Male |
3 years |
Rottweiler Mix |
Black/Tan |
А что, если нам не нужна вся эта информация? Предположим, мы хотим видеть только тип животных, их пол, возраст и состояние, в котором они находились при поступлении в приют. Такой запрос будет выглядеть следующим образом:
SELECT animal_type, sex_upon_intake, age_upon_intake, intake_condition FROM austin_animal_center_intakes
Вот несколько первых строк таблицы, которые вы получите после такого запроса:
animal_type |
sex_upon_intake |
age_upon_intake |
intake_condition |
Dog |
Neutered Male |
10 years |
Normal |
Dog |
Neutered Male |
7 years |
Normal |
Cat |
Intact Female |
16 years |
Normal |
Dog |
Neutered Male |
11 years |
Normal |
Dog |
Spayed Female |
7 years |
Normal |
Dog |
Intact Male |
3 years |
Normal |
Dog |
Intact Male |
3 years |
Normal |
Примечание. Обратите внимание, что порядок столбцов в результатах соответствует порядку, в котором мы перечислили столбцыв запросы, а не порядку, в котором они находятся в исходной таблице. Это очень удобно для представления информации в нужном порядке с учетом ваших целей.
Используем SELECT AS
Еще один способ изменить представление данных — изменить названия столбцов на более читабельные или удобные для ваших целей. В последнем примере наш запрос выдал данные о виде, поле, возрасте и состоянии животных. Если бы мы хотели переименовать столбцы, чтобы они соответствовали этим названиям в наших результатах, нужно было бы выбрать те же столбцы, но использовать ключевое слово AS
после каждого названия столбца и указать после него новое название столбца.
Короче: AS
позволяет переименовывать столбцы.
Давайте попробуем переименовать все столбцы из прошлого запроса.
SELECT animal_type AS Animal, sex_upon_intake AS Sex, age_upon_intake AS Age, intake_condition AS Condition
FROM austin_animal_center_intakes
Теперь таблица стала более читабельной и понятной. Вот первые несколько строк результата:
Type |
Sex |
Age |
Condition |
Dog |
Neutered Male |
10 years |
Normal |
Dog |
Neutered Male |
7 years |
Normal |
Cat |
Intact Female |
16 years |
Normal |
Dog |
Neutered Male |
11 years |
Normal |
Dog |
Spayed Female |
7 years |
Normal |
Dog |
Intact Male |
3 years |
Normal |
Dog |
Intact Male |
3 years |
Normal |
Примечание. Если вы используете
AS
с нечисловыми значениями в новом имени столбца (например, пробелы), нужно заключить новое имяв обратные кавычками. Обратная кавычка (`
) находится на клавиатуре на той же клавише, что и тильда (~
). И это не одно и то же, что обычная одинарная кавычка.
Если бы вместо замены названий столбцов на заголовки из одного слова мы захотели бы просто убрать подчеркивания, нам пришлось бы написать запрос с использованием обратных кавычек:
SELECT animal_type AS `animal type`, sex_upon_intake AS `sex upon intake`, age_upon_intake AS `age upon intake`, intake_condition AS `intake condition` FROM austin_animal_center_intakes
Результат:
animal type |
sex upon intake |
age upon intake |
intake condition |
Dog |
Neutered Male |
10 years |
Normal |
Dog |
Neutered Male |
7 years |
Normal |
Cat |
Intact Female |
16 years |
Normal |
Dog |
Neutered Male |
11 years |
Normal |
Dog |
Spayed Female |
7 years |
Normal |
Dog |
Intact Male |
3 years |
Normal |
Dog |
Intact Male |
3 years |
Normal |
Используем SELECT DISTINCT
Датасет, который мы используем в этой статье, очень большой. За почти три года, охватываемых набором данных, в Техасский центр для животных в Остине доставили 54 724 животных.
Если вы хотите узнать, какие виды животных были взяты в центр (все ли они были собаками и кошками, например), можно воспользоваться удобным модификатором для выражения SELECT
под названием DISTINCT
. DISTINCT
используется с оператором SELECT
и возвращает уникальные комбинации данных по всем столбцам из запроса.
Для нашей задачи — узнать, какие виды животных поступали в приют, — напишем такой SQL-запрос:
SELECT DISTINCT animal_type FROM austin_animal_center_intakes
Результат:
animal_type |
---|
Dog |
Cat |
Other |
Bird |
Livestock |
Если вы хотите показать только уникальные виды животных, но и увидеть соответсвующие ячейки из столбцов возраста и пола, подойдет такой запрос:
SELECT DISTINCT animal_type, sex_upon_intake, age_upon_intake FROM austin_animal_center_intakes
Это легитимный запрос, поэтому вы не получите ошибку, но в результирующей таблице не будет отдельных значений только для типа животного. Вместо этого отличимыми значениями будут считаться каждая комбинация типа, пола и возраста. DISTINCT
относится к уникальной строке данных, а не к уникальному столбцу. Вот как будут выглядеть первые несколько строк результатов:
animal_type | sex_upon_intake | age_upon_intake |
---|---|---|
Dog | Neutered Male | 10 years |
Dog | Neutered Male | 7 years |
Cat | Intact Female | 16 years |
Dog | Neutered Male | 11 years |
Dog | Spayed Female | 7 years |
Dog | Intact Male | 3 years |
Dog | Spayed Female | 2 years |