Scénář:
Pracujete jako vývojář SQL Serveru. Jste požádáni o poskytnutí ukázkových náhodných dat z tabulky dbo.Customer. Můžete požádat o poskytnutí náhodných 100 řádků nebo některých procent celkových dat z tabulky. Jaký dotaz použijete k poskytnutí požadovaného výstupu?Řešení:
V předchozím příspěvku jsme se naučili, jak získat prvních n řádků z tabulky. Můžeme zadat počet řádků nebo procento záznamů, které chceme z tabulky získat, pomocí TOP v našem výběrovém dotazu.Můžeme použít stejnou klauzuli Top, ale protože jsme požádáni o poskytnutí náhodných záznamů , musíme je nejprve náhodně seřadit. Můžeme použít funkci newid() v pořadí podle klauzule, abychom je seřadili náhodně.
Vytvořme tabulku dbo.Customer s ukázkovými daty.
Vytvořme tabulku dbo. Zákazník (Id int, FName VARCHAR(50), LNName VARCHAR(50), CountryShortName CHAR(2))GOinsert into dbo.CustomerValues (1,'Raza','M','PK'),(2,'Rita' ,'John','US'),(3,'Sukhi','Singh',Null),(4,'James','Smith','CA'),(5,'Robert','Ldson' ,'US'),(6,'Alice','John','US')1) použijte NewID ( ) v Order by k získání náhodných záznamů
Řekněme, že pokud máme zájem získat 3 náhodné záznamy z tabulky dbo.Customer, můžeme použít níže uvedený dotaz.
Vyberte top 3 * Z dbo.Customerorder od NEWID()
Jak získat náhodné záznamy z tabulky SQL Server – SQL Server / Výukový program TSQL |
Vyberte nejlepších 30 procent * Z dbo.Customerorder by NEWID()
Jak získat náhodné záznamy z tabulky SQL Server pomocí Top Percent with NewID() – SQL Server / Výukový program TSQL |
Podle Microsoft Books Online „TABLESAMPLE SYSTEM vrací přibližné procento řádků a generuje náhodnou hodnotu pro každou fyzickou stránku o velikosti 8 kB v tabulce. Na základě náhodné hodnoty pro stránku a procenta zadaného v dotazu, stránka je buď zahrnuta do ukázky, nebo je vyloučena. Každá stránka, která je zahrnuta, vrátí všechny řádky v sadě ukázkových výsledků."
Odtud můžete pochopit, že pokud máte malou tabulku s několika stránkami, nemusí chtít použít TableSample, protože zahrne nebo vyloučí celou stránku. S několika záznamy v tabulce možná budete chtít použít metodu 1 a pro velké tabulky můžete použít TableSample.
Pokud bych spustil níže dotaz na mou tabulku dbo.Customer, někdy nedostanu žádné záznamy a po získání záznamů vrátí všechny záznamy tak, jak jsou umístěny na jedné stránce.
Vybrat * Z dbo.Customer tablesample (30 procent)Můžete také použít požadované řádky s ukázkou tabulky, jak je uvedeno níže. Vrácené řádky se mohou lišit. můžete je omezit použitím top n ve výběrovém dotazu.
Vybrat * Z dbo.Customer tablesample (2 řádky)
Když jsem provedl výše uvedený dotaz na tabulku dbo.Customer s celkem 6 řádky. Buď mi to nevrátilo žádné řádky, nebo všech šest.
Pokud chcete omezit, můžete použít níže uvedený dotaz. Ještě jednou navrhuji použít TableSample s velkou tabulkou, kde máte data na více datových stránkách.
Vyberte top 2 * Z dbo.Customer tablesample (2 řádky)