SQL SELECT Statement
The SELECT statement is used to select data from a database.
Example
Return data from the Customers table:
SELECT CustomerName, City FROM Customers;
Syntax
SELECT column1, column2, .
FROM table_name;
Here, column1, column2, . are the field names of the table you want to select data from.
The table_name represents the name of the table you want to select data from.
Demo Database
Below is a selection from the Customers table used in the examples:
Select ALL columns
If you want to return all columns, without specifying every column name, you can use the SELECT * syntax:
Example
Return all the columns from the Customers table:
SELECT * FROM Customers;
COLOR PICKER


Report Error
If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:
Top Tutorials
Top References
Top Examples
Get Certified
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning.
Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness
of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.
SQL: SELECT Statement
This SQL tutorial explains how to use the SQL SELECT statement with syntax, examples and practice exercises.
Description
The SQL SELECT statement is used to retrieve records from one or more tables in your SQL database. The records retrieved are known as a result set.
Syntax
The syntax for the SELECT statement in SQL is:
SELECT expressions FROM tables [WHERE conditions] [ORDER BY expression [ ASC | DESC ]];
Parameters or Arguments
expressions The columns or calculations that you wish to retrieve. Use * if you wish to select all columns. tables The tables that you wish to retrieve records from. There must be at least one table listed in the FROM clause. WHERE conditions Optional. The conditions that must be met for the records to be selected. If no conditions are provided, then all records will be selected. ORDER BY expression Optional. The expression used to sort the records in the result set. If more than one expression is provided, the values should be comma separated. ASC Optional. ASC sorts the result set in ascending order by expression. This is the default behavior, if no modifier is provider. DESC Optional. DESC sorts the result set in descending order by expression.
DDL/DML for Examples
If you want to follow along with this tutorial, get the DDL to create the tables and the DML to populate the data. Then try the examples in your own database!
Example — Select All Fields from a Table
Let’s look at an example that shows how to use the SQL SELECT statement to select all fields from a table.
In this example, we have a table called customers with the following data:
| customer_id | last_name | first_name | favorite_website |
|---|---|---|---|
| 4000 | Jackson | Joe | techonthenet.com |
| 5000 | Smith | Jane | digminecraft.com |
| 6000 | Ferguson | Samantha | bigactivities.com |
| 7000 | Reynolds | Allen | checkyourmath.com |
| 8000 | Anderson | Paige | NULL |
| 9000 | Johnson | Derek | techonthenet.com |
Now let’s demonstrate how the SELECT statement works by selecting all columns from the customers table. Enter the following SELECT statement:
SELECT * FROM customers WHERE favorite_website = 'techonthenet.com' ORDER BY last_name ASC;
There will be 2 records selected. These are the results that you should see:
| customer_id | last_name | first_name | favorite_website |
|---|---|---|---|
| 4000 | Jackson | Joe | techonthenet.com |
| 9000 | Johnson | Derek | techonthenet.com |
In this example, we’ve used * to signify that we wish to view all fields from the customers table where the favorite_website is ‘techonthenet.com’. The result set is sorted by last_name in ascending order.
Example — Select Individual Fields from a Table
You can also use the SQL SELECT statement to select individual fields from the table, as opposed to all fields from the table.
In this example, we have a table called suppliers with the following data:
| supplier_id | supplier_name | city | state |
|---|---|---|---|
| 100 | Microsoft | Redmond | Washington |
| 200 | Mountain View | California | |
| 300 | Oracle | Redwood City | California |
| 400 | Kimberly-Clark | Irving | Texas |
| 500 | Tyson Foods | Springdale | Arkansas |
| 600 | SC Johnson | Racine | Wisconsin |
| 700 | Dole Food Company | Westlake Village | California |
| 800 | Flowers Foods | Thomasville | Georgia |
| 900 | Electronic Arts | Redwood City | California |
Now let’s demonstrate how to use the SELECT statement to select individual columns from a table. Enter the following SELECT statement:
SELECT supplier_name, city FROM suppliers WHERE supplier_id > 500 ORDER BY supplier_name ASC, city DESC;
4 records should be selected. These are the results that you should see:
| supplier_name | city |
|---|---|
| Dole Food Company | Westlake Village |
| Electronic Arts | Redwood City |
| Flowers Foods | Thomasville |
| SC Johnson | Racine |
This example would return only the supplier_name and city fields from the suppliers table where the supplier_id value is greater than 500. The results are sorted by supplier_name in ascending order and then city in descending order.
Example — Select Individual Fields From Multiple Tables
You can also use the SQL SELECT statement to retrieve fields from multiple tables.
In this example, we have a table called orders with the following data:
| order_id | customer_id | order_date |
|---|---|---|
| 1 | 7000 | 2016/04/18 |
| 2 | 5000 | 2016/04/18 |
| 3 | 8000 | 2016/04/19 |
| 4 | 4000 | 2016/04/20 |
| 5 | NULL | 2016/05/01 |
And a table called customers with the following data:
| customer_id | last_name | first_name | favorite_website |
|---|---|---|---|
| 4000 | Jackson | Joe | techonthenet.com |
| 5000 | Smith | Jane | digminecraft.com |
| 6000 | Ferguson | Samantha | bigactivities.com |
| 7000 | Reynolds | Allen | checkyourmath.com |
| 8000 | Anderson | Paige | NULL |
| 9000 | Johnson | Derek | techonthenet.com |
Now let’s select columns from both the orders and customers tables. Enter the following SELECT statement:
SELECT orders.order_id, customers.last_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id WHERE orders.order_id <> 1 ORDER BY orders.order_id;
There will be 3 records selected. These are the results that you should see:
| order_id | last_name |
|---|---|
| 2 | Smith |
| 3 | Anderson |
| 4 | Jackson |
This SELECT example joins two tables to gives us a result set that displays the order_id from the orders table and the last_name from the customers table. Each time we use a column in the SELECT statement, we prefix the column with the table name (for example, orders.order_id) in case there is any ambiguity about which table the column belongs to.
If you wanted to select all fields from the orders table and then the last_name field from the customers table, you enter the following SELECT statement:
SELECT orders.*, customers.last_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id WHERE orders.order_id <> 1 ORDER BY orders.order_id;
There will be 3 records selected. These are the results that you should see:
| order_id | customer_id | order_date | last_name |
|---|---|---|---|
| 2 | 5000 | 2016/04/18 | Smith |
| 3 | 8000 | 2016/04/19 | Anderson |
| 4 | 4000 | 2016/04/20 | Jackson |
In this example, we use orders.* to signify that we want to select all fields from the orders table and then we select the last_name field from the customers table.
Practice Exercises
If you want to test your skills using the SQL SELECT statement, try some of our practice exercises.
These exercises allow you to try out your skills with the SELECT statement. You will be given questions that you need to solve. After each exercise, we provide the solution so you can check your answer. Give it a try!
Select (SQL)
Правильный заголовок этой статьи — SELECT (SQL) . Он показан некорректно из-за технических ограничений.
SELECT (англ., означает «выбрать») — оператор DML языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию.
В большинстве случаев, выборка осуществляется из одной или нескольких таблиц. В последнем случае говорят об операции слияния (JOIN (SQL)). В тех СУБД, где реализованы представления (англ. view ) и хранимые процедуры (англ. stored procedure ), также возможно получение соответствующих наборов данных.
При формировании запроса SELECT пользователь описывает ожидаемый набор данных: его вид (набор столбцов) и его содержимое (критерий попадания записи в набор, группировка значений, порядок вывода записей и т. п.).
Запрос выполняется следующим образом: сначала извлекаются все записи из таблицы, а затем для каждой записи набора проверяется её соответствие заданному критерию. Если осуществляется слияние из нескольких таблиц, то сначала составляется произведение таблиц, а уже затем из полученного набора отбираются требуемые записи.
Особую роль играет обработка NULL -значений, когда при слиянии, например, двух таблиц — главной (англ. master) и подчинённой (англ. detail) — имеются или отсутствуют соответствия между записями таблиц, участвующих в слиянии. Для решения этой задачи используются механизмы внутреннего (англ. inner) и внешнего (англ. outer) слияния.
Один и тот же набор данных может быть получен при выполнении различных запросов. Поиск оптимального плана выполнения данного запроса является задачей оптимизатора.
Структура оператора
Оператор SELECT имеет следующую структуру:
SELECT [DISTINCT | DISTINCTROW | ALL] select_expression. [FROM table_references] [WHERE where_definition] [GROUP BY ] [HAVING where_definition] [ORDER BY [ASC | DESC], . ]
Формат запроса с использованием данного оператора:
SELECT список полей FROM список таблиц WHERE условия…
Основные ключевые слова, относящиеся к запросу SELECT :
- WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.
- GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.
- HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.
- ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.
Примеры
SELECT * FROM T;
SELECT C1 FROM T;
The OCP
Retrieving Data Using the SQL SELECT Statement (Получение данных при помощи команды SELECT языка SQL)
Эта тема рассказывает о базовых возможностях оператора SELECT. О том что этот оператор по сути является основой SQL. Именно с помощью него осуществляется выборка данных из таблиц БД и представление этих данных для просмотра.
List the capabilities of SQL SELECT statements
Т.к. оператор SELECT производит выборку из таблиц БД, то нужно знать как минимум название этой таблицы, а так же представлять структуру таблицы. Таблицы состоят из колонок и строк, а значит нужно знать название колонок, для того чтобы выбрать нужные строки. Для того чтобы узнать эту информацию используется оператор DESCRIBE.
DESC[RIBE] < SCHEMA. >tablename
Результатом выполнения команды служит список колонок указанной таблицы со свойствами каждой (тип данных, максимальная длина, возможность добавления пустого значения и т. п.) колонки.
SQL> DESCRIBE employees Name Null? Type ----------------------- -------- ------------ EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4)
Типы данных будут отдельно рассматриваться позже.
Возможности SELECT по выборке данных
Работа реляционной БД основана на чётком математическом аппарате, на реляционной теории и реляционной алгебре. Работа оператора SELECT базируется на той же реляционной математике. Главные принципы работы оператора проецирование (projection), выборка (selection) и соедининие (joining).
- Проецирование — оператор может выбрать все колонки из таблицы, а может только некоторые, те, что захочет видеть запускающий команду.
- Выборка — возможность выбирать не все строки, а только необходимые.
- Соедининие — возможность в запросе связывать таблицы между собой.
Execute a basic SELECT statement
Простейший оператор SELECT:
SELECT, DISTINCT и FROM — ключевые слова языка SQL. Они не могут быть использованы в качестве имен колонок таблиц и в качестве названий объектов в БД.
Оператор SELECT всегда состоит минимум из двух обязательных выражений — обязательно должны присутствовать SELECT и FROM.
Символ * означает, что нужно выбрать все колонки из таблицы (или таблиц). Он удобен для упрощения ввода запросов, для того чтобы не нужно было перечислять колонки. Однако, следует следить за тем, чтобы в выбираемых таблицах не было колонок с одинаковыми названиями. В случае дублирования названий колонок, запрос завершится ошибкой.
Ключевое слово DISTINCT говорит о том, что в результирующих строках не должно быть двух повторяющихся.
Регистр написания SQL-команд не имеет значения. Однако, следует учитывать что строковые данные, применяемые при построении запроса, уже будут чувствительны к регистру. Кроме этого следует помнить что метаданные о различных объектах БД по умолчанию хранятся в верхнем регистре во внутреннем словаре, что не влияет на возможность использования в запросах их написания в любом регистре.
Команды SQL разбиваются точкой с запятой или прямым слешем (; или /).
SQL выражения и операторы
SQL в основном предназначен для выборки строк из таблиц. Но перед представлением результатов над данными возможно произвести преобразования. В зависимости от типа колонки можно произвести следующие операции:
- Числовой — арифметические (+, -, /, *);
- Строковый — конкатенация;
- Дата и timestamp — сложение, вычитание.
Арифметические операторы имеют приоритет выполнения.
| Уровень | Символ оператора | Описание |
| Высший | () | Скобки |
| Средний | / | Деление |
| Средний | * | Умножение |
| Низкий | + | Сложение |
| Низкий | — | Вычитание |
Таким образом следующие запросы дадут разные результаты:
| Запрос | Результат |
| SELECT 3+4*5-7 FROM DUAL | 16 |
| SELECT (3+4)*5-7 FROM DUAL | 28 |
| SELECT 3+4*(5-7) FROM DUAL | -5 |
В случае если встречаются операторы с одинаковым приоритетом, очередность применения операторов — справа налево.
К колонке типа дата можно с помощью операторов + и — прибавлять и вычитать числовое значение. Результатом будет дата отстоящая на это количество дней от даты, к которой применяем выражение. Две даты можно вычесть друг из друга — результатом будет количество дней между этими датами. Складывать две даты нельзя, т.к. это не имеет смысла, при попытке сложить две даты Oracle выдаст соответствующую ошибку.
Строки можно конкатенировать (складывать) со строками с помощью оператора ||.
| Запрос | Результат |
| SELECT ‘Name of employee is ‘||fullname FROM emp |
Name of employee is John Smith |
Если необходимо чтобы в результирующей строке выдался символ ‘ (одинарная кавычка) нужно повторить ее дважды ‘‘ (не двойная кавычка ", а именно две подряд одинарные кавычки). Например:
SELECT ‘I‘‘m oracloid’ «2 Quotes» FROM DUAL;
2 Quotes
——————-
I’m oracloid
Псевдонимы колонок (alias)
В запросе для колонок можно применять псевдонимы. Псевдоним не должен содержать пробелов либо должен быть заключен в двойные кавычки.
| Запрос | Результат |
| SELECT (CREATION_DATE+5) Creation Date FROM emp |
Ошибка |
| SELECT (CREATION_DATE+5) Creation_Date FROM emp |
Creation_Date ———- 12.05.2008 |
| SELECT (CREATION_DATE+5) «Creation Date» FROM emp |
Creation Date ———- 12.05.2008 |
Для того чтобы можно было производить простейшие операции с помощью запросов SQL в Oracle существует вспомогательная таблица DUAL. Она содержит единственную колонку DUMMY и единственную строку со значением «X». В результате становятся возможными запросы типа приведенных выше. Например если нам нужно сложить два числа и вывести результат при помощи команды SQL это можно сделать с помощью такого запроса:
SELECT (14+5) Result FROM DUAL;
Result
——
19
Необходимо запомнить, что значение NULL в SQL не является нулем, пробелом или еще каким-то значением. NULL это отсутствие значения. Поэтому действия с NULL имеют некоторую специфику.
Например, арифметические операции с NULL результатом будет иметь так же NULL если хотя бы одно слагаемое будет равно NULL. Например:
SELECT (2+3+null)+3 «Result» FROM DUAL;
Result
———
т.е. «пусто», «ничего».
Однако, конкатенация строк с NULL не выдаст пустого значения, NULL просто заменится пустотой:
SELECT ‘Str1’||null||’Str2’ «Result» FROM DUAL;
Result
———-
Str1Str2
Оператор SELECT по сути краеугольный камень SQL. В данной главе мы рассмотрели базовые свойства оператора. Из трех основных принципов (проецирование, выборка и соединение) мы затронули только один — проецирование. Выборку конечно тоже рассмотрели, но только в самом общем смысле, при выборке мы выбирали все значения из таблицы, мы не накладывали ограничений (не использовали предикаты WHERE).
В общем рассмотрели самое основное и примитивное. Дальше будет сложнее. И интереснее.
