SELECT
pernyataan mungkin pernyataan yang paling umum digunakan di SQL Server. Sebagian besar waktu pernyataan ini dijalankan terhadap tampilan atau langsung terhadap tabel untuk mengambil baris data tabular.
Namun tampilan dan tabel bukan satu-satunya objek yang dapat Anda jalankan SELECT
pernyataan pada. SELECT
pernyataan juga dapat digunakan pada objek lain seperti fungsi rowset, OPENXML, dan fungsi yang ditentukan pengguna.
Artikel ini memberikan contoh pemilihan data melalui fungsi bernilai tabel.
Contoh 1 – Fungsi Dasar
Berikut adalah fungsi cepat yang memilih data dasar dari tabel melalui fungsi bernilai tabel sebaris.
SELECT * FROM udf_Cats_ITVF();
Hasil:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Fungsinya terlihat seperti ini:
CREATE FUNCTION dbo.udf_Cats_ITVF() RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats ); GO
Fungsi ini hanya memilih semua baris dari tabel. Tidak ada argumen yang diperlukan.
Jika Anda ingin memilih kucing tertentu, Anda perlu menambahkan WHERE
klausa.
SELECT * FROM udf_Cats_ITVF() WHERE CatName = 'Fetch';
Hasil:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Sekarang harus saya akui, fungsi ini agak berlebihan, karena kita bisa saja memilih data langsung dari tabel. Atau kita bisa membuat tampilan untuk melakukan pekerjaan itu. Tetapi fungsi yang ditentukan pengguna memiliki manfaat yang tidak dimiliki tabel dan tampilan:parameter.
Contoh 2 – Fungsi dengan Parameter
Salah satu manfaat fungsi bernilai tabel adalah mendukung parameter. Di sinilah fungsinya menjadi sedikit lebih berguna. Beberapa merujuk ke fungsi bernilai tabel sebagai "tampilan berparameter", karena mereka berperilaku seperti tampilan tetapi dengan fungsionalitas tambahan yang memungkinkan parameter.
Jadi kita bisa membuat variasi dari fungsi sebelumnya untuk menerima argumen untuk nama kucing.
SELECT * FROM udf_CatsByName_ITVF('Fetch');
Hasil:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Fungsi baru terlihat seperti ini:
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName ); GO
Contoh 3 – Bergabung
Fungsi bernilai tabel dapat dimasukkan dalam gabungan.
Di sini, saya memilih semua kolom dari fungsi bernilai tabel yang mengembalikan semua album oleh artis tertentu:
SELECT * FROM ufn_AlbumsByArtist(1);
Hasil:
+------------+-------------------------+---------+ | ArtistId | AlbumName | Genre | |------------+-------------------------+---------| | 1 | Powerslave | Rock | | 1 | Somewhere in Time | Rock | | 1 | Piece of Mind | Rock | | 1 | Killers | Rock | | 1 | No Prayer for the Dying | Rock | +------------+-------------------------+---------+
Satu-satunya masalah dengan fungsi ini adalah tidak mengembalikan nama artis. Jika saya ingin nama artis, saya harus menggabungkannya dengan tabel yang berisi data itu. Dalam hal ini tabel yang berisi nama artis disebut Artists
, jadi saya dapat mengubah kueri saya sebagai berikut:
SELECT ar.ArtistName, aba.AlbumName, aba.Genre FROM ufn_AlbumsByArtist(1) aba INNER JOIN Artists ar ON aba.ArtistId = ar.ArtistId;
Hasil:
+--------------+-------------------------+---------+ | ArtistName | AlbumName | Genre | |--------------+-------------------------+---------| | Iron Maiden | Powerslave | Rock | | Iron Maiden | Somewhere in Time | Rock | | Iron Maiden | Piece of Mind | Rock | | Iron Maiden | Killers | Rock | | Iron Maiden | No Prayer for the Dying | Rock | +--------------+-------------------------+---------+