Sql exist пример: EXISTS SQL и проверка существования набора значений

Содержание

EXISTS SQL и проверка существования набора значений

Предикат языка SQL EXISTS выполняет логическую задачу. В запросах SQL этот предикат используется в выражениях вида

EXISTS (SELECT * FROM ИМЯ_ТАБЛИЦЫ…).

Это выражение возвращает истину, когда по запросу найдена одна или более строк, соответствующих условию, и ложь, когда не найдено ни одной строки.

Обычно предикат EXISTS применяется в случаях, когда необходимо найти значения, соответствующие основному условию, заданному в секции WHERE, и дополнительному условию, заключённому в подзапрос, являющийся аргументом предиката.

Для NOT EXISTS всё наоборот. Выражение

NOT EXISTS (SELECT * FROM ИМЯ_ТАБЛИЦЫ…)

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

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке

.

В примерах работаем с базой данных библиотеки и ее таблицами «Книга в пользовании» (BOOKINUSE) и «Пользователь» (USER). Пока нам потребуется лишь таблица «Книга в пользовании» (BOOKINUSE).

Скрипт для создания базы данных библиотеки, её таблиц и заполения таблиц данными — в файле по этой ссылке.

AuthorTitlePubyearInv_NoCustomer_ID
ТолстойВойна и мир20052865
ЧеховВишневый сад20001731
ЧеховИзбранные рассказы201119120
ЧеховВишневый сад1991565
Ильф и ПетровДвенадцать стульев1985331
МаяковскийПоэмы19832120
ПастернакДоктор Живаго200669120
ТолстойВоскресенье20067747
ТолстойАнна Каренина19897205
ПушкинКапитанская дочка20042547
ГогольПьесы20078147
ЧеховИзбранные рассказы19874205
ПушкинСочинения, т.11984647
ПастернакИзбранное200013718
ПушкинСочинения, т.219848205
NULLНаука и жизнь 9 2018201912718
ЧеховРанние рассказы200117131

Пример 1. Определить ID пользователей, которым выданы книги Толстого, которым также выданы книги Чехова. Во внешнем запросе отбираются данные о пользователях, которым выданы книги Толстого, а предикат EXISTS задаёт дополнительное условие, которое проверяется в во внутреннем запросе — пользователи, которым выданы книги Чехова. Дополнительным условием во внутреннем запросе является совпадение идентификаторов пользователей из внешнего и внутреннего запросов: Customer_ID=tols_user.Customer_id. Запрос будет следующим:

SELECT Customer_ID FROM Bookinuse AS tols_user WHERE Author=’Толстой’ AND EXISTS (SELECT Customer_ID FROM Bookinuse WHERE Author=’Чехов’ AND Customer_ID=tols_user.Customer_id)

Этот запрос вернёт следующий результат:

Далее — пример использования NOT EXISTS в запросе, решающем похожую задачу.

Пример 2. Определить ID пользователей, которым выданы книги Чехова, и которым при этом не выданы книги Ильфа и Петрова. Конструкция запроса аналогична конструкции из предыдущего примера с той разницей, что дополнительное условие задаётся предикатом NOT EXISTS. Запрос будет следующим:

SELECT Customer_ID FROM Bookinuse AS cheh_user WHERE Author=’Чехов’ AND NOT EXISTS (SELECT Customer_ID FROM Bookinuse WHERE Author=’Ильф и Петров’ AND Customer_ID=cheh_user.Customer_id)

Этот запрос вернёт следующий результат:

Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение

При первом взгляде на запросы с предикатом EXISTS может возникнуть впечатление, что он идентичен предикату IN. Это не так. Хотя они очень похожи. Предикат IN ведет поиск значений из диапазона, заданного в его аргументе, и если такие значения есть, то выбираются все строки, соответствующие этому диапазону. Результат же действия предиката EXISTS представляет собой ответ «да» или «нет» на вопрос о том, есть ли вообще какие-либо значения, соответствующие указанным в аргументе. Кроме того, перед предикатом IN указывается имя столбца, по которому следует искать строки, соответствующие значениям в диапазоне. Разберём пример, показывающий отличие предиката EXISTS от предиката IN, и задачу, решаемую с помощью предиката IN.

Пример 4. Определить ID пользователей, которым выданы книги авторов, книги которых выданы пользователю с ID 31. Запрос будет следующим:

SELECT Customer_ID FROM Bookinuse WHERE Author IN (SELECT Author FROM Bookinuse WHERE Customer_ID=31)

Результатом выполнения запроса будет следующая таблица:

Внутренний запрос (после IN) выбирает авторов: Чехов; Ильф и Петров. Внешний запрос выбирает всех пользователей, которым выданы книги этих авторов. Видим, что, в отличие от предиката EXISTS, предикат IN предваряется именем столбца, в данном случае — Author.

Если дополнительно к предикату EXISTS в запросе применить хотя бы одно дополнительное условие, например, заданное с помощью

агрегатных функций, то такие запросы могут служить уже для простого анализа данных. Продемонстрируем это на следующем примере.

Пример 5. Определить ID пользователей, которым выдана хотя бы одна книга Пастернака, и которым при этом выдано более 2 книг. Пишем следующий запрос, в котором первое условие задаётся предикатом EXISTS со вложенным запросом, а второе условие с оператором HAVING всегда должно следовать после вложенного запроса:

SELECT Customer_ID FROM Bookinuse AS pas_user WHERE EXISTS (SELECT Customer_ID FROM Bookinuse WHERE Author=’Пастернак’ AND Customer_ID=pas_user.Customer_ID) GROUP BY Customer_ID HAVING COUNT(Title) > 2

Результат выполнения запроса:

