- 1 1. හැඳින්වීම
- 2 2. MySQL හි NOT EXISTS යනු කුමක්ද?
- 3 3. NOT EXISTS හි ප්රායෝගික උදාහරණ සහ උසස් භාවිතා
- 4 4. NOT EXISTS, NOT IN සහ LEFT JOIN අතර වෙනස්කම් (කුමන විට කුමන භාවිතා කළ යුදු ය)
- 5 5. කාර්ය සාධන අභිලක්ෂණය සහ ප්රායෝගික සැලකිලි
- 6 6. සාමාන්ය දෝෂ සහ ගැටළු විසඳීම
- 7 7. FAQ | MySQL NOT EXISTS පිළිබඳ නිතර අසන ප්රශ්න
- 7.1 Q1. මට NOT EXISTS කවදා භාවිතා කළ යුතුද?
- 7.2 Q2. NOT EXISTS සහ NOT IN අතර වෙනස කුමක්ද?
- 7.3 Q3. කාර්ය සාධනය සම්බන්ධයෙන් මොනවාට අවධානය යොමු කළ යුතුද?
- 7.4 Q4. LEFT JOIN සහ INNER JOIN අතර තේරීම කෙසේ කළ යුතුද?
- 7.5 Q5. NOT EXISTS වෙනත් RDBMS (PostgreSQL, Oracle, ආදිය) තුළ භාවිතා කළ හැදියිද?
- 7.6 Q6. MySQL අනුවාදය කුමන එකේ NOT EXISTS සහාය දක්වයි?
- 7.7 Q7. සාමාන්ය වාස්තු විශේෂිත ගැටළු මොනවාද?
- 8 8. නිගමනය
- 9 9. යොමු සබැඳි සහ නිර්දේශිත ලේඛන
1. හැඳින්වීම
MySQL ලෝකයේ අතිශය පරිච්ඡේදිත සම්බන්ධිත දත්ත ගබඩා කළමනාකරණ පද්ධති අතරින් එකකි. එහි බොහෝ විශේෂාංග අතර, NOT EXISTS දෛනික දත්ත මෙහෙයුම් සඳහා ඉතා ප්රයෝජනවත් සංරචකයකි. උදාහරණයක් ලෙස, එය “වෙනත් වගුවක නොමැති දත්ත ලබා ගැනීම” හෝ “කොන්දේසි කිහිපයක් නොපැවැත්වෙන ලේඛන පමණක් ලබා ගැනීම” වැනි අවස්ථා වල බහුලව භාවිතා වේ.
ඔබ මෙම ලිපිය කියවමින් සිටිනවා නම්, “MySQL හි NOT EXISTS කෙසේ භාවිතා කරන්නේද?”, “NOT IN සහ LEFT JOIN අතර වෙනස කුමක්ද?”, “මට අපේක්ෂිත ප්රතිඵල නොලැබෙන්නේ ඇයි?” වැනි ප්රශ්න ඔබට ඇති විය හැක. NOT EXISTS සංකල්පයෙන් සරල වුවත්, එය වැරදි ලෙස භාවිතා කිරීම අනපේක්ෂිත ගැටළු ඇති කරයි.
මෙම ලිපියේ, MySQL හි NOT EXISTS පිළිබඳ සම්පූර්ණ සහ පහසු අර්ථගත කිරීමක් අපි ලබා දෙමු—මූලික කරුණු සිට ප්රායෝගික භාවිතා, අනෙකුත් කොන්දේසි වාක්ය (NOT IN සහ LEFT JOIN) සමඟ වෙනස්කම්, කාර්ය සාධන සැලකිලි, සාමාන්ය දෝෂ, සහ අඩවි ප්රශ්න (FAQ) දක්වා. ඔබ නවකයෙක් වුවත්, හෝ වාස්තුකලාවලදී මෙය සමඟ ගැටළුවට මුහුණ දුන් ඉංජිනේරුවකු වුවත්, මෙම මාර්ගෝපදේශය ඔබට පැහැදිලිත්වය සහ විශ්වාසය ලබා දීමට උදව් කරයි.
මෙම ලිපිය අවසන් වන විට, “MySQL NOT EXISTS” පිළිබඳ ඔබේ ප්රශ්න සම්පූර්ණයෙන් විසඳා ඇති බවක් ඔබට පෙනේ, සහ සංවර්ධන හා දත්ත ගබඩා මෙහෙයුම් වල ඔබේ කාර්යක්ෂමතාවය වැදගත් ලෙස වැඩි වේ. මූලික කරුණු වලින් ආරම්භ කරමු.
2. MySQL හි NOT EXISTS යනු කුමක්ද?
NOT EXISTS යනු MySQL ඇතුළත් SQL දත්ත ගබඩා වල බහුලව භාවිතා වන උපවිමසුම් කොන්දේසි වාක්ය අතරින් එකකි. ඔබට වෙනත් වගුවක (හෝ එකම වගුවක) ගැලපෙන දත්ත නොමැති ලේඛන ලබා ගැනීමට අවශ්ය වන විට මෙය ප්රධාන වශයෙන් භාවිතා වේ. සංකීර්ණ දත්ත ලබා ගැනීමේ අවස්ථා, අනුපිළිවෙළ ඉවත් කිරීම, සහ සම්බන්ධිත ලේඛන පවතිනවාද නැද්දැයි පරීක්ෂා කිරීම සඳහා මෙය විශේෂයෙන් ප්රයෝජනවත් වේ.
NOT EXISTS හි මූලික ව්යුහය
පළමුව මූලික ව්යුහය බලමු.
SELECT column_name
FROM tableA
WHERE NOT EXISTS (
SELECT 1 FROM tableB
WHERE tableA.key = tableB.key
);
මෙම උදාහරණයේ, tableA හි සෑම පේළියක්ම, උපවිමසුම (අභ්යන්තර SELECT ප්රකාශනය) පේළි කිසිවක් නැති විට පමණක් ආපසු ලබා දේ. වෙනත් වචනයෙන් කියනවා නම්, tableA හි tableB සමඟ සම්බන්ධිත දත්ත නොමැති පේළි පමණක් ලබා ගනී.
නියැදි වගු සමඟ අවබෝධය
මෙම ලිපිය පුරා අපි භාවිතා කරන සරල නියැදි වගු මෙන්න.
users වගුව
| id | name |
|---|---|
| 1 | Taro Sato |
| 2 | Hanako Suzuki |
| 3 | Ichiro Tanaka |
orders වගුව
| id | user_id | item |
|---|---|---|
| 1 | 1 | Book |
| 2 | 2 | Laptop |
| 3 | 1 | Pen |
උදාහරණයක් ලෙස, ඇණවුමක් කිසිදාම තබා නොමැති පරිශීලකයන් ලබා ගැනීමට, පහත පරිදි NOT EXISTS භාවිතා කළ හැක:
SELECT name
FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
මෙම විමසුමේ, orders වගුවේ සම්බන්ධිත ලේඛනයක් නොමැති users වගුවේ පේළිය පමණක් ආපසු ලබා දේ—මෙම අවස්ථාවේ, “Ichiro Tanaka.”
NOT EXISTS ක්රියා කරන ආකාරය
උපවිමසුමේ කොන්දේසිය සපුරන පේළියක් අවම වශයෙන් එකක් තිබේ නම් NOT EXISTS FALSE ලෙස ඇගයෙයි, සහ පේළි කිසිවක් නොමැති නම් TRUE ලෙස. සංකල්පයෙන්, මෙය Venn රූපයක් ලෙස “සමූහ A හි අංග, සමූහ B හි නොමැති අංග” ලෙස සිතිය හැක.
රූප විස්තරය (පෙළ ආකාරයේ):
- users වෘත්තය සහ orders වෘත්තය අතර අතිරේක ප්රදේශය “ඇණවුම් තබා ඇති පරිශීලකයන්” නිරූපණය කරයි.
- පරිශීලක වෘත්තයේ අතිරේක නොවන (අතිරේක නොවන) කොටස “ඇණවුමක් කිසිදාම තබා නොමැති පරිශීලකයන්” (NOT EXISTS හි ඉලක්කය) නිරූපණය කරයි.
NOT EXISTS හි මූලික හැසිරීම සහ තර්කය අවබෝධ කරගැනීමෙන්, පසුතැවෙන උසස් භාවිතා අවස්ථා සහ අනෙකුත් කොන්දේසි වාක්ය (ඊළඟට සාකච්ඡා කරන) අතර වෙනස්කම් තේරුම් ගැනීම ඉතා පහසු වේ.
3. NOT EXISTS හි ප්රායෝගික උදාහරණ සහ උසස් භාවිතා
NOT EXISTS මූලික දත්ත ලබා ගැනීමට පමණක් සීමා නොවේ—එය බොහෝ වාස්තුකලාවලදීද යොදා ගත හැක. මෙම කොටසේ, සාමාන්යයෙන් භාවිතා වන රටාවන් සහ නියැදි විමසුම් සමඟ පියවරෙන් පියවර ගමන් කරමු.
3.1. මූලික භාවිතය
ඉක්මන් සමාලෝචනයක් ලෙස, මෙන්න සාමාන්ය රටාව.
උදාහරණය: ඇණවුම් ඉතිහාසයක් නොමැති පරිශීලකයන් ලබා ගැනීම
SELECT name
FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
මෙම ප්රශ්නය orders වගුවේ ඕඩර් නොමැති පරිීලකයින් ලබා ගනී. පෙර උදාහරණයේදී, එය “ඉචිරෝ ටානකා” විය හැක.
3.2. අනුමත නොකළ / අසම්පූර්ණ / සිදු නොකළ දත්ත සොයා ගැනීම සඳහා NOT EXISTS භාවිතා කිරීම
ව්යාපාරික තත්ත්වයන්හිදී, NOT EXISTS බොහෝ විට “මෙතනටම කළ නොමැති,” “අනුමත නොකළ,” හෝ “සම්පූර්ණ නොකළ”—අනෙකුත් වචනවලින් කිවහොත්, කිසිදු ක්රියාමාර්ගයක් තවමත් ගෙන නොකළ වාර්තා නිරූපණය කරන දත්ත ඉවත් කිරීම සඳහා භාවිතා කෙරේ.
උදාහරණය: වාර්තා යම්කිසිවක් ඉදිරිපත් නොකළ සිසුන් ලබා ගැනීම
SELECT s.student_id, s.student_name
FROM students s
WHERE NOT EXISTS (
SELECT 1 FROM reports r
WHERE r.student_id = s.student_id
);
මෙම ප්රවේශය ඔබට වෙනත් වගුවක සම්බන්ධ “ඉතිහාසය” හෝ “ක්රියාකාරකම්” වාර්තාවක් නොමැති බව නම්යශීලීව තීරණය කිරීමට ඉඩ සලසයි.
3.3. INSERT කිරීමේදී NOT EXISTS භාවිතා කිරීම
NOT EXISTS බලවත් වන්නේ ඔබට ද්විත්ව දත්ත වැළැක්වීමට හෝ වාර්තාවක් දැනටමත් නොමැති නම් පමණක් ඇතුළත් කිරීමට අවශ්ය වන විට ය.
උදාහරණය: එකම ඊමේල් ලිපිනයක් දැනටමත් නොමැති නම් නව පරිශීලකයෙකු ලියාපදිංචි කිරීම
INSERT INTO users (email, name)
SELECT 'user@example.com', 'New User'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM users WHERE email = 'user@example.com'
);
මෙම ප්රශ්නයෙන්, එකම ඊමේල් ලිපිනයක් දැනටමත් පවතින නම්, කිසිවක් ඇතුළත් නොවේ.
(සටහන: MySQL සංස්කරණය සහ ගැලපුම් අනුව නිශ්චිත හැසිරීම සැලකිය යුතු ලෙස වෙනස් විය හැක.)
3.4. UPDATE / DELETE කිරීමේදී NOT EXISTS භාවිතා කිරීම
NOT EXISTS ශර්තක UPDATE සහ DELETE මෙහෙයුම් සඳහාද භාවිතා කළ හැක.
උදාහරණය: ඕඩර් නොමැති පරිශීලකයින් “අක්රිය” ලෙස ස්වයංක්රීයව යාවත්කාලීන කිරීම
UPDATE users u
SET status = 'inactive'
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
උදාහරණය: සම්බන්ධ දත්ත නොමැති වාර්තා ඉවත් කිරීම
DELETE FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
ඉහත පරිදි දැක්වෙන පරිදි, NOT EXISTS SELECT ප්රකාශනවල පමණක් නොව INSERT/UPDATE/DELETE හි උප ප්රශ්න ශර්තකයක් ලෙසද යෙදිය හැක.
අභිරුචික දත්ත සැකසුම් සහ මෙහෙයුම්වලදී, “කිසිවක් නොමැති නම් පමණක්” ආකාරයේ තර්කය නිතර පෙන්වයි. NOT EXISTS සමඟ ඔබ තවදුරටත් දක්ෂ වන තරමට, ඔබගේ SQL සැලසුම් වඩාත් නම්යශීලී සහ ශක්තිමත් වේ.
4. NOT EXISTS, NOT IN සහ LEFT JOIN අතර වෙනස්කම් (කුමන විට කුමන භාවිතා කළ යුදු ය)
“වෙනත් වගුවක නොමැති දත්ත” ඉවත් කිරීමට අවශ්ය වන විට, පොදු ප්රවේශ මාර්ගවලට NOT EXISTS, NOT IN සහ LEFT JOIN + IS NULL ඇතුළත් වේ. ඒවා මතකයේ සමාන බව පෙනුනද, ඒවායේ අභ්යන්තර හැසිරීම් සහ අලුත්කම් වෙනස් වේ. වැරදි එකක් තෝරා ගැනීමෙන් අනපේක්ෂිත ප්රතිඵල හෝ කාර්ය සාධනයේ ගැටලු ඇති විය හැක.
4.1. NOT IN සමඟ වෙනස්කම් සහ NULL අභ්යන්තරය
NOT IN ලැයිස්තුවේ හෝ උප ප්රශ්න ප්රතිඵලයේ වටිනාකම පෙනෙන්නේ නැති විට TRUE ලබා දෙයි. කෙසේ වෙතත්, උප ප්රශ්නයේ එක NULLවක්වත් ඇතුළත් නම්, එය ප්රධාන ගැටලුවක් ඇති කළ හැක: සියලු සංසන්දන FALSE වේ (හෝ කිසිදු පේළියක් ගැලපෙන්නේ නැත).
උදාහරණය: orders NULL ඇතුළත් වන විට සංසන්දනය
-- Example using NOT EXISTS
SELECT name FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
-- Example using NOT IN
SELECT name FROM users
WHERE id NOT IN (
SELECT user_id FROM orders
);
ඔබගේ orders.user_id NULL ඇතුළත් නම්, NOT IN ප්රශ්නය කිසිදු පේළියක් ලබා නොදෙයි.
මෙය SQL හි තුන-වටිනාකම් තර්කය (TRUE, FALSE, UNKNOWN) නිසා ය.
4.2. LEFT JOIN + IS NULL සමඟ වෙනස්කම්
වෙනත් පොදු ප්රවේශයක් වන්නේ LEFT JOIN භාවිතා කිරීම සහ සම්බන්ධ වාර්තාවක් නොමැති විට එක්සත් කළ පේළි NULL වන බවට රඳා පැවතීම ය.
උදාහරණය: LEFT JOIN + IS NULL
SELECT u.name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.user_id IS NULL;
මෙම ශෛලිය ඉතා පාඨක වන්නීය සහ එක්සත් කිරීමේ ශර්තක සරල වන විට හොඳින් ක්රියා කරයි. කෙසේ වෙතත්, වගු ප්රමාණය සහ ප්රශ්න සංකීර්ණත්වය අනුව, එක්සත් කිරීම විශාල මධ්යගත ප්රතිඵල සාදා performance බලපෑම් කළ හැක.
4.3. NOT EXISTS කුමන විට තෝරා ගත යුතුද?
තෝරාගැනීමේ රටාව (පාඨ විස්තරයෙන් විස්තර කර ඇත):
- If the subquery may include NULL values → NOT EXISTS නිර්දේශ කරයි
- If the data volume is large and join performance is a concern → සුදුසු ඉන්ඩෙක්සිං සමඟ NOT EXISTS භාවිතා කරන්න
- If readability matters and join conditions are simple → LEFT JOIN + IS NULL ප්රයෝජනවත් විය හැක
- If you must use NOT IN → සෑම විටම NULL ආරක්ෂාව යොදන්න (උදා: WHERE user_id IS NOT NULL)
පරීක්ෂණ ලැයිස්තුව:
- Could the subquery return NULL? → NOT EXISTS ප්රාථමික කරන්න
- Do you want to avoid large joins? → ඉන්ඩෙක්ස් + NOT EXISTS
- Do you need portability across DBs? → DBMS-විශේෂ හැසිරීම තහවුරු කරන්න (PostgreSQL බොහෝ විට සමාන වේ)
Although NOT EXISTS, NOT IN, සහ LEFT JOIN සමාන ලෙස පෙනුනත්, ඒවායේ හැසිරීම සහ සුදුසු අවස්ථා වැදගත් ලෙස වෙනස් විය හැක. නිවැරදි ක්රමය භාවිතා කිරීම ඔබට දෝෂ රහිත හා කාර්ය සාධන-කාර්යක්ෂම SQL සෑදීමට උපකාරී වේ.
5. කාර්ය සාධන අභිලක්ෂණය සහ ප්රායෝගික සැලකිලි
NOT EXISTS නිවැරදිව භාවිතා කරන විට ඉතා ප්රයෝජනවත් වේ. එහෙත්, විශාල දත්ත කට්ටල හෝ සංකීර්ණ විමසුම් සමඟ වැඩ කරන විට කාර්ය සාධන සැලකිලි අත්යවශ්ය වේ. මෙම කොටසේ, කාර්යක්ෂම විමසුම් නිර්මාණය කිරීම සහ සාමාන්ය වාස්තු විශේෂිත ගැටළු වලින් වැළැක්වීම පිළිබඳ විස්තර කරමු.
5.1. ඉන්ඩෙක්ස් සමඟ සහ ඉන්ඩෙක්ස් නොමැතිව කාර්ය සාධන වෙනස්කම්
NOT EXISTS සමඟ උප-විමසුම භාවිතා කරන විට, උප-විමසුමේ සෙවීමේ කොන්දේසියේ තීරුවේ ඉන්ඩෙක්ස් තිබේද යන්න කාර්ය සාධනයට වැදගත් බලපෑමක් ඇත.
උදාහරණය: orders.user_id හි ඉන්ඩෙක්ස් තිබේ නම්
SELECT name
FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
orders.user_id හි ඉන්ඩෙක්ස් තිබේ නම්, MySQL උප-විමසුම කාර්යක්ෂමව ඇගයිය හැක. ඉන්ඩෙක්ස් නොමැතිව, සම්පූර්ණ වගුවේ පරික්ෂණයක් සිදු විය හැකි අතර, විශාල දත්ත කට්ටල වල කාර්ය සාධනය දැඩි ලෙස අඩු වේ.
උදාහරණය: ඉන්ඩෙක්ස් නිර්මාණය කිරීම
CREATE INDEX idx_orders_user_id ON orders(user_id);

