Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Menentukan apakah nilai yang ditentukan cocok dengan nilai mana pun dalam kueri bertumpuk atau daftar.
Syntax
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Arguments
test_expression
Adalah ekspresi yang valid.
subquery
Adalah subkueri yang memiliki kumpulan hasil dari satu kolom. Kolom ini harus memiliki tipe data yang sama dengan test_expression.
ekspresi[ ,... 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.
Caution
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.
Remarks
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.
Examples
A. 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 FactInternetSalesSalesReasonKey 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
KASUS (Transact-SQL)
Ekspresi (Transact-SQL)
Fungsi Bawaan (Transact-SQL)
Operator (Transact-SQL)
PILIH (Transact-SQL)
DI MANA (Transact-SQL)
SEMUA (Transact-SQL)
BEBERAPA | ANY (Transact-SQL)