Как видно из таблицы BOOKINUSE, книга Пастернака выдана также пользователю с ID 18, но ему выдана всего одна книга и он не попадает в выборку. Если применить к подобному запросу ещё раз функцию COUNT, но уже для подсчёта выбранных строк (потренируйтесь в этом самостоятельно), то можно получить сведения о том, сколько пользователей, читающих книги Пастернака, при этом читают также книги других авторов. Это уже из сферы анализа данных.

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

В следующем примере из той же базы данных помимо таблицы BOOKINUSE потребуется также таблица «Пользователь» (CUSTOMER).

Customer_IDSurname
18Зотов
31Перов
47Васин
65Тихонов
120Краснов
205Климов

Пример 6. Определить авторов, книги которых выданы пользователю по фамилии Краснов. Пишем следующий запрос, в котором предикатом EXISTS задано единственное условие:

SELECT DISTINCT Author FROM Bookinuse bk WHERE EXISTS (SELECT * FROM Customer cs WHERE cs.Customer_ID=bk.Customer_ID AND Surname=’Краснов’)

Результатом выполнения запроса будет следующая таблица:

Author
Чехов
Маяковский
Пастернак

Как и в случае использования оператора JOIN, в случаях более одной таблицы следует использовать псевдонимы таблиц для проверки соответствия значений ключей, соединяющих таблицы. В нашем примере псевдонимы таблиц — bk и us, а ключ, соединяющий таблицы — User_ID.

Примеры запросов к базе данных «Библиотека» есть также в уроках по операторам GROUP BY, IN и функциям CONCAT, COALESCE.

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

Работаем с базой данных «Недвижимость». Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными — в файле по этой ссылке.

Таблица Deal содержит данные о сделках. Для наших заданий в этой таблице будет важен столбец Type с данными о типе сделки — продажа или аренда. Таблица Object содержит данные об объектах. В этой таблице нам понадобятся значения столбцов Rooms (число комнат) и LogBalc, содержащего данные о наличии лоджии или балкона в булевом формате: 1 (да) или 0 (нет). Таблицы Client, Manager и Owner содержат данные соответственно о клиентах, менеджерах фирмы и собственниках объектов недвижимости. В этих таблицах FName и LName соответственно имя и фамилия.

Пример 7.

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

SELECT cl.* FROM Client cl WHERE EXISTS (SELECT 1 FROM Deal de JOIN Object ob ON ob.Obj_ID=de.Object_ID WHERE de.Client_ID=cl.Client_ID AND ob.LogBalc=0)

Так как из таблицы Client столбцы выбираются при помощи оператора «звёздочка», то будут выведены все столбцы этой таблицы, в которой будет столько строк, сколько насчитывается клиентов, соответствующих условию, заданному предикатом EXISTS. Из таблиц, к соединению которых обращается вложенный запрос, нам не требуется выводить ни одного столбца. Поэтому для экономии машинного времени извлекается лишь один столбец. Для этого после слова SELECT прописана единица. Этот же приём применён и в запросах в следующих примерах.

Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение

Пример 3. Определить менеджеров, которые провели сделки с объектами с числом комнат больше 2.

Правильное решение.

Продолжаем писать вместе запросы SQL с предикатом EXISTS

Пример 9. Определить собственников объектов, которые были взяты в аренду. Пишем следующий запрос, в котором предикатом EXISTS также задано обращение к результату соединения двух таблиц:

SELECT ow.* FROM Owner ow WHERE EXISTS (SELECT 1 FROM Object ob JOIN Deal de ON de.Object_ID=ob.Obj_ID WHERE ow.Owner_ID=ob.Owner_ID AND de.Type=’rent’)

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

Пример 10. Определить число собственников, с объектами которых провёл менеджер Савельев. Пишем запрос, в котором внешний запрос обращается к соединению трёх таблиц, а предикатом EXISTS задано обращение лишь к одной таблице:

SELECT COUNT(*) FROM Object ob JOIN Deal de ON de.Object_ID=ob.Obj_ID JOIN Owner ow ON ob.Owner_ID=ow.Owner_ID WHERE EXISTS (SELECT 1 FROM Manager ma WHERE de.Manager_ID=ma.Manager_ID AND ma.LName=’Савельев’)

Все запросы проверены на существующей базе данных. Успешного использования!

Примеры запросов к базе данных «Недвижимость» есть также в уроках по операторам GROUP BY и IN.

Поделиться с друзьями

Реляционные базы данных и язык SQL

Логический оператор EXISTS в T-SQL. Описание и примеры | Info-Comp.ru

Привет, сегодня мы рассмотрим несколько примеров использования логического оператора EXISTS в языке T-SQL, Вы узнаете, что это за оператор, как он работает и где его можно использовать.

Оператор EXISTS в языке T-SQL

EXISTS – это логический оператор языка T-SQL, который принимает и обрабатывает вложенный SQL запрос (SELECT) с целью проверки существования строк. В качестве результата возвращает значения (Boolean):

  • TRUE – если вложенный запрос возвращает хотя бы одну строку;
  • FALSE – если вложенный запрос не возвращает строк.

Оператор EXISTS Вы можете использовать как в секции WHERE запроса SELECT, так и в условных конструкциях языка T-SQL, например, в IF.

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

Примечание! Инструкция SELECT во вложенном запросе не может содержать ключевое слово INTO.

Оператор EXISTS в языке T-SQL также поддерживает ключевое слово NOT (NOT EXISTS), в данном случае будет противоположная работа, т.е. будет TRUE, если вложенный запрос не возвращает никаких строк, и FALSE, если возвращает.

Заметка! Новичкам рекомендую посмотреть мой видеокурс по T-SQL для начинающих, в нем подробно рассмотрены все базовые конструкции языка T-SQL.

Пример использования EXISTS в секции WHERE

В первом примере давайте посмотрим, как можно использовать логический оператор EXISTS в запросе SELECT в секции WHERE.

В следующем SQL запросе мы запрашиваем данные из таблицы TestTable, но при условии, что в таблице TestTable2 есть записи.

  
   SELECT * FROM TestTable
   WHERE EXISTS (SELECT * FROM TestTable2)