5.2. EXPLAIN සමඟ ක්රියාත්මක සැලසුම් පරීක්ෂා කිරීම
SQL කාර්ය සාධනය වැඩිදියුණු කිරීම සඳහා, EXPLAIN විධානය භාවිතා කර ක්රියාත්මක සැලසුම සමාලෝචනය කිරීම ප්රයෝජනවත් වේ.
උදාහරණය: EXPLAIN භාවිතා කිරීම
EXPLAIN SELECT name
FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
උප-විමසුම “index” හෝ “ref” වැනි ප්රවේශ වර්ග භාවිතා කරයිදැයි පරීක්ෂා කරන්න. එය “ALL” ලෙස පෙන්වන්නේ නම්, එය සම්පූර්ණ වගුවේ පරික්ෂණයක් බවයි, සහ කාර්ය සාධන වැඩිදියුණු කිරීම් (ඉන්ඩෙක්ස් එකතු කිරීම වැනි) අවශ්ය විය හැක.
5.3. විශාල දත්ත කට්ටල සඳහා හොඳ පුරුදු
- උප-විමසුමේ WHERE කොන්දේසි ככל האפשר සීමා කරන්න.
- අවශ්ය තීරුවල පමණක් තෝරන්න (SELECT 1 ප්රමාණවත් වේ).
- උප-විමසුමේ ඇතුළත සහ පිටත ඉන්ඩෙක්ස් සැලසුම සමාලෝචනය කරන්න.
බොහෝ විශාල දත්ත ප්රමාණයක් සමඟ කටයුතු කරන විට, පෙර අග්රගණන වගු හෝ තාවකාලික වගු භාවිතා කිරීමත් ප්රයෝජනවත් ක්රමයක් වේ.
5.4. සාමාන්ය ගැටළු සහ විසඳුම්
1. විමසුම අනපේක්ෂිතව පේළි ශුන්යයක් ලබා දෙයි → සාමාන්ය හේතු අතර වැරදි උප-විමසුම් කොන්දේසි, අනිච්චිත NULL අගයන්, හෝ ඉන්ඩෙක්ස් නොමැතිවීම ඇතුළත් වේ. නියැලූ දත්ත සමඟ ප්රතිඵල තහවුරු කර, අවශ්ය නම් ඉන්ඩෙක්ස් හෝ NULL සැකසීම එක් කරන්න.
2. විමසුම මන්දගාමීව ක්රියා කරයි හෝ කාලය ඉක්මවා යයි → උප-විමසුම් සහ සම්බන්ධතා අභ්යන්තර කර, WHERE කොන්දේසි නිරූපණය කර, ඉන්ඩෙක්ස් නිවැරදිව භාවිතා වන බව තහවුරු කරන්න. එසේම ක්රියාවලිය කණ්ඩායම් ලෙස ක්රියාත්මක කිරීම හෝ පියවරෙන් පියවර LIMIT භාවිතා කිරීම ගැන සිතන්න.
3. වෙනත් RDBMS සමඟ අනුකූලතාව ගැටළු → මූලික වාක්ය රචනය සමාන වුවත්, විස්තරාත්මක හැසිරීම සහ අභ්යන්තර උත්පාදන ක්රම DBMS වේදිකා අතර වෙනස් වේ. විශාල‑පරිමාණ පරිසර සඳහා, නිතරම නියමිත දත්ත ගබඩාවේ නිල ලේඛන පරීක්ෂා කරන්න.
ප්රායෝගික NOT EXISTS භාවිතයේ, “ඉන්ඩෙක්ස් අභ්යන්තර කිරීම,” “ක්රියාත්මක සැලසුම් තහවුරු කිරීම,” සහ “දත්ත ප්රමාණය අනුව සැලසුම් වෙනස් කිරීම” යනවා මූලික සාර්ථකතා සාධක වේ. ගැටළු විසඳීමේදී, සෑම සම්භාව්ය හේතුවක්ම පියවරෙන් පියවර වෙන් කර පරීක්ෂා කරන්න.
6. සාමාන්ය දෝෂ සහ ගැටළු විසඳීම
NOT EXISTS භාවිතා කරන SQL ශක්තිමත් වුවත්, “අනපේක්ෂිත ප්රතිඵල” හෝ “විමසුම් අපේක්ෂිත ලෙස ක්රියා නොකරීම” වැනි ගැටළු සාමාන්ය වේ. මෙම කොටසේ, සාමාන්ය දෝෂ, ඒවායේ හේතු, සහ ඒවා විසඳීමට ක්රම විස්තර කරමු.
6.1. විමසුම පේළි ශුන්යයක් ලබා දෙයි
ප්රධාන හේතු සහ විසඳුම්:
උපවිමසුම් කොන්දේසි ඉතා සීමිතයි → If the WHERE clause inside the subquery does not match as expected, NOT EXISTS may evaluate incorrectly. Review the subquery conditions carefully.
→ උපවිමසුමේ ඇතුළත WHERE වාක්යය අපේක්ෂිත ලෙස ගැලපෙන්නේ නැති නම්, NOT EXISTS වැරදි ලෙස ඇගයිය හැක. උපවිමසුම් කොන්දේසි අවධානයෙන් සමාලෝචනය කරන්න.වගුව හෝ තීරුවේ නාමයන්හි අක්ෂර දෝෂ → Ensure all referenced columns and tables actually exist and are spelled correctly.
→ සැලකිය යුතු සියලු තීරු සහ වගු ඇත්තේද, නිවැරදිව අක්ෂර ලේඛනය කර ඇතිද යන්න තහවුරු කරන්න.එක්සත් කිරීමේ කොන්දේසිය අස්ථානගත වී ඇත → Confirm that the subquery correctly references the outer table and establishes the intended relationship.
→ උපවිමසුම බාහිර වගුවට නිවැරදිව යොමු කර ඇතිද, අවශ්ය සම්බන්ධතාවය ස්ථාපිත කර ඇතිද යන්න තහවුරු කරන්න.
Example:
-- Incorrect subquery condition example
SELECT name FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.id = u.id -- ← Incorrect relationship condition
);
→ නිවැරදි කොන්දේසිය මෙසේ විය යුතුය: o.user_id = u.id
6.2. උපවිමසුම් වල NULL-සම්බන්ධ ගැටළු
NOT IN වලට වඩා, NOT EXISTS NULL අගයන්ගෙන් අඩු ලෙස බලපෑම් ලබයි. එහෙත්, උපවිමසුමේ සැසඳුම් තීරුවල NULL අගයන් පවතී නම්, අනපේක්ෂිත ප්රතිඵල පවා සිදු විය හැක.
පූර්වයෙන්ම NULL අගයන් ඉවත් කිරීම හෝ වැදගත් සැසඳුම් තීරුවල NULL පවතින්නේ නැති ලෙස සැලසුම සැලසුම් කිරීම වඩා ආරක්ෂිත වේ.
Example:
-- Excluding NULL values
WHERE o.user_id IS NOT NULL AND o.user_id = u.id
6.3. උපවිමසුම් කාර්ය සාධන අඩු වීම
- ඉන්ඩෙක්ස් නොමැති නම්, උපවිමසුම් වගුව සම්පූර්ණයෙන් පරික්ෂා කරනු ඇත, එය කාර්ය සාධනය ගණනාවක් මන්දගාමී කරයි.
- අස්පෂ්ට හෝ පුළුල් WHERE කොන්දේසි අත්යවශ්ය නොවන පුළුල් පරාස සෙවීම් සිදු කරවිය හැක.
විසඳුම්:
- අදාළ ඉන්ඩෙක්ස් එකතු කරන්න
- අවශ්ය සහ නිරවද්ය කොන්දේසි පමණක් නියම කරන්න
- EXPLAIN භාවිතයෙන් ක්රියාත්මක සැලැස්ම තහවුරු කරන්න
6.4. වාක්ය රීති දෝෂ සහ පරාස දෝෂ
- බාහිර වගුවේ අලියාස් උපවිමසුමේ ඇතුළත නිවැරදිව යොමු කර ඇති බව තහවුරු කරන්න.
- අවලංගු කොමා හෝ නොගැලපෙන වෘත්තීය වැනි වාක්ය රීති දෝෂ පරීක්ෂා කරන්න.
Example:
SELECT u.name
FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders WHERE orders.user_id = u.id
);
6.5. දත්ත ගබඩා-විශේෂ සීමා සහ අනුවාද ගැටළු
- පරණ MySQL අනුවාද හෝ වෙනත් RDBMS වේදිකා සමහර අභිප්රේත හෝ නස්තූපිත උපවිමසුම් හැසිරීම් සහය නොදක්වනු ඇත.
- සෑම විටම නවතම නිල ලේඛන සහ අනුවාද යාවත්කාලීන සටහන් පරීක්ෂා කරන්න.
SQL ගැටළු විසඳීමේදී, අතිශය ප්රභාවී ක්රමය වන්නේ කොන්දේසි ක්රමවත් ලෙස තහවුරු කිරීම, ක්රියාත්මක සැලැස්ම පරීක්ෂා කිරීම, සහ නියැලූ දත්ත භාවිතයෙන් ගැටළුව නැවත නිර්මාණය කිරීමයි.
7. FAQ | MySQL NOT EXISTS පිළිබඳ නිතර අසන ප්රශ්න
මෙම කොටසේ, MySQL NOT EXISTS සම්බන්ධ සාමාන්ය ප්රශ්න සහ පැහැදිලි පිළිතුරු සාරාංශ කර ඇත. ඔබ වාස්තුකාලීන භාවිතයේ ගැටළු මුහුණ දුන්නේ නම් හෝ ක්රියාත්මක කිරීමට පෙර හොඳම ක්රම පරීක්ෂා කිරීමට අවශ්ය නම්, මෙම කොටස වෙත යොමු වන්න.
Q1. මට NOT EXISTS කවදා භාවිතා කළ යුතුද?
A. NOT EXISTS ප්රධාන වශයෙන් වෙනත් වගුවක් හෝ උපවිමසුමක සම්බන්ධිත දත්ත නොමැති වාර්තා ලබා ගැනීමට අවශ්ය වන විට භාවිතා කරයි. උදාහරණයක් ලෙස, “ඇණවුම් නොමැති පාරිභෝගිකයන්” හෝ “තවමත් ඉදිරිපත් නොකළ පත්රිකා”. එය “කිසිවක් නොමැති විට” යන කොන්දේසි පැහැදිලිව ප්රකාශ කරයි.
Q2. NOT EXISTS සහ NOT IN අතර වෙනස කුමක්ද?
A. NOT IN යනු අගයක් ලැයිස්තුවක් හෝ උපවිමසුම් ප්රතිඵලයක නොපැමිණීම පරීක්ෂා කරයි. එහෙත්, උපවිමසුමේ එක් NULL අගයක් පවා පවතී නම්, සියලු සැසඳුම් UNKNOWN බවට පත්වී, අපේක්ෂිත ප්රතිඵල ලබා නොදිය හැක. NOT EXISTS සාමාන්යයෙන් ආරක්ෂිතයි, එය NULL අගයන්ගෙන් අඩු ලෙස බලපෑම් ලබයි.
Q3. කාර්ය සාධනය සම්බන්ධයෙන් මොනවාට අවධානය යොමු කළ යුතුද?
A. උපවිමසුම් කොන්දේසි වල භාවිතා වන තීරුවල නිවැරදිව ඉන්ඩෙක්ස් සකස් කිරීම අත්යවශ්ය වේ. ඉන්ඩෙක්ස් නොමැති නම්, විශාල වගු සඳහා පවා, සෑම ඇගයුමක් සඳහාම සම්පූර්ණ වගු පරික්ෂා සිදු විය හැක. එසේම, EXPLAIN විධානය භාවිතයෙන් ක්රියාත්මක සැලැස්ම පරීක්ෂා කිරීමේ පුරුද්දක් ගත යුතුය.
Q4. LEFT JOIN සහ INNER JOIN අතර තේරීම කෙසේ කළ යුතුද?
A. සරල අස්ථිති පරීක්ෂා සහ කියවීමට පහසුකම සඳහා LEFT JOIN + IS NULL විකල්පයක් ලෙස භාවිතා කළ හැක. එහෙත්, සංකීර්ණ කොන්දේසි හෝ උපවිමසුම් පැත්තේ NULL අගයන් ඇති අවස්ථා වල, NOT EXISTS සාමාන්යයෙන් ආරක්ෂිතයි. INNER JOIN වෙනත් අරමුණක් සපුරාලයි—එය දෙකම වගු වල පවතින වාර්තා පමණක් ලබා දෙයි.
Q5. NOT EXISTS වෙනත් RDBMS (PostgreSQL, Oracle, ආදිය) තුළ භාවිතා කළ හැදියිද?
A. මූලික වාක්ය රචනා සහ හැසිරීම බොහෝ RDBMS වේදිකා අතර සමාන වේ. කෙසේ වෙතත්, කාර්ය සාධන අනුකූල කිරීම සහ සමහර අභ්යන්තර හැසිරීම් වෙනස් විය හැක. නියමිත DBMS හි නිල ලේඛන භාවිතයෙන් හැසිරීම සත්යාපනය කිරීම සැමවිටම කරන්න.
Q6. MySQL අනුවාදය කුමන එකේ NOT EXISTS සහාය දක්වයි?
A. මූලික NOT EXISTS වාක්ය රචනා MySQL හි ඉතා පරණ අනුවාද වල සිටම සහාය දක්වයි. කෙසේ වෙතත්, සමහර අනුකූලීකරණ සහ නෙස්ට් සබ්කුයරි හැසිරීම් අනුවාදය සහ සැකසුම් අනුව වෙනස් විය හැක.
Q7. සාමාන්ය වාස්තු විශේෂිත ගැටළු මොනවාද?
A. සාමාන්ය ගැටළු අතර අනිසි NULL සැකසීම, අඩු ඉන්ඩෙක්ස් නිසා ඇතිවන තද වේගය අඩු වීම, වැරදි සබ්කුයරි කොන්දේසි, සහ සම්බන්ධතා කොන්දේසි දෝෂයන් ඇතුළත් වේ. ගැටළු විසඳීමේදී, නියැලූ දත්ත සමඟ පරීක්ෂා කර, සංකීර්ණ විමසුම් පියවරෙන් පියවර බෙදා හරී, හේතුව හඳුනා ගන්න.
මෙම සාමාන්ය ප්රශ්න තේරුම් ගැනීම NOT EXISTS සම්බන්ධ ක්රියාත්මක කිරීම සහ මෙහෙයුම් ගැටළු වලින් වැළැක්වීමට උපකාරී වේ.
8. නිගමනය
මෙම ලිපියේ, අපි MySQL NOT EXISTS මූලික කරුණු සිට උසස් භාවිතය දක්වා, අනෙකුත් තාක්ෂණ සමඟ සංසන්දනය, කාර්ය සාධන අනුකූලීකරණ උපාය මාර්ග, දෝෂ සැකසීම, සහ FAQ ගණනාවක් පරීක්ෂා කළෙමු.
NOT EXISTS යනු, සම්බන්ධිත දත්ත තවත් වගුවක් හෝ සබ්කුයරියක නොමැති වාර්තා කාර්යක්ෂමව ලබා ගැනීමට භාවිතා කරන ශක්තිමත් සංරචකයකි. NOT IN හෝ LEFT JOIN + IS NULL භාවිතා කරමින් සමාන ප්රතිඵල ලබා ගත හැකි නමුත්, NOT EXISTS NULL අගයන් හා කාර්ය සාධනයේ වාසි (විශාල දත්ත කට්ටල හෝ සබ්කුයරියන් NULL අගයන් අඩංගු වීමේදී) ලබා දේ.
එය ප්රායෝගික අවස්ථා වලද භාවිතා කළ හැක; උදාහරණයක් ලෙස, අනුපිටපත් දත්ත වැළැක්වීම, සැකසිය නොමැති වාර්තා ලබා ගැනීම, සහ කොන්දේසිමය UPDATE/DELETE ක්රියාකාරකම් කිරීම—ඔබේ SQL නිර්මාණ හැකියාවන් විශාල ලෙස පුළුල් කරයි.
කාර්ය සාධනය උපරිම කිරීම සඳහා, නිසි ඉන්ඩෙක්ස් සැලසුම් සහ ක්රියාත්මක සැලැස්ම (EXPLAIN) සත්යාපනය අත්යවශ්ය වේ. ගැටළු උදාවන විට, කොන්දේසි, ඉන්ඩෙක්ස් භාවිතය, සහ NULL සැකසීම පද්ධතිමය ලෙස සමාලෝචනය කර, මූලික හේතුව හඳුනා ගන්න.
NOT EXISTS නිසි ලෙස භාවිතා කිරීමෙන්, ඔබට වඩා ශක්තිමත් සහ කාර්යක්ෂම දත්ත ගබඩා පද්ධති ගොඩනැගිය හැක. දෛනික සංවර්ධන සහ දත්ත ගබඩා මෙහෙයුම් වල NOT EXISTS එකතු කර බලන්න.
9. යොමු සබැඳි සහ නිර්දේශිත ලේඛන
MySQL NOT EXISTS සහ SQL පිළිබඳ ඔබේ අවබෝධය ගැඹුරු කර ගැනීමට, පහත විශ්වාසනීය යොමු ද්රව්ය සහ ඉගෙනුම් සම්පත් ඇත.
- MySQL Official Documentation (English) — EXISTS Syntax EXISTS සහ NOT EXISTS සබ්කුයරි ගැන නිල විස්තරය, උදාහරණ සහ අනුකූලීකරණ විස්තර සමඟ.
- MySQL Official Japanese Reference — Subqueries සබ්කුයරි සහ NOT EXISTS ගැන ජපන් භාෂාවේ සවිස්තරාත්මක විස්තරය.
- MySQL Query Optimization Guide (External Blog) කාර්ය සාධන ටියුනින් කිරීම සහ ප්රභාවී ඉන්ඩෙක්ස් භාවිතය සඳහා ප්රායෝගික තාක්ෂණ.
අතිරේක සටහන්
MySQL version updates and the official blog නිතර පරීක්ෂා කිරීමෙන්, නවතම විශේෂාංග සහ අනුකූලීකරණ උපාය මාර්ග පිළිබඳව ඔබට දැනුවත් විය හැක.
ඔබ WordPress වැනි CMS එකක් භාවිතා කරනවා නම්, නිල ලේඛනවලට අමතරව, ප්ලගීන සහ තේමා මගින් ජනනය වන SQL පරීක්ෂා කිරීමද සුදුසු වේ.
මෙම සම්පත් සහ ලිපියේ හඳුන්වා දුන් තාක්ෂණ එකතු කිරීමෙන්, ඔබට NOT EXISTS වෘත්තීය ව්යාපෘති සහ ඉගෙනුම් පරිසර දෙකේම කාර්යක්ෂමව යොදා ගැනීමට හැකි වේ.


