முக்கிய விஷயங்கள்
- Join அதாவது இரண்டு table-ஐ ஒரு பொதுவான column வச்சு இணைக்கிறது. அவ்வளவுதான் core idea.
- INNER JOIN match ஆன row மட்டும் தரும். LEFT JOIN left table-ல இருக்கிற எல்லா row-யும் காட்டும், match இல்லாட்டி NULL.
- RIGHT JOIN என்பது table swap பண்ணின LEFT JOIN. FULL JOIN ரெண்டு பக்கமும் unmatched row வைக்கும்.
- Self join ஒரே table-ஐ ரெண்டு alias-ல join பண்றது. Manager-employee tree இதுக்கு நல்ல உதாரணம்.
- Indian interview-ல SQL சுத்து இங்கேயே தொடங்கும். Join column-ல index இல்லாட்டி production query நின்னுடும்.
SQL Join அப்படின்னா என்ன?
Siruseri-ல ஒரு interview room. Whiteboard முன்னாடி நீங்க உக்காந்திருக்கீங்க. Interviewer marker எடுத்துட்டு இரண்டு box வரையறாரு. ஒரு box-ல Employees. இன்னொன்னுல Departments. அப்புறம் உங்கள பாத்துட்டு நிக்கறாரு. இதுதான் இன்னும் முதல் கேள்வி. Window function இல்லை. Recursive query இல்லை. Join. Chennai, Bengaluru, Hyderabad office-ல SQL round இங்கேயே ஆரம்பம்.
எளிமையா சொன்னா, Join என்பது இரண்டு table-ஐ ஒரு matching column வச்சு தையல் போடுறது. அந்த ஒரு வரி interview-க்கு போதும்.
Flipkart order page நினைச்சு பாருங்க. Order id ஒரு table-ல இருக்கும். Customer பேரு இன்னொரு table-ல இருக்கும்.
Page-ல Priya ordered a chargerனு வரணும்னா அந்த ரெண்டு table-ும் சந்திக்கணும். அந்த சந்திப்புதான் Join.
இரண்டு table-ஐ ஏன் Join பண்ணணும்?
Data-ஐ நாம வேண்டுமென்றே பிரிச்சு வைக்கிறோம். ஒவ்வொரு employee row-லயும் Engineering, Floor 6னு repeat பண்ணினா table கஞ்சி ஆயிடும்.
Department-ஐ ஒரு தடவை store பண்ணுங்க. People-ஐ ஒரு தடவை store பண்ணுங்க. ஒரு screen-க்கு ரெண்டும் வேணும்னா அப்போ Join போடுங்க.
ஒரே table-ல எல்லாத்தையும் போட்டா எளிசா இருக்கும்னு தோணலாம். ஆனா duplicate வரும். Department பேரு மாத்தினா நூறு row update பண்ணணும். Mistake வரும்.
Normalisation அதாவது data-ஐ சுத்தமா பிரிச்சு வைக்கிறது. Join அந்த பிரிச்ச data-ஐ கேள்வி கேக்கும்போது மறுபடியும் சேர்க்கிறது.
Interview-க்கு ஒரு வாக்கியம் மட்டும் நினைவு வச்சுக்கோங்க. Joins இருக்கு, normalised table-ல இருந்தே ஒன்னுக்கு மேல table தாண்டி கேள்வி கேக்க.
உதாரணமாக, ஒரு Chennai product team-ல employee list ஒரு table, department இன்னொரு table, salary இன்னொரு table. HR dashboard எல்லாத்தையும் ஒரு சேர காட்டணும். Join இல்லாட்டி அந்த screen வராது.
INNER JOIN-ஐ LEFT JOIN-ஓட எப்படி வேறுபடுத்துறது?
இரண்டு வட்டம் வரையுங்க மனசுல. Left-ல Employees. Right-ல Departments.
ரெண்டு வட்டமும் ஒன்னோட ஒன்னு overlap ஆகிற இடம் — department உண்மையிலேயே இருக்கிற people. INNER JOIN அந்த overlap மட்டும்.
Match இல்லையா? Row இல்லை. dept_id NULL-ஆ இருக்கிற intern போயிடுவாரு. யாரும் இல்லாத Finance team-ும் போயிடும்.
நீங்க match கேட்டீங்க. SQL match தந்தது. அவ்வளவுதான் INNER-ஓட ஒப்பந்தம்.
WITH departments AS (
SELECT 1 AS id, 'Engineering' AS name
UNION ALL SELECT 2, 'Support'
UNION ALL SELECT 3, 'Finance'
),
employees AS (
SELECT 1 AS id, 'Priya' AS name, 1 AS dept_id
UNION ALL SELECT 2, 'Karthik', 1
UNION ALL SELECT 3, 'Meena', 2
UNION ALL SELECT 4, 'Arun', CAST(NULL AS INT)
)
SELECT e.name AS employee, d.name AS department
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
இந்த data-ல Arun-க்கு department இல்லை. INNER JOIN அவனை drop பண்ணும். Priya, Karthik, Meena இருப்பாங்க.
Finance-ல யாரும் இல்லை. அதனால Finance-ும் result-ல வராது. நீங்க கேட்டது match. கிடைச்சதும் match.
LEFT JOIN வேற மாதிரி நினைக்கும். Left table புனிதம். ஒவ்வொரு employee-யும் திரும்பி வருவாரு.
Department இல்லையா? Department column-ல NULL போடும். Arun தெரியும். பேரு பக்கத்துல blank. நீங்க யாரையும் தொலைக்கல.
WITH departments AS (
SELECT 1 AS id, 'Engineering' AS name
UNION ALL SELECT 2, 'Support'
UNION ALL SELECT 3, 'Finance'
),
employees AS (
SELECT 1 AS id, 'Priya' AS name, 1 AS dept_id
UNION ALL SELECT 2, 'Karthik', 1
UNION ALL SELECT 3, 'Meena', 2
UNION ALL SELECT 4, 'Arun', CAST(NULL AS INT)
)
SELECT e.name AS employee, d.name AS department
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id;
Same data. Arun இப்போ இருக்காரு. Department NULL. Finance இன்னும் வராது. ஏன்னா Finance right table-ல இருக்கு, left-ல matching employee இல்லை.
Whiteboard-ல இப்படி சொல்லுங்க. INNER அதாவது பொதுவானவங்க மட்டும். LEFT அதாவது left table முழுசும், right match ஆனா சேரும், இல்லாட்டி NULL.
இந்த ஒரு வித்தியாசம் தெரிஞ்சா, interview-ல பாதி கேள்வி முடிஞ்சு போகும். Missing employee ஏன் வரலனு கேட்டா, INNER போட்டிருக்கீங்களான்னு பாருங்க.
RIGHT JOIN, FULL JOIN என்ன வித்தியாசம்?
RIGHT JOIN என்பது LEFT JOIN-ஐ table swap பண்ணினது. Right table முழுசும் வரும். Left-ல match இல்லாட்டி அங்க NULL.
Finance team காலியா இருந்தாலும் RIGHT JOIN-ல Finance row வரும். Employee column NULL ஆ இருக்கும். Arun-ஐ காணணும்னா LEFT வேணும். காலி department காணணும்னா RIGHT வேணும்.
நடைமுறையில் பெரும்பாலான dev LEFT JOIN எழுதுவாங்க. Table order மாத்திட்டு LEFT போட்டா RIGHT தேவையில்லை. Interview-ல தெரிஞ்சுக்கோங்க. Production code-ல LEFT-யே போதும்.
FULL JOIN — சிலர் FULL OUTER JOINனு சொல்லுவாங்க — ரெண்டு பக்கமும் unmatched row-ஐ வைக்கும். Arun வருவாரு. காலி Finance-ும் வரும். Overlap-ல இருக்கிற Priya, Karthik, Meena-வும் வருவாங்க.
PostgreSQL, SQL Server-ல FULL OUTER JOIN நேரடியா இருக்கும். MySQL-ல native FULL JOIN கிடையாது. UNION வச்சு INNER result-ஓட LEFT leftover, RIGHT leftover சேர்க்கணும்.
எந்த database-ல எழுதுறீங்கனு முதல்ல பார்த்துட்டு எழுதுங்க. Interviewer MySQL சொன்னா FULL JOIN syntax போடாதீங்க.
WITH departments AS (
SELECT 1 AS id, 'Engineering' AS name
UNION ALL SELECT 2, 'Support'
UNION ALL SELECT 3, 'Finance'
),
employees AS (
SELECT 1 AS id, 'Priya' AS name, 1 AS dept_id
UNION ALL SELECT 2, 'Karthik', 1
UNION ALL SELECT 3, 'Meena', 2
UNION ALL SELECT 4, 'Arun', CAST(NULL AS INT)
)
SELECT e.name AS employee, d.name AS department
FROM employees e
FULL OUTER JOIN departments d ON e.dept_id = d.id;
இந்த query-ஐ PostgreSQL-ல run பண்ணுங்க. ஐந்து row வரும். மூணு match. ஒரு Arun NULL-ஓட. ஒரு Finance employee இல்லாம.
Self join எப்போ தேவைப்படும்?
Same table-ஐ ரெண்டு தடவை join பண்றதுதான் Self join. Employee-manager tree இதுக்கு classic உதாரணம்.
Priya manager. Karthik அவளுக்கு கீழ. Arun Karthik-க்கு கீழ. எல்லாரும் ஒரே employees table-லதான் இருக்காங்க. manager_id column அதே table-ல இன்னொரு row-ஐ point பண்ணும்.
Table-ஐ eனு ஒரு தடவை, mனு இன்னொரு தடவை alias போடுங்க. அப்புறம் e.manager_id = m.id. LEFT JOIN போடுங்க. Top boss-க்கு manager இருக்காது. NULL வரட்டும்.
WITH employees AS (
SELECT 1 AS id, 'Priya' AS name, CAST(NULL AS INT) AS manager_id
UNION ALL SELECT 2, 'Karthik', 1
UNION ALL SELECT 3, 'Meena', 1
UNION ALL SELECT 4, 'Arun', 2
)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
Priya-க்கு manager NULL. Karthik, Meena-க்கு Priya. Arun-க்கு Karthik. இந்த ஒரு pattern org chart முழுசுக்கும் போதும்.
Indian company-ல reporting manager, referral chain, category-subcategory tree — எல்லாம் self join. Interviewer same table-ல join பண்ண முடியுமானு கேப்பாரு. முடியும். Alias போட்டா போதும்.
Join query வேகமா ஓட என்ன பண்ணலாம்?
Join column-ல Index இல்லாட்டி production-ல query நிற்கும். employees.dept_id மேல index போடுங்க. departments.id already primary key-யா இருந்தா நல்லது.
பெரிய table-ல SELECT * வேண்டாம். வேண்டிய column மட்டும் எடுங்க. WHERE filter முதல்ல apply ஆகிற மாதிரி எழுதுங்க.
ON condition-ல function போட்டா index use ஆகாது. உதாரணமாக, created_at மேல YEAR() போட்டு join பண்ணாதீங்க. Column-ஐ அப்படியே compare பண்ணுங்க.
இரண்டு பெரிய table-ஐ முதல்ல JOIN பண்ணிட்டு அப்புறம் filter பண்ணாதீங்க. முடியும்னா சின்ன result ஆக்கிட்டு அப்புறம் join பண்ணுங்க. CTE இங்க உதவும்.
Guess வேண்டாம். EXPLAIN பாருங்க. Row count பைத்தியம்னா முதல்ல Cartesian product ஆனதான்னு சரி பாருங்க. JOIN condition மறந்திருக்கலாம்.
இந்திய company interview-ல இதை எப்படி கேப்பாங்க?
TCS, Infosys, Zoho, Freshworks, Flipkart மாதிரி இடத்துல SQL round-ஓட முதல் கேள்வி பெரும்பாலும் Join தான். Whiteboard-ல employees, departments வரையறாங்க.
Arun-ஐயும் காட்டணும்னா எந்த join? LEFT. Department-ல யாரும் இல்லாதவங்களும் வேணும்னா FULL. Manager பேரு கெடைக்கணும்னா self join.
Chennai, Bengaluru, Hyderabad office-ல இதே pattern. CTE, window function கேப்பாங்க. ஆனா Join தெரியாட்டி அங்கேயே stop.
சிலர் GPay transaction table-ஐ user table-ஓட join பண்ணின மாதிரி real scenario சொல்லுவாங்க. Panic ஆகாதீங்க. வட்டம் வரைஞ்சு overlap சொல்லுங்க. INNER vs LEFT ஒரு நிமிஷத்துல விளக்கினா interviewer முகம் மாறும்.
யார் எந்த mistake பண்ணி trouble-ல மாட்டுறாங்க?
முதல் mistake: INNER JOIN போட்டு missing row-ஐ data இல்லைனு நினைப்பாங்க. Report-ல employee தொலைஞ்சு போவாரு. உண்மையில LEFT வேணும்.
இரண்டாவது: ON condition-ஐ WHERE-ல எழுதி LEFT JOIN-ஐ INNER ஆக்கிருவாங்க. WHERE d.id IS NOT NULL போட்டா LEFT-ன் அர்த்தமே போகும். Filter வேணும்னா கவனமா எழுதுங்க.
மூணாவது: Cartesian product. JOIN condition மறந்தா ஒவ்வொரு employee-யும் ஒவ்வொரு department-ஓட பெருகும். ஆயிரம் row திடீர்னு லட்சமா ஆகும். Count பாருங்க run பண்ணும் முன்னாடி.
நாலாவது: Column name conflict. e.name, d.name ரெண்டும் name தான். Alias போடாட்டி database error போடும், இல்லாட்டி தப்பு column வரும்.
ஐந்தாவது: NULL = NULL join ஆகாது. Arun-ன் dept_id NULL. அது எந்த department id-யோடம் match ஆகாது. ISNULL வச்சு join பண்ண நினைக்காதீங்க. Design-ல NULL dept_id தனியா handle பண்ணுங்க.
ஆறாவது: MySQL-ல FULL OUTER JOIN எழுதி syntax error வாங்கிறவங்க. Database dialect பார்த்து எழுதுங்க.
நீங்க இப்போ என்ன பண்ணணும்?
இந்த மூணு query-ஐ நீங்களே எழுதி run பண்ணுங்க. மேல இருக்கிற employees, departments data போதும்.
ஒன்னு: Engineering-ல இருக்கிற employee list. இது INNER JOIN.
ரெண்டு: Department இல்லாத employee list. LEFT JOIN போட்டு WHERE d.id IS NULL. இதுதான் anti joinனு சிலர் சொல்லுவாங்க.
மூணு: ஒவ்வொரு employee-யும் அவங்க manager பேரும். Self join. LEFT JOIN மறக்காதீங்க. Boss-க்கு manager இல்லை.
PostgreSQL-லயோ SQLite-லயோ paste பண்ணி result பாருங்க. Whiteboard-ல வட்டம் வரைஞ்சு சொல்ல பழகுங்க. அடுத்த interview-ல marker கையில இருந்தா கூட பயப்பட வேண்டாம்.




கருத்துகள் (0)
Be the first to comment!