SELECT
pernyataan hampir tanpa keraguan, pernyataan yang paling umum digunakan dalam SQL.
SELECT
statement digunakan untuk mengambil data dari database. Anda dapat menentukan baris mana yang ingin dikembalikan, dan kolom mana.
Contoh
Berikut adalah contoh untuk mendemonstrasikan SELECT
pernyataan.
SELECT *
FROM Pets;
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Dalam contoh ini kami menggunakan tanda bintang (*
) wildcard untuk mengembalikan semua kolom. Kami juga menggunakan FROM
klausa untuk menentukan tabel mana yang akan diambil datanya.
Jadi kueri ini mengembalikan semua baris dan semua kolom dari Pets
tabel.
Tentukan Kolom
Anda dapat menentukan kolom yang ingin dikembalikan.
Untuk melakukannya, ganti karakter pengganti asterisk dengan nama kolom, masing-masing dipisahkan dengan koma, dalam urutan yang Anda inginkan untuk mengembalikannya.
SELECT PetId, PetName, DOB
FROM Pets;
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 4 | Wag | 2020-03-15 | | 5 | Tweet | 2020-11-28 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | | 8 | Meow | NULL | +---------+-----------+------------+
Secara umum dianggap praktik yang baik untuk melakukannya dengan cara ini, dan hanya mengembalikan kolom yang benar-benar Anda butuhkan. Menggunakan wildcard asterisk untuk mengembalikan semua kolom dapat berdampak buruk pada kinerja, terutama di database yang lebih besar.
Tentukan Baris
Ada banyak cara untuk memfilter hasil hanya ke baris yang Anda minati. Cara paling umum adalah menggunakan WHERE
ayat. Klausa ini memungkinkan Anda untuk menentukan kondisi yang harus dipenuhi oleh sebuah baris agar memenuhi syarat.
Berikut ini contoh untuk didemonstrasikan.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy';
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
Dalam kasus kami, ada dua baris yang memenuhi kondisi pencarian kami.
Kondisi pencarian kami menggunakan operator yang sama (=
) untuk menentukan bahwa nilai PetName
kolom harus sesuai dengan nilai yang ditentukan (Fluffy
) persis.
Ada banyak operator lain yang dapat Anda gunakan dalam kondisi pencarian Anda. Misalnya, Anda dapat menggunakan LIKE
operator untuk mengembalikan hewan peliharaan yang namanya dimulai dengan F
atau Fluff
atau terserah.
Anda dapat menambahkan lebih banyak ketentuan ke WHERE
klausa dengan menggunakan operator seperti AND
dan OR
operator.
Ini contohnya.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
Dalam contoh ini kami mengembalikan semua baris di mana nama hewan peliharaannya adalah Fluffy atau di mana tanggal lahir hewan peliharaan (ditentukan dalam DOB
kolom) kurang dari tanggal tertentu. Kami menggunakan kurang dari operator (<
) untuk menentukannya.
Mengembalikan Data Non-Tabel
SELECT
pernyataan juga dapat digunakan untuk mengembalikan data yang tidak disimpan dalam tabel. Misalnya, sangat sah untuk melakukan ini:
SELECT 'Hey there!';
Hasil:
+--------------------+ | (No column name) | |--------------------| | Hey there! | +--------------------+
Perhatikan bahwa ketika kita melakukannya, kolom tidak memiliki nama. Kita bisa menggunakan alias untuk memberi nama pada bidang yang dihasilkan.
Berikut adalah beberapa contoh lagi untuk memilih data non-tabel, dan memberikan alias untuk setiap bidang yang ditampilkan:
SELECT
2 + 3 AS "2 + 3",
'Fluffy' + ' ' + 'Smith' AS FullName,
SYSDATETIME() AS "Date/time";
Hasil:
+---------+--------------+-----------------------------+ | 2 + 3 | FullName | Date/time | |---------+--------------+-----------------------------| | 5 | Fluffy Smith | 2020-12-04 23:58:55.8483734 | +---------+--------------+-----------------------------+
Berikut ikhtisar singkatnya:
- Kolom pertama hanya menambahkan dua angka.
- Kolom kedua menggabungkan tiga string (termasuk karakter spasi). Anda juga dapat menggabungkan string dengan angka jika diperlukan.
- Kolom ketiga menggunakan
SYSDATETIME()
berfungsi untuk mengembalikan tanggal dan waktu saat ini. Fungsi ini tersedia di SQL Server. DBMS lain memiliki fungsi tanggal dan waktu sendiri. Lihat Fungsi Tanggal/Waktu SQLite, Fungsi Tanggal/Waktu SQL Server, dan Fungsi Tanggal/Waktu PostgreSQL untuk daftar fungsi tanggal &waktu yang tersedia di DBMS tersebut.
Subkueri
Dimungkinkan untuk memiliki beberapa SELECT
pernyataan dalam satu kueri. Kita bisa melakukan ini dengan menggunakan subquery.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Hasil:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Dalam contoh ini, kami menggunakan IN
operator untuk menentukan subquery. Subquery itu memilih data dari tabel lain, dan IN
operator menghubungkannya kembali ke kueri luar.
Mengurutkan Hasil
Anda dapat menggunakan ORDER BY
klausa untuk mengurutkan hasil.
Misalnya, kita dapat mengurutkan hasil sebelumnya berdasarkan PetTypeId
kolom dalam urutan menurun:
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;
Hasil:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 3 | Dog | | 2 | Cat | | 1 | Bird | +-------------+-----------+
Lihat SQL ORDER BY
Klausa untuk Pemula untuk lebih banyak contoh dan penjelasan mendetail.
Lebih Lanjut SELECT
Pernyataan
SELECT
pernyataan adalah pernyataan yang sangat sederhana, tetapi dapat digunakan untuk membuat kueri yang sangat kompleks.
Berikut adalah kueri yang sedikit lebih kompleks daripada kueri sebelumnya.
SELECT
PetTypes.PetType,
COUNT(Pets.PetTypeId) AS Count
FROM Pets
LEFT JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;
Hasil:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
Dalam dunia kueri SQL, ini masih cukup sederhana, namun mengandung banyak elemen yang sering terlihat dalam kueri yang lebih kompleks.
Misalnya, kueri ini menggunakan gabungan untuk mengambil data dari beberapa tabel. Itu juga menggunakan GROUP BY
klausa untuk membagi baris menjadi beberapa kelompok.
Lihat SQL GROUP BY
Klausul untuk Pemula untuk lebih banyak contoh GROUP BY
klausa.
Lihat Tutorial Bergabung SQL untuk melihat cara mengambil data dari beberapa tabel dan mengembalikannya sebagai satu kumpulan hasil.
The SELECT INTO
Pernyataan
Beberapa DBMS mendukung SELECT INTO
penyataan. Ini sedikit berbeda dengan contoh sebelumnya, karena mempengaruhi data dalam database.
SELECT INTO
pernyataan membuat tabel baru dan memasukkan data ke dalamnya dari tabel lain.
Pada dasarnya, ini seperti ini:
SELECT * INTO Table2
FROM Table1;
Dalam contoh ini, kami membuat tabel baru bernama Table2
, dan masukkan semua data dari Table1
ke dalamnya. Table2
akan memiliki definisi yang sama dengan Table1
.
Lihat SQL SELECT INTO
Pernyataan untuk contoh lainnya.
Seperti yang saya singgung, tidak semua DBMS mendukung pernyataan ini. Jika DBMS Anda tidak mendukung SELECT INTO
pernyataan, coba gunakan CREATE TABLE ... AS SELECT
pernyataan sebagai gantinya.
Pernyataan tersebut membuat tabel baru sebagai bagian dari operasinya. Untuk menyisipkan data ke dalam tabel yang sudah ada, coba gunakan INSERT INTO ... SELECT
pernyataan sebagai gantinya.