Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Contoh Pernyataan Gabung Sederhana di SQL Server

Contoh berikut menggunakan T-SQL untuk menggabungkan dua tabel di SQL Server. Ini menggunakan VALUES konstruktor nilai tabel sebagai tabel sumber.

Misalkan kita membuat tabel seperti ini:

CREATE TABLE Idiots (
    IdiotId int IDENTITY(1,1) NOT NULL,
    FirstName varchar(50),
    LastName varchar(50)
    );

INSERT INTO Idiots VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders');

SELECT * FROM Idiots;

Hasil:

+-----------+-------------+------------+
| IdiotId   | FirstName   | LastName   |
|-----------+-------------+------------|
| 1         | Peter       | Griffin    |
| 2         | Homer       | Simpson    |
| 3         | Ned         | Flanders   |
+-----------+-------------+------------+

Dan misalkan kita ingin melakukan operasi penggabungan. Kami ingin menyisipkan baris baru, tetapi jika baris sudah ada dengan nilai yang cocok dengan yang ada di sumber kami, maka kami ingin memperbarui baris yang ada sebagai gantinya (alih-alih menyisipkan baris baru).

Kita bisa melakukannya seperti ini:

DECLARE @Changes TABLE(Change VARCHAR(20));

MERGE INTO Idiots AS Target  
USING ( VALUES 
            (3, 'Ned', 'Okily Dokily!'), 
            (4, 'Lloyd','Christmas'), 
            (5, 'Harry', 'Dunne')
        ) AS Source ( IdiotId, FirstName, LastName )  
ON Target.IdiotId = Source.IdiotId
AND Target.FirstName = Source.FirstName
WHEN MATCHED THEN
    UPDATE SET FirstName = Source.FirstName, LastName = Source.LastName
WHEN NOT MATCHED BY TARGET THEN
    INSERT (FirstName, LastName) VALUES (Source.FirstName, Source.LastName)
OUTPUT $action INTO @Changes;

SELECT Change, COUNT(*) AS Count  
FROM @Changes  
GROUP BY Change;

Hasil:

+----------+---------+
| Change   | Count   |
|----------+---------|
| INSERT   | 2       |
| UPDATE   | 1       |
+----------+---------+

Dua baris baru dimasukkan dan satu telah diperbarui.

Di sini, kami menggunakan konstruktor nilai tabel (VALUES ) untuk menentukan nilai baru untuk tabel.

Dalam hal ini kami memeriksa IdiotId dan FirstName kolom. Pada dasarnya, jika ID dan nama depan sama, maka kami ingin memperbarui baris yang ada daripada memasukkan yang baru.

Kami menggunakan WHEN MATCHED untuk menentukan apa yang harus terjadi ketika data dari VALUES . kami klausa cocok dengan data dalam tabel target. Dalam hal ini, kami cukup memperbarui baris dengan data baru dari VALUES .

Kami menggunakan WHEN NOT MATCHED BY TARGET untuk menentukan apa yang harus terjadi ketika tidak ada kecocokan. Dalam hal ini kami menyisipkan baris baru dengan data baru.

Kami juga menggunakan variabel yang disebut @Changes untuk melihat output dari operasi penggabungan kami. Kami menggunakan OUTPUT klausa setelah operasi penggabungan untuk ini. Itulah yang memberi kami tabel yang dihasilkan di atas.

Sekarang kita dapat memeriksa tabel target untuk melihat dampak operasi penggabungan terhadapnya:

SELECT * FROM Idiots;

Hasil:

+-----------+-------------+---------------+
| IdiotId   | FirstName   | LastName      |
|-----------+-------------+---------------|
| 1         | Peter       | Griffin       |
| 2         | Homer       | Simpson       |
| 3         | Ned         | Okily Dokily! |
| 4         | Lloyd       | Christmas     |
| 5         | Harry       | Dunne         |
+-----------+-------------+---------------+

Kita dapat melihat bahwa Idiot nomor 3 (Ned) telah memperbarui nama belakangnya. Kita juga dapat melihat bahwa dua idiot baru telah ditambahkan ke meja (Lloyd dan Harry).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengelompokkan berdasarkan bulan dari bidang Tanggal menggunakan sql

  2. Ubah Bahasa untuk Sesi Saat Ini di SQL Server

  3. Menghitung DISTINCT pada beberapa kolom

  4. Pemicu Masuk di SQL Server

  5. Bagaimana Melakukan KIRI SEMI BERGABUNG di SQL Server