SQL Advanced
Dalam kesempatan ini saya ingin melanjutkan untuk penulisan saya yang telah saya berikan terdahulu pada SQL Tutorial [Basic] dalam SQL Advanced terbagi dalam perintah perintah lebih lanjut seperti penggabungan perintah, pembentukan tabel, pembentukan index, dll. untuk memasuki tahap ini ada baiknya para pembaca memahami terlebih dahulu pada perintah perintah dasar yang telah saya berikan dalam kesempatan beberapa minggu yang lalu. Sekarang mari kita lanjutkan pada perintah perintah sql pada tingkatan yang lebih lanjut ;
- SQL TOP
Klausa TOP dapat sangat berguna di tabel besar dengan ribuan catatan. Mengembalikan sejumlah besar catatan dapat berdampak pada kinerja.
Catatan : Tidak semua sistem database mendukung klausa TOP.
SQL Server Sintaks
SELECT TOP number|percent column_name(s)
FROM table_name
FROM table_name
SQL SELECT TOP Setara di MySQL dan Oracle
MySQL Sintaks
SELECT column_name(s)
FROM table_name
LIMIT number
FROM table_name
LIMIT number
Contoh
SELECT *
FROM Persons
LIMIT 5
FROM Persons
LIMIT 5
Oracle Sintaks
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
FROM table_name
WHERE ROWNUM <= number
Contoh
SELECT *
FROM Persons
WHERE ROWNUM <=5
FROM Persons
WHERE ROWNUM <=5
SQL TOP Contoh
Table "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
4 | Nilsen | Jantan | Vingvn 23 | Stavanger |
Sekarang kita ingin memilih hanya dua catatan pertama dalam tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT TOP 2 * FROM Persons
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
SQL Contoh TOP %
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
4 | Nilsen | Jantan | Vingvn 23 | Stavanger |
Sekarang kita ingin memilih hanya 50% dari catatan dalam tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT TOP 50 PERCENT * FROM Persons
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
- SQL LIKE
Perintah LIKE digunakan untuk mencari pola yang ditetapkan dalam kolom.
SQL Seperti sintaks
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
FROM table_name
WHERE column_name LIKE pattern
SEPERTI Contoh Operator
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota | |
---|---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes | |
2 | Svendson | Tove | Borgvn 23 | Sandnes | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Sekarang kita ingin memilih orang-orang yang tinggal di sebuah kota yang dimulai dengan "s" dari tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE City LIKE 's%'
WHERE City LIKE 's%'
"%" tanda dapat digunakan untuk menentukan wildcard (hilang huruf dalam pola) baik sebelum dan sesudah pola.
Hasil nya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Selanjutnya, kita ingin memilih orang-orang yang tinggal di sebuah kota yang diakhiri dengan "s" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE City LIKE '%s'
WHERE City LIKE '%s'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
Selanjutnya, kita ingin memilih orang-orang yang tinggal di sebuah kota yang berisi pola "tav" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut:
SELECT * FROM Persons
WHERE City LIKE '%tav%'
WHERE City LIKE '%tav%'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Hal ini juga memungkinkan untuk memilih orang-orang yang tinggal di sebuah kota yang TIDAK mengandung pola "tav" dari tabel "Orang", dengan menggunakan kata kunci TIDAK.
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE City NOT LIKE '%tav%'
WHERE City NOT LIKE '%tav%'
Hasilnya akan terlihat seperti ini:
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
- SQL WILDCARD
Wildcard SQL dapat menggantikan satu atau lebih karakter ketika mencari data dalam database.
Wildcard SQL harus digunakan dengan SQL LIKE.
Dengan SQL, wildcard berikut dapat digunakan :
Wildcard | Deskripsi |
---|---|
% | Sebuah pengganti nol atau lebih karakter |
_ | Sebuah pengganti tepat satu karakter |
[Charlist] | Setiap karakter tunggal di charlist |
[^ Charlist]
atau
[Charlist!]
| Setiap karakter tunggal tidak charlist |
SQL Wildcard Contoh
saya memiliki berikut tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Menggunakan Wildcard %
Sekarang kita ingin memilih orang-orang yang tinggal di sebuah kota yang dimulai dengan "sa" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE City LIKE 'sa%'
WHERE City LIKE 'sa%'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
Selanjutnya, kita ingin memilih orang-orang yang tinggal di sebuah kota yang berisi pola "nes" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut:
SELECT * FROM Persons
WHERE City LIKE '%nes%'
WHERE City LIKE '%nes%'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
Menggunakan Wildcard _
Sekarang kita ingin memilih orang-orang dengan nama pertama yang dimulai dengan karakter, diikuti dengan "la" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE FirstName LIKE '_la'
WHERE FirstName LIKE '_la'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
Selanjutnya, kita ingin memilih orang-orang dengan nama belakang yang dimulai dengan "S", diikuti oleh setiap karakter, diikuti dengan "end", diikuti oleh setiap karakter, diikuti dengan "on" dari tabel "Orang".
Saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE LastName LIKE 'S_end_on'
WHERE LastName LIKE 'S_end_on'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
2 | Svendson | Tove | Borgvn 23 | Sandnes |
Menggunakan [charlist] Wildcard
Sekarang kita ingin memilih orang-orang dengan nama belakang yang dimulai dengan "b" atau "s" atau "p" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut:
SELECT * FROM Persons
WHERE LastName LIKE '[bsp]%'
WHERE LastName LIKE '[bsp]%'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Selanjutnya, kita ingin memilih orang-orang dengan nama belakang yang tidak dimulai dengan "b" atau "s" atau "p" dari tabel "Orang".
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE LastName LIKE '[!bsp]%'
WHERE LastName LIKE '[!bsp]%'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
- SQL IN
SQL IN Sintaks
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
FROM table_name
WHERE column_name IN (value1,value2,...)
IN Contoh Operator
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Sekarang kita ingin memilih orang-orang dengan nama belakang sama dengan "Hansen" atau "Pettersen" dari tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE LastName IN ('Hansen','Pettersen')
WHERE LastName IN ('Hansen','Pettersen')
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
- SQL BETWEEN
BETWEEN memilih berbagai data antara dua nilai. Nilai-nilai dapat angka, teks, atau tanggal.
SQL BETWEEN Sintaks
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
BETWEEN Contoh
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Sekarang kita ingin memilih orang-orang dengan nama belakang abjad antara "Hansen" dan "Pettersen" dari tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'
WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
Catatan: BETWEEN operator diperlakukan berbeda dalam database yang berbeda
Dalam beberapa database, orang dengan Nama_depan "Hansen" atau "Pettersen" tidak akan terdaftar, karena operator BETWEEN hanya memilih bidang yang antara dan tidak termasuk nilai-nilai tes.
Pada database lain, orang-orang dengan Nama_depan "Hansen" atau "Pettersen" akan terdaftar, karena operator BETWEEN memilih bidang yang antara dan termasuk nilai tes.
Dan dalam database lain, orang-orang dengan Nama_depan "Hansen" akan terdaftar, tetapi "Pettersen" tidak akan terdaftar (seperti contoh di atas), karena BETWEEN Operator memilih bidang antara nilai tes, termasuk nilai tes pertama dan tidak termasuk nilai tes akhir.
Oleh karena itu: Periksa bagaimana database Anda memperlakukan BETWEEN operator.
Contoh 2
Untuk menampilkan orang-orang di luar jangkauan pada contoh sebelumnya, gunakan NOT BETWEEN :
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Hansen' AND 'Pettersen'
WHERE LastName
NOT BETWEEN 'Hansen' AND 'Pettersen'
Hasilnya akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
- SQL AS
Dengan SQL, nama AS dapat diberikan ke sebuah tabel atau kolom.
SQL AS
Anda dapat memberikan tabel atau kolom nama lain dengan menggunakan sebuah alias / AS. Ini bisa menjadi hal yang baik untuk dilakukan jika Anda memiliki nama tabel yang sangat panjang atau kompleks atau nama kolom.
Sebuah nama alias / AS bisa apa saja, tetapi biasanya pendek.
SQL AS Sintaks untuk Tabel
SELECT column_name(s)
FROM table_name
AS alias_name
FROM table_name
AS alias_name
SQL AS Sintaks untuk Kolom
SELECT column_name AS alias_name
FROM table_name
FROM table_name
Contoh
Anggaplah kita memiliki sebuah tabel bernama "Orang" dan tabel lain yang disebut "Product_Orders". saya akan memberikan alias tabel dari "p" dan "po" masing-masing.Sekarang kita ingin daftar semua perintah yang "Hansen Ola" bertanggung jawab atas.
saya menggunakan pernyataan SELECT berikut :
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p,
Product_Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola'
FROM Persons AS p,
Product_Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola'
Pernyataan SELECT yang sama tanpa AS :
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons,
Product_Orders
WHERE Persons.LastName='Hansen' AND Persons.FirstName='Ola'
FROM Persons,
Product_Orders
WHERE Persons.LastName='Hansen' AND Persons.FirstName='Ola'
Seperti yang Anda akan melihat dari dua pernyataan SELECT di atas, AS / alias dapat membuat pertanyaan lebih mudah baik untuk menulis dan membaca.
- SQL JOIN
digunakan untuk permintaan data dari dua atau lebih tabel, didasarkan pada hubungan antara kolom tertentu dalam tabel ini.
SQL JOIN
Kata kunci JOIN digunakan dalam sebuah pernyataan SQL untuk query data dari dua atau lebih tabel, didasarkan pada hubungan antara kolom tertentu dalam tabel ini.
Tabel dalam database sering berhubungan satu sama lain dengan kunci.
Kunci utama adalah kolom (atau kombinasi dari kolom) dengan nilai unik untuk setiap baris. Setiap nilai kunci primer harus unik dalam tabel. Tujuannya adalah untuk mengikat data bersama-sama, di tabel, tanpa mengulangi semua data di setiap tabel.
Lihatlah tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Perhatikan bahwa "P_Id" kolom adalah kunci utama dalam tabel "Orang". Ini berarti bahwa tidak ada dua baris dapat memiliki P_Id yang sama. P_Id membedakan dua orang bahkan jika mereka memiliki nama yang sama.
Selanjutnya, kita memiliki "Perintah" tabel :
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
Perhatikan bahwa "O_Id" kolom adalah kunci utama dalam tabel "Orders" dan bahwa "P_Id" kolom mengacu pada orang-orang dalam tabel "Orang" tanpa menggunakan nama mereka.
Perhatikan bahwa hubungan antara dua tabel di atas adalah "P_Id" kolom.
SQL yang berbeda Bergabung
Sebelum kita lanjutkan dengan contoh-contoh, saya akan memberikan daftar jenis JOIN dapat Anda gunakan, dan perbedaan di antara mereka.
- JOIN : Kembali baris ketika ada setidaknya satu perbandingan di kedua tabel
- LEFT JOIN : Kembali semua baris dari tabel kiri, bahkan jika tidak ada perbandingan di tabel kanan
- RIGHT JOIN : Kembali semua baris dari tabel kanan, bahkan jika tidak ada perbandingan di tabel kiri
- FULL JOIN : baris Kembali ketika ada perbandingan di salah satu tabel
- SQL INNER JOIN
SQL INNER JOIN Sintaks
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
PS : INNER JOIN sama dengan JOIN.
SQL INNER JOIN Contoh
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Tabel "Perintah" :
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
Sekarang kita ingin daftar semua orang dengan perintah.
Saya menggunakan pernyataan SELECT berikut :
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Hasilnya akan terlihat seperti ini :
LastName | FirstName | OrderNo |
---|---|---|
Hansen | Ola | 22456 |
Hansen | Ola | 24562 |
Pettersen | Kari | 77895 |
Pettersen | Kari | 44678 |
The INNER JOIN baris kata kunci kembali ketika ada setidaknya satu perbandingan di kedua tabel. Jika ada baris dalam "Orang" yang tidak memiliki perbandingan di "Perintah", baris itu TIDAK akan terdaftar.
- SQL LEFT JOIN
Kata kunci LEFT JOIN mengembalikan semua baris dari tabel kiri (table_name1), bahkan jika tidak ada perbandingan di tabel kanan (table_name2).
SQL LEFT JOIN Sintaks
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
PS : Dalam beberapa database LEFT JOIN disebut LEFT Outer JOIN.
SQL LEFT JOIN Contoh
Tabel "Orang" tabel :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Tabel "Perintah" :
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
Sekarang kita ingin daftar semua orang dan pesanan mereka - jika ada, dari tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Hasilnya akan terlihat seperti ini :
LastName | FirstName | OrderNo |
---|---|---|
Hansen | Ola | 22456 |
Hansen | Ola | 24562 |
Pettersen | Kari | 77895 |
Pettersen | Kari | 44678 |
Svendson | Tove |
Kata kunci LEFT JOIN mengembalikan semua baris dari tabel kiri (LastName), bahkan jika tidak ada perbandingan di tabel kanan (orderNo).
- SQL RIGHT JOIN
Kata kunci RIGHT JOIN mengembalikan semua baris dari tabel kanan (table_name2), bahkan jika tidak ada perbandingan di tabel kiri (table_name1).
SQL RIGHT JOIN Sintaks
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
PS : Dalam beberapa database RIGHT JOIN disebut RIGHT Outer JOIN.
SQL RIGHT JOIN Contoh
tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Tabel "Perintah" :
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
Sekarang kita ingin daftar semua perintah dengan orang-orang yang mengandung - jika ada, dari tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
FROM Persons
RIGHT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Hasilnya akan terlihat seperti ini :
LastName | FirstName | OrderNo |
---|---|---|
Hansen | Ola | 22456 |
Hansen | Ola | 24562 |
Pettersen | Kari | 77895 |
Pettersen | Kari | 44678 |
34764 |
Kata kunci RIGHT JOIN mengembalikan semua baris dari tabel kanan (OrderNo), bahkan jika tidak ada perbandingan di tabel kiri (LastName).
- SQL FULL JOIN
FULL JOIN baris kata kunci kembali ketika ada perbandingan di salah satu tabel.
SQL FULL JOIN Sintaks
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
SQL FULL JOIN Contoh
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Tabel "Perintah" :
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
Sekarang kita ingin daftar semua orang dan pesanan mereka, dan semua perintah dengan orang-orang mereka.
saya menggunakan pernyataan SELECT berikut :
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Hasilnya akan terlihat seperti ini :
LastName | FirstName | OrderNo |
---|---|---|
Hansen | Ola | 22456 |
Hansen | Ola | 24562 |
Pettersen | Kari | 77895 |
Pettersen | Kari | 44678 |
Svendson | Tove | |
34764 |
Kata kunci FULL JOIN mengembalikan semua baris dari tabel kiri (LastName), dan semua baris dari tabel kanan (OrderNo). Jika ada baris dalam "Orang" yang tidak memiliki perbandingan di "Perintah", atau jika ada baris dalam "OrderNo" yang tidak memiliki pertandingan di "LastName", baris itu akan terdaftar juga.
- SQL UNION
digunakan untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT.
Perhatikan bahwa setiap pernyataan SELECT dalam UNION harus memiliki jumlah yang sama dari kolom. Kolom juga harus memiliki tipe yang sama data. Juga, kolom dalam setiap pernyataan SELECT harus dalam urutan yang sama.
SQL UNION Sintaks
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION
SELECT column_name(s) FROM table_name2
Catatan : Operator UNION memilih hanya nilai yang berbeda secara default. Untuk memungkinkan nilai ganda, gunakan UNION ALL.
SQL UNION ALL Sintaks
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UNION ALL
SELECT column_name(s) FROM table_name2
PS : nama kolom dalam hasil UNION selalu sama dengan nama kolom dalam pernyataan SELECT pertama di UNION.
Contoh SQL UNION
Lihatlah tabel berikut:
"Employees_Norway" :
E_ID | E_Name |
---|---|
01 | Hansen, Ola |
02 | Svendson, Tove |
03 | Svendson, Stephen |
04 | Pettersen, Kari |
"Employees_USA" :
E_ID | E_Name |
---|---|
01 | Turner, Sally |
02 | Kent, Clark |
03 | Svendson, Stephen |
04 | Scott, Stephen |
Sekarang kita ingin daftar semua berbeda karyawan di Norwegia dan Amerika Serikat.
saya menggunakan pernyataan SELECT berikut :
SELECT E_Name FROM Employees_Norway
UNION
SELECT E_Name FROM Employees_USA
UNION
SELECT E_Name FROM Employees_USA
Hasilnya akan terlihat seperti ini :
E_Name |
---|
Hansen, Ola |
Svendson, Tove |
Svendson, Stephen |
Pettersen, Kari |
Turner, Sally |
Kent, Clark |
Scott, Stephen |
Catatan: Perintah ini tidak dapat digunakan untuk membuat daftar semua karyawan di Norwegia dan Amerika Serikat. Pada contoh di atas kita memiliki dua karyawan dengan nama yang sama, dan hanya salah satu dari mereka akan terdaftar. Perintah UNION memilih hanya nilai-nilai yang berbeda.
SQL UNION Contoh ALL
Sekarang kita ingin daftar semua karyawan di Norwegia dan Amerika Serikat :
SELECT E_Name FROM Employees_Norway
UNION ALL
SELECT E_Name FROM Employees_USA
UNION ALL
SELECT E_Name FROM Employees_USA
Hasil
E_Name |
---|
Hansen, Ola |
Svendson, Tove |
Svendson, Stephen |
Pettersen, Kari |
Turner, Sally |
Kent, Clark |
Svendson, Stephen |
Scott, Stephen |
- SQL SELECT INTO
SELECT INTO memilih data dari satu meja dan memasukkan ke tabel yang berbeda.
SELECT INTO yang paling sering digunakan untuk membuat salinan cadangan dari tabel.
SQL SELECT INTO Sintaks
Kita dapat memilih semua kolom ke dalam tabel baru :
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Atau kita dapat memilih hanya kolom yang kita inginkan ke dalam tabel baru:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
INTO new_table_name [IN externaldatabase]
FROM old_tablename
SQL SELECT INTO Contoh
Membuat Copy Backup - Sekarang kita ingin membuat salinan dari data di tabel "Orang".
saya menggunakan pernyataan SQL berikut :
SELECT *
INTO Persons_Backup
FROM Persons
INTO Persons_Backup
FROM Persons
Kita juga bisa menggunakan klausa IN untuk menyalin tabel ke database lain:
SELECT *
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons
saya juga dapat menyalin hanya beberapa bidang ke dalam tabel baru:
SELECT LastName,FirstName
INTO Persons_Backup
FROM Persons
INTO Persons_Backup
FROM Persons
SQL SELECT INTO - Dengan Klausul MANA
Kita juga bisa menambahkan klausa WHERE.
Pernyataan SQL berikut membuat "Persons_Backup" tabel dengan hanya orang-orang yang tinggal di kota "Sandnes":
SELECT LastName,Firstname
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'
SQL SELECT INTO - Tabel Bergabung
Memilih data dari lebih dari satu tabel juga mungkin.
Contoh berikut membuat "Persons_Order_Backup" tabel berisi data dari dua tabel "Orang" dan "Orders" :
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
- CREATE DATABASE
Pernyataan CREATE DATABASE digunakan untuk membuat database.
SQL CREATE DATABASE Sintaks
CREATE DATABASE database_name
Contoh menciptakan DATABASE
Sekarang kita ingin membuat database yang disebut "my_db".
saya menggunakan pernyataan CREATE DATABASE berikut :
CREATE DATABASE my_db
Tabel database dapat ditambahkan dengan pernyataan CREATE TABLE.
- CREATE TABLE
Pernyataan CREATE TABLE digunakan untuk membuat tabel dalam database.
SQL CREATE TABLE Syntax
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
Tipe data menentukan jenis data kolom dapat terus. Untuk referensi lengkap semua jenis data yang tersedia di MS Access, MySQL, dan SQL Server, pergi ke alamat lengkap saya referensi Tipe Data .
MENCIPTAKAN Contoh TABLE
Sekarang kita ingin membuat tabel yang disebut "Orang" yang berisi lima kolom : P_Id, LastName, FirstName, Alamat, dan Kota.
saya menggunakan pernyataan CREATE TABLE berikut:
CREATE TABLE Persons
(
P_Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Kolom P_Id adalah tipe int dan akan terus nomor satu. The LastName, FirstName, Alamat, dan kolom Kota adalah dari tipe varchar dengan panjang maksimal 255 karakter.
Tabel "Orang" sekarang kosong akan terlihat seperti ini :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
Tabel kosong dapat diisi dengan data dengan SQL INSERT INTO.
SQL Constraints
digunakan untuk membatasi jenis data yang dapat masuk ke tabel.Constraints dapat ditentukan ketika tabel yang dibuat (dengan pernyataan CREATE TABLE) atau setelah tabel dibuat (dengan pernyataan ALTER TABLE).saya akan fokus pada kendala berikut:- NOT NULL
- UNIK
- PRIMARY KEY
- FOREIGN KEY
- LIHAT
- DEFAULT
berikutnya akan menjelaskan kendala masing-masing secara rinci.
- SQL NOT NULL
Secara default, kolom tabel dapat memegang nilai-nilai NULL.
SQL NOT NULL Kendala
NOT NULL memaksa kolom untuk tidak menerima nilai-nilai NULL.
NOT NULL memaksa Constraints untuk selalu mengandung nilai. Ini berarti bahwa Anda tidak dapat menyisipkan catatan baru, atau memperbarui rekor tanpa menambahkan nilai untuk bidang ini.
SQL berikut memberlakukan "P_Id" kolom dan "LastName" kolom untuk tidak menerima nilai NULL :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
- SQL UNIQUE
mengidentifikasi setiap record dalam tabel database.
UNIQUE dan PRIMARY keduanya memberikan jaminan untuk keunikan untuk kolom atau set kolom.
Sebuah kendala PRIMARY KEY otomatis memiliki kendala UNIK didefinisikan di atasnya. Perhatikan bahwa Anda dapat memiliki kendala UNIK banyak per tabel, tetapi hanya satu kendala PRIMARY KEY per tabel.
SQL UNIQUE Constraints pada CREATE TABLE
The SQL berikut membuat kendala UNIQUE pada kolom "P_Id" ketika "Orang" tabel dibuat :
MySQL :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Untuk memungkinkan penamaan UNIQUE, dan untuk mendefinisikan UNIQUE pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
SQL UNIQUE Constraints pada ALTER TABLE
Untuk membuat kendala UNIQUE pada kolom "P_Id" ketika tabel sudah dibuat, gunakan SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ADD UNIQUE (P_Id)
ADD UNIQUE (P_Id)
Untuk memungkinkan penamaan kendala UNIQUE, dan untuk mendefinisikan kendala UNIQUE pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
Untuk DROP
Untuk menjatuhkan kendala UNIQUE, gunakan SQL berikut :
MySQL :
ALTER TABLE Persons
DROP INDEX uc_PersonID
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access :
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
DROP CONSTRAINT uc_PersonID
- SQL PRIMARY KEY
mengidentifikasi setiap record dalam tabel database.
primery key harus mengandung nilai-nilai yang unik. Sebuah kolom primery key tidak dapat berisi nilai NULL.
Setiap tabel harus memiliki primary key, dan setiap tabel hanya dapat memiliki satu primary key.
SQL PRIMARY KEY di CREATE TABLE
berikut membuat PRIMARY KEY pada kolom "P_Id" ketika tabel "Orang" dibuat :
MySQL :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Untuk memungkinkan penamaan kendala PRIMARY KEY, dan untuk mendefinisikan PRIMARY KEY pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Catatan : Dalam contoh di atas hanya ada SATU PRIMARY KEY (pk_PersonID). Namun, nilai pk_PersonID terdiri dari dua kolom (P_Id dan LastName).
SQL PRIMARY KEY pada ALTER TABLE
Untuk membuat PRIMARY KEY pada kolom "P_Id" ketika tabel sudah dibuat, gunakan SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
ADD PRIMARY KEY (P_Id)
Untuk memungkinkan penamaan kendala PRIMARY KEY, dan untuk mendefinisikan PRIMARY KEY pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
Catatan : Jika Anda menggunakan pernyataan ALTER TABLE untuk menambahkan primary key, kolom primary key (s) harus sudah telah dinyatakan tidak mengandung nilai NULL (ketika tabel pertama kali diciptakan).
Untuk DROP PRIMARY KEY
Untuk DROP PRIMARY KEY, gunakan SQL berikut :
MySQL :
ALTER TABLE Persons
DROP PRIMARY KEY
DROP PRIMARY KEY
SQL Server / Oracle / MS Access :
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
DROP CONSTRAINT pk_PersonID
- SQL FOREIGN KEY
FOREIGN KEY dalam satu poin tabel untuk PRIMARY KEY di meja lain.
Mari kita menggambarkan foreign key dengan sebuah contoh. Lihatlah dua tabel berikut :
Tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Tabel "Perintah" :
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Perhatikan bahwa "P_Id" kolom dalam poin tabel "Orders" pada kolom "P_Id" dalam tabel "Orang".
"P_Id" kolom dalam tabel "Orang" adalah PRIMARY KEY pada tabel "Orang".
"P_Id" kolom dalam tabel "Orders" adalah FOREIGN KEY pada tabel "Orders".
FOREIGN KEY digunakan untuk mencegah tindakan-tindakan yang akan merusak hubungan antara tabel.
FOREIGN KEY juga mencegah bahwa data yang tidak valid yang membentuk dimasukkan ke dalam kolom kunci asing, karena itu harus menjadi salah satu nilai yang terkandung dalam tabel ini menunjuk ke.
SQL FOREIGN KEY di CREATE TABLE
berikut membuat FOREIGN KEY pada kolom "P_Id" ketika "Perintah" tabel dibuat :
MySQL :
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
SQL Server / Oracle / MS Access :
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
Untuk memungkinkan penamaan FOREIGN KEY, dan untuk mendefinisikan FOREIGN KEY pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
SQL FOREIGN KEY pada ALTER TABLE
Untuk membuat FOREIGN KEY pada kolom "P_Id" ketika tabel "Perintah" sudah dibuat, gunakan SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Untuk memungkinkan penamaan FOREIGN KEY, dan untuk mendefinisikan kendala FOREIGN KEY pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Untuk DROP FOREIGN KEY
Untuk menjatuhkan kendala FOREIGN KEY, gunakan SQL berikut :
MySQL :
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access :
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
DROP CONSTRAINT fk_PerOrders
- SQL CHECK CONSTRAINT
Digunakan untuk membatasi rentang nilai yang dapat ditempatkan dalam kolom.
Jika anda mendefinisikan suatu pada satu kolom memungkinkan nilai-nilai tertentu saja untuk kolom ini. Jika anda mendefinisikan suatu di tabel dapat membatasi nilai dalam kolom tertentu berdasarkan nilai-nilai dalam kolom lain pada baris.
SQL CHECK CONSTRAINT pada CREATE TABLE
Berikut membuat CHECK CONSTRAINT pada kolom "P_Id" ketika tabel "Orang" dibuat.CHECK CONSTRAINT menentukan bahwa kolom "P_Id" hanya harus menyertakan bilangan bulat lebih besar dari 0.
MySQL :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Untuk memungkinkan penamaan suatu CHECK CONSTRAINT, dan untuk mendefinisikan kendala CHECK pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)
SQL LIHAT Kendala pada ALTER TABLE
Untuk membuat CHECK CONSTRAINT pada kolom "P_Id" ketika tabel sudah dibuat, gunakan SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ADD CHECK (P_Id>0)
ADD CHECK (P_Id>0)
Untuk memungkinkan penamaan suatu CHECK CONSTRAINT, dan untuk mendefinisikan kendala CHECK pada beberapa kolom, gunakan sintaks SQL berikut :
MySQL / SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
DROP CHECK CONSTRAINT
Untuk menjatuhkan CHECK CONSTRAINT, gunakan SQL berikut :
SQL Server / Oracle / MS Access :
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
DROP CONSTRAINT chk_Person
MySQL :
ALTER TABLE Persons
DROP CHECK chk_Person
DROP CHECK chk_Person
- SQL DEFAULT
digunakan untuk memasukkan nilai default ke kolom.
Nilai default akan ditambahkan ke semua catatan baru, jika tidak ada nilai lain yang ditentukan.
SQL DEFAULT CONSTRAINT pada CREATE TABLE
The SQL berikut membuat CONSTRAINT DEFAULT pada kolom "Kota" ketika tabel "Orang" dibuat :
My SQL / SQL Server / Oracle / MS Access :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
CONSTRAINT DEFAULT juga dapat digunakan untuk memasukkan nilai-nilai sistem, dengan menggunakan fungsi seperti GETDATE () :
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)
SQL DEFAULT CONSTRAINT pada ALTER TABLE
Untuk membuat CONSTRAINT DEFAULT pada kolom "Kota" ketika tabel sudah dibuat, gunakan SQL berikut :
MySQL :
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
ALTER City SET DEFAULT 'SANDNES'
SQL Server / MS Access :
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
ALTER COLUMN City SET DEFAULT 'SANDNES'
Oracle :
ALTER TABLE Persons
MODIFY City DEFAULT 'SANDNES'
MODIFY City DEFAULT 'SANDNES'
Untuk DROP DEFAULT CONSTRAINT
Untuk menjatuhkan CONSTRAINT DEFAULT, gunakan SQL berikut :
MySQL :
ALTER TABLE Persons
ALTER City DROP DEFAULT
ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access :
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT
ALTER COLUMN City DROP DEFAULT
- SQL CREATE INDEX
digunakan untuk membuat indeks dalam tabel.
Indeks memungkinkan aplikasi database untuk menemukan data yang cepat, tanpa membaca seluruh tabel.
Indeks
Indeks dapat dibuat dalam sebuah tabel untuk menemukan data yang lebih cepat dan efisien.
Para pengguna tidak dapat melihat indeks, mereka hanya digunakan untuk mempercepat pencarian / query.
Catatan : Memperbarui tabel dengan indeks membutuhkan waktu lebih dari memperbarui tanpa tabel (karena indeks juga membutuhkan update). Jadi Anda hanya harus membuat indeks pada kolom (dan tabel) yang akan sering dicari lawan.
SQL membuat indeks Sintaks
Membuat index di atas tabel. Nilai ganda diperbolehkan :
CREATE INDEX index_name
ON table_name (column_name)
ON table_name (column_name)
Sintaks SQL CREATE UNIQUE INDEX
Menciptakan indeks yang unik di atas tabel. Nilai ganda tidak diperbolehkan :
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
ON table_name (column_name)
Catatan : Sintaks untuk membuat indeks bervariasi antara database yang berbeda. Oleh karena itu Periksa sintaks untuk membuat indeks dalam database Anda.
CREATE INDEX Contoh
Pernyataan SQL berikut membuat index bernama "Pindex" pada kolom "LastName" dalam tabel "Orang" :
CREATE INDEX PIndex
ON Persons (LastName)
ON Persons (LastName)
Jika Anda ingin membuat indeks pada kombinasi kolom, Anda dapat daftar nama kolom dalam kurung, dipisahkan dengan koma :
CREATE INDEX PIndex
ON Persons (LastName, FirstName)
ON Persons (LastName, FirstName)
- SQL DROP INDEX
Indeks, tabel, dan database dengan mudah dapat dihapus / dihilangkan dengan pernyataan DROP.
DROP INDEX
INDEX DROP digunakan untuk menghapus indeks dalam sebuah tabel.
DROP INDEX Sintaks untuk Akses MS :
DROP INDEX index_name ON table_name
DROP INDEX Sintaks untuk MS SQL Server :
DROP INDEX table_name.index_name
DROP INDEX Sintaks untuk DB2/Oracle :
DROP INDEX index_name
DROP INDEX Sintaks untuk MySQL :
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE
Pernyataan DROP TABLE digunakan untuk menghapus tabel.
DROP TABLE table_name
DROP DATABASE
Pernyataan DROP DATABASE digunakan untuk menghapus database.
DROP DATABASE database_name
TRUNCATE TABLE
Bagaimana jika kita hanya ingin menghapus data dalam tabel, dan bukan tabel itu sendiri ?
Kemudian, menggunakan pernyataan TABLE truncate :
TRUNCATE TABLE table_name
- SQL ALTER TABLE
digunakan untuk menambah, menghapus, atau memodifikasi kolom dalam tabel yang ada.
SQL ALTER TABLE Syntax
Untuk menambahkan kolom dalam sebuah tabel, gunakan sintaks berikut :
ALTER TABLE table_name
ADD column_name datatype
ADD column_name datatype
Untuk menghapus kolom dalam sebuah tabel, gunakan sintaks berikut (perhatikan bahwa beberapa sistem database tidak mengijinkan menghapus kolom) :
ALTER TABLE table_name
DROP COLUMN column_name
DROP COLUMN column_name
Untuk mengubah tipe data dari kolom dalam sebuah tabel, gunakan sintaks berikut :
My SQL / SQL Server / MS Access :
ALTER TABLE table_name
ALTER COLUMN column_name datatype
ALTER COLUMN column_name datatype
Oracle :
ALTER TABLE table_name
MODIFY column_name datatype
MODIFY column_name datatype
SQL ALTER TABLE Contoh
Lihatlah tabel "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Sekarang kita ingin menambahkan kolom bernama "DateOfBirth" dalam tabel "Orang".
saya menggunakan pernyataan SQL berikut :
ALTER TABLE Persons
ADD DateOfBirth date
ADD DateOfBirth date
Perhatikan bahwa kolom baru, "DateOfBirth", adalah tipe tanggal dan akan mengadakan kencan.Tipe data menentukan jenis data kolom dapat terus. Untuk referensi lengkap semua jenis data yang tersedia di MS Access, MySQL, dan SQL Server, referensi Tipe Data telah saya tuliskan dalam blogger ini .
The "Orang" tabel sekarang akan seperti ini:
P_Id | LastName | FirstName | Alamat | Kota | DateOfBirth |
---|---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes | |
2 | Svendson | Tove | Borgvn 23 | Sandnes | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Mengubah Contoh Tipe Data
Sekarang kita ingin mengubah tipe data dari kolom bernama "DateOfBirth" dalam tabel "Orang".
saya menggunakan pernyataan SQL berikut:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year
ALTER COLUMN DateOfBirth year
Perhatikan bahwa "DateOfBirth" kolom sekarang tahun jenis dan akan mengadakan satu tahun dalam format dua digit atau empat digit.
DROP Contoh KOLOM
Selanjutnya, kita ingin menghapus kolom bernama "DateOfBirth" dalam tabel "Orang".
saya menggunakan pernyataan SQL berikut:
ALTER TABLE Persons
DROP COLUMN DateOfBirth
DROP COLUMN DateOfBirth
The "Orang" tabel sekarang akan seperti ini:
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
- SQL AUTO INCREMENT
Auto-increment memungkinkan nomor unik yang akan dihasilkan ketika rekor baru dimasukkan ke dalam tabel.
AUTO increment
Sangat sering kita ingin nilai dari field kunci utama yang akan dibuat secara otomatis setiap kali rekor baru dimasukkan.
saya ingin menciptakan auto-increment dalam sebuah tabel.
Sintaks untuk MySQL
Pernyataan SQL berikut mendefinisikan "P_Id" kolom menjadi auto-increment key dalam tabel "Orang":
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
MySQL menggunakan kata kunci AUTO_INCREMENT untuk melakukan fitur auto-increment.
Secara default, nilai awal untuk AUTO_INCREMENT adalah 1, dan akan kenaikan sebesar 1 untuk setiap record baru.
Untuk membiarkan awal urutan AUTO_INCREMENT dengan nilai yang lain, menggunakan pernyataan SQL berikut :
ALTER TABLE Persons AUTO_INCREMENT=100
Untuk menyisipkan catatan baru ke dalam tabel "Orang", kita tidak perlu menentukan nilai untuk kolom "P_Id" (nilai unik akan ditambahkan secara otomatis) :
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')
VALUES ('Lars','Monsen')
Pernyataan SQL di atas akan memasukkan catatan baru ke dalam tabel "Orang". "P_Id" kolom akan diberi nilai yang unik. "FirstName" kolom akan diatur ke "Lars" dan "LastName" kolom akan diatur ke "Monsen".
Sintaks untuk SQL Server
Pernyataan SQL berikut mendefinisikan "P_Id" kolom menjadi auto-increment dalam tabel "Orang" :
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
MS SQL Server menggunakan kata kunci IDENTITAS untuk melakukan fitur auto-increment.
Secara default, nilai awal untuk IDENTITAS adalah 1, dan akan kenaikan sebesar 1 untuk setiap record baru.
Untuk menetapkan bahwa "P_Id" kolom harus mulai dengan nilai 10 dan kenaikan sebesar 5, mengubah identitas untuk IDENTITAS (10,5).
Untuk menyisipkan catatan baru ke dalam tabel "Orang", kita tidak perlu menentukan nilai untuk kolom "P_Id" (nilai unik akan ditambahkan secara otomatis) :
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')
VALUES ('Lars','Monsen')
Pernyataan SQL di atas akan memasukkan catatan baru ke dalam tabel "Orang". "P_Id" kolom akan diberi nilai yang unik. "FirstName" kolom akan diatur ke "Lars" dan "LastName" kolom akan diatur ke "Monsen".
Sintaks untuk SQL ACCESS
berikut mendefinisikan "P_Id" kolom menjadi auto-increment key bidang utama dalam tabel "Orang" :
CREATE TABLE Persons
(
P_Id PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(
P_Id PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
MS Access menggunakan kata kunci AUTOINCREMENT untuk melakukan fitur auto-increment.
Secara default, nilai awal untuk AUTOINCREMENT adalah 1, dan akan kenaikan sebesar 1 untuk setiap record baru.
Untuk menetapkan bahwa "P_Id" kolom harus mulai dengan nilai 10 dan kenaikan sebesar 5, ubah autoincrement untuk AUTOINCREMENT (10,5).
Untuk menyisipkan catatan baru ke dalam tabel "Orang", kita tidak perlu menentukan nilai untuk kolom "P_Id" (nilai unik akan ditambahkan secara otomatis) :
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')
VALUES ('Lars','Monsen')
Pernyataan SQL di atas akan memasukkan catatan baru ke dalam tabel "Orang". "P_Id" kolom akan diberi nilai yang unik. The "FirstName" kolom akan diatur ke "Lars" dan "LastName" kolom akan diatur ke "Monsen".
Sintaks untuk Oracle
Di Oracle kode ini sedikit lebih rumit.
Anda harus menciptakan auto-increment dengan objek urutan (objek ini menghasilkan urutan nomor).
Gunakan sintaks membuat urutan berikut :
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
Kode di atas membuat objek urutan disebut seq_person, yang dimulai dengan 1 dan akan increment
1. Ini juga akan cache hingga 10 nilai untuk kinerja. Pilihan Cache menentukan berapa banyak nilai urutan akan disimpan dalam memori untuk akses cepat. Untuk menyisipkan catatan baru ke dalam tabel "Orang", kita harus menggunakan fungsi nextval (fungsi ini mengambil nilai berikutnya dari urutan seq_person) :
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
VALUES (seq_person.nextval,'Lars','Monsen')
Pernyataan SQL di atas akan memasukkan catatan baru ke dalam tabel "Orang". "P_Id" kolom akan diberi nomor berikutnya dari urutan seq_person. "FirstName" kolom akan diatur ke "Lars" dan "LastName" kolom akan diatur ke "Monsen".
- SQL VIEWS
view adalah tabel virtual.
Bab ini menunjukkan cara membuat, memperbarui, dan menghapus view.
SQL CREATE VIEW
Dalam SQL, view adalah tabel virtual berdasarkan hasil set-dari pernyataan SQL.
A view berisi baris dan kolom, seperti tabel sebenarnya. Bidang dalam view adalah bidang dari satu atau lebih tabel yang nyata dalam database.
Anda dapat menambahkan fungsi-fungsi SQL, WHERE, dan JOIN pernyataan kepada view dan menyajikan data seolah-olah data yang datang dari satu tabel tunggal.
SQL membuat tampilan Sintaks
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE condition
Catatan : A view selalu menunjukkan up-to-date data Mesin database akan membuat ulang data, menggunakan pernyataan SQL view ini, setiap kali pengguna melakukan query.
SQL CREATE VIEW Contoh
Jika Anda memiliki database Northwind Anda dapat melihat bahwa ia memiliki beberapa view terinstal secara default.
View "Current Product List" daftar semua produk yang aktif (produk yang tidak dihentikan) dari tabel "Produk". View ini dibuat dengan SQL berikut :
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
Kita dapat query view di atas sebagai berikut :
SELECT * FROM [Current Product List]
View lain dalam database contoh Northwind memilih setiap produk dalam tabel "Produk" dengan harga satuan yang lebih tinggi dari harga unit rata-rata :
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
Kita dapat query view di atas sebagai berikut :
SELECT * FROM [Products Above Average Price]
View lain dalam database Northwind menghitung total penjualan untuk setiap kategori pada tahun 1997. Perhatikan bahwa view ini memilih data dari view lain yaitu "Penjualan Produk untuk tahun 1997" :
CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName
Kita dapat query view di atas sebagai berikut :
SELECT * FROM [Category Sales For 1997]
Kita juga dapat menambahkan kondisi untuk query. Sekarang kita ingin melihat total penjualan hanya untuk "Minuman" kategori :
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'
WHERE CategoryName='Beverages'
SQL Updating View
Anda dapat memperbarui tampilan dengan menggunakan sintaks berikut :
SQL CREATE OR REPLACE Sintaks VIEW
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE condition
Sekarang kita ingin menambahkan "Kategori" kolom ke "Current Product List" view. Saya akan memperbarui tampilan dengan SQL berikut :
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
SQL Drop View
Anda dapat menghapus view dengan perintah DROP VIEW.
SQL DROP VIEW Syntax
DROP VIEW view_name
- SQL DATE
Bagian yang paling sulit ketika bekerja dengan tanggal adalah untuk memastikan bahwa format tanggal Anda mencoba untuk memasukkan, sesuai dengan format dari kolom tanggal dalam database.
Selama data Anda hanya berisi bagian tanggal, pertanyaan Anda akan bekerja seperti yang diharapkan. Namun, jika porsi waktu yang terlibat, itu akan rumit.
Sebelum berbicara tentang komplikasi query untuk tanggal, kita akan melihat built-in fungsi yang paling penting untuk bekerja dengan tanggal.
MySQL Date Fungsi
Tabel berikut berisi daftar yang paling penting built-in fungsi tanggal di MySQL :
Fungsi | Deskripsi |
---|---|
NOW () | Mengembalikan tanggal dan waktu |
CURDATE () | Mengembalikan tanggal |
CURTIME () | Mengembalikan waktu saat ini |
DATE () | Ekstrak bagian tanggal tanggal atau tanggal / waktu ekspresi |
EXTRACT () | Pengembalian bagian tunggal dari tanggal / waktu |
DATE_ADD () | Menambahkan interval waktu tertentu untuk kencan |
DATE_SUB () | Mengurangi interval waktu tertentu dari tanggal |
DATEDIFF () | Mengembalikan jumlah hari antara dua tanggal |
DATE_FORMAT () | Menampilkan tanggal / waktu data dalam format yang berbeda |
Tanggal SQL Server Fungsi
Tabel berikut berisi daftar yang paling penting built-in fungsi tanggal di SQL Server :
Fungsi | Deskripsi |
---|---|
GETDATE () | Mengembalikan tanggal dan waktu |
DATEPART () | Pengembalian bagian tunggal dari tanggal / waktu |
DATEADD () | Menambah atau mengurangi interval waktu tertentu dari tanggal |
DATEDIFF () | Mengembalikan waktu antara dua tanggal |
CONVERT () | Menampilkan tanggal / waktu data dalam format yang berbeda |
Tanggal data SQL Jenis
MySQL dilengkapi dengan jenis data berikut untuk menyimpan tanggal atau nilai tanggal / waktu dalam database :
- DATE - format YYYY-MM-DD
- DATETIME - format: YYYY-MM-DD HH: MM: SS
- TIMESTAMP - format: YYYY-MM-DD HH: MM: SS
- TAHUN - format YYYY atau YY
SQL Server datang dengan jenis data berikut untuk menyimpan tanggal atau nilai tanggal / waktu dalam database :
- DATE - format YYYY-MM-DD
- DATETIME - format: YYYY-MM-DD HH: MM: SS
- Smalldatetime - format: YYYY-MM-DD HH: MM: SS
- TIMESTAMP - format: nomor unik
Catatan: Jenis tanggal yang dipilih untuk kolom ketika Anda membuat tabel baru di database Anda!
Untuk gambaran dari semua jenis data yang tersedia, pergi ke alamat lengkap saya referensi Tipe Data .
SQL Bekerja dengan DATES
Anda dapat membandingkan dua tanggal dengan mudah jika tidak ada komponen waktu yang terlibat
Asumsikan kita memiliki berikut "Perintah" tabel :
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
Sekarang kita ingin memilih catatan dengan OrderDate dari "2008-11-11" dari tabel di atas.
saya menggunakan pernyataan SELECT berikut :
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Hasilnya akan terlihat seperti ini :
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Sekarang, asumsikan bahwa tabel "Perintah" terlihat seperti ini (perhatikan komponen waktu dalam kolom "OrderDate") :
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 13:23:44 |
2 | Camembert Pierrot | 2008-11-09 15:45:21 |
3 | Mozzarella di Giovanni | 2008-11-11 11:12:01 |
4 | Mascarpone Fabioli | 2008-10-29 14:56:59 |
Jika kita menggunakan pernyataan SELECT yang sama seperti di atas :
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
kita akan mendapatkan hasil tidak. Hal ini karena permintaan yang hanya mencari tanggal tanpa porsi waktu.
Tip : Jika Anda ingin menyimpan pertanyaan Anda sederhana dan mudah untuk mempertahankan, tidak memungkinkan komponen waktu tanggal Anda.
- SQL NULL
Nilai NULL merupakan data yang diketahui hilang.
Secara default, kolom tabel dapat memegang nilai-nilai NULL.
Bab ini akan menjelaskan IS NULL dan IS NOT NULL.
SQL NULL Nilai
Jika kolom dalam sebuah tabel adalah opsional, kita dapat menyisipkan catatan baru atau memperbarui catatan yang ada tanpa menambahkan nilai ke kolom ini. Ini berarti bahwa lapangan akan disimpan dengan nilai NULL. Nilai NULL diperlakukan berbeda dari nilai-nilai lain. NULL digunakan sebagai tempat untuk nilai yang tidak diketahui atau tidak berlaku.
Catatan : Hal ini tidak mungkin untuk membandingkan NULL dan 0, mereka tidak setara.
SQL Bekerja dengan Nilai NULL
Lihatlah tabel berikut "Orang" :
P_Id | LastName | FirstName | Alamat | Kota |
---|---|---|---|---|
1 | Hansen | Ola | Sandnes | |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Stavanger |
Misalkan bahwa "Alamat" kolom dalam tabel "Orang" adalah opsional. Ini berarti bahwa jika kita memasukkan catatan dengan tidak ada nilai untuk kolom "Alamat", "Alamat" kolom akan disimpan dengan nilai NULL.
Bagaimana kita bisa menguji nilai-nilai NULL ?
Hal ini tidak mungkin untuk menguji nilai-nilai NULL dengan operator perbandingan,
seperti =, <, atau <>.
saya akan harus menggunakan IS NULL dan IS NOT NULL sebagai gantinya.
SQL IS NULL
Bagaimana kita memilih hanya record dengan nilai-nilai NULL di kolom "Alamat" ?
saya akan harus menggunakan IS NULL Operator :
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
WHERE Address IS NULL
Hasilnya akan terlihat seperti ini :
LastName | FirstName | Alamat |
---|---|---|
Hansen | Ola | |
Pettersen | Kari |
Tip : Selalu gunakan IS NULL untuk mencari nilai-nilai NULL.
SQL IS NOT NULL
Bagaimana kita memilih hanya catatan tanpa nilai-nilai NULL di kolom "Alamat" ?
saya akan harus menggunakan IS NOT NULL :
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL
WHERE Address IS NOT NULL
Hasilnya akan terlihat seperti ini :
LastName | FirstName | Alamat |
---|---|---|
Svendson | Tove | Borgvn 23 |
Berikutnya kita akan melihat ISNULL (), NVL (), IFNULL () dan Bersatu () fungsi.
- SQL NULL FUNGSI
SQL ISNULL (), NVL (), IFNULL () dan COALESCE ()
Functions
Lihatlah tabel berikut "Produk" :
P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | Mascarpone | 32.56 | 23 | |
3 | Gorgonzola | 15.67 | 9 | 20 |
Misalkan bahwa "UnitsOnOrder" kolom adalah opsional, dan dapat berisi nilai NULL.
saya memiliki pernyataan SELECT berikut :
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
FROM Products
Dalam contoh di atas, jika salah satu dari nilai-nilai "UnitsOnOrder" adalah NULL, hasilnya adalah NULL.
ISNULL Microsoft () Fungsi ini digunakan untuk menentukan bagaimana kita ingin memperlakukan nilai NULL.
The NVL (), IFNULL (), dan COALESCE () fungsi juga dapat digunakan untuk mencapai hasil yang sama.
Dalam kasus ini kita ingin nilai-nilai NULL menjadi nol.
Di bawah, jika "UnitsOnOrder" adalah NULL itu tidak akan merugikan perhitungan, karena ISNULL () mengembalikan nol jika nilai adalah NULL :
SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
FROM Products
Oracle
Oracle tidak memiliki fungsi ISNULL (). Namun, kita dapat menggunakan NVL () fungsi untuk mencapai hasil yang sama :
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
FROM Products
MySQL
MySQL memang memiliki ISNULL () fungsi. Namun, ia bekerja sedikit berbeda dari ISNULL Microsoft () fungsi.
Dalam MySQL kita dapat menggunakan IFNULL () fungsi, seperti ini :
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
FROM Products
atau kita dapat menggunakan Bersatu () fungsi, seperti ini :
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
FROM Products
No comments:
Post a Comment