Мы видим, что данные нам вывелись, следовательно, в таблице TestTable2 записи есть.

Пример использования EXISTS в условной конструкции IF

Оператор EXISTS можно использовать и в условной конструкции IF, например, следующим образом.

  
   IF EXISTS (SELECT * FROM TestTable)
        SELECT 'Вложенный запрос возвращает строки.' AS [Результат]


В этом примере мы сначала проверяем, есть ли записи в таблице TestTable, и если есть, то выполняем необходимое действие, я для примера просто посылаю запрос SELECT.

Пример использования NOT EXISTS

В данном случае давайте представим, что нам нужно сделать что-то, только в том случае, если в таблице TestTable отсутствуют определённые записи. Если Вы обратили внимание, в таблице TestTable нет записей с ProductId больше 3, поэтому давайте для примера будем использовать именно это условие, т.е. если таких записей не существует, выполним нужное нам действие.

  
   IF NOT EXISTS (SELECT * FROM TestTable 
                           WHERE ProductId > 3)
        SELECT 'Вложенный запрос не возвращает строк.' AS [Результат]


У меня все, удачи!

Нравится2Не нравится

Инструкция DROP IF EXISTS в языке T-SQL | Info-Comp.ru

В этой заметке я расскажу Вам про инструкцию DROP языка T-SQL, а именно о новом параметре этой инструкции — IF EXISTS, который появился только в 2016 версии Microsoft SQL Server.

Инструкция DROP в T-SQL

DROP – это инструкция языка T-SQL, с помощью которой удаляются объекты в Microsoft SQL Server. Если Вас интересует язык T-SQL, то рекомендую почитать мою книгу «Путь программиста T-SQL», я ее разработал специально для начинающих, в ней я подробно рассказываю про все основные конструкции и операторы языка T-SQL.

DROP IF EXISTS

У инструкции DROP в Microsoft SQL Server 2016 появился дополнительный параметр IF EXISTS, который позволяет предварительно проверить существование объекта, перед его непосредственным удалением.

DROP с этим параметром значительно упрощает написание кода, так как в случае если Вам необходимо пересоздать таблицу, или просто удалить таблицу, предварительно не нужно писать различные дополнительные условные конструкции IF, чтобы проверить, существует ли эта таблица или нет. Инструкция DROP IF EXISTS сделает эту проверку сама.

Кстати, в других популярных СУБД, например, даже в бесплатной PostgresSQL, уже давно существует такая возможность, но компания Microsoft в свою СУБД добавила ее совсем недавно.

Инструкцию DROP IF EXISTS поддерживают следующие виды объектов Microsoft SQL Server (т.е. при их удалении можно использовать параметр IF EXISTS):

  • TABLE – таблица;
  • VIEW – представление;
  • PROCEDURE – хранимая процедура;
  • FUNCTION – функция;
  • SEQUENCE – последовательность;
  • TRIGGER – триггер;
  • INDEX – индекс;
  • DATABASE – база данных;
  • SCHEMA – схема;
  • ROLE — роль базы данных;
  • RULE – правила;
  • TYPE – псевдоним типа данных или определяемый пользователем тип данных;
  • AGGREGATE – определяемые пользователем агрегатные функции;
  • ASSEMBLY – сборка CLR;
  • USER – пользователь базы данных;
  • DEFAULT — объект «Значение по умолчанию»;
  • SECURITY POLICY — политика безопасности;
  • SYNONYM – синоним.

Пример DROP IF EXISTS – удаление таблицы или представления

Раньше, если перед удалением таблицы (или представления) необходимо было проверить, существует ли эта таблица, мы перед инструкцией по удалению таблицы (DROP) писали условную конструкцию IF в сочетании с функцией OBJECT_ID, код выглядел примерно следующим образом

   
   IF OBJECT_ID('dbo.TestTable', 'U') IS NOT NULL
        DROP TABLE dbo.TestTable;

   GO


Теперь условную конструкцию можно опустить, добавив вместо нее параметр IF EXISTS.

   
   DROP TABLE IF EXISTS dbo.TestTable;


Пример DROP IF EXISTS – удаление функции

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

   
   IF EXISTS (
                SELECT * FROM sys.objects 
                WHERE object_id = OBJECT_ID(N'dbo.TestFunction') 
                AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')
                )
   DROP FUNCTION dbo.TestFunction;


Теперь все гораздо проще.

   
   DROP FUNCTION IF EXISTS dbo.TestFunction;


Заметка! Для профессионального изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL.

У меня все, удачи!

НравитсяНе нравится

SQL запросы быстро. Часть 1 / Хабр

Введение

Язык SQL очень прочно влился в жизнь бизнес-аналитиков и требования к кандидатам благодаря простоте, удобству и распространенности. Из собственного опыта могу сказать, что наиболее часто SQL используется для формирования выгрузок, витрин (с последующим построением отчетов на основе этих витрин) и администрирования баз данных. И поскольку повседневная работа аналитика неизбежно связана с выгрузками данных и витринами, навык написания SQL запросов может стать фактором, из-за которого кандидат или получит преимущество, или будет отсеян. Печальная новость в том, что не каждый может рассчитывать получить его на студенческой скамье. Хорошая новость в том, что в изучении SQL нет ничего сложного, это быстро, а синтаксис запросов прост и понятен. Особенно это касается тех, кому уже доводилось сталкиваться с более сложными языками.

Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join’ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.

Практика

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

Кликнуть здесь

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

Структура sql-запросов

Общая структура запроса выглядит следующим образом:
SELECT ('столбцы или * для выбора всех столбцов; обязательно')
FROM ('таблица; обязательно')
WHERE ('условие/фильтрация, например, city = 'Moscow'; необязательно')
GROUP BY ('столбец, по которому хотим сгруппировать данные; необязательно')
HAVING ('условие/фильтрация на уровне сгруппированных данных; необязательно')
ORDER BY ('столбец, по которому хотим отсортировать вывод; необязательно')

