Простые 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 ("Россия","Китай")
Получаем список записей: все пользователи, которые проживают не в (
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 рекомендации
- Все названия полей рекомендуются писать маленькими буквами и если надо, разделять их через принудительный пробел «_» для совместимости с разными языками программирования, таких как Delphi, PHP, Perl, Python и Ruby.
- SQL команды писать БОЛЬШИМИ буквами для удобочитаемости. Помните всегда, что после вас могут читать код и другие люди, а скорее всего вы сами через N количество времени.
- Называть поля с начала существительное, а потом действие. Например: city_status, user_login, user_name.
- Стараться избегать слов резервных в разных языках которые могут вызывать проблемы в языках 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 нам необходимо прежде всего изучить структуру таблиц.
Имя таблицы | Имя поля | Тип поля | Примечание |
---|---|---|---|
FAKULTET | KOD_F | Integer | PRIMARY KEY |
NAZV_F | Char, 30 | ||
SPEC | KOD_S | Integer | PRIMARY KEY |
KOD_F | Integer | ||
NAZV_S | Char, 50 | ||
STUDENT | KOD_STUD | Integer | PRIMARY KEY |
KOD_S | Integer | ||
FAM | Char, 30 | ||
IM | Char, 15 | ||
OT | Char, 15 | ||
STIP | Decimal, 3 | ||
BALL | Decimal, 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 (продавцы):
snum | sname | city | comm |
---|---|---|---|
1 | Колованов | Москва | 10 |
2 | Петров | Тверь | 25 |
3 | Плотников | Москва | 22 |
4 | Кучеров | Санкт-Петербург | 28 |
5 | Малкин | Санкт-Петербург | 18 |
6 | Шипачев | Челябинск | 30 |
7 | Мозякин | Одинцово | 25 |
8 | Проворов | Москва | 25 |
— Таблица Customers (покупатели):
сnum | сname | city | rating | snum |
---|---|---|---|---|
1 | Деснов | Москва | 90 | 6 |
2 | Краснов | Москва | 95 | 7 |
3 | Кириллов | Тверь | 96 | 3 |
4 | Ермолаев | Обнинск | 98 | 3 |
5 | Колесников | Серпухов | 98 | 5 |
6 | Пушкин | Челябинск | 90 | 4 |
7 | Лермонтов | Одинцово | 85 | 1 |
8 | Белый | Москва | 89 | 3 |
9 | Чудинов | Москва | 96 | 2 |
10 | Лосев | Одинцово | 93 | 8 |
— Таблица Orders (заказы)
onum | amt | odate | cnum | snum |
---|---|---|---|---|
1001 | 128 | 2016-01-01 | 9 | 4 |
1002 | 1800 | 2016-04-10 | 10 | 7 |
1003 | 348 | 2017-04-08 | 2 | 1 |
1004 | 500 | 2016-06-07 | 3 | 3 |
1005 | 499 | 2017-12-04 | 5 | 4 |
1006 | 320 | 2016-03-03 | 5 | 4 |
1007 | 80 | 2017-09-02 | 7 | 1 |
1008 | 780 | 2016-03-07 | 1 | 3 |
1009 | 560 | 2017-10-07 | 3 | 7 |
1010 | 900 | 2016-01-08 | 6 | 8 |
Основы вложенных запросов в SQL
Вывести сумму заказов и дату, которые проводил продавец с фамилией Колованов.
Начнем с такого примера и для начала вспомним, как бы делали этот запрос ранее: посмотрели бы в таблицу Salespeople, определили бы snum продавца Колыванова — он равен 1. И выполнили бы запрос SQL с помощью условия WHERE. Вот пример такого SQL запроса:
SELECT amt, odate FROM orders WHERE snum = 1
Очевидно, какой будет вывод:
amt | odate |
---|---|
348 | 2017-04-08 |
80 | 2017-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 выдаст фамилию этого продавца.
Получился такой результат:
snum | sname |
---|---|
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 работают в трехзначной логике следующим образом:
Значение | Операция | Значение | Результат |
---|---|---|---|
true | AND | unknown | unknown |
unknown | AND | true | unknown |
unknown | AND | unknown | unknown |
true | OR | unknown | true |
unknown | OR | true | true |
unknown | OR | unknown | unknown |
NOT | unknown | unknown |
Пример оператора 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