IN (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Menentukan apakah nilai yang ditentukan cocok dengan nilai mana pun dalam kueri bertumpuk atau daftar.
Sintaks
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Argumen
test_expression
Adalah ekspresi yang valid.
kueri bertumpuk
Adalah subkueri yang memiliki kumpulan hasil dari satu kolom. Kolom ini harus memiliki tipe data yang sama dengan test_expression.
expression[ ,... n ]
Adalah daftar ekspresi yang akan diuji untuk kecocokan. Semua ekspresi harus berjenis sama dengan test_expression.
Jenis Hasil
Boolean
Nilai Hasil
Jika nilai test_expression sama dengan nilai apa pun yang dikembalikan oleh subkueri atau sama dengan ekspresi apa pun dari daftar yang dipisahkan koma, nilai hasilnya TRUE; jika tidak, nilai hasilnya adalah FALSE.
Menggunakan NOT IN meniadakan nilai atau ekspresi subkueri.
Perhatian
Nilai null apa pun yang dikembalikan oleh subkueri atau ekspresi yang dibandingkan dengan test_expression menggunakan IN atau NOT IN mengembalikan UNKNOWN. Menggunakan nilai null bersama dengan IN atau NOT IN dapat menghasilkan hasil yang tidak terduga.
Keterangan
Secara eksplisit termasuk sejumlah besar nilai (ribuan nilai yang dipisahkan oleh koma) dalam tanda kurung, dalam klausul IN dapat menggunakan sumber daya dan mengembalikan kesalahan 8623 atau 8632. Untuk mengatasi masalah ini, simpan item dalam daftar IN dalam tabel, dan gunakan subkueri SELECT dalam klausa IN.
Kesalahan 8623:
The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.
Kesalahan 8632:
Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.
Contoh
J. Membandingkan OR dan IN
Contoh berikut memilih daftar nama karyawan yang merupakan insinyur desain, perancang alat, atau asisten pemasaran.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle = 'Design Engineer'
OR e.JobTitle = 'Tool Designer'
OR e.JobTitle = 'Marketing Assistant';
GO
Namun, Anda mengambil hasil yang sama dengan menggunakan IN.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
GO
Berikut adalah tataan hasil dari salah satu kueri.
FirstName LastName Title
--------- --------- ---------------------
Sharon Salavaria Design Engineer
Gail Erickson Design Engineer
Jossef Goldberg Design Engineer
Janice Galvin Tool Designer
Thierry D'Hers Tool Designer
Wanida Benshoof Marketing Assistant
Kevin Brown Marketing Assistant
Mary Dempsey Marketing Assistant
(8 row(s) affected)
B. Menggunakan IN dengan subkueri
Contoh berikut menemukan semua ID untuk tenaga penjualan dalam SalesPerson
tabel untuk karyawan yang memiliki kuota penjualan lebih besar dari $ 250.000 untuk tahun itu, lalu memilih dari Employee
tabel nama semua karyawan di mana EmployeeID
yang cocok dengan hasil dari SELECT
subkueri.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
JOIN Sales.SalesPerson AS sp
ON p.BusinessEntityID = sp.BusinessEntityID
WHERE p.BusinessEntityID IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO
Berikut set hasilnya.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
C. Menggunakan NOT IN dengan subkueri
Contoh berikut menemukan tenaga penjualan yang tidak memiliki kuota lebih besar dari $250.000. NOT IN
menemukan tenaga penjualan yang tidak cocok dengan item dalam daftar nilai.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
JOIN Sales.SalesPerson AS sp
ON p.BusinessEntityID = sp.BusinessEntityID
WHERE p.BusinessEntityID NOT IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
D. Menggunakan IN dan NOT IN
Contoh berikut menemukan semua entri dalam tabel yang cocok dengan FactInternetSales
SalesReasonKey
nilai dalam DimSalesReason
tabel.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
IN (SELECT SalesReasonKey FROM DimSalesReason);
Contoh berikut menemukan semua entri dalam FactInternetSalesReason
tabel yang tidak cocok dengan SalesReasonKey
nilai dalam DimSalesReason
tabel.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);
E. Menggunakan IN dengan daftar ekspresi
Contoh berikut menemukan semua ID untuk tenaga penjualan dalam DimEmployee
tabel untuk karyawan yang memiliki nama depan baik Mike
atau Michael
.
-- Uses AdventureWorks
SELECT FirstName, LastName
FROM DimEmployee
WHERE FirstName IN ('Mike', 'Michael');
Lihat Juga
CASE (Transact-SQL)
Ekspresi (Transact-SQL)
Fungsi Bawaan (Transact-SQL)
Operator (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
SEMUA (T-SQL)
BEBERAPA | ANY (Transact-SQL)