Разберем структуру. Для удобства текущий изучаемый элемент в запроса выделяется CAPS’ом.
SELECT, FROM

SELECT, FROM — обязательные элементы запроса, которые определяют выбранные столбцы, их порядок и источник данных.

Выбрать все (обозначается как *) из таблицы Customers:

SELECT * FROM Customers

Выбрать столбцы CustomerID, CustomerName из таблицы Customers:
SELECT CustomerID, CustomerName FROM Customers
WHERE

WHERE — необязательный элемент запроса, который используется, когда нужно отфильтровать данные по нужному условию. Очень часто внутри элемента where используются IN / NOT IN для фильтрации столбца по нескольким значениям, AND / OR для фильтрации таблицы по нескольким столбцам.

Фильтрация по одному условию и одному значению:

select * from Customers
WHERE City = 'London'

Фильтрация по одному условию и нескольким значениям с применением IN (включение) или NOT IN (исключение):
select * from Customers
where City IN ('London', 'Berlin')
select * from Customers
where City NOT IN ('Madrid', 'Berlin','Bern')

Фильтрация по нескольким условиям с применением AND (выполняются все условия) или OR (выполняется хотя бы одно условие) и нескольким значениям:
select * from Customers
where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15
select * from Customers
where City in ('London', 'Berlin') OR CustomerID > 4

GROUP BY

GROUP BY — необязательный элемент запроса, с помощью которого можно задать агрегацию по нужному столбцу (например, если нужно узнать какое количество клиентов живет в каждом из городов).

При использовании GROUP BY обязательно:

  1. перечень столбцов, по которым делается разрез, был одинаковым внутри SELECT и внутри GROUP BY,
  2. агрегатные функции (SUM, AVG, COUNT, MAX, MIN) должны быть также указаны внутри SELECT с указанием столбца, к которому такая функция применяется.

Группировка количества клиентов по городу:
select City, count(CustomerID) from Customers
GROUP BY City

Группировка количества клиентов по стране и городу:
select Country, City, count(CustomerID) from Customers
GROUP BY Country, City

Группировка продаж по ID товара с разными агрегатными функциями: количество заказов с данным товаром и количество проданных штук товара:

select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails
GROUP BY ProductID

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

select City, count(CustomerID) from Customers
WHERE Country = 'Germany'
GROUP BY City

Переименование столбца с агрегацией с помощью оператора AS. По умолчанию название столбца с агрегацией равно примененной агрегатной функции, что далее может быть не очень удобно для восприятия.
select City, count(CustomerID) AS Number_of_clients from Customers
group by City

HAVING

HAVING — необязательный элемент запроса, который отвечает за фильтрацию на уровне сгруппированных данных (по сути, WHERE, но только на уровень выше).

Фильтрация агрегированной таблицы с количеством клиентов по городам, в данном случае оставляем в выгрузке только те города, в которых не менее 5 клиентов:


select City, count(CustomerID) from Customers
group by City
HAVING count(CustomerID) >= 5 

В случае с переименованным столбцом внутри HAVING можно указать как и саму агрегирующую конструкцию count(CustomerID), так и новое название столбца number_of_clients:


select City, count(CustomerID) as number_of_clients from Customers
group by City
HAVING number_of_clients >= 5

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

select City, count(CustomerID) as number_of_clients from Customers
WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend')
group by City
HAVING number_of_clients >= 5

ORDER BY

ORDER BY — необязательный элемент запроса, который отвечает за сортировку таблицы.

Простой пример сортировки по одному столбцу. В данном запросе осуществляется сортировка по городу, который указал клиент:


select * from Customers
ORDER BY City

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

select * from Customers
ORDER BY Country, City

По умолчанию сортировка происходит по возрастанию для чисел и в алфавитном порядке для текстовых значений. Если нужна обратная сортировка, то в конструкции ORDER BY после названия столбца надо добавить DESC:

select * from Customers
order by CustomerID DESC

Обратная сортировка по одному столбцу и сортировка по умолчанию по второму:
select * from Customers
order by Country DESC, City

JOIN

JOIN — необязательный элемент, используется для объединения таблиц по ключу, который присутствует в обеих таблицах. Перед ключом ставится оператор ON.

Запрос, в котором соединяем таблицы Order и Customer по ключу CustomerID, при этом перед названиям столбца ключа добавляется название таблицы через точку:

select * from Orders
JOIN Customers ON Orders.CustomerID = Customers.CustomerID

Нередко может возникать ситуация, когда надо промэппить одну таблицу значениями из другой. В зависимости от задачи, могут использоваться разные типы присоединений. INNER JOIN — пересечение, RIGHT/LEFT JOIN для мэппинга одной таблицы знаениями из другой,

select * from Orders
join Customers on Orders.CustomerID = Customers.CustomerID
where Customers.CustomerID >10

Внутри всего запроса JOIN встраивается после элемента from до элемента where, пример запроса:

Другие типы JOIN’ов можно увидеть на замечательной картинке ниже:


В следующей части подробнее поговорим о типах JOIN’ов и вложенных запросах.

При возникновении вопросов/пожеланий, всегда прошу обращаться!

База Данных MySQL Синтаксис



Таблицы базы данных

База данных чаще всего содержит одну или несколько таблиц. Каждая таблица идентифицируется по имени (например, «клиенты» или «заказы»). Таблицы содержат записи (строки) с данными.

В этом учебнике мы будем использовать хорошо известную базу данных Northwind Sample (входит в MS Access и MS SQL Server).

Ниже представлен выбор из таблицы «Customers»:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

Приведенная выше таблица содержит пять записей (по одному для каждого клиента) и семь столбцов (клиент, CustomerName, ContactName, адрес, город, PostalCode и страна).


