Топ контрибуторов
loading
loading
Знаете ли Вы, что

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

Лента обновлений
ссылка 12:40:06
Добавлен вопрос в тест ASP.NET - Средний уровень
ссылка Nov 19 20:18
Комментарий от newlist1999:
Хороший тест для проверки знаний, хотя довольно слож...
ссылка Nov 19 15:50
Комментарий от ceferovshen:
SELECT Top 1 ID,DateTime FROM Table1
order by ID de...
ссылка Nov 18 17:27
Комментарий от ardnya:
Можно с вами пообщаться в лс?
ссылка Nov 18 14:51
Комментарий от aaa211:
Суффиксный декремент/инкремент имеет более высокий приори...
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 445726 / 2188061.

Оператор SELECT в SQL

head tail Статья
категория
Базы данных
дата17.07.2009
авторikkko
голосов30

[Disclaimer: Данная статья была переведена в рамках "Конкурса на лучший перевод статьи" на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]

SQL - Оператор SELECT

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

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

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


SELECT column_list
FROM table_name
[WHERE условие]
[GROUP BY условие]
[HAVING условие]
[ORDER BY условие]

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;

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

snumsnamecitycomm
1001PeelLondon0,12
1002SerresSan Jose0,13
1003AxelrodNew York0,1
1004MotikaLondon0,11
1007RifkinBarcelona0,15
Столбцы таблицы Salespeople:
snumНомер продавца
snameИмя продавца
cityГород
commКоммисионные продавца, в десятичной форме

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

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


SELECT sname
FROM Salespeople 

Результат:

sname
Peel
Serres
Axelrod
Motika
Rifkin
В данном запросе, после оператора SELECT идет имя столбца, которое необходимо отобразить. После ключевого слова FROM указывается имя таблицы.

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


SELECT sname , city
FROM Salespeople 

Результат:

snamecity
PeelLondon
SerresSan Jose
AxelrodNew York
MotikaLondon
RifkinBarcelona
Здесь после оператора SELECT перечисляются столбцы, которые необходимо вывести. Имена столбцов пишутся через запятую.

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

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

SELECT snum , sname , city , comm 
FROM Salespeople

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


SELECT * FROM Salespeople
Результат:
snumsnamecitycomm
1001PeelLondon0,12
1002SerresSan Jose0,13
1003AxelrodNew York0,1
1004MotikaLondon0,11
1007RifkinBarcelona0,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

Результат:

snumsnamecitycomm
1001PeelLondon12
1002SerresSan Jose13
1003AxelrodNew York10
1004MotikaLondon11
1007RifkinBarcelona15
В последнем столбце все полученные данные умножаются на 100, и выводятся в виде процентов.

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

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


SELECT snum, sname, city, comm * 100 AS 'percent' 
FROM Salespeople
Результат:
snumsnamecitypercent
1001PeelLondon12
1002SerresSan Jose13
1003AxelrodNew York10
1004MotikaLondon11
1007RifkinBarcelona15

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

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


SELECT snum, sname, city, comm * 100 AS percent , '%' FROM Salespeople
Результат:
snumsnamecitypercent%
1001PeelLondon12%
1002SerresSan Jose13%
1003AxelrodNew York10%
1004MotikaLondon11%
1007RifkinBarcelona15%

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

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

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

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

Пример:

SELECT snum, sname, city , CONCAT(comm * 100, '%') AS 'persent' FROM salespeople
Результат:
snumsnamecitypersent
1001PeelLondon12.000%
1002SerresSan Jose13.000%
1003AxelrodNew York10.000%
1004MotikaLondon11.000%
1007RifkinBarcelona15.000%

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

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

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

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

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

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


SELECT city FROM salespeople
Результат:
city
London
San Jose
New York
London
Barcelona

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

Запрос с исключением избыточных данных:


SELECT DISTINCT city FROM salespeople

Результат:

city
London
San Jose
New York
Barcelona

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

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

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

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

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


SELECT * FROM Salespeople ORDER BY sname ASC

Результат:

snumsnamecitycomm
1003AxelrodNew York0,1
1004MotikaLondon0,11
1001PeelLondon0,12
1007RifkinBarcelona0,15
1002SerresSan Jose0,13

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


SELECT * FROM Salespeople ORDER BY sname DESC
Результат:
snumsnamecitycomm
1002SerresSan Jose0,13
1007RifkinBarcelona0,15
1001PeelLondon0,12
1004MotikaLondon0,11
1003AxelrodNew York0,1

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


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

snumsnamecity
1002SerresSan Jose
1007RifkinBarcelona
1001PeelLondon
1004MotikaLondon
1003AxelrodNew York

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

----------
Оригинальный текст статьи: SQL SELECT Statement

Если Вам понравилась статья, проголосуйте за нее

Голосов: 30  loading...
googperson   googman   googler   admin   c0nst   rubynovich   ikkko   senderos   astaldo   Kolunya   lacrimoza   SpiritWalker   serginio   Sekt104   luke   windessy   drliho   antlr   LostGR8   MiraLudanova   Lyudm1la   alext64   capslock270790   Oksana351   OlenaT   ulia_sun   ElizabethBalenk   Andrikkk   Danikeee2050   BUBLIC