Sql

Sql запросы что это – Обзор основных SQL запросов

Содержание

Простые SQL запросы - короткая справка и примеры

Простые SQL запросы

Запросы написаны без экранирующих кавычек, так как у MySQL, MS SQL и PostGree они разные.

SQL запрос: получение указанных (нужных) полей из таблицы

SELECT
 id,
 country_title,
 count_people
FROM table_name

Получаем список записей: ВСЕ страны и их население. Название нужных полей указываются через запятую.

SELECT *
FROM table_name

* обозначает все поля. То есть, будут показы АБСОЛЮТНО ВСЕ поля данных.


SQL запрос: вывод записей из таблицы исключая дубликаты

SELECT DISTINCT
 country_title
FROM table_name

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


SQL запрос: вывод записей из таблицы по заданному условию

SELECT
 id,
 country_title,
 city_title
FROM table_name
WHERE count_people>100000000

Получаем список записей: страны, где количество людей больше 100 000 000.

SQL запрос: вывод записей из таблицы с упорядочиванием

SELECT
 id,
 city_title
FROM table_name
ORDER BY city_title

Получаем список записей: города в алфавитном порядке. В начале А, в конце Я.

SELECT
 id,
 city_title
FROM table_name
ORDER BY city_title DESC

Получаем список записей: города в обратном (DESC) порядке. В начале Я, в конце А.


SQL запрос: подсчет количества записей

SELECT
 COUNT(*)
FROM table_name

Получаем число (количество) записей в таблице. В данном случае НЕТ списка записей.


SQL запрос: вывод нужного диапазона записей

SELECT *
FROM table_name
LIMIT 2, 3

Получаем 2 (вторую) и 3 (третью) запись из таблицы. Запрос полезен при создании навигации на WEB страницах.

SQL запросы с условиями

Вывод записей из таблицы по заданному условию с использованием логических операторов.

SQL запрос: конструкция AND (И)

SELECT
 id,
 city_title
FROM table_name
WHERE country="Россия" AND oil=1

Получаем список записей: города из России И имеют доступ к нефти. Когда используется оператор AND, то должны совпадать оба условия.


SQL запрос: конструкция OR (ИЛИ)

SELECT
 id,
 city_title
FROM table_name
WHERE country="Россия" OR country="США"

Получаем список записей: все города из России ИЛИ США. Когда используется оператор OR, то должно совпадать ХОТЯ БЫ одно условие.


SQL запрос: конструкция AND NOT (И НЕ)

SELECT
 id,
 user_login
FROM table_name
WHERE country="Россия" AND NOT count_comments<7

Получаем список записей: все пользователи из России И сделавших НЕ МЕНЬШЕ 7 комментариев.


SQL запрос: конструкция IN (В)

SELECT
 id,
 user_login
FROM table_name
WHERE country IN ("Россия", "Болгария", "Китай")

Получаем список записей: все пользователи, которые проживают в (IN) (России, или Болгарии, или Китая)


SQL запрос: конструкция NOT IN (НЕ В)

SELECT
 id,
 user_login
FROM table_name
WHERE country NOT IN ("Россия","Китай")

Получаем список записей: все пользователи, которые проживают не в (NOT IN) (России или Китае).


SQL запрос: конструкция IS NULL (пустые или НЕ пустые значения)

SELECT
 id,
 user_login
FROM table_name
WHERE status IS NULL

Получаем список записей: все пользователи, где status не определен. NULL это отдельная тема и поэтому она проверяется отдельно.

SELECT
 id,
 user_login
FROM table_name
WHERE state IS NOT NULL

Получаем список записей: все пользователи, где status определен (НЕ НОЛЬ).


SQL запрос: конструкция LIKE

SELECT
 id,
 user_login
FROM table_name
WHERE surname LIKE "Иван%"

Получаем список записей: пользователи, у которых фамилия начинается с комбинации «Иван». Знак % означает ЛЮБОЕ количество ЛЮБЫХ символов. Чтобы найти знак % требуется использовать экранирование «Иван\%».

SQL запрос: конструкция BETWEEN

SELECT
 id,
 user_login
