இரண்டு அல்லது அதற்கு மேற்பட்ட அட்டவணைகளை இணைத்தல்
அவற்றுக்கிடையேயான தொடர்புடைய நெடுவரிசையின் அடிப்படையில், இரண்டு அல்லது அதற்கு மேற்பட்ட அட்டவணைகளிலிருந்து வரிசைகளை JOIN அறிக்கையைப் பயன்படுத்தி இணைக்கலாம்.
உங்களிடம் "users" அட்டவணை மற்றும் "products" அட்டவணை உள்ளது என்று கருதுங்கள்:
users அட்டவணை
[
{ id: 1, name: 'John', favorite_product: 154},
{ id: 2, name: 'Peter', favorite_product: 154},
{ id: 3, name: 'Amy', favorite_product: 155},
{ id: 4, name: 'Hannah', favorite_product: null},
{ id: 5, name: 'Michael', favorite_product: null}
]
products அட்டவணை
[
{ id: 154, name: 'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{ id: 156, name: 'Vanilla Dreams' }
]
இந்த இரண்டு அட்டவணைகளும் users' favorite_product புலம் மற்றும் products' id புலத்தைப் பயன்படுத்தி இணைக்கப்படலாம்.
எடுத்துக்காட்டு
இரண்டு அட்டவணைகளிலும் பொருந்தும் பதிவுகளைத் தேர்ந்தெடுக்கவும்:
let mysql = require('mysql');
let con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
let sql = "SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});
குறிப்பு: JOIN க்கு பதிலாக INNER JOIN ஐப் பயன்படுத்தலாம். இரண்டும் உங்களுக்கு ஒரே முடிவைத் தரும்.
மேலே உள்ள குறியீட்டை "demo_db_join.js" என்ற கோப்பில் சேமித்து கோப்பை இயக்கவும்:
C:\Users\Your Name>node demo_db_join.js
இது உங்களுக்கு இந்த முடிவைக் கொடுக்கும்:
[
{ user: 'John', favorite: 'Chocolate Heaven' },
{ user: 'Peter', favorite: 'Chocolate Heaven' },
{ user: 'Amy', favorite: 'Tasty Lemons' }
]
மேலே உள்ள முடிவிலிருந்து நீங்கள் பார்க்க முடியும் என, இரண்டு அட்டவணைகளிலும் பொருந்தும் பதிவுகள் மட்டுமே திருப்பி அனுப்பப்படுகின்றன.
JOIN முக்கிய குறிப்புகள்:
- INNER JOIN: இரண்டு அட்டவணைகளிலும் பொருந்தும் பதிவுகள் மட்டுமே
- தொடர்பு: ON கூற்று இணைக்கும் நிபந்தனையைக் குறிப்பிடுகிறது
- அலியாஸ்: AS மூலம் நெடுவரிசை பெயர்களை மாற்றியமைக்கலாம்
- பல அட்டவணைகள்: பல அட்டவணைகளை இணைக்கலாம்
Left Join
அவர்களுக்கு பிடித்த தயாரிப்பு இருந்தாலும் இல்லையாலும், அனைத்து பயனர்களையும் திருப்பி அனுப்ப விரும்பினால், LEFT JOIN அறிக்கையைப் பயன்படுத்தவும்:
எடுத்துக்காட்டு
அனைத்து பயனர்களையும் அவர்களின் பிடித்த தயாரிப்பையும் தேர்ந்தெடுக்கவும்:
SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product = products.id
இது உங்களுக்கு இந்த முடிவைக் கொடுக்கும்:
[
{ user: 'John', favorite: 'Chocolate Heaven' },
{ user: 'Peter', favorite: 'Chocolate Heaven' },
{ user: 'Amy', favorite: 'Tasty Lemons' },
{ user: 'Hannah', favorite: null },
{ user: 'Michael', favorite: null }
]
LEFT JOIN
இடது அட்டவணையின் அனைத்து பதிவுகளும் + வலது அட்டவணையில் பொருந்தும் பதிவுகள்
- முதல் அட்டவணையின் அனைத்து வரிசைகளும்
- இரண்டாம் அட்டவணையில் பொருந்தும் வரிசைகள்
- பொருந்தாதவை NULL ஆக இருக்கும்
Right Join
அனைத்து தயாரிப்புகளையும், அவற்றை தங்களுக்கு பிடித்ததாகக் கொண்ட பயனர்களையும், எந்த பயனரும் அவற்றை தங்களுக்கு பிடித்ததாகக் கொள்ளாவிட்டாலும் கூட, திருப்பி அனுப்ப விரும்பினால், RIGHT JOIN அறிக்கையைப் பயன்படுத்தவும்:
எடுத்துக்காட்டு
அனைத்து தயாரிப்புகளையும் அவற்றை தங்களுக்கு பிடித்ததாகக் கொண்ட பயனர்களையும் தேர்ந்தெடுக்கவும்:
SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product = products.id
இது உங்களுக்கு இந்த முடிவைக் கொடுக்கும்:
[
{ user: 'John', favorite: 'Chocolate Heaven' },
{ user: 'Peter', favorite: 'Chocolate Heaven' },
{ user: 'Amy', favorite: 'Tasty Lemons' },
{ user: null, favorite: 'Vanilla Dreams' }
]
குறிப்பு: பிடித்த தயாரிப்பு இல்லாத Hannah மற்றும் Michael ஆகியோர் முடிவில் சேர்க்கப்படவில்லை.
RIGHT JOIN
வலது அட்டவணையின் அனைத்து பதிவுகளும் + இடது அட்டவணையில் பொருந்தும் பதிவுகள்
- இரண்டாம் அட்டவணையின் அனைத்து வரிசைகளும்
- முதல் அட்டவணையில் பொருந்தும் வரிசைகள்
- பொருந்தாதவை NULL ஆக இருக்கும்
JOIN வகைகள் ஒப்பீடு
| JOIN வகை | விளக்கம் | வரைபடம் | பயன்பாடு |
|---|---|---|---|
| INNER JOIN | இரண்டு அட்டவணைகளிலும் பொருந்தும் பதிவுகள் மட்டுமே | குறுக்குவெட்டு | தொடர்புடைய தரவை மட்டும் தேவைப்படும் போது |
| LEFT JOIN | இடது அட்டவணையின் அனைத்து பதிவுகள் + வலது அட்டவணையில் பொருந்தும் பதிவுகள் | இடது வென்படம் | முதன்மை அட்டவணையின் அனைத்து பதிவுகளும் தேவைப்படும் போது |
| RIGHT JOIN | வலது அட்டவணையின் அனைத்து பதிவுகள் + இடது அட்டவணையில் பொருந்தும் பதிவுகள் | வலது வென்படம் | இரண்டாம் அட்டவணையின் அனைத்து பதிவுகளும் தேவைப்படும் போது |
| FULL OUTER JOIN | இரண்டு அட்டவணைகளின் அனைத்து பதிவுகளும் (MySQL இல் இல்லை) | முழு ஒன்றியம் | இரண்டு அட்டவணைகளின் அனைத்து தரவும் தேவைப்படும் போது |
மேம்பட்ட JOIN எடுத்துக்காட்டுகள்
மூன்று அட்டவணைகளை இணைத்தல்
// Join three tables: users, orders, products
let sql = `
SELECT
users.name AS customer,
products.name AS product,
orders.quantity,
orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id
INNER JOIN products ON orders.product_id = products.id
ORDER BY orders.order_date DESC
`;
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Three table join result:", result);
});
குழுவாக்கத்துடன் JOIN
// JOIN with GROUP BY and aggregation
let sql = `
SELECT
users.name AS customer,
COUNT(orders.id) AS total_orders,
SUM(orders.amount) AS total_spent
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id, users.name
ORDER BY total_spent DESC
`;
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Customer order summary:", result);
});
துணை வினாவுடன் JOIN
// JOIN with subquery
let sql = `
SELECT
users.name,
recent_orders.order_count
FROM users
LEFT JOIN (
SELECT user_id, COUNT(*) as order_count
FROM orders
WHERE order_date >= '2023-01-01'
GROUP BY user_id
) recent_orders ON users.id = recent_orders.user_id
`;
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Users with recent order counts:", result);
});
JOIN சிறந்த நடைமுறைகள்
செயல்திறன்
- குறியீட்டு நெடுவரிசைகளில் JOIN செய்யவும்
- தேவையான நெடுவரிசைகளை மட்டும் தேர்ந்தெடுக்கவும்
- சிக்கலான JOIN க்கு WHERE கூற்றுகளைப் பயன்படுத்தவும்
- பெரிய அட்டவணைகளுக்கு LIMIT ஐப் பயன்படுத்தவும்
தரவு ஒருமைப்பாடு
- வெளிநாட்டு விசை உறவுகளைச் சரிபார்க்கவும்
- சரியான JOIN வகையைத் தேர்ந்தெடுக்கவும்
- NULL மதிப்புகளைக் கையாளவும்
- தரவு தொடர்புகளைப் புரிந்துகொள்ளவும்
குறியீடு தரம்
- அலியாஸ்களைப் பயன்படுத்தி நெடுவரிசை பெயர்களைத் தெளிவுபடுத்தவும்
- சிக்கலான JOIN க்கு வடிவமைக்கவும்
- வாசிப்புக்காக வினாக்களை வடிவமைக்கவும்
- நிலையான குறியீட்டு மரபுகளைப் பின்பற்றவும்
முழுமையான எடுத்துக்காட்டு
அனைத்து JOIN நுட்பங்களையும் உள்ளடக்கிய முழுமையான எடுத்துக்காட்டு:
const mysql = require('mysql');
// Create connection
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
database: "company_db"
});
// Connect to MySQL
con.connect((err) => {
if (err) {
console.error('Error connecting to MySQL:', err.message);
return;
}
console.log('Connected to MySQL database');
// Example 1: INNER JOIN
console.log('\n1. INNER JOIN - Users with favorite products:');
con.query(`
SELECT users.name AS user, products.name AS favorite
FROM users
INNER JOIN products ON users.favorite_product = products.id
`, (err, result) => {
if (err) {
console.error('Error in INNER JOIN:', err.message);
return;
}
console.log(result);
});
// Example 2: LEFT JOIN
console.log('\n2. LEFT JOIN - All users with their favorite products:');
con.query(`
SELECT users.name AS user, products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product = products.id
`, (err, result) => {
if (err) {
console.error('Error in LEFT JOIN:', err.message);
return;
}
console.log(result);
});
// Example 3: RIGHT JOIN
console.log('\n3. RIGHT JOIN - All products with users who favorited them:');
con.query(`
SELECT users.name AS user, products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product = products.id
`, (err, result) => {
if (err) {
console.error('Error in RIGHT JOIN:', err.message);
return;
}
console.log(result);
});
// Example 4: Multiple table JOIN
console.log('\n4. Three table JOIN - Users, orders, and products:');
con.query(`
SELECT
u.name AS customer,
p.name AS product,
o.quantity,
o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN products p ON o.product_id = p.id
ORDER BY o.order_date DESC
LIMIT 5
`, (err, result) => {
if (err) {
console.error('Error in three table JOIN:', err.message);
return;
}
console.log(result);
// Close connection
setTimeout(() => {
con.end((err) => {
if (err) {
console.error('Error closing connection:', err.message);
return;
}
console.log('\nConnection closed');
});
}, 1000);
});
});