Sql

Большинство действий, которые необходимо выполнить с базой данных, выполняются с помощью инструкций SQL.

Следующая инструкция SQL выбирает все записи в таблице «Customers»:

Пример

SELECT * FROM Customers;

В этом уроке мы научим вас всем о различных инструкциях SQL.



Имейте в виду, что…

  • Ключевые слова SQL не чувствительны к регистру: SELECT совпадает с SELECT

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


Точка с запятой после инструкций SQL?

В некоторых системах баз данных в конце каждой инструкции SQL требуется точка с запятой.

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

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


Некоторые из наиболее важных команд SQL

  • SELECT — Извлекает данные из базы данных
  • UPDATE — обновляет данные в базе данных
  • DELETE — Удаление данных из базы данных
  • INSERT INTO — Вставка новых данных в базу данных
  • CREATE DATABASE — создает новую базу данных
  • ALTER DATABASE — изменяет базу данных
  • CREATE TABLE — Создание новой таблицы
  • ALTER TABLE — изменяет таблицу
  • DROP TABLE — Удаление таблицы
  • CREATE INDEX — создает индекс (ключ поиска)
  • DROP INDEX — Удаляет индекс

SQL Синтаксис



Таблица базы данных

База данных чаще всего содержит одну или несколько таблиц. Каждая таблица идентифицируется по имени (например, «клиенты» или «заказы»). Таблицы содержат записи (строки) с данными.

В этом уроке мы будем использовать хорошо известный образец базы данных Northwind (входит в MS Access и MS SQL Server).

Ниже приведен выбор из таблицы «клиенты»:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

Приведенная выше таблица содержит пять записей (по одной для каждого клиента) и семь столбцов (CustomerID, CustomerName, ContactName, Address, City, PostalCode и Country).


SQL Инструкций

Большинство действий, которые необходимо выполнить с базой данных, выполняются с помощью инструкций SQL.

Следующая инструкция SQL выбирает все записи в таблице «клиенты»:

В этом уроке мы расскажем вам все о различных SQL инструкций.



Имейте в виду, что…

  • Ключевые слова SQL не чувствительны к регистру: select — это то же самое, что SELECT

В этом уроке мы напишем все ключевые слова SQL в верхнем регистре.


Точка с запятой после инструкций SQL?

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

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

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


Некоторые из наиболее важных команд SQL

  • SELECT — извлечение данных из базы данных
  • UPDATE — обновление данных в базе данных
  • DELETE — удаляет данные из базы данных
  • INSERT INTO — вставка новых данных в базу данных
  • CREATE DATABASE — создает новую базу данных
  • ALTER DATABASE — изменяет базу данных
  • CREATE TABLE — создает новую таблицу
  • ALTER TABLE — изменения в таблице
  • DROP TABLE — удаляет таблицу
  • CREATE INDEX — создает индекс (ключ поиска)
  • DROP INDEX — удаляет индекс

SQL Server СУЩЕСТВУЕТ на практических примерах

Резюме : в этом руководстве вы узнаете, как использовать оператор SQL Server EXISTS в условии, чтобы проверить наличие строк в подзапросе.

SQL Server EXISTS Обзор оператора

Оператор EXISTS — это логический оператор, который позволяет проверить, возвращает ли подзапрос какую-либо строку. Оператор EXISTS возвращает TRUE , если подзапрос возвращает одну или несколько строк.

Ниже показан синтаксис оператора SQL Server EXISTS :

 

EXISTS (подзапрос)

В этом синтаксисе подзапрос представляет собой только оператор SELECT . Как только подзапрос возвращает строки, оператор EXISTS возвращает TRUE и немедленно прекращает обработку.

Обратите внимание, что даже несмотря на то, что подзапрос возвращает значение NULL , оператор EXISTS по-прежнему оценивается как TRUE .

SQL Server EXISTS Примеры операторов

Давайте рассмотрим несколько примеров, чтобы понять, как работает оператор EXISTS .

A) Использование EXISTS с подзапросом возвращает NULL , пример

См. Следующую таблицу customers из образца базы данных.

В следующем примере возвращаются все строки из таблицы customers :

 

SELECT Пользовательский ИД, Имя, фамилия ОТ продажи.клиенты ГДЕ СУЩЕСТВУЕТ (ВЫБРАТЬ NULL) СОРТИРОВАТЬ ПО Имя, фамилия;

В этом примере подзапрос возвратил набор результатов, содержащий NULL , в результате чего оператор EXISTS оценивает значение TRUE . Следовательно, весь запрос возвращает все строки из таблицы customers .

B) Использование EXISTS с примером коррелированного подзапроса

Рассмотрим следующие клиентов и заказов таблиц:

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

 

SELECT Пользовательский ИД, Имя, фамилия ОТ продажи.клиенты c ГДЕ СУЩЕСТВУЕТ ( ВЫБРАТЬ COUNT (*) ОТ продажи. заказы o ГДЕ customer_id = c.customer_id ГРУППА ПО Пользовательский ИД ИМЕЕТ COUNT (*)> 2 ) СОРТИРОВАТЬ ПО Имя, фамилия;

В этом примере у нас был коррелированный подзапрос, который возвращает клиентов, разместивших более двух заказов.

Если количество заказов, размещенных клиентом, меньше или равно двум, подзапрос возвращает пустой набор результатов, в результате чего оператор EXISTS оценивает значение FALSE .

На основании результата оператора EXISTS заказчик будет включен в набор результатов.

C) EXISTS по сравнению с IN , пример

Следующий оператор использует оператор IN для поиска заказов клиентов из Сан-Хосе:

 

SELECT * ОТ заказы на продажу ГДЕ customer_id IN ( ВЫБРАТЬ Пользовательский ИД ОТ sales.customers ГДЕ city ​​= 'Сан-Хосе' ) СОРТИРОВАТЬ ПО Пользовательский ИД, Дата заказа;