FROM table_name
WHERE salary BETWEEN 25000 AND 50000

Получаем список записей: пользователи, которые получает зарплату от 25000 до 50000 включительно.

Логических операторов ОЧЕНЬ много, поэтому детально изучите документацию по SQL серверу.


Сложные SQL запросы

SQL запрос: объединение нескольких запросов

(SELECT id, user_login
 FROM table_name1
)
UNION
(SELECT id, user_login
 FROM table_name2
)

Получаем список записей: пользователи, которые зарегистрированы в системе, а также те пользователи, которые зарегистрированы на форуме отдельно. Оператором UNION можно объединить несколько запросов. UNION действует как SELECT DISTINCT, то есть отбрасывает повторяющиеся значения. Чтобы получить абсолютно все записи, нужно использовать оператор UNION ALL.


SQL запрос: подсчеты значений поля MAX, MIN, SUM, AVG, COUNT

Вывод одного, максимального значения счетчика в таблице:
SELECT
 MAX(counter)
FROM table_name
Вывод одного, минимальный значения счетчика в таблице:
SELECT
 MIN(counter)
FROM table_name
Вывод суммы всех значений счетчиков в таблице:
SELECT
 SUM(counter)
FROM table_name
Вывод среднего значения счетчика в таблице:
SELECT
 AVG(counter)
FROM table_name
Вывод количества счетчиков в таблице:
SELECT
 COUNT(counter)
FROM table_name
Вывод количества счетчиков в цехе №1, в таблице:
SELECT
 COUNT(counter)
FROM table_name
WHERE office="Цех №1"

Это самые популярные команды. Рекомендуется, где это возможно, использовать для подсчета именно SQL запросы такого рода, так как ни одна среда программирования не сравнится в скорости обработки данных, чем сам SQL сервер при обработке своих же данных.


SQL запрос: группировка записей

SELECT
 continent,
 SUM(country_area)
FROM country
GROUP BY continent

Получаем список записей: с названием континента и с суммой площадей всех их стран. То есть, если есть справочник стран, где у каждой страны записана ее площадь, то с помощью конструкции GROUP BY можно узнать размер каждого континента (на основе группировки по континентам).


SQL запрос: использование нескольких таблиц через алиас (alias)

SELECT
 o.order_no,
 o.amount_paid,
 c.company
FROM orders AS o, customer AS с
WHERE o.custno=c.custno AND c.city="Тюмень"

Получаем список записей: заказы от покупателей, которые проживают только в Тюмени.

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

SELECT
 o.order_no,
 o.amount_paid,
 z.company
FROM orders AS o
LEFT JOIN customer AS z ON (z.custno=o.custno)

Рекомендуется использовать в запросах именно такой вид оформления SQL запросов.


Вложенные подзапросы

SELECT *
FROM table_name
WHERE salary=(SELECT MAX(salary) FROM employee)

Получаем одну запись: информацию о пользователе с максимальным окладом.

Внимание! Вложенные подзапросы являются одним из самых узких мест в SQL серверах. Совместно со своей гибкостью и мощностью, они также существенно увеличивают нагрузку на сервер. Что приводит к катастрофическому замедлению работы других пользователей. Очень часты случаи рекурсивных вызовов при вложенных запросах. Поэтому настоятельно рекомендую НЕ использовать вложенные запросы, а разбивать их на более мелкие. Либо использовать вышеописанную комбинацию LEFT JOIN. Помимо этого данного вида запросы являются повышенным очагом нарушения безопасности. Если решили использовать вложенные подзапросы, то проектировать их нужно очень внимательно и первоначальные запуски сделать на копиях баз (тестовые базы).

Пример оформления сложных SQL запросов.


SQL запросы изменяющие данные

SQL запрос: INSERT

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

Вариант №1. Часто используется инструкция:
INSERT INTO table_name
(id, user_login)
VALUES
(1, "ivanov"),
(2, "petrov")

В таблицу «table_name» будет вставлено 2 (два) пользователя сразу.

Вариант №2. Удобнее использовать стиль:
INSERT table_name SET
 id=1,
 user_login="ivanov";

INSERT table_name SET
 id=2,
 user_login="petrov";

В этом есть свои преимущества и недостатки.

Основные недостатки:
  • Множество мелких SQL запросов выполняются чуть медленнее, чем один большой SQL запрос, но при этом другие запросы будут стоять в очереди на обслуживание. То есть, если большой SQL запрос будет выполняться 30 минут, то в все это время остальные запросы будут курить бамбук и ждать своей очереди.
  • Запрос получается массивнее, чем предыдущий вариант.
Основные преимущества:
  • Во время мелких SQL запросов, другие SQL запросы не блокируются.
  • Удобство в чтении.
  • Гибкость. В этом варианте, можно не соблюдать структуру, а добавлять только необходимые данные.
  • При формировании подобным образом архивов, можно легко скопировать одну строчку и запустить ее через командную строку (консоль), тем самым не восстанавливая АРХИВ целиком.
  • Стиль записи схож с инструкцией UPDATE, что легче запоминается.

SQL запрос: UPDATE

UPDATE table_name SET
user_login="ivanov",
user_surname="Иванов"
WHERE id=1

В таблице «table_name» в записи с номером id=1, будет изменены значения полей user_login и user_surname на указанные значения.

SQL запрос: DELETE

DELETE FROM table_name
WHERE id=3

В таблице table_name будет удалена запись с id номером 3.

SQL рекомендации

  1. Все названия полей рекомендуются писать маленькими буквами и если надо, разделять их через принудительный пробел «_» для совместимости с разными языками программирования, таких как Delphi, PHP, Perl, Python и Ruby.
  2. SQL команды писать БОЛЬШИМИ буквами для удобочитаемости. Помните всегда, что после вас могут читать код и другие люди, а скорее всего вы сами через N количество времени.
  3. Называть поля с начала существительное, а потом действие. Например: city_status, user_login, user_name.
  4. Стараться избегать слов резервных в разных языках которые могут вызывать проблемы в языках SQL, PHP или Perl, типа (name, count, link). Например: link можно использовать в MS SQL, но в MySQL зарезервировано.

Данный материал является короткой справкой для повседневной работы и не претендует на супер мега авторитетный источник, коим является первоисточник SQL запросов той или иной базы данных.

sd-company.su

SQL-запросы. Примеры для начинающих

– Автор: Игорь (Администратор)

В рамках данной статьи, я расскажу вам самые азы баз данных и приведу примеры sql-запросов для начинающих.

Когда человек впервые начинает читать обзоры про базы данных, то его голова просто разрывается от огромной массы технических терминов. Все эти первичные и вторичные ключи, таблицы, связи, процедуры, представления, индексы, условия, подзапросы, колонки, типы данных и прочее. И все это "как бы" необходимо учитывать. Как говорится, "А-а-а-а-а".

Однако, в этом и состоит одна из самых больших ошибок - читать термины, а не понимать их суть. Поэтому, многие из таких любознательных и нетерпеливых либо бросают это дело, либо вскользь осваивают материал и потом пишут невесть что. Изучать базу данных нужно с самого простого - с основы. И уже только затем остальные возможности.

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

Примечание: Материал предназначен для начинающих, но часть вещей может быть полезна и остальным.

 

Основа любой базы данных - таблицы и 4 типа запросов

Основой любой базы данных являются всего две вещи - это таблицы и 4 типа запросов. Именно с них и началось. Все эти сложности, которые описываются тысячами веб-сайтов в Интернете, появились уже после них и применяются к этим азам.

Первым делом, рассмотрим что такое таблица. Хоть раз, но каждый открывал эксельный файл или электронную таблицу OpenOffice (см. обзор офисных пакетов). Так вот это, по сути, и есть база данных. У вас есть колонки и строки, в пе

ida-freewares.ru

Понятие и назначение SQL запроса: что такое SQL запрос

Вступление

Для работы с различными реляционными базами данных, включая Oracle, MySQL, PostgreSQL, DBase, FoxPro, Clipper, Paradox был создан единый язык запросов к базам данных. Назвали его язык SQL, что означает Structured Query Language — структурированный язык запросов.

В данной статье используем СУБД MySql. Именно для пользователя, СУБД MySql  имеет наибольшее практическое применение, как в управлении различными расширениями, так и в их создании. Как-никак, все локальные сервера, CMS, платформы интернет магазинов работают именно с СУБД MySql.

Понятие и назначение SQL запроса для администрирования БД

Реляционная база данных это таблица с информацией, разнесенной по столбцам (поля или атрибуты) и строкам (записи или кортежи) таблицы. Чтобы изменить или удалить данные в столбцах и строках, а также данные в определенных ячейках (пресечение столбца и строки) можно воспользоваться прикладными инструментами (например, phpmyadmin) или сделать SQL запрос к базе данных, по которому выполнится нужное действие.

Что можно делать с помощью SQL запросов

При помощи запросов SQL можно:

  • Создавать таблицы БД;
  • Изменять таблицы БД;
  • Удалять таблицы БД;
  • Вставлять записи (строки) в таблицы БД;
  • Редактировать записи в таблицах БД;
  • Извлекать выборочную информацию из таблиц БД;
  • Удалять выборочную информацию из БД.

Это не полный перечень возможностей SQL запросов, но и он дает представление, что с помощью SQL запросов можно сделать с базой данных всё что необходимо.

Операторы SQL запроса

Язык SQL имеет большой список различных операторов, каждый из которых «задает» определенную команду. Справочник по операторам тут: (http://www.mysql.ru/docs/man/Database_Administration.html/CREATE_TABLE.html). В следующих статьях будем рассматривать, как работают основные операторы SQL и как с их помощью управлять базами данных.

В завершении перечислю, операторы sql запросов, которые будем рассматривать в ближайших статьях раздела:

  • CREATE TABLE – оператор sql для создания таблицы базы данных;
  • ALTER TABLE – оператор sql для изменения таблицы БД;
  • INSERT INTRO – вставка информации (строк) в таблицы БД;
  • UPDATE – оператор для редактирования информации в таблицах БД;
  • SELECT – извлечение информации из таблиц БД;
  • DELET – удаление информации из таблиц БД.

©WebOnTo.ru

Другие статьи раздела: СУБД

Похожие статьи:

(Просмотров всего: 1 047)

Поделиться ссылкой:

webonto.ru

SQL SELECT « Язык запросов SQL

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

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

С помощью запроса SQL SELECT можно выполнять выборку данных из таблицы. Следующие примеры запросов SQL SELECT используются в таких SQL СУБД как MySQL, Oracle, Access и других.

SQL Select

 

Для выполнения следующих SQL запросов SELECT нам необходимо прежде всего изучить структуру таблиц.

Имя таблицыИмя поляТип поляПримечание
FAKULTETKOD_FIntegerPRIMARY KEY
NAZV_FChar, 30
SPECKOD_SIntegerPRIMARY KEY
KOD_FInteger
NAZV_SChar, 50
STUDENTKOD_STUDIntegerPRIMARY KEY
KOD_SInteger
FAMChar, 30
IMChar, 15
OTChar, 15
STIPDecimal, 3
BALLDecimal, 3

Примеры запросов SELECT на языке SQL:

SQL Пример SELECT №1
Выбрать студентов, получающих стипендию, равную 150.

SELECT fname FROM STUDENT WHERE STIP=150;

С помощью данного SQL запроса SELECT выбираются все значения из таблицы STUDENT, поле STIP которых строго равно 150.


SQL Пример SELECT №2
Выбрать студентов, имеющих балл от 82 до 90. Студенты должны быть отсортированы в порядке убывания балла.

SELECT FAM FROM STUDENT WHERE BALL BETWEEN 81 AND 91 ORDER BY BALL DESC;

Как видно из SQL примера, чтобы выбрать студентов, которые имеют балл от 82 до 90, мы используем условие BETWEEN. Чтобы отсортировать в убывающем порядке DESC.


SQL Пример SELECT №3
Выбрать студентов, фамилии которых начинаются с буквы «А».

SELECT FAM FROM STUDENT WHERE FAM LIKE ‘А%’;

Для того, чтобы выбрать фамилии, начинающиеся с буквы «А», мы используем оператор SQL LIKE для поиска значений по образцу.


SQL SELECT Пример №4
Подсчитать средний балл на каждом факультете.

SELECT NAZV_F As Название, ROUND(AVG(BALL), 2) As СредБалл FROM FAKULTET, SPEC, STUDENT WHERE STUDENT.KOD_S=SPEC.KOD_S AND SPEC.KOD_F=FAKULTET.KOD_F GROUP BY NAZV_F;

sql-language.ru

Язык запросов SQL. SQL запросы. Запросы sql примеры

Что такое язык запросов SQL?

Язык запросов sql используется программистами наиболее широко. Причиной тому является повсеместное распространение динамических веб сайтов. Как правило, такие ресурсы имеют гибкую оболочку. Но основной костяк такого сайта составляют базы данных. Если вы начинающий программист, вы просто обязаны освоить структурированный язык запросов SQL.

Зачем нужно знать язык запросов SQL?

Освоив язык запросов sql, вы с легкостью сможете писать приложения для WordPress. Это один из самых популярных блоговых движков в мире. Вы сможете писать sql запросы любой сложности, ведь писать sql запросы — это основное при изучении sql. На сайте запросы sql примеры найти не сложно, sql примеры Вы найдете в разделе SQL SELECT (запросы sql примеры).

Недавно появившийся веб ресурс sql-language.ru содержит массу информации касающейся языка запроса sql. По сути дела данный веб-сайт составляет огромный sql справочник. На сайте грамотно и в доступной форме рассмотрены запросы в sql.

Ресурс имеет раздел язык запросов sql для начинающих. Здесь вы можете получить начальные сведения о языке. Приведены основные возможности, которые будут доступны программистам на sql. В общих чертах это хранение и получение данных, их обработка и система команд. В данном разделе приведены типы команд, которые включает язык запросов sql и рассмотрено их назначение. Раздел описывающий данные входящие в язык запросов sql описывает строковые, числовые и прочие типы данных. На каждый тип приведено подробное описание и определена допустимая величина строки. Структурированный язык запросов sql предполагает аккуратное использование типов данных. Также в данном разделе содержится подробная информация по типам совместимым с Access и Oracle. Раздел привилегий языка запроса sql, расписывает как распределить или частично ограничить доступ к данным. Особенно это востребовано для веб сайтов с динамичным содержимым. Примером таких сайтов являются форумы или корпоративные сайты. Возможность редактирования отдельных данных допускается не для всех. Вот здесь то и пригодятся привилегии, которые допускает язык запросов sql. Вы сможете создать систему паролей и отсечь часть пользователей от активных действий. Раздел индексы, языка запроса sql, объясняет, как добиться максимальной производительности системы. Использование индексации позволит серверу легко и быстро находить данные. Структурированный язык запросов sql фактически создавался для этой цели. Простота и удобство в поиске данных, послужило быстрому признанию и распространению языка запроса sql. В восьмидесятых годах язык был признан стандартом для работы с базами данных. С тех пор язык запросов sql используется на большинстве серверов.

Еще один наиболее масштабный раздел сайта это команды. Пожалуй этот сектор рассмотрен на сайте sql-language.ru наиболее подробно. Как обычно, для начинающих приведена общая описательная часть о типах команд языка запроса sql. Рассмотрены такие общие типы как команды определения данных, команды языка управления, управление транзакциями и манипулирование данными. В дальнейшем, каждая из команд рассмотрена в деталях. Детально описан синтаксис команды, назначение, и конечн

sql-language.ru

Вложенные запросы SQL - CodeTown.ru

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

Введение

Итак, само название говорит о том, что запрос во что-то вложен. Так вот, вложенный запрос в SQL означает, что запрос select выполняется в еще одном запросе select — на самом деле вложенность может быть и многоуровневой, то есть select в select в select и т.д.

Такие запросы обычно используются для получения данных из двух и более таблиц. Они нужны чтобы данные из разных таблиц можно было соотнести и по зависимости осуществить выборку. У вложенных запросов есть и недостаток — зачастую слишком долгое время работы занимает запрос, потому что идет большая нагрузка на сервер. Тем не менее, саму конструкцию необходимо знать и использовать при возможности.

Структура ранее созданных таблиц

Прежде чем перейдем к простому примеру, напомним структуру наших таблиц, с которыми будем работать:

— Таблица Salespeole (продавцы):

snumsnamecitycomm
1КоловановМосква10
2ПетровТверь25
3ПлотниковМосква22
4КучеровСанкт-Петербург28
5МалкинСанкт-Петербург18
6ШипачевЧелябинск30
7МозякинОдинцово25
8ПроворовМосква25

— Таблица Customers (покупатели):

сnumсnamecityratingsnum
1ДесновМосква906
2КрасновМосква957
3КирилловТверь963
4ЕрмолаевОбнинск983
5КолесниковСерпухов985
6ПушкинЧелябинск904
7ЛермонтовОдинцово851
8БелыйМосква893
9ЧудиновМосква962
10ЛосевОдинцово938

— Таблица Orders (заказы)

onumamtodatecnumsnum
10011282016-01-0194
100218002016-04-10107
10033482017-04-0821
10045002016-06-0733
10054992017-12-0454
10063202016-03-0354
1007802017-09-0271
10087802016-03-0713
10095602017-10-0737
10109002016-01-0868

Основы вложенных запросов в SQL

Вывести сумму заказов и дату, которые проводил продавец с фамилией Колованов.

Начнем с такого примера и для начала вспомним, как бы делали этот запрос ранее: посмотрели бы в таблицу Salespeople, определили бы snum продавца Колыванова — он равен 1. И выполнили бы запрос SQL с помощью условия WHERE. Вот пример такого SQL запроса:

SELECT amt, odate
FROM orders 
WHERE snum = 1

Очевидно, какой будет вывод:

amtodate
3482017-04-08
802017-09-02

Такой запрос, очевидно, не очень универсален, если нам захочется выбрать тоже самое для другого продавца, то всегда придется определять его snum. А теперь посмотрим на вложенный запрос:

SELECT amt, odate
FROM orders
where snum = (SELECT snum
              FROM salespeople
              WHERE sname = 'Колованов')

В этом примере мы определяем с помощью вложенного запроса идентификатор snum по фамилии из таблицы salespeople, а затем, в таблице orders определяем по этому идентификатору нужные нам значения. Таким образом работают вложенные запросы SQL.

Рассмотрим еще один пример:
Показать уникальные номера и фамилии продавцов, которые провели сделки в 2016 году.

SELECT snum, sname
FROM salespeople
where snum IN (SELECT snum
              FROM orders
              WHERE YEAR(odate) = 2016)

Этот SQL запрос отличается тем, что вместо знака = здесь используется оператор IN. Его следует использовать в том случае, если вложенный подзапрос SQL возвращает несколько значений. То есть в запросе происходит проверка, содержится ли идентификатор snum из таблицы salespeople в массиве значений, который вернул вложенный запрос. Если содержится, то SQL выдаст фамилию этого продавца.

Получился такой результат:

snumsname
3Плотников
4Кучеров
7Мозякин
8Проворов

Вложенные запросы SQL с несколькими параметрами

Те примеры, которые мы уже рассмотрели, сравнивали в условии WHERE одно поле. Это конечно хорошо, но стоит отметить, что в SQL предусмотрена возможность сравнения сразу нескольких полей, то есть можно использовать вложенный запрос с несколькими параметрами.

Вывести пары покупателей и продавцов, которые осуществили сделку между собой в 2017 году.

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

SELECT cname as 'Покупатель', sname as 'Продавец'
FROM customers cus, salespeople sal
where (cus.cnum, sal.snum) IN (SELECT cnum, snum
              FROM orders
              WHERE YEAR(odate) = 2017)

Вывод запроса:

ПокупательПродавец
КрасновКолованов
КолесниковКучеров
ЛермонтовКолованов
КирилловМозякин

В этом примере мы сравниваем сразу два поля одновременно по идентификаторам. То есть из таблицы orders берутся те строки, которые удовлетворяют условию по 2017 году, затем вместо идентификаторов подставляются значение имен покупателей и продавцов.

На самом деле, такой запрос SQL используется крайне редко, обычно используют оператор INNER JOIN, о котором будет сказано в следующей статье.

Дополнительно скажем о конструкциях, которые использовались в этом запросе. Оператор as нужен для того, чтобы при выводе SQL показывал не имена полей, а то, что мы зададим. И после оператора FROM за именами таблиц стоят сокращения, которые потом используются — это псевдонимы. Псевдонимы можно называть любыми именами, в этом запросе они используются для явного определения поля, так как мы несколько раз обращаемся к одному и тому же полю, только из разных таблиц.

Примеры на вложенные запросы SQL

1.Напишите запрос, который бы использовал подзапрос для получения всех Заказов для покупателя с фамилией Краснов. Предположим, что вы не знаете номера этого покупателя, указываемого в поле cnum.

SELECT *
FROM orders
where cnum = (SELECT cnum
              FROM customers
              WHERE cname = 'Краснов')

2. Напишите запрос, который вывел бы имена и рейтинг всех покупателей, которые имеют Заказы, сумма которых выше средней.

SELECT cname, rating
FROM customers
where cnum IN (SELECT cnum
              FROM orders
              WHERE amt > (SELECT AVG(amt)
                          from orders))

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

SELECT snum, SUM(AMT) 
FROM orders 
GROUP BY snum 
HAVING SUM(amt) > (SELECT MAX(amt) 
                        FROM orders)

4. Напишите запрос, который бы использовал подзапрос для получения всех Заказов для покупателей проживающих в Москве.

SELECT *
FROM orders
where cnum IN (SELECT cnum
              FROM customers
              WHERE city =  'Москва')

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

SELECT amt, odate
FROM orders
WHERE AMT = (SELECT MAX(AMT)
             FROM orders)

6. Определить покупателей, совершивших сделки с максимальной суммой приобретений.

SELECT cname
FROM customers
WHERE cnum IN (SELECT cnum
               FROM orders
               WHERE amt = (SELECT MAX(amt)
                            FROM orders))

Заключение

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

Поделиться ссылкой:

Похожее

codetown.ru

SQL And & Or « Язык запросов SQL

AND & OR

Операторы AND & OR используются для составления условий в запросах.

Описание операторов AND & OR в SQL
AND — оператор, который отображает только те записи, когда первое и второе условие является правдой / true.

OR — оператор, который отображает только те записи, когда хотя бы одно из двух условий является правдой / true.

Поскольку допускается наличие в базе данных неопределенных значений, то вычисление условия поиска производится не в булевой, а в трехзначной логике со значениями true, false и unknown (неизвестно). Для любого предиката известно, в каких ситуациях он может порождать значение unknown. Булевские операции AND, OR и NOT работают в трехзначной логике следующим образом:

ЗначениеОперацияЗначениеРезультат
trueANDunknownunknown
unknownANDtrueunknown
unknownANDunknownunknown
trueORunknowntrue
unknownORtruetrue
unknownORunknownunknown
NOTunknownunknown

Пример оператора AND

Пример 1. Выборка (SELECT) записи, где поле fname равно ‘Ivan’ AND(и) поле lname равно ‘Abrakov’.

SELECT * FROM table_name WHERE fname=’Ivan’ AND lname=’Abrakov’;

Пример оператора OR

Пример 2. Выборка (SELECT) записи, где поле fname равно ‘Ivan’ OR(или) поле fname равно ‘Alex’.

SELECT * FROM table_name WHERE fname=’Ivan’ OR fname=’Alex’;

Пример комбинирования AND & OR

Пример 3. Выборка (SELECT) записи, которые соответствуют условию: поле lname должно быть равно ‘Abrakov’ AND(и) поле fname должно принимать значение ‘Ivan’ OR(или) значение ‘Alex’.

SELECT * FROM table_n

sql-language.ru

Отправить ответ

avatar
  Подписаться  
Уведомление о