SQL

2012-09-23 13 views
134

Olası Çoğalt:
Difference between CTE and SubQuery?SQL

Ben WITH maddesini ve WITH maddenin amacını nasıl kullanılacağını anlamaya çalışıyordum.

Tüm anladığım kadarıyla, WITH yan tümcesi normal alt sorguların yerini aldı.

Bunu bana küçük bir örnekle açıklayan biri var mı?

+3

http://msdn.microsoft.com/en-us/library/ms175972(v=sql.105).aspx – Vikdor

+1

MYSQL kullanıyor musunuz? b/c desteklenmiyor. –

+0

Geçici statik tablo oluşturmak için WITH yan tümcesini nasıl kullanacağımı örnek olarak bir araya getirdim. Bunu yararlı bulabilirsiniz, çünkü sorgularınızda WITH yan tümcelerini kullanma hakkında bazı örnekler içerir. http://www.giombetti.com/2014/02/14/using-sql-with-clause-to-create-temporary-static-tables-at-query-time/ –

cevap

178

SQL WITH yan tümcesi Oracle tarafından Oracle 9i sürüm 2 veritabanında tanıtıldı. SQL WITH yan tümcesi, bir alt sorgu bloğuna, ana SQL sorgusu içinde birkaç yerde referans verilebilecek bir ad (alt sorgu refactoring olarak da adlandırılan bir işlem) vermenizi sağlar. Alt sorguya atanan ad, satır içi görünüm veya tablo gibi ele alınır. SQL WITH yan tümcesi, normal alt sorguya temelde bir drop-in yerine geçer. Tek bir alt sorgu takma kullanıldığında

aşağıdaki Madde

İLE SQL için

sözdizimi madde İLE SQL sözdizimi.

WITH <alias_name> AS (sql_subquery_statement) 
SELECT column_list FROM <alias_name>[,table_name] 
[WHERE <join_condition>] 

Birden çok alt sorgu takma adı kullanıldığında, sözdizimi aşağıdaki gibidir. sözdizimi belgelerinde

WITH <alias_name_A> AS (sql_subquery_statement), 
<alias_name_B> AS(sql_subquery_statement_from_alias_name_A 
or sql_subquery_statement) 
SELECT <column_list> 
FROM <alias_name_A>, <alias_name_B> [,table_names] 
[WHERE <join_condition>] 

yukarıdaki, alias_name sık geçtiğine Eğer AS sözcüğünün sonra alt sorguya verecekti anlamlı isimdir. Her alt sorgu bir virgül Example for WITH statement ile ayrılmalıdır. Sorguların geri kalanı basit ve karmaşık SQL SELECT sorguları için standart formatları takip eder. Daha fazla bilgi için

: http://www.brighthub.com/internet/web-development/articles/91893.aspx

+1

: Zaten onu gördüm Bunu açıklamanın daha kolay olacağı küçük bir örnekle açıklayabilir misiniz? –

+12

Birden çok alt sorgu takma adı kullanırken WITH ' AS (sql_subquery_statement)' den sonra virgül kullanmanız gerektiğini düşünüyorum. – Jason

53

Bu tamamen here yanıtlandı.

nasıl alt sorgu faktoring eserlerini görmek için Oracle's docs on SELECT bakın ve Mark'ın örnek:

WITH employee AS (SELECT * FROM Employees) 
SELECT * FROM employee WHERE ID < 20 
UNION ALL 
SELECT * FROM employee WHERE Sex = 'M' 
+0

Özellikle bir bağlantı ile ilk cümle için teşekkür ederiz :) –

+0

Evet, temel olarak bir alt sorgunun yerini alır BUT, birden çok yerde "alt sorgu" sonucuna başvurmanızı sağlar. – kiradotee