Следующий оператор использует оператор EXISTS , который возвращает тот же результат:

 

SELECT * ОТ продажи.приказы о ГДЕ СУЩЕСТВУЕТ ( ВЫБРАТЬ Пользовательский ИД ОТ sales.customers c ГДЕ o.customer_id = c.customer_id И город = "Сан-Хосе" ) СОРТИРОВАТЬ ПО o.customer_id, Дата заказа;

EXISTS по сравнению с JOIN

Оператор EXISTS возвращает TRUE или FALSE , тогда как предложение JOIN возвращает строки из другой таблицы.

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

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

В этом руководстве вы узнали, как использовать оператор SQL Server EXISTS для проверки того, возвращает ли подзапрос строки.

.

SQL СУЩЕСТВУЕТ И НЕ СУЩЕСТВУЕТ

Введение

В этой статье мы увидим, как работает оператор SQL EXISTS и когда его следует использовать.

Хотя оператор EXISTS был доступен со времен SQL: 86, самого первого издания стандарта SQL, я обнаружил, что есть еще много разработчиков приложений, которые не осознают, насколько мощными являются выражения подзапроса SQL, когда дело доходит до фильтрации заданного таблица на основе условия, оцениваемого в другой таблице.

База данных модели таблицы

Предположим, у нас есть следующие две таблицы в нашей базе данных, которые образуют отношение таблиц «один ко многим». Таблица student является родительской, а таблица student_grade является дочерней таблицей, поскольку у нее есть столбец student_id External Key, ссылающийся на столбец первичного ключа id в таблице student .

Таблица student содержит следующие две записи:

| id | first_name | last_name | admission_score |
| ---- | ------------ | ----------- | ----------------- |
| 1 | Алиса | Смит | 8.95 |
| 2 | Боб | Джонсон | 8,75 |
 

И таблица student_grade хранит оценки, полученные учащимися:

| id | class_name | сорт | student_id |
| ---- | ------------ | ------- | ------------ |
| 1 | Математика | 10 | 1 |
| 2 | Математика | 9,5 | 1 |
| 3 | Математика | 9,75 | 1 |
| 4 | Наука | 9,5 | 1 |
| 5 | Наука | 9 | 1 |
| 6 | Наука | 9.25 | 1 |
| 7 | Математика | 8.5 | 2 |
| 8 | Математика | 9,5 | 2 |
| 9 | Математика | 9 | 2 |
| 10 | Наука | 10 | 2 |
| 11 | Наука | 9,4 | 2 |
 

СУЩЕСТВУЕТ SQL

Допустим, мы хотим получить всех учеников, получивших 10 баллов по математике.

Если нас интересует только идентификатор студента, мы можем выполнить такой запрос:

ВЫБРАТЬ
    student_grade.Студенческий билет
ОТ
    student_grade
ГДЕ
    student_grade.grade = 10 И
    student_grade.class_name = 'Математика'
СОРТИРОВАТЬ ПО
    student_grade.student_id
 

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

Чтобы отфильтровать записи ученика , которые имеют 10 баллов по математике, мы можем использовать оператор EXISTS SQL, например:

ВЫБРАТЬ
    id, first_name, last_name
ОТ
    студент
ГДЕ СУЩЕСТВУЕТ (
    ВЫБРАТЬ 1
    ОТ
        student_grade
    ГДЕ
        student_grade.student_id = student.id И
        student_grade.grade = 10 И
        student_grade.class_name = 'Математика'
)
ЗАКАЗАТЬ ПО id
 

При выполнении запроса выше мы видим, что выбрана только строка Алисы:

| id | first_name | last_name |
| ---- | ------------ | ----------- |
| 1 | Алиса | Смит |
 

Внешний запрос выбирает столбцы строки student , которые мы хотим вернуть клиенту. Однако предложение WHERE использует оператор EXISTS со связанным внутренним подзапросом.

Оператор EXISTS возвращает true, , если подзапрос возвращает хотя бы одну запись, и false, , если строка не выбрана. Механизм базы данных не должен полностью выполнять подзапрос. Если сопоставлена ​​одна запись, оператор EXISTS возвращает true , и выбирается связанная другая строка запроса.

Внутренний подзапрос коррелирован, потому что столбец student_id таблицы student_grade сопоставляется со столбцом id внешней таблицы student .

SQL НЕ СУЩЕСТВУЕТ

Предположим, мы хотим выбрать всех учеников, у которых нет оценок ниже 9. Для этого мы можем использовать NOT EXISTS, что отрицает логику оператора EXISTS.

Следовательно, оператор NOT EXISTS возвращает true , если базовый подзапрос не возвращает записи. Однако, если внутреннему подзапросу соответствует одна запись, оператор NOT EXISTS вернет false , и выполнение подзапроса может быть остановлено.

Чтобы сопоставить все записи student , не связанные с student_grade , со значением ниже 9, мы можем выполнить следующий запрос SQL:

ВЫБРАТЬ
    id, first_name, last_name
ОТ
    студент
ГДЕ НЕ СУЩЕСТВУЕТ (
    ВЫБРАТЬ 1
    ОТ
        student_grade
    ГДЕ
        student_grade.student_id = student.id И
        student_grade.grade <9
)
ЗАКАЗАТЬ ПО id
 

При выполнении вышеуказанного запроса мы видим, что совпадает только запись Алисы:

| id | first_name | last_name |
| ---- | ------------ | ----------- |
| 1 | Алиса | Смит |
 

Круто, правда?

Интернет-семинары

Если вам понравилась эта статья, держу пари, вам понравятся мои предстоящие онлайн-семинары!

Заключение

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

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

Связанные

.

Проверка наличия строк из подзапроса с использованием оператора SQL EXISTS

Резюме : в этом руководстве вы узнаете, как использовать оператор SQL EXISTS для проверки того, возвращает ли подзапрос какие-либо строки.

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

Введение в оператор SQL EXISTS

Оператор EXISTS проверяет, возвращает ли подзапрос какие-либо строки.Ниже показан синтаксис оператора EXISTS :

Выражение EXISTS (подзапрос) возвращает ИСТИНА, , если подзапрос возвращает хотя бы одну строку, в противном случае оно возвращает ЛОЖЬ . Обратите внимание, что вы помещаете подзапрос в круглые скобки, за которыми следует оператор EXISTS .

Вы можете использовать оператор NOT с оператором EXISTS , чтобы инвертировать значение оператора EXISTS .

ГДЕ НЕ СУЩЕСТВУЕТ (подзапрос);

Выражение НЕ СУЩЕСТВУЕТ (подзапрос) возвращает ИСТИНА , если подзапрос не возвращает ни одной строки, в противном случае возвращается ЛОЖЬ . Вы можете использовать оператор EXISTS в любом операторе SQL, который принимает предложение WHERE, например, оператор SELECT, UPDATE или DELETE.

SQL EXISTS Примеры оператора

Вы можете использовать оператор EXISTS , чтобы найти клиента, который заказал продукты.Для каждого клиента в таблице customers вы проверяете, существует ли хотя бы один заказ в таблице orders .

SELECT

Customerid, companyName

FROM

клиентов

WHERE

EXISTS (

SELECT

orderid

ORDID

заказов FRustome

.Пользовательский ИД);

Оператор SQL EXISTS с подзапросом, который возвращает NULL

Если подзапрос возвращает NULL , выражение EXIST NULL возвращает TRUE . Давайте посмотрим на следующий пример:

SELECT

customerId, companyName

FROM

customers

WHERE

EXISTS (SELECT NULL);

Пример SQL NOT EXISTS

Вы можете использовать NOT EXIST , чтобы найти клиента, который никогда ничего не покупал, проверив количество заказов клиента в таблице orders :

SELECT

customerid, companyName

FROM

customers

WHERE

NOT EXISTS (

SELECT

orderid

FROM

заказов

WHERE

заказов WHERCustomerid = customers.customerid);

В этом руководстве мы показали вам, как использовать оператор SQL EXISTS для проверки существования строк, возвращаемых из подзапроса.

  • Было ли это руководство полезным?
  • Да Нет
.

Обзор оператора T-SQL If Exists в базе данных SQL Server

В этой статье рассматриваются различные версии оператора T-SQL IF EXISTS для базы данных SQL с использованием различных Примеры.

  • ЕСЛИ СУЩЕСТВУЕТ в SQL 2014 или ранее
  • УДАЛИТЬ .. ЕСЛИ СУЩЕСТВУЕТ в SQL Server 2016 в SQL Server 2019

Введение

Предположим, вы хотите развернуть такие объекты, как таблицы, процедуры, функции в базе данных SQL Server.Если вы выполните CREATE для этих объектов, и этот объект уже существует в базе данных, вы получите сообщение 2714, уровень 16, состояние 3 сообщение об ошибке, как показано ниже.

Вы можете написать оператор DROP перед выполнением оператора create. Он отлично работает, если объект существует в базе данных.

В случае, если объект не существует, и вы попытаетесь отбросить, вы получите следующую ошибку.

Чтобы избежать этой ситуации, обычно разработчики добавляют оператор T-SQL If Exists и удаляют объект, если он уже доступен в базе данных.

Допустим, мы хотим развернуть хранимую процедуру stpGetAllMembers в тестовой базе данных SQLShack. Мы можем использовать несколько методы, чтобы проверить, существует ли процедура в базе данных SQL, но давайте запросим системную таблицу sys.objects для Это.

Следующий код выполняет за нас следующие действия:

  • Во-первых, он выполняет оператор выбора внутри IF Exists
  • Если оператор select возвращает значение, это условие - TRUE для IF Exists
  • Он запускает код внутри оператора begin и печатает сообщение

ЕСЛИ СУЩЕСТВУЕТ

(

SELECT *

FROM sys.объекты

WHERE object_id = OBJECT_ID (N'dbo.stpGetAllMembers ')

)

BEGIN

PRINT' Сохраненная процедура уже существует ';

КОНЕЦ;

Если процедура не существует, она не запускает код в операторе begin.

ЕСЛИ СУЩЕСТВУЕТ

(

SELECT *

FROM sys.объекты

WHERE object_id = OBJECT_ID (N'dbo.stpGetAllMembers_1 ')

)

BEGIN

PRINT' Сохраненная процедура уже существует ';

КОНЕЦ;

Теперь мы хотим отказаться от этой процедуры, если она уже существует в базе данных. Мы можем добавить команду DROP PROCEDURE внутри оператора begin. Он удаляет хранимую процедуру, если она уже существует в базе данных.

ЕСЛИ СУЩЕСТВУЕТ

(

SELECT *

FROM sys.объекты

ГДЕ object_id = OBJECT_ID (N'dbo.stpGetAllMembers ')

)

НАЧАЛО

ПРОЦЕДУРА УДАЛЕНИЯ stpGetAllMembers;

КОНЕЦ;

Мы также можем использовать этот метод с другими объектами SQL Server. Следующий запрос проверяет наличие таблицы SQL и удаляет ее, если она есть.

В статье фрагменты кода SQL в В Azure Data Studio мы обсудили фрагменты кода для написания T-SQL.Я подумал проверить синтаксис для sqlCreateStoredProc для новой хранимой процедуры.

Чтобы просмотреть определение этого фрагмента, введите create proc, нажмите sqlCreateStoredProc и введите.

Как показано на следующем изображении, этот фрагмент также использует метод IF EXISTS для написания хранимой процедуры.

Оператор DROP IF EXISTS

SQL Server 2016 предоставляет усовершенствование для проверки существования объекта и удаления, если он уже существует.Он вводит Для этого используйте команду DROP IF EXISTS.

Синтаксис DROP IF EXISTS

DROP OBJECT_TYPE [IF EXISTS] OBJECT_NAME

  • Он удаляет объект, если он уже существует в базе данных SQL.
  • Мы также можем использовать его для удаления столбца или ограничений.
  • Если указанный объект не существует, он не выдает сообщения об ошибке.Он продолжает выполнение для следующая команда

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

Давайте разберемся с этим новым предложением T-SQL IF EXISTS на различных примерах.

DROP Stored Procedure IF EXISTS

В предыдущем примере мы использовали хранимую процедуру DROP stpGetAllMembers для демонстрационных целей.Это хранится процедуры сейчас не существует. Давайте воспользуемся новым методом и попробуем отбросить хранимую процедуру.

ПРОЦЕДУРА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ stpGetAllMembers;

Мы можем добавить дополнительный код, такой как операторы печати, операторы создания. Следующий код печатает сообщение после Команда DROP PROCEDURE.

ПРОЦЕДУРА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ stpGetAllMembers

PRINT 'Сохраненная процедура не существует'

Давайте создадим хранимую процедуру, используя эту команду нового синтаксиса T-SQL IF EXISTS.Следующий запрос отбрасывает хранимая процедура, если она уже существует, в случае, если она не существует, она создаст ее.

ПРОЦЕДУРА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ stpGetAllMembers;

GO

СОЗДАТЬ ПРОЦЕДУРУ stpGetAllMembers

AS

SELECT table_catalog [база данных],

table_schema [схема],

имя_таблицы [имя],

HEMA_TABLE_type

ТАБЛИЦЫ;

ПРОСМОТР, ЕСЛИ СУЩЕСТВУЕТ

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

ПРОСМОТР, ЕСЛИ СУЩЕСТВУЕТ vwABC

GO

В SQL Server 2014 или более ранней версии мы используем следующий код. Он проверяет представления, используя sys.objects для типа V.

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.объекты WHERE object_id = OBJECT_ID (N'vwABC ')

AND type = N'V')

DROP VIEW vwABC

GO

Ограничение DROP, ЕСЛИ СУЩЕСТВУЕТ

Мы можем использовать следующую команду, чтобы удалить ограничение UNIQUE с помощью оператора DROP CONSTRAINT IF EXISTS.

ALTER TABLE DemoTable DROP CONSTRAINT, ЕСЛИ СУЩЕСТВУЕТ EmpID

GO

Следующий код работает в SQL 2014 или более ранней версии.Тип UQ в sys.objects относится к УНИКАЛЬНОМУ ограничение.

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.objects, ГДЕ object_id = OBJECT_ID (N'EmpID ')

AND type = N'UQ')

ALTER TABLE DemoTable DROP CONSTRAINT EmpID

GO

Для проверки ограничения измените тип с UQ на C в запросе SQL 2014 или до версии.Нам не нужно изменить запрос, указанный с помощью оператора DROP CONSTRAINT IF EXISTS.

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.objects, ГДЕ object_id = OBJECT_ID (N'EmpID ')

AND type = N'C')

ALTER TABLE DemoTable DROP CONSTRAINT EmpID

GO

DROP Table IF EXISTS

Мы можем использовать оператор DROP TABLE IF EXISTS для удаления таблицы SQL также в SQL Server 2016 или более поздней версии.

DROP TABLE IF EXISTS DemoTable

GO

Для SQL 2014 или предыдущих версий нам нужно использовать метод IF EXISTS, как показано ниже. Тип U относится к определенному пользователем Таблица SQL.

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.objects, ГДЕ object_id = OBJECT_ID (N'DemoTable ')

AND type = N'U')

DROP TABLE DemoTable

GO

DROP База данных ЕСЛИ СУЩЕСТВУЕТ

Мы можем использовать новые сценарии T-SQL If Exists для удаления базы данных SQL, а также для SQL 2016 или более поздних версий.

УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ TargetDB

GO

В качестве альтернативы используйте следующий сценарий с SQL 2014 или более ранней версией. Это также действительно в более высоком SQL Server версии тоже.

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.databases, ГДЕ database_id = DB_ID (N'TargetDB '))

DROP DATABASE TargetDB

GO

DROP Column IF EXISTS

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

Мы отбрасываем столбец с помощью оператора Alter Table. Мы также можем использовать DROP COLUMN IF EXISTS в этом операторе изменения. Предположим, мы хотим удалить столбец Country из таблицы Employee. Мы используем следующий оператор alter table.

ALTER TABLE Сотрудник DROP COLUMN ЕСЛИ СУЩЕСТВУЕТ Страна

GO

Это одна строка и простой запрос.В качестве альтернативы мы используем следующий запрос, используя IF Exists. Вроде бы сложнее, чем предыдущий. Мы должны использовать последний синтаксис запроса с поддерживаемыми версиями SQL Server.

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.columns, где object_id = OBJECT_ID (N'Employee ')

AND name =' Country ')

ALTER TABLE Employee DROP COLUMN Country

GO

Заключение

В этой статье мы рассмотрели две разные версии операторов T-SQL IF Exists.

  • ЕСЛИ СУЩЕСТВУЕТ в SQL 2014 или ранее
  • DROP [Object] IF EXISTS в SQL Server 2016 или новее

Вам следует выбрать подходящий для вас синтаксис. Я бы порекомендовал последнюю версию (Drop [object [IF Exists)], если вы используете SQL 2016 или более поздние версии.

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

Работая старшим консультантом администратора баз данных для крупных заказчиков и получив сертификат MCSA SQL 2012, он любит делиться знаниями в различных блогах.
С ним можно связаться по адресу [email protected]

Посмотреть все сообщения Rajendra Gupta

Последние сообщения Rajendra Gupta (посмотреть все) .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *