mysql join tutorial inner
Sözdizimi ve programlama örnekleri ile İç, Dış, Çapraz, Sol, Sağ ve Öz gibi farklı MySQL JOIN ifadeleri hakkında bilgi edinin:
Bu eğitimde, MySQL JOIN hakkında bilgi edinecek ve ayrıca MySQL'de desteklenen farklı Joins türlerini anlayacağız. En basit haliyle JOIN, tek bir sorguya karşı birden çok tablodaki verileri almak / güncellemek veya silmek için bir araç olarak düşünülebilir.
Dolayısıyla, temelde JOIN, belirli bir koşula göre verileri almak için 2 veya daha fazla tabloyu birleştirir.
MySQL ayrıca birden çok tablodaki verileri - alt sorgular kullanarak ve UNION vb. Kullanarak birden çok sorguyu birleştirerek sorgulamanın diğer farklı yollarını da destekler.
Ne öğreneceksin:
- Normalleştirilmiş Tablolar
- MySQL JOIN
- MySQL JOIN Türleri
- MySQL GÜNCELLEME ve SİLME İLE BİRLEŞİN
- Sonuç
Normalleştirilmiş Tablolar
Normalleştirilmiş MySQL veritabanlarında, tablolar, Yabancı anahtarlar gibi anahtar kısıtlamalar aracılığıyla ortak sütunlara karşı ilişkilere sahiptir.
Bunu bir örnek yardımıyla anlamaya çalışalım - 2 tablo olduğunu varsayalım, EMPLOYEE ve EMPLOYEE_DEPARTMENT. Şimdi normalize edilmemiş bir veritabanında - yani tüm sütunlara sahip tek bir tabloda, aynı Departmanın parçası olan çok sayıda Çalışan olabileceğinden, örneğin Departman hakkında birçok bilgi kopyalanacaktır.
Dolayısıyla, bu kopyaları azaltmak ve depolamadan tasarruf etmek için veritabanları normalleştirilmiş bir durumda tutulur.
Bu durumda, bu durumda, ÇALIŞAN tablosundaki Departman_id alanıyla Departmana başvururuz ve Departmanla ilgili tüm ilgili bilgiler - Departman Bilgisi, Departman başkanı vb. EMPLOYEE_DEPARTMENT tablosunun bir parçası olarak saklanabilir.
Özetle - EMPLOYEE ve EMPLOYEE_DEPARTMENT, EMPLOYEE tablosu için YABANCI ANAHTAR ve EMPLOYEE_DEPARTMENT tablosu için PRIMARY ANAHTAR görevi gören Department_id alanı aracılığıyla birbirine bağlıdır.
Aşağıdaki görüntü, bu iki tablo arasında aşağıdaki yollarla bir ilişkiye sahip resimli bir temsildir. Yabancı Anahtar Kısıtlaması
MySQL JOIN
MySQL JOIN, belirli bir koşula göre 2 veya daha fazla tablodan verileri almak, güncellemek veya silmek için kullanılır. Bu nedenle, JOIN her zaman SELECT, UPDATE veya DELETE ifadeleriyle birlikte kullanılır.
JOIN komutunun sözdizimi:
SELECT ile KATIL
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
UPDATE ile KATIL
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
DELETE ile KATIL
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
Lütfen JOIN'in tek bir sorguda birden çok tabloya uygulanabileceğini unutmayın, ancak basitleştirmek için önce Joins'i 2 tabloyla kullanmayı anlamaya çalışalım.
Söz diziminin farklı bölümleri şunları içerir:
- {column_list} - Bu, sorgumuzun sonucu olarak almak istediğimiz sütunların adlarını temsil eder.
- {JoinType} - Bu, uyguladığımız Join türünü gösterir. Veri getirebilen aşağıdaki farklı JOINS türleri vardır:
- İÇ BİRLEŞİM
- DIŞ BİRLEŞTİRME
- SOL DIŞ KATILMA
- RIGHT OUTER JOIN
- CROSS JOIN
Eğitimin sonraki bölümlerinde tüm bu farklı MySQL JOINS türlerini öğreneceğiz.
- {JoinCondition} - Bu, JOIN'in verileri sorgulaması ve getirmesi için kullanılacak sütun koşullarıdır.
Bir sonraki bölümde, MySQL'de bulunan farklı Birleştirme türlerini tartışacağız.
MySQL JOIN Türleri
Örnek Veri Hazırlama
JOINS'i kullanmak için, aşağıdaki ayrıntılarla birlikte Çalışan ve Çalışan_Bölümü 2 tablo kullanacağız. Yararlı bir siteyi kullanabilir / başvurabilirsiniz İşte şema için sahte veriler oluşturmak için.
Tablo oluşturma ve ekleme için Liste Sorguları:
CREATE TABLE IF NOT EXISTS Employee_Department ( name varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name varchar(100), id int not null auto_increment, address varchar(100), Department_id int, PRIMARY KEY (id), FOREIGN KEY (Department_id) references Employee_Department(id) ); INSERT INTO `Employee_Department` VALUES ('Information Technology','1'), ('HR','2'), ('Finance','3'), ('Accounting','4'), ('Housekeeping','5'), ('Security','6'), ('Support','7'), ('Contract Staff','8'), ('Sales','9'), ('Management','10'); INSERT INTO `Employee` VALUES ('Veniam','1','640 Damon Junction
East Mathew, NY 68818','3'), ('Molestiae','2','6658 Hollis Club
Ernamouth, TX 19743','10'), ('Officiis','3','59965 Mason Neck Apt. 985
Kareemborough, NV 85535','9'), ('Rerum','4','91067 Geovany Fort
Hanefort, WA 92863','6'), ('Et','5','7647 Reva Shores Suite 970
New Audrafort, OH 17846-5397','2'), ('Et','6','9419 Carmela Burg Apt. 687
Aimeebury, SD 32389-4489','8'), ('Laborum','7','6961 Weissnat Drive
Donnellyfort, MT 53947','6'), ('Cupiditate','8','117 Nellie Summit Suite 982
South Heavenfurt, CA 45675','8'), ('Eveniet','9','9086 Mariam Square Suite 698
South Dulce, MT 82861-3079','2'), ('Rerum','10','783 Goodwin Burgs Apt. 429
Willmsfort, UT 42820-1019','9'), ('Quis','11','42928 Ernesto Trail
East Jules, WV 87169-2851','1'), ('Esse','12','161 Kassulke Stravenue Apt. 937
Williamsonton, MS 62622','7'), ('Dolores','13','22811 Liliana Trail Apt. 890
South Ernesto, MT 04134','10'), ('Ut','14','981 Laron Overpass Suite 361
West Olahaven, FL 46982-7801','10'), ('Mollitia','15','411 Louisa Mill
South Maximefort, MA 04903','8'), ('Necessitatibus','16','2853 Jonathon Turnpike
Quitzonville, KY 54776','4'), ('Fugit','17','3647 Rosalinda Corner
Maureenstad, RI 96605','5'), ('Corporis','18','03559 Nicholas Circle Apt. 364
West Zettaberg, ID 58592-3447','8'), ('Neque','19','56111 Alysson Gateway Apt. 212
Leschbury, VT 90605-2306','8'), ('Velit','20','263 O'Keefe Avenue Apt. 884
West Missouri, IL 50303','6'),
İÇ BİRLEŞİM
INNER JOIN, JOIN'in en yaygın biçimidir ve çok yaygın olarak kullanılır. Neredeyse hepiniz bunu bir noktada kullanmış olmalısınız. Söz dizimini ve ardından bazı örnek sorguları görelim.
Sözdizimi:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
Yukarıda belirtilen tablolardan (Çalışan ve Çalışan_Bölümü) tüm Çalışanlar için Departman_nameslerini almak için sorgu:
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id
İşte yukarıdaki sorgunun çıktısı:
İşçi adı | Bölüm Adı |
---|---|
bir şeyler | Güvenlik |
DSÖ | Bilişim teknolojisi |
Ve | İK |
düşmek | İK |
ben | Finansman |
ihtiyaçlar | Muhasebe |
Fgit | Kat hizmetleri |
atıştırmalıklar | Güvenlik |
Lütfen | Güvenlik |
Bu | Destek |
Ve | Sözleşmeli Personel |
şevk | Sözleşmeli Personel |
Dayanıklılık | Sözleşmeli Personel |
vücut | Sözleşmeli Personel |
Fuar | Sözleşmeli Personel |
ofisler | Satış |
bir şeyler | Satış |
sıkıntılar | Yönetim |
Ağrıları | Yönetim |
Dışarı | Yönetim |
Not: Burada sütun adı takma adlarını kullandık. Misal: Employee.name Employee_name olarak - yalnızca sonuçları daha okunaklı ve kapsamlı hale getirmek için.
Bu sorguyu yalnızca 'm' harfiyle başlayan adları alacak şekilde değiştirelim.
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id WHERE Employee.name like 'm%'
Çıktı aşağıdadır:
İşçi adı | Bölüm Adı | |||||
---|---|---|---|---|---|---|
atıştırmalıklar | 7 | 6961 Weissnat Sürücüsü Donnellyfort, MT 53947 | 6 | BOŞ | BOŞ | BOŞ |
sıkıntılar | Yönetim | |||||
Dayanıklılık | Sözleşmeli Personel |
Ve şimdi INNER JOIN'i Venn Diyagramının yardımıyla aşağıdaki gibi anlayalım. Sonuç olarak döndürülen satırlar, JOIN koşuluyla eşleşen her iki tablo arasında örtüşen verilerden oluşur.
DIŞ BİRLEŞTİRME
OUTER JOIN, eşleşmeyen satırları (veya sorgulanan sütunlar için boş veriye sahip satırları) dahil etme dışında 2 veya daha fazla tablodan veri almak için kullanılır.
Dış Birleştirmeyi daha iyi anlamak için, alanlara sahip yeni bir ofis_konumları ekleyin - kimlik ve adres ve orijinal olarak oluşturulan Çalışan tablosuna 'office_id' adlı yeni bir sütun ekleyin.
İşte aynı sorgular:
CREATE TABLE IF NOT EXISTS office_locations ( address varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); ALTER TABLE Employee ADD COLUMN office_id int; INSERT INTO `office_locations`(address) VALUES('Bangalore'), ('Mumbai'), ('Seattle'), ('Santa Clara'); UPDATE Employee SET office_id=1 where id % 2 = 0; UPDATE Employee SET office_id=2 where id % 3 = 0;
OUTER JOINS'i resimsel olarak anlamak için lütfen aşağıdaki Venn Şemasına bakın:
2 tür OUTER JOIN vardır
a) SOL DIŞ BİRLEŞTİRME
Adından da anlaşılacağı gibi, bu Join türü, JOIN sorgusunun sol tarafındaki tablodan tüm satırları (NULL değerler dahil) alır. Basit bir deyişle, JOIN koşuluyla eşleşmeyen tüm sonuçlar / satırlar, doğru tablo için NULL değerlere sahip sonuçlarla döndürülür.
Örneğin, tüm Çalışanlar için konum verilerine ihtiyacımız var - yani tüm Çalışanların ofis adreslerinin ne olduğunu öğrenin.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Yukarıdaki sorgunun çıktısı:
İsim | İD | Adres | Department_id | Office_id | Ofis adresi | İD |
---|---|---|---|---|---|---|
ben | bir | 640 Damon Kavşağı Doğu Mathew, NY 68818 | 3 | BOŞ | BOŞ | BOŞ |
sıkıntılar | iki | 6658 Hollis Kulübü Ernamouth, TX 19743 | 10 | bir | Bangalore | bir |
ofisler | 3 | 59965 Mason Boyun Apt. 985 Kareemborough, NV 85535 | 9 | iki | Bombay | iki |
bir şeyler | 4 | 91067 Geovany Kalesi) Hanefort, WA 92863 | 6 | bir | Bangalore | bir |
Ve | 5 | 7647 Reva Shores Süit 970 Yeni Audrafort, OH 17846-5397 | iki | BOŞ | BOŞ | BOŞ |
Ve | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | iki | Bombay | iki |
şevk | 8 | 117 Nellie Zirve Süiti 982 Güney Heavenfurt, CA 45675 | 8 | bir | Bangalore | bir |
düşmek | 9 | 9086 Mariam Meydanı Süit 698 Güney Dulce, MT 82861-3079 | iki | iki | Bombay | iki |
bir şeyler | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | bir | Bangalore | bir |
DSÖ | on bir | 42928 Ernesto Patikası Doğu Jules, WV 87169-2851 | bir | BOŞ | BOŞ | BOŞ |
Bu | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | iki | Bombay | iki |
Ağrıları | 13 | 22811 Liliana Trail Apt. 890 Güney Ernesto, MT 04134 | 10 | BOŞ | BOŞ | BOŞ |
Dışarı | 14 | 981 Laron Üstgeçit Süiti 361 Batı Olahaven, FL 46982-7801 | 10 | bir | Bangalore | bir |
Dayanıklılık | on beş | 411 Louisa Değirmeni Güney Maximefort, MA 04903 | 8 | iki | Bombay | iki |
ihtiyaçlar | 16 | 2853 Jonathon Paralı Yolu Quitzonville, KY 54776 | 4 | bir | Bangalore | bir |
FLED | 17 | 3647 Rosalinda Köşe Maureenstad, RI 96605 | 5 | BOŞ | BOŞ | BOŞ |
vücut | 18 | 03559 Nicholas Circle Apt. 364 Batı Zettaberg, Kimlik 58592-3447 | 8 | iki | Bombay | iki |
veya | 19 | 56111 Alysson Ağ Geçidi Apt. 212 Leschbury, VT 90605-2306 | 8 | BOŞ | BOŞ | BOŞ |
Lütfen | yirmi | 263 O'Keefe Caddesi Apt. 884 Batı Missouri, IL 50303 | 6 | bir | Bangalore | bir |
b) SAĞ DIŞ BİRLEŞTİRME
LEFT JOIN'e benzer şekilde, bu Join türünde, sağdaki tablodan eşleşmeyen tüm kayıtlar, sol taraftaki tablo için sütunlarda NULL değerlerle döndürülür.
tutulmada yeni proje nasıl açılır
Örneğin, örnek tablolarımızla, RIGHT JOIN'i LEFT JOIN için kullandığımız sorguya karşı çalıştırırsak, Employee tablosunda konum ayarlı satırlar olmadığından 'Seattle' ve 'Santa Clara' şehirleri için NULL değerleri alacağız. bu değerlere.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Yukarıdaki sorgunun çıktısı:
İsim | İD | Adres | Department_id | Office_id | Ofis adresi | İD |
---|---|---|---|---|---|---|
Lütfen | yirmi | 263 O'Keefe Caddesi Apt. 884 Batı Missouri, IL 50303 | 6 | bir | Bangalore | bir |
sıkıntılar | iki | 6658 Hollis Kulübü Ernamouth, TX 19743 | 10 | bir | Bangalore | bir |
bir şeyler | 4 | 91067 Geovany Kalesi Hanefort, WA 92863 | 6 | bir | Bangalore | bir |
şevk | 8 | 117 Nellie Zirve Süiti 982 Güney Heavenfurt, CA 45675 | 8 | bir | Bangalore | bir |
bir şeyler | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | bir | Bangalore | bir |
Dışarı | 14 | 981 Laron Üstgeçit Süiti 361 Batı Olahaven, FL 46982-7801 | 10 | bir | Bangalore | bir |
ihtiyaçlar | 16 | 2853 Jonathon Paralı Yolu Quitzonville, KY 54776 | 4 | bir | Bangalore | bir |
ofisler | 3 | 59965 Mason Boyun Apt. 985 Kareemborough, NV 85535 | 9 | iki | Bombay | iki |
Ve | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | iki | Bombay | iki |
düşmek | 9 | 9086 Mariam Meydanı Süit 698 Güney Dulce, MT 82861-3079 | iki | iki | Bombay | iki |
Bu | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | iki | Bombay | iki |
Dayanıklılık | on beş | 411 Louisa Değirmeni Güney Maximefort, MA 04903 | 8 | iki | Bombay | iki |
vücut | 18 | 03559 Nicholas Circle Apt. 364 Batı Zettaberg, Kimlik 58592-3447 | 8 | iki | Bombay | iki |
BOŞ | BOŞ | BOŞ | BOŞ | BOŞ | Seattle | 3 |
BOŞ | BOŞ | BOŞ | BOŞ | BOŞ | Santa Clara | 4 |
Notlar / İpuçları:
- Microsoft SQL gibi diğer ilişkisel veritabanlarında - FULL OUTER JOIN adı verilen başka bir OUTER JOIN türü bulabilirsiniz. INNER ve OUTER Joins kombinasyonundan başka bir şey değildir - yani hem LEFT hem de RIGHT tablolardan NULL değerleri döndürecektir.
- DAHİLİ ve DIŞ BİRLEŞTİRMELER arasındaki farklar hakkında açıklama ve örneklerle birlikte ayrıntılı bir tartışma için lütfen eğiticimize bakın İşte.
- OUTER JOIN sorgularında - RIGHT OUTER JOIN ve LEFT OUTER JOIN, daha fazla okunabilirlik için sırasıyla RIGHT JOIN ve LEFT JOIN olarak belirtilebilir.
CROSS JOIN
CROSS JOIN ayrıca Kartezyen Ürün olarak da adlandırılır. M ve n'nin, tablo1 ve tablo2'deki JOIN koşuluna göre eşleşen satır sayısı olduğu toplam m x n satırla eşleşen Join koşullarına karşı bir sonuç döndürür.
Çalışan ve ofis_konumları olmak üzere 2 tablodan sonuç almak için CROSS JOIN için örnek sorgu görelim
SELECT * from Employee CROSS JOIN office_locations
Döndürülen çıktı, her iki tablodaki satırların çarpımından başka bir şey olmayan toplam 80 satır içerecektir - Çalışan (20) x ofis_konumları (4) => 80
Lütfen bunu not al, CROSS JOIN yaparken, zaten m x n sonuç alacağınız için herhangi bir JOIN koşulu belirtmenize gerek yoktur.
Notlar / İpuçları:
CROSS JOIN ile ilişkili pek çok kullanım senaryosu bulunmadığından pek çok kez bulamazsınız. Bu Birleştirme, genellikle bir kişi 2 tablodaki verilere karşı tüm olası kombinasyonları almak istediğinde yürütülür.
Örneğin: Bir giysi ihracatçısı olduğunuzu ve biri renk verileri, diğeri beden verileri içeren 2 tablonuz olduğunu varsayalım. Burada, envanteri sağlamak için, tüm giysilerin tüm beden ve renk kombinasyonları için tedarik edildiğinden emin olmak için her iki tablodan da CROSS JOIN yapmayı düşünebilirsiniz.
SELF JOIN
SELF JOIN, tıpkı diğer INNER veya OUTER Join gibi, her iki tablonun, yani Katılma ve Katılma tablosunun aynı olması istisnasıdır.
Aynı tablonun satırları arasındaki ilişkiyi bulmak istediğimizde genellikle SELF Joins kullanırız. Örneğin, bir tabloda hem Çalışan kimliği hem de Süpervizör Çalışan kimliği varsa, yöneticinin adını Çalışanın adıyla karşılaştırmak istiyorsak, masaya kendisine karşı katılabiliriz.
Lütfen, SELF JOIN için tablo takma adlarını kullanmanız gerektiğini unutmayın, böylece Birleştirme koşulları doğru tabloya göre belirtilebilir.
Burada bir örnek görelim:
SELECT e1.name as Employee1, e2.name as Employee2 from Employee e1 inner join Employee e2 on e1.office_id = e2.office_id where e1.Department_id = e2.Department_id
Burada, aynı ofis konumuna ve Departmana sahip Çalışan adlarını bulmak için Çalışan tablosuna katıldık.
Çalışan1 | Çalışan2 |
---|---|
Ve | Dayanıklılık |
sıkıntılar | sıkıntılar |
sıkıntılar | Dışarı |
Oficiis | ofisler |
bir şeyler | bir şeyler |
bir şeyler | Lütfen |
Ve | Ve |
Ve | vücut |
şevk | şevk |
düşmek | düşmek |
bir şeyler | bir şeyler |
Bu | Bu |
Dışarı | sıkıntılar |
Dışarı | Dışarı |
Dayanıklılık | Ve |
Dayanıklılık | Dayanıklılık |
Dayanıklılık | vücut |
ihtiyaçlar | ihtiyaçlar |
vücut | Ve |
vücut | Dayanıklılık |
vücut | vücut |
Lütfen | bir şeyler |
Lütfen | Lütfen |
Bahsettiğimiz gibi, SELF JOIN sadece Katılma ve Katılma tablolarına sahip olmaktan ibarettir, SELF JOIN'i INNER veya OUTER Joins ile kullanabiliriz.
MySQL GÜNCELLEME ve SİLME İLE BİRLEŞİN
Şimdiye kadar, Birleştirmeleri SELECT deyimleriyle tartıştık. Bununla birlikte, Joins, MySQL DELETE ve UPDATE ifadeleriyle de kullanılabilir.
sql veritabanı mülakat soruları ve cevapları
Sözdizimi burada aynı kalır. Konsepti daha iyi anlamak için birkaç örnek görelim.
INNER JOIN ile GÜNCELLE
Employee tablosundaki adresi, office_locations tablosunda bulunan ofis konumunun adıyla değiştirmek istediğimizi varsayalım. Burada şehir adını office_locations'tan almak ve aynı sorguyu güncellemek için INNER JOIN kullanabiliriz.
Örnek sorgu:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
Buna benzer şekilde, UPDATE, belirli kullanım durumlarına yönelik gereksinime bağlı olarak diğer Birleştirme türleriyle de kullanılabilir.
INNER JOIN ile SİL
Tabloları, Employee ve Employee_Departments'ı örnek olarak kullanacağız. Satış Departmanına ait tüm Çalışan kayıtlarını silmek istediğimizi ve satış Departmanı girişini de silmek istediğimizi varsayalım.
YABANCI ANAHTAR kısıtlaması olarak Department_id kullandığımız için, birden çok tablo için JOIN ile DELETE kullanmadan önce bu kısıtlamayı önce SİLMELİSİNİZ.
Önce Employee tablosunda Department_id için oluşturulan kısıtlamanın adını bulalım. CREATE TABLE komutunu almak için sadece komutu çalıştırın.
show create table Employee
Çıktıyı şu şekilde alacaksınız:
CREATE TABLE `Employee` ( `name` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `address` varchar(100) DEFAULT NULL, `Department_id` int DEFAULT NULL, `office_id` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `Department_id` (`Department_id`), CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_id`) REFERENCES `Employee_Department` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Şimdi yukarıdaki komuttan FOREIGN_KEY kısıtlamasının adına başvurabilirsiniz, bu 'Employee_ibfk_1' ve aşağıdaki komutu çalıştırarak bu kısıtlamayı Çalışan tablosundan kaldırmak için bu adı kullanabiliriz:
alter table Employee drop constraint Employee_ibfk_1
Şimdi DELETE komutunu INNER JOIN ile çalıştıralım
delete emp_dept, emp from Employee emp inner join Employee_Department emp_dept on emp.Department_id = emp_dept.id where emp.Department_id = 9
Bu komutun çıktısı hayır olacaktır. Silinen satır sayısı (ve bu, yukarıdaki JOIN sorgusunda başvurulan her iki tablodaki satırları başarıyla SİLMELİDİR)
Sıkça Sorulan Sorular
S # 1) MySQL'de kaç tür Birleştirme vardır?
Cevap: MySQL, öncelikli olarak 3 tür Birleştirmeyi destekler. Bunlar:
- İç birleşim
- Dış Birleşim - Sol Dış Birleşim ve Sağ Dış Birleşim
- Çapraz Birleşim
S # 2) Join sadece 2 tablo için kullanılabilir mi?
Cevap: Birleştirmeler 2 veya 2'den fazla tabloya uygulanabilir. Çoğu zaman Joins 2 tablo için kullanılır.
Aşağıda 3 tablo kullanan bir INNER JOIN örneği bulunmaktadır:
select Employee.name as emp_name, Employee_Department.name as dept_name, office_locations.address as office_location from Employee inner join Employee_Department on Employee.Department_id = Employee_Department.id inner join office_locations on Employee.office_id = office_locations.id
Yukarıdaki sorgunun çıktısı:
emp_name | dept_name | Ofis yeri |
---|---|---|
Dışarı | Yönetim | Bangalore |
sıkıntılar | Yönetim | Bangalore |
bir şeyler | Güvenlik | Bangalore |
Ve | Sözleşmeli Personel | Bombay |
şevk | Sözleşmeli Personel | Bangalore |
düşmek | İK | Bombay |
Bu | Destek | Bombay |
Dayanıklılık | Sözleşmeli Personel | Bombay |
ihtiyaçlar | Muhasebe | Bangalore |
vücut | Sözleşmeli Personel | Bombay |
Lütfen | Güvenlik | Bangalore |
S # 3) Birleştirme ile tablo takma adları nasıl kullanılır?
Cevap: Takma adlar, bir sorgu içinde başvurulacak tablo için geçici bir ada sahip olmanın bir yoludur. JOIN sorguları zaman zaman karmaşık olduğundan ve sorguları okunabilir kılmak ve her sütun referansı için tablo adlarına başvurmaktan kaçınmak için, takma adlarla kısaltılmış adlara sahip olabiliriz.
Sırasıyla Employee ve Employee_Departments tablolarından tüm Çalışan adları ve Departman adları için verileri almak üzere bir INNER JOIN sorgusu yazalım.
select emp.name as emp_name, Department.name as dept_name from Employee emp inner join Employee_Department as Department on emp.Department_id = Department.id
Yukarıdaki sorguda, Employee tablosunu emp, Employee_Department tablosunu Department olarak adlandırdığımızı ve sütun adlarını ve Join koşullarını referans almak için takma adları kullandığımızı görebilirsiniz.
S # 4) CROSS JOIN nedir?
Cevap: CROSS JOIN, kullanıcının Katılan tabloların Kartezyen ürününü almak istediği bir Katılma türüdür.
CROSS JOIN'in sonucu m x n'dir; burada m, ilk tablodaki eşleşen satırların sayısıdır ve n, ikinci tablodaki eşleşen satırların sayısıdır.
S # 5) MySQL'de FULL OUTER JOIN nasıl elde edilir
Cevap: MySQL, Microsoft SQL gibi diğer veritabanlarından farklı olarak, ayrı bir Join türü olarak FULL OUTER JOIN sağlamaz. Ancak, FULL OUTER JOIN'in getireceği sonuçları elde etmek için LEFT OUTER JOIN ve RIGHT OUTER JOIN sonuçlarını birleştirebiliriz.
Örneğin, Çalışan ve Departman ayrıntılarını alabilir ve Sol ve Sağ Dış Birleşimlere birleşim uygulayabiliriz.
Önerilen okuma = >> MySQL Union Operatörü
Sonuç
Bu eğitimde, MySQL'de bulunan farklı Birleştirme türlerini öğrendik.
INNER, OUTER, CROSS ve SELF Joins'i tartıştık ve ayrıca JOIN sorgularının UPDATE ve DELETE ifadeleriyle nasıl 2 veya 2 tablo arasında birleştirilmiş veriler için verimli ve optimize edilmiş sorgulara sahip olmak için nasıl kullanılabileceğini gördük.
BİRLEŞTİRMELER en temel kullanılan sorgulardan biridir ve SQL tabanlı veritabanlarını kullanan veya öğrenen herkes SQL Birleştirmeleri hakkında kapsamlı bir anlayışa sahip olmalıdır.
Önerilen Kaynaklar
- İç Birleşim ve Dış Birleşim: Örneklerle Tam Fark
- MySQL Kod Örnekleriyle Görünüm Öğreticisini Oluştur
- MySQL Silme İfadesi - Komut Sözdizimini ve Örnekleri Sil
- MySQL Tabloya Ekle - İfade Sözdizimi ve Örnekler Ekle
- MySQL Güncelleme Beyanı Eğitimi - Sorgu Sözdizimini ve Örnekleri Güncelleme
- SQL Vs MySQL Vs SQL Server Arasındaki Fark (Örneklerle)
- MySQL Nedir ve Neden Kullanılır?
- Yeni Başlayanlar İçin 20+ MongoDB Eğitimi: Ücretsiz MongoDB Kursu