Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Veritabanından satırları alır ve SQL Server Veritabanı Altyapısı'ndaki bir veya birden çok tablodan bir veya birden çok satır veya sütunun seçilmesini sağlar. deyiminin SELECT tam söz dizimi karmaşıktır, ancak ana yan tümceleri aşağıdaki gibi özetlenebilir:
[ ILE { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
SEÇ select_list [ INTO new_table ]
[ table_source'DEN ] [ NEREDE search_condition ]
[ EMIR order_expression [ ASC | DESC ] ]
UNION, EXCEPT ve INTERSECT işleçleri sorguların sonuçlarını tek bir sonuç kümesinde birleştirmek veya karşılaştırmak için kullanılabilir.
Transact-SQL söz dizimi kuralları
Syntax
SQL Server ve Azure SQL Veritabanı söz dizimi:
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
<query_expression>
[ ORDER BY <order_by_expression> ]
[ <FOR Clause> ]
[ OPTION ( <query_hint> [ , ...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [ ...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
<select_list>
[ INTO new_table ]
[ FROM { <table_source> } [ , ...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING <search_condition> ]
[ ; ]
Azure Synapse Analytics ve Paralel Veri Ambarı ve Microsoft Fabric söz dizimi:
[ WITH <common_table_expression> [ , ...n ] ]
SELECT <select_criteria>
[ ; ]
<select_criteria> ::=
[ TOP ( top_expression ) ]
[ ALL | DISTINCT ]
{ * | column_name | expression } [ , ...n ]
[ FROM { table_source } [ , ...n ] ]
[ WHERE <search_condition> ]
[ GROUP BY <group_by_clause> ]
[ HAVING <search_condition> ]
[ ORDER BY <order_by_expression> ]
[ OPTION ( <query_option> [ , ...n ] ) ]
Remarks
Deyimin karmaşıklığı nedeniyle SELECT , yan tümce başına ayrıntılı söz dizimi öğeleri ve bağımsız değişkenleri gösterilir:
- XMLNAMESPACES İLE
- HAVING
- ILE common_table_expression
- UNION
- SELECT maddesi
- EXCEPT ve INTERSECT
- INTO maddesi
- SIPARIŞ VERİYOR
- FROM
- FOR maddesi
- WHERE
- OPTION maddesi
- GRUP TARAFINDAN
Deyimindeki yan tümcelerin SELECT sırası önemlidir. İsteğe bağlı yan tümcelerden herhangi biri atlanabilir, ancak isteğe bağlı yan tümceler kullanıldığında uygun sırada görünmelidir.
SELECT deyimlerine kullanıcı tanımlı işlevlerde izin verilir, ancak bu deyimlerin seçme listelerinde işlevlere yerel olan değişkenlere değer atayan ifadeler bulunur.
Sunucu adı bölümü olarak işleviyle OPENDATASOURCE birlikte dört bölümlü bir ad, tablo adının deyiminde SELECT görünebileceği her yerde tablo kaynağı olarak kullanılabilir. Azure SQL Veritabanı için dört parçalı bir ad belirtilemiyor.
Bazı söz dizimi kısıtlamaları, uzak tabloları içeren deyimler için SELECT geçerlidir.
SELECT deyiminin mantıksal işleme sırası
Aşağıdaki adımlarda bir SELECT deyim için mantıksal işleme sırası veya bağlama sırası gösterilir. Bu sıra, bir adımda tanımlanan nesnelerin sonraki adımlarda yan tümceler için ne zaman kullanılabilir hale getirileceğini belirler. Örneğin, sorgu işlemcisi yan tümcesinde FROM tanımlanan tablolara veya görünümlere bağlanabilirse (bunlara erişebiliyorsa), bu nesneler ve sütunları sonraki tüm adımlarda kullanılabilir hale gelir. Buna karşılık, yan tümcesi 8. adım olduğundan SELECT , bu yan tümcede tanımlanan tüm sütun diğer adlarına veya türetilmiş sütunlara yukarıdaki yan tümceler tarafından başvurulamaz. Ancak, yan tümcesi gibi ORDER BY sonraki yan tümceler tarafından bunlara başvurulabilir. Sorgu işlemcisi deyimin gerçek fiziksel yürütmesini belirler ve sıra bu listeden farklı olabilir.
FROMONJOINWHEREGROUP BY-
WITH CUBEveyaWITH ROLLUP HAVINGSELECTDISTINCTORDER BYTOP
Warning
Önceki sıranın farklı olabileceği yaygın olmayan durumlar vardır. Görünümde kümelenmiş bir dizininiz olduğunu ve görünümün bazı tablo satırlarını dışladığını ve görünümün SELECT sütun listesinde CONVERTveri türünün varchar olanını int olarak değiştirdiğini varsayalım. Bu durumda, CONVERT yan tümcesi yürütülmeden WHERE önce yürütülebilir. Genellikle, sizin durumunuzda önemliyse, farklı bir diziden kaçınmak için görünümünüzü değiştirmenin bir yolu vardır.
Permissions
Verilerin seçilmesi için tablo veya görünüm üzerinde izin gerekirSELECT. Bu izin, şema üzerindeki izin veya SELECT tablo üzerindeki izin gibi CONTROL daha yüksek bir kapsamdan devralınabilir. Ya da db_datareader veya db_owner sabit veritabanı rollerine veya sysadmin sabit sunucu rolüne üyelik gerektirir. kullanarak SELECT INTO yeni tablo oluşturmak için hem izin hem CREATE TABLE de ALTER SCHEMA yeni tablonun sahibi olan şema üzerinde izin gerekir.
Examples
Aşağıdaki örneklerde AdventureWorksPDW2022 veritabanı kullanılmaktadır .
A. Satırları ve sütunları almak için SELECT kullanma
Bu bölümde üç kod örneği gösterilmektedir. Bu ilk kod örneği, tablodaki WHERE tüm satırları (yan tümce belirtilmemiş*) ve tüm sütunları (kullanarakDimEmployee) döndürür.
SELECT *
FROM DimEmployee
ORDER BY LastName;
Aynı sonucu elde etmek için tablo diğer adını kullanan bu sonraki örnek.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Bu örnekWHERE veritabanındaki tablodan tüm satırları (FirstNameyan tümce belirtilmemiş) ve sütunların (LastName, StartDate, DimEmployee) bir alt kümesini döndürür. Üçüncü sütun başlığı olarak FirstDayyeniden adlandırılır.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
Bu örnek yalnızca ve (evli) olmayan satırları DimEmployeeEndDateNULLMaritalStatusM döndürür.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
B. SELECT'i sütun başlıkları ve hesaplamalarla kullanma
Aşağıdaki örnek, tablodaki DimEmployee tüm satırları döndürür ve her çalışan için brüt ödemeyi kendi çalışma haftasına ve 40 saatlik çalışma haftasına BaseRate göre hesaplar.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. SELECT ile DISTINCT kullanma
Aşağıdaki örnek, tablodaki DISTINCT tüm benzersiz başlıkların listesini oluşturmak için kullanırDimEmployee.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. GROUP BY kullanma
Aşağıdaki örnek, her gündeki tüm satışların toplam tutarını bulur.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Yan tümcesi GROUP BY nedeniyle, her gün için tüm satışların toplamını içeren yalnızca bir satır döndürülür.
E. GROUP BY'i birden çok grupla kullanma
Aşağıdaki örnek, sipariş tarihine ve promosyon anahtarına göre gruplandırılmış olarak her günün ortalama fiyatını ve İnternet satışlarının toplamını bulur.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. GROUP BY ve WHERE kullanma
Aşağıdaki örnek, yalnızca 1 Ağustos 2002'den sonraki sipariş tarihlerine sahip satırları aldıktan sonra sonuçları gruplara yerleştirir.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. GROUP BY'i bir ifadeyle kullanma
Aşağıdaki örnek bir ifadeye göre gruplandırma yapar. İfade toplama işlevleri içermiyorsa bir ifadeye göre gruplandırabilirsiniz.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. ORDER BY ile GROUP BY kullanma
Aşağıdaki örnek, günlük satışların toplamını ve güne göre siparişleri bulur.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. HAVING yan tümcesini kullanma
Bu sorgu sonuçları kısıtlamak için yan tümcesini HAVING kullanır.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;