Aracılığıyla paylaş


SELECT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Veritabanından SELECT satır almak için deyimini kullanın. SELECT SQL Server Veritabanı Altyapısı'ndaki bir veya birden çok tablodan bir veya birden çok satır veya sütun seçmenize olanak tanır.

Tam söz dizimi SELECT deyimi karmaşık olduğundan, tümce başına ayrıntılı söz dizimi öğeleri ve bağımsız değişkenleri gösterilir. Bu yan tümcelerin birlikte nasıl çalıştığı için Söz Dizimi bölümüne bakın.

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, Analytics Platform Sistemi (PDW) ve Microsoft Fabric için 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

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.

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE veya WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP

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;