సబ్క్వెరీ పట్టికను అందిస్తుంది
చివరగా, సబ్క్వెరీ మొత్తం పట్టికను తిరిగి ఇచ్చినప్పుడు మూడవ ఎంపిక. ఇది అత్యంత సాధారణ ఎంపిక.
మేము ఒక నిర్దిష్ట పట్టికను కొద్దిగా సర్దుబాటు చేయాలనుకున్నప్పుడు చాలా తరచుగా పరిస్థితులు ఉన్నాయి. ఆపై మాత్రమే సరిదిద్దబడిన పట్టికను మరొకదానితో (JOIN ON ఆపరేటర్ని ఉపయోగించి) చేరండి.
మేము JOINతో రెండు పట్టికలను కలిపే సరళమైన కేసుతో ప్రారంభిద్దాం:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id
మరియు మీకు బహుశా గుర్తున్నట్లుగా, టాస్క్ టేబుల్లో ఎవరికీ కేటాయించని టాస్క్లు ఉన్నాయి : Employee_id NULL .
సరిదిద్దబడిన పట్టికను రూపొందిద్దాం , ఇక్కడ మేము అన్ని హ్యాంగింగ్ టాస్క్లను డైరెక్టర్కి అప్పగిస్తాము (అతని ID = 4).
దీన్ని చేయడానికి, మేము IFNULL() ఫంక్షన్ని ఉపయోగిస్తాము :
SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task
మరియు ఈ ప్రశ్న యొక్క ఫలితం:
id | ఉద్యోగ గుర్తింపు | పేరు | గడువు |
---|---|---|---|
1 | 1 | ఫ్రంటెండ్లో బగ్ను పరిష్కరించండి | 2022-06-01 |
2 | 2 | బ్యాకెండ్లో బగ్ను పరిష్కరించండి | 2022-06-15 |
3 | 5 | కాఫీ కొనండి | 2022-07-01 |
4 | 5 | కాఫీ కొనండి | 2022-08-01 |
5 | 5 | కాఫీ కొనండి | 2022-09-01 |
6 | 4 | కార్యాలయాన్ని శుభ్రం చేయండి | (శూన్య) |
7 | 4 | జీవితం ఆనందించండి | (శూన్య) |
8 | 6 | జీవితం ఆనందించండి | (శూన్య) |
సరిదిద్దబడిన సెల్ ఎరుపు రంగులో గుర్తించబడింది.
ఇప్పుడు మన సరిదిద్దబడిన పట్టికను ప్రశ్నకు ప్రత్యామ్నాయం చేద్దాం:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id
టాస్క్ టేబుల్కు బదులుగా .
అటువంటి అభ్యర్థన ఇలా కనిపిస్తుంది:
SELECT * FROM employee e JOIN (
SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline
FROM task
) t ON e.id = t.emploee_id
టాస్క్ అనే పదానికి బదులుగా , మేము కుండలీకరణాలను వ్రాసి, అభ్యర్థన బాడీని వాటిలో ఉంచాము.
మార్గం ద్వారా, సమూహ ప్రశ్న కోసం అలియాస్ t (అలియాస్) చాలా ఉపయోగకరంగా ఉంది. సమూహ ప్రశ్న, పట్టిక వలె కాకుండా, దాని స్వంత పేరు లేదు, కాబట్టి మారుపేరు చాలా స్థలంలో లేదు.
మరియు అటువంటి ప్రశ్న యొక్క ఫలితం ఇక్కడ ఉంది:
id | పేరు | వృత్తి | జీతం | వయస్సు | చేరుతున్న తేదీ | id | ఉద్యోగ గుర్తింపు | పేరు |
---|---|---|---|---|---|---|---|---|
1 | ఇవనోవ్ ఇవాన్ | ప్రోగ్రామర్ | 100000 | 25 | 2012-06-30 | 1 | 1 | ఫ్రంటెండ్లో బగ్ను పరిష్కరించండి |
2 | పెట్రోవ్ పీటర్ | ప్రోగ్రామర్ | 80000 | 23 | 2013-08-12 | 2 | 2 | బ్యాకెండ్లో బగ్ను పరిష్కరించండి |
4 | రాబినోవిచ్ మోయిషా | దర్శకుడు | 200000 | 35 | 2015-05-12 | 6 | 4 | కార్యాలయాన్ని శుభ్రం చేయండి |
4 | రాబినోవిచ్ మోయిషా | దర్శకుడు | 200000 | 35 | 2015-05-12 | 7 | 4 | జీవితం ఆనందించండి |
5 | కిరియెంకో అనస్తాసియా | ఆఫీసు మేనేజర్ | 40000 | 25 | 2015-10-10 | 4 | 5 | కాఫీ కొనండి |
5 | కిరియెంకో అనస్తాసియా | ఆఫీసు మేనేజర్ | 40000 | 25 | 2015-10-10 | 5 | 5 | కాఫీ కొనండి |
5 | కిరియెంకో అనస్తాసియా | ఆఫీసు మేనేజర్ | 40000 | 25 | 2015-10-10 | 3 | 5 | కాఫీ కొనండి |
6 | వాస్కా | పిల్లి | 1000 | 3 | 2018-11-11 | 8 | 6 | జీవితం ఆనందించండి |
మా డైరెక్టర్కి “కార్యాలయాన్ని శుభ్రం చేయడం” అనే పని ఉంది, దానిని అప్పగించడానికి ఎవరైనా త్వరగా కనుగొంటారని నేను భావిస్తున్నాను :) ఆపరేటర్తో ఉపయోగించడం
మార్గం ద్వారా, MySQL యొక్క వెర్షన్ 8తో ప్రారంభించి, మీరు ఇకపై మీ అన్ని సబ్క్వెరీలను తుది ప్రశ్నలోనే ఉంచాల్సిన అవసరం లేదు. వాటిని విడిగా నిర్వహించవచ్చు. దీని కోసం, WITH స్టేట్మెంట్ ఉపయోగించబడుతుంది .
ఇది వర్చువల్ టేబుల్ని (ప్రశ్న అనే పేరుతో) సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది మరియు దాని రూపాన్ని టెంప్లేట్ ద్వారా అందించబడుతుంది:
WITH Name AS (request)
మీ సబ్క్వెరీలో COUNT(*) వంటి పేరులేని నిలువు వరుసలు ఉన్న సందర్భాలు తరచుగా ఉన్నాయి, వాటికి మీరు ప్రత్యేకమైన పేరును కేటాయించలేదు. ఈ సందర్భంలో, WITH స్టేట్మెంట్ సబ్క్వెరీ కోసం కొత్త నిలువు వరుస పేర్లను పేర్కొనే ఎంపికను కలిగి ఉంటుంది.
దీని రెండవ రూపం టెంప్లేట్ ద్వారా ఇవ్వబడింది:
WITH Name(column1, column2, …) AS (request)
మీరు మీకు కావలసినన్ని వర్చువల్ పట్టికలను (పేరుగల ప్రశ్నలు) ఉపయోగించవచ్చు మరియు వాటిలో ఒకదానికొకటి సూచించవచ్చు. మీ అభ్యర్థన యొక్క సాధారణ రూపం ఇలా ఉంటుంది:
WITH name1 AS (request1),
name2 AS (request2),
name3 AS (request3)
SELECT * FROM name1 JOIN name2 ON …
ఇప్పుడు మన భయానక ప్రశ్నను తీసుకుందాం:
SELECT * FROM employee e JOIN (
SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline
FROM task
) t ON e.id = t.emploee_id
మరియు దానిని స్టేట్మెంట్తో తిరిగి వ్రాయండి:
WITH task2(id, employee_id, name, deadline)
AS (SELECT id, IFNULL(employee_id, 4), name, deadline FROM task)
SELECT * FROM employee e JOIN task2 t ON e.id = t.emploee_id
లేదా మీరు కాలమ్ పేర్లు లేకుండా చేయవచ్చు, కానీ మీరు IFNULL() ఫంక్షన్ కోసం మారుపేరును పేర్కొనాలి:
WITH task2 AS (
SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task
)
SELECT * FROM employee e JOIN task2 t ON e.id = t.emploee_id
GO TO FULL VERSION