Select sql from: Примеры использования инструкции SELECT (Transact-SQL) — SQL Server

1. Изучите SQL SELECT/FROM/WHERE

Если вы уже закончили загрузку QueryPie и подключение к базе данных, пришло время управлять данными и находить их. Давайте рассмотрим, что мы можем сделать с запросом SELECT, FROM и WHERE.

📌Содержание

Запрос 1. Использование SELECT для ВСЕХ столбцов

 SELECT * FROM film; 

Запрос 2. Использование SELECT для столбца SPECIFIC

 SELECT film_id, title, rating, special_features FROM film; 

Запрос 3. Использование WHERE

 SELECT film_id, title, rating, special_features FROM film WHERE rating='R'; 

# SELECT, FROM, WHERE

Самые основные «Вопросы», которые мы можем задать в SQL, это SELECT , FROM и WHERE . Они имеют интуитивно понятное значение, поэтому довольно легко догадаться о функции, прочитав их. Давайте быстро пробежимся по ним.

📌 SELECT : вы говорите базе данных, что вам показать
📌 ИЗ : вы указываете базу данных место для поиска
📌 ГДЕ : вы сужаете/указываете местоположение

🔑 Начиная с этого момента, мы будем называть наши «Вопросы»

запросами .

Итак, давайте рассмотрим наш первый запрос.

Q1. Какие данные содержатся в таблице «фильм»? Покажите мне!

SELECT(нужные столбцы) FROM(в конкретной таблице)

Это самый простой запрос. Мы можем начать диалог с любой базой данных
, просто используя это предложение.

В этом примере мы будем использовать данные из таблицы Film в Sample Database sakila .

Применив эту идею к запросу 1, мы можем прочитать его как «ВЫБЕРИТЕ «столбцы» ИЗ таблицы «фильм». Нам не нужно слово «таблица» после названия таблицы. SQL уже знает, что слово, следующее за запросом FROM , будет именем таблицы. Так и пиши ИЗ плёнки .

Если вы хотите увидеть сразу все доступные данные каждого столбца в указанной таблице, используйте символ звездочки ( *). Символ * здесь означает все данные всех столбцов. Допустим, мы хотим, чтобы отображал все столбцы, содержащие информацию внутри таблицы фильмов . В SQL это примерно переводится как « SELECT (показать) * (все столбцы, содержащие информацию) FROM (внутри) фильм (таблица). Удалите все скобки, и вы получите простой SQL-запрос:

 SELECT * FROM film; 

Обязательно используйте точку с запятой ( ; ) в конце предложения, чтобы сообщить SQL, что это конец вашего запроса и вы готовы увидеть результаты.

✦ Нажмите SQL Запустите в левом верхнем углу, чтобы попробовать ваш запрос
Вы должны увидеть что-то похожее на изображение, показанное ниже.

В результате тонна колонок загружена информацией о фильмах!

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

Q2. Здесь слишком много столбцов!! Давайте посмотрим только на идентификатор, название, рейтинг и специальные функции в таблице фильмов.

SELECT(конкретный желаемый «столбец») FROM(в конкретной «таблице»)

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

 ВЫБЕРИТЕ фильм_идентификатор, название, рейтинг, специальные_функции ИЗ фильма; 

Q3. Хорошо, теперь давайте сузим его еще больше. Давайте посмотрим только на идентификатор фильма, название, рейтинг и особенности фильмов с рейтингом R.

SELECT(показать этот столбец) FROM(конкретная таблица) WHERE(соответствует условию)

Если условие числовое: WHERE film_id=5
Если рейтинг символьное: WHERE= ‘PG’ —  ( Добавить одинарные кавычки!! )

Теперь, когда мы знаем, как находить конкретные данные, давайте еще немного сузим круг поиска. Допустим, нам нужна информация только о фильмах с определенным рейтингом (R, PG-13, PG и т. д.). Для этого нам нужно начать использовать SQL-запрос WHERE .

Просто добавьте ГДЕ в конец запроса после желаемого рейтинга. В этом примере мы будем искать фильмы с рейтингом R. Почему бы и нет?

Плагин ГДЕ рейтинг='R' в конце заявления. Обратите внимание, что мы добавили одинарные кавычки вокруг буквы R ( ‘’ ). Это связано с тем, что SQL нуждается в этой дополнительной скобке, когда условие не является числом. Есть способы обойти это, но для начинающих хорошо иметь прочную основу. Итак, давайте использовать эти одинарные кавычки! Ваш окончательный запрос должен выглядеть примерно так:

 SELECT film_id, title, rating, special_features FROM film WHERE rating='R'; 

✦ Не забудьте нажать SQL Run в левом верхнем углу, чтобы выполнить запрос

# Время практики

Попробуйте использовать SELECT , FROM и WHERE в этом примерном сценарии:

📰 Покупатель в вашем киномагазине подходит к вам и просит список всех фильмов, срок проката которых составляет 3 дня. Она также интересуется ценой (арендной ставкой). Как можно посмотреть эту информацию? Не забудьте также найти идентификационный номер, чтобы вы могли легко найти фильмы на полках.

Вот ответ:

 ВЫБЕРИТЕ фильм_идентификатор, название, ставка_проката, продолжительность_проката ИЗ фильма, ГДЕ прокат_длительность=3; 

SQL SELECT без FROM должен читать VALUES без INSERT


Давайте разберемся с самого начала: select без из не соответствует стандарту SQL. Полная остановка.

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

Итак, какую альтернативу стандарт предлагает выбрать без из ? Удивительно простой и в то же время мощный: значений без вставки .

Следующий оператор select , таким образом, может быть реализован как значения, соответствующие стандарту, без вставки:

Вместо несоответствующего выберите без из :Значения 0068 без вставить :

 ЗНАЧЕНИЯ (CURRENT_DATE) 

Жаль, что автономное использование значений все еще не является частью Core SQL. Следовательно, только три из шести протестированных баз данных поддерживают его. выберите без из , с другой стороны, работает на четырех из них.

К настоящему моменту вы можете задаться вопросом, почему автономные значения вообще могут быть полезны. Как я уже говорил выше, он мощнее, чем , выберите .без из , потому что он не ограничен созданием одной строки.

Следующие значений оператор возвращает сегодняшнюю и вчерашнюю даты (вариант использования) в двух строках — не двух столбцах:

 ЗНАЧЕНИЯ (CURRENT_DATE)
     , (CURRENT_DATE - INTERVAL '1' DAY) 

С выберите без из , вам нужно будет использовать union . Это может быстро стать громоздким.

Соответствующие альтернативы

SQL Server предлагает подтверждающий вариант: 9Значения 0068 разрешены в предложении from , если предложение from назначает имена столбцов:

 SELECT *
  ОТ (ЗНАЧЕНИЙ (1,2)
             , (3,4)
       ) t1 (c1, c2) 

Единственной альтернативой, соответствующей стандарту, является использование фиктивной таблицы в предложении from . Базы данных, которые не позволяют выбирать без из , обычно поставляются с таблицами для этой цели (например, DUAL в базе данных Oracle или SYSIBM.DUMMY1 в DB2). Кроме портативности нет ничего против их использования.

Самый простой способ создать соответствующее стандарту и портативное решение — поставить собственный стол-пустышку вместе с программным обеспечением.

Если вы не возражаете против использования разных операторов create для каждой целевой базы данных, вы также можете использовать представление 2 на основе собственной фиктивной таблицы поставщика. Это может или не может спасти вас от аргумента о производительности, если фиктивная таблица поставщиков оптимизирована для сверхпроизводительности.

Совместимость

По сути, эта тема является позорной демонстрацией того, насколько плохо принят стандарт. Тем не менее, это нас , чтобы потребовать эту функцию SQL-92 от поставщиков баз данных.

BigQueryabDb2 (LUW)bbbeMariaDBabbbfMySQLaccgOracle DBPostgreSQLabbbfSQL ServerabdSQLiteabbbfselect без fromMulti-row insert … valuesStandalone valuesFrom|Join (values…) tWith t as (values…)

  1. Собственное расширение (нестандартное!)
  2. Только без ключевого слова0068 row
  3. Требуется ключевое слово row : значений row('r1c1','r1c2'), row('r2c1', 'r2c2')
  4. Требуется из ключевое слово столбца строки 90 •80 Только без ключевого слова строки 90
  5. Erfordert Spaltennamen in der With -Klausel: with x (c1,c2) ​​as (values ​​…) • Nur ohne Schlüsselwort row
  6. Nur ohne Schlüsselwort row
  7. Nur mit Schlüsselwort row : значений строка('r1c1','r1c2'), строка('r2c1', 'r2c2')

Об авторе

Маркус Винанд — представитель SQL Renaissance. Его миссия — познакомить разработчиков с эволюцией SQL в 21 веке.