Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите произволни редове от таблица на SQL Server - SQL Server / TSQL урок, част 117

Сценарий:

Вие работите като разработчик на SQL Server. От вас се иска да предоставите примерни произволни данни от таблицата dbo.Customer. Може да поискате да предоставите произволни 100 реда или някакъв процент от общите данни от таблицата. Каква заявка ще използвате, за да предоставите необходимия изход?

Решение:

В предишната публикация научихме как да получим първите n реда от таблицата. Можем да предоставим броя на редовете или процента на записите, които искаме да получим от таблица, като използваме TOP в нашата заявка за избор.

Можем да използваме същата клауза Top, но тъй като от нас се иска да предоставим произволните записи , първо трябва да ги сортираме на случаен принцип. Можем да използваме функцията newid() в ред по клауза, за да ги сортираме на случаен принцип.

Нека създадем таблица dbo.Customer с някои примерни данни.

Create table dbo.Customer
 (Id int,
  FName VARCHAR(50),
  LName VARCHAR(50),
  CountryShortName CHAR(2))
GO
insert into dbo.Customer
Values (
1,'Raza','M','PK'),
(2,'Rita','John','US'),
(3,'Sukhi','Singh',Null),
(4,'James','Smith','CA'),
(5,'Robert','Ladson','US'),
(6,'Alice','John','US')
 
 
 1) използвайте NewID ( ) в Order by за получаване на произволни записи
Да приемем, че ако се интересуваме да получим 3 произволни записа от таблицата dbo.Customer, можем да използваме по-долу заявка.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
Как да получите произволни записи от таблица на SQL Server - SQL Server / TSQL урок
 можете също да използвате процент, ако желаете, както е показано по-долу

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Как да получите произволни записи от таблицата на SQL Server, като използвате Top Percent с NewID() - SQL Server / TSQL урок

2) Чрез използване на СИСТЕМА TABLESAMPLE
Съгласно Microsoft Books Online „TABLESAMPLE SYSTEM връща приблизителен процент редове и генерира произволна стойност за всяка физическа страница от 8 KB в таблицата. Въз основа на произволната стойност за страница и процента, посочен в заявката, страница е или включена в извадката, или изключена. Всяка включена страница връща всички редове в примерния набор от резултати".

От тук можете да разберете, че ако имате малка таблица с няколко страници, вие може да не искате да използвате TableSample, тъй като ще включва или изключва цялата страница. С няколко записа в таблицата може да искате да използвате метод 1, а за големи таблици можете да използвате TableSample.

Ако изпълня заявката по-долу в моята таблица dbo.Customer, понякога няма да получа никакви записи и когато получите записите, той ще върне всички записи, както са поставени на една страница.

Select * From dbo.Customer tablesample (30 percent)
 Можете също да използвате редове, които искате, с примерна таблица, както е показано по-долу. Върнатите редове могат да варират. можете да ги ограничите, като използвате top n в заявката за избор.


Select * From dbo.Customer tablesample (2 rows)

Когато изпълних по-горе заявка на dbo.Customer таблица с общо 6 реда. Или ми върна нито един ред, или всичките шест.

Ако искате да ограничите, можете да използвате заявката по-долу. Още веднъж ще ви предложа да използвате TableSample с голяма таблица, където имате данни за множество страници с данни.

Select top 2 * From dbo.Customer tablesample (2 rows)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Различни начини за наблюдение на групите за наличност на SQL Server AlwaysOn

  2. MIN и MAX агрегатни функции в SQL Server

  3. Знайте как да възстановите изтрита таблица в SQL Server 2012 без архивиране

  4. Намерете най-малкото неизползвано число в SQL Server

  5. Как COUNT() работи в SQL Server