హలో, హబ్ర్!
ఇప్పుడు 3 సంవత్సరాలకు పైగా నేను వివిధ శిక్షణా కేంద్రాలలో SQLని బోధిస్తున్నాను మరియు నా పరిశీలనలలో ఒకటి ఏమిటంటే, విద్యార్థులు SQLని బాగా అర్థం చేసుకుంటారు మరియు వారికి ఒక పనిని అందజేస్తే, అవకాశాలు మరియు సైద్ధాంతిక పునాదుల గురించి చెప్పలేదు.
ఈ వ్యాసంలో, నేను విద్యార్థులకు హోంవర్క్గా ఇచ్చే నా సమస్యల జాబితాను మీతో పంచుకుంటాను మరియు వాటిపై మేము వివిధ రకాల మెదడు తుఫానులను నిర్వహిస్తాము, ఇది SQL గురించి లోతైన మరియు స్పష్టమైన అవగాహనకు దారితీస్తుంది.
SQL (ˈɛsˈkjuˈɛl; ఆంగ్ల నిర్మాణాత్మక ప్రశ్న భాష) అనేది తగిన డేటాబేస్ మేనేజ్మెంట్ సిస్టమ్ ద్వారా నిర్వహించబడే రిలేషనల్ డేటాబేస్లో డేటాను సృష్టించడానికి, సవరించడానికి మరియు నిర్వహించడానికి ఉపయోగించే డిక్లరేటివ్ ప్రోగ్రామింగ్ భాష.
మీరు వివిధ నుండి SQL గురించి చదువుకోవచ్చు
ఈ కథనం మీకు మొదటి నుండి SQL నేర్పడానికి ఉద్దేశించబడలేదు.
కనుక మనము వెళ్దాము.
మేము బాగా తెలిసిన వాటిని ఉపయోగిస్తాము
మేము SELECT టాస్క్లను మాత్రమే పరిశీలిస్తామని నేను గమనించాను. ఇక్కడ DML లేదా DDL టాస్క్లు లేవు.
పనులు
డేటాను పరిమితం చేయడం మరియు క్రమబద్ధీకరించడం
ఉద్యోగుల పట్టిక. ఉద్యోగులందరి గురించిన సమాచారంతో జాబితాను పొందండి
నిర్ణయం
SELECT * FROM employees
ఉద్యోగుల పట్టిక. 'డేవిడ్' పేరుతో ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE first_name = 'David';
ఉద్యోగుల పట్టిక. 'IT_PROG'కి సమానమైన job_id ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
ఉద్యోగుల పట్టిక. 50 కంటే ఎక్కువ జీతం (జీతం) ఉన్న 4000వ విభాగం (డిపార్ట్మెంట్_ఐడి) నుండి ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
ఉద్యోగుల పట్టిక. 20వ మరియు 30వ విభాగం (డిపార్ట్మెంట్_ఐడి) నుండి ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
ఉద్యోగుల పట్టిక. వారి పేరులోని చివరి అక్షరం 'a' ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE first_name LIKE '%a';
ఉద్యోగుల పట్టిక. 50వ మరియు 80వ విభాగం (డిపార్ట్మెంట్_ఐడి) నుండి బోనస్ ఉన్న ఉద్యోగులందరి జాబితాను పొందండి (కమీషన్_పిసిటి కాలమ్లోని విలువ ఖాళీగా లేదు)
నిర్ణయం
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
ఉద్యోగుల పట్టిక. కనీసం 2 అక్షరాలు 'n' కలిగి ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
ఉద్యోగుల పట్టిక. 4 అక్షరాల కంటే ఎక్కువ పేర్లు ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
ఉద్యోగుల పట్టిక. జీతం 8000 నుండి 9000 వరకు ఉన్న ఉద్యోగులందరి జాబితాను పొందండి (కలిసి)
నిర్ణయం
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
ఉద్యోగుల పట్టిక. '%' చిహ్నాన్ని కలిగి ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
ఉద్యోగుల పట్టిక. అన్ని మేనేజర్ IDల జాబితాను పొందండి
నిర్ణయం
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
ఉద్యోగుల పట్టిక. ఈ ఫార్మాట్లో ఉన్న ఉద్యోగుల జాబితాను వారి స్థానాలతో పొందండి: డోనాల్డ్(sh_clerk)
నిర్ణయం
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
అవుట్పుట్ని అనుకూలీకరించడానికి సింగిల్-రో ఫంక్షన్లను ఉపయోగించడం
ఉద్యోగుల పట్టిక. 10 అక్షరాల కంటే ఎక్కువ పేర్లు ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
ఉద్యోగుల పట్టిక. వారి పేరులో 'బి' అక్షరం ఉన్న ఉద్యోగులందరి జాబితాను పొందండి (కేస్ ఇన్సెన్సిటివ్)
నిర్ణయం
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
ఉద్యోగుల పట్టిక. కనీసం 2 అక్షరాలు 'a' కలిగి ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
ఉద్యోగుల పట్టిక. 1000 కంటే ఎక్కువ జీతం ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
ఉద్యోగుల పట్టిక. ఉద్యోగి ఫోన్ నంబర్ XXX.XXX.XXXX ఫార్మాట్లో ఉన్నట్లయితే అతని ఫోన్ నంబర్ యొక్క మొదటి 3-అంకెల సంఖ్యను పొందండి
నిర్ణయం
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
విభాగాల పట్టిక. పేరులో ఒకటి కంటే ఎక్కువ పదాలు ఉన్నవారికి శాఖ పేరు నుండి మొదటి పదాన్ని పొందండి
నిర్ణయం
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
ఉద్యోగుల పట్టిక. పేరులో మొదటి మరియు చివరి అక్షరాలు లేకుండా ఉద్యోగి పేర్లను పొందండి
నిర్ణయం
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
ఉద్యోగుల పట్టిక. వారి పేరులోని చివరి అక్షరం 'm' మరియు 5 కంటే ఎక్కువ పొడవు ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
టేబుల్ డ్యూయల్. తదుపరి శుక్రవారం తేదీని పొందండి
నిర్ణయం
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
ఉద్యోగుల పట్టిక. కంపెనీలో 17 సంవత్సరాలకు పైగా పనిచేసిన ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
ఉద్యోగుల పట్టిక. వారి ఫోన్ నంబర్ యొక్క చివరి అంకె బేసి మరియు చుక్కతో వేరు చేయబడిన 3 సంఖ్యలను కలిగి ఉన్న ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
ఉద్యోగుల పట్టిక. '_' గుర్తు తర్వాత job_id విలువ కనీసం 3 అక్షరాలను కలిగి ఉన్న ఉద్యోగులందరి జాబితాను పొందండి, కానీ '_' తర్వాత ఈ విలువ 'CLERK'కి సమానంగా ఉండదు
నిర్ణయం
SELECT *
FROM employees
WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
ఉద్యోగుల పట్టిక. PHONE_NUMBER విలువలోని మొత్తం '.'ని భర్తీ చేయడం ద్వారా ఉద్యోగులందరి జాబితాను పొందండి పై '-'
నిర్ణయం
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
మార్పిడి విధులు మరియు షరతులతో కూడిన వ్యక్తీకరణలను ఉపయోగించడం
ఉద్యోగుల పట్టిక. నెలలో మొదటి రోజు (ఏదైనా) పనికి వచ్చిన ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
ఉద్యోగుల పట్టిక. 2008లో పని చేయడానికి వచ్చిన ఉద్యోగులందరి జాబితాను పొందండి
నిర్ణయం
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
టేబుల్ డ్యూయల్. రేపటి తేదీని ఫార్మాట్లో చూపండి: రేపు జనవరి రెండవ తేదీ
నిర్ణయం
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
ఉద్యోగుల పట్టిక. ఉద్యోగులందరి జాబితాను మరియు ప్రతి ఉద్యోగి పనికి వచ్చిన తేదీని ఫార్మాట్లో పొందండి: జూన్ 21, 2007
నిర్ణయం
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
ఉద్యోగుల పట్టిక. 20% పెరిగిన జీతాలతో ఉద్యోగుల జాబితాను పొందండి. డాలర్ గుర్తుతో జీతం చూపించు
నిర్ణయం
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
ఉద్యోగుల పట్టిక. ఫిబ్రవరి 2007లో పని చేయడం ప్రారంభించిన ఉద్యోగులందరి జాబితాను పొందండి.
నిర్ణయం
SELECT *
FROM employees
WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')
AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));
SELECT *
FROM employees
WHERE to_char(hire_date,'MM.YYYY') = '02.2007';
టేబుల్ డ్యూయల్. ప్రస్తుత తేదీ, + రెండవ, + నిమిషం, + గంట, + రోజు, + నెల, + సంవత్సరాన్ని తీసుకురండి
నిర్ణయం
SELECT SYSDATE now,
SYSDATE + 1 / (24 * 60 * 60) plus_second,
SYSDATE + 1 / (24 * 60) plus_minute,
SYSDATE + 1 / 24 plus_hour,
SYSDATE + 1 plus_day,
ADD_MONTHS (SYSDATE, 1) plus_month,
ADD_MONTHS (SYSDATE, 12) plus_year
FROM DUAL;
ఉద్యోగుల పట్టిక. పూర్తి జీతాలు (జీతం + కమీషన్_pct(%)) ఉన్న ఉద్యోగులందరి జాబితాను ఫార్మాట్లో పొందండి: $24,000.00
నిర్ణయం
SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
FROM employees;
ఉద్యోగుల పట్టిక. ఉద్యోగులందరి జాబితాను మరియు జీతం బోనస్ల లభ్యత గురించి సమాచారాన్ని పొందండి (అవును/కాదు)
నిర్ణయం
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
ఉద్యోగుల పట్టిక. ప్రతి ఉద్యోగి యొక్క జీతం స్థాయిని పొందండి: 5000 కంటే తక్కువ తక్కువ స్థాయి, 5000 కంటే ఎక్కువ లేదా సమానం మరియు 10000 కంటే తక్కువ సాధారణ స్థాయి, 10000 కంటే ఎక్కువ లేదా సమానం ఉన్నత స్థాయిగా పరిగణించబడుతుంది
నిర్ణయం
SELECT first_name,
salary,
CASE
WHEN salary < 5000 THEN 'Low'
WHEN salary >= 5000 AND salary < 10000 THEN 'Normal'
ELSE 'High'
END salary_level
FROM employees;
పట్టిక దేశాలు. ప్రతి దేశం కోసం, అది ఉన్న ప్రాంతాన్ని చూపండి: 1-యూరోప్, 2-అమెరికా, 3-ఆసియా, 4-ఆఫ్రికా (చేరకుండా)
నిర్ణయం
SELECT country_name country,
DECODE (region_id,
1, 'Europe',
2, 'America',
3, 'Asia',
4, 'Africa',
'Unknown')
region
FROM countries;
SELECT country_name
country,
CASE region_id
WHEN 1 THEN 'Europe'
WHEN 2 THEN 'America'
WHEN 3 THEN 'Asia'
WHEN 4 THEN 'Africa'
ELSE 'Unknown'
END
region
FROM countries;
సమూహ విధులను ఉపయోగించి సమగ్ర డేటాను నివేదించడం
ఉద్యోగుల పట్టిక. కనిష్ట మరియు గరిష్ట జీతం, పనిలో చేరిన ప్రారంభ మరియు ఆలస్య తేదీలు మరియు ఉద్యోగుల సంఖ్యతో డిపార్ట్మెంట్_ఐడి ద్వారా నివేదికను స్వీకరించండి. ఉద్యోగుల సంఖ్య ఆధారంగా క్రమబద్ధీకరించు (అవరోహణ)
నిర్ణయం
SELECT department_id,
MIN (salary) min_salary,
MAX (salary) max_salary,
MIN (hire_date) min_hire_date,
MAX (hire_date) max_hire_Date,
COUNT (*) count
FROM employees
GROUP BY department_id
order by count(*) desc;
ఉద్యోగుల పట్టిక. ఒకే అక్షరంతో పేర్లు ప్రారంభమయ్యే ఎంత మంది ఉద్యోగులు? పరిమాణం ద్వారా క్రమబద్ధీకరించండి. పరిమాణం 1 కంటే ఎక్కువ ఉన్న వాటిని మాత్రమే చూపు
నిర్ణయం
SELECT SUBSTR (first_name, 1, 1) first_char, COUNT (*)
FROM employees
GROUP BY SUBSTR (first_name, 1, 1)
HAVING COUNT (*) > 1
ORDER BY 2 DESC;
ఉద్యోగుల పట్టిక. ఒకే డిపార్ట్మెంట్లో ఎంత మంది ఉద్యోగులు పనిచేస్తూ ఒకే జీతం పొందుతున్నారు?
నిర్ణయం
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
ఉద్యోగుల పట్టిక. వారంలో ప్రతి రోజు ఎంత మంది ఉద్యోగులను నియమించారు అనే నివేదికను పొందండి. పరిమాణం ద్వారా క్రమబద్ధీకరించండి
నిర్ణయం
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
ఉద్యోగుల పట్టిక. సంవత్సరానికి ఎంత మంది ఉద్యోగులను నియమించారు అనే నివేదికను పొందండి. పరిమాణం ద్వారా క్రమబద్ధీకరించండి
నిర్ణయం
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
ఉద్యోగుల పట్టిక. ఉద్యోగులను కలిగి ఉన్న విభాగాల సంఖ్యను పొందండి
నిర్ణయం
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
ఉద్యోగుల పట్టిక. 30 కంటే ఎక్కువ మంది ఉద్యోగులు ఉన్న డిపార్ట్మెంట్_ఐడిల జాబితాను పొందండి
నిర్ణయం
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
ఉద్యోగుల పట్టిక. డిపార్ట్మెంట్_ఐడిల జాబితా మరియు ప్రతి డిపార్ట్మెంట్లోని ఉద్యోగుల సగటు జీతం పొందండి.
నిర్ణయం
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
పట్టిక దేశాలు. 60 కంటే ఎక్కువ ఉన్న అన్ని దేశాల_పేర్ల యొక్క అన్ని అక్షరాల మొత్తం ప్రాంతం_id జాబితాను పొందండి
నిర్ణయం
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
ఉద్యోగుల పట్టిక. అనేక (>1) job_idల ఉద్యోగులు పనిచేసే డిపార్ట్మెంట్_ఐడిల జాబితాను పొందండి
నిర్ణయం
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
ఉద్యోగుల పట్టిక. సబార్డినేట్ల సంఖ్య 5 కంటే ఎక్కువ మరియు అతని సబార్డినేట్ల మొత్తం జీతాల మొత్తం 50000 కంటే ఎక్కువ ఉన్న manager_idల జాబితాను పొందండి
నిర్ణయం
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
ఉద్యోగుల పట్టిక. అతని సబార్డినేట్లందరి సగటు జీతం 6000 నుండి 9000 వరకు ఉంటుంది మరియు బోనస్లు పొందని మేనేజర్_ఐడిల జాబితాను పొందండి (కమీషన్_పిసిటి ఖాళీగా ఉంది)
నిర్ణయం
SELECT manager_id, AVG (salary) avg_salary
FROM employees
WHERE commission_pct IS NULL
GROUP BY manager_id
HAVING AVG (salary) BETWEEN 6000 AND 9000;
ఉద్యోగుల పట్టిక. 'CLERK' అనే పదంతో ముగిసే ఉద్యోగ_id ఉద్యోగులందరి నుండి గరిష్ట జీతం పొందండి
నిర్ణయం
SELECT MAX (salary) max_salary
FROM employees
WHERE job_id LIKE '%CLERK';
SELECT MAX (salary) max_salary
FROM employees
WHERE SUBSTR (job_id, -5) = 'CLERK';
ఉద్యోగుల పట్టిక. డిపార్ట్మెంట్కి సంబంధించిన అన్ని సగటు జీతాలలో గరిష్ట జీతం పొందండి
నిర్ణయం
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
ఉద్యోగుల పట్టిక. వారి పేరులో అదే సంఖ్యలో అక్షరాలతో ఉద్యోగుల సంఖ్యను పొందండి. అదే సమయంలో, పేరు పొడవు 5 కంటే ఎక్కువ మరియు అదే పేరుతో ఉన్న ఉద్యోగుల సంఖ్య 20 కంటే ఎక్కువ ఉన్నవారిని మాత్రమే చూపండి. పేరు పొడవు ద్వారా క్రమబద్ధీకరించండి
నిర్ణయం
SELECT LENGTH (first_name), COUNT (*)
FROM employees
GROUP BY LENGTH (first_name)
HAVING LENGTH (first_name) > 5 AND COUNT (*) > 20
ORDER BY LENGTH (first_name);
SELECT LENGTH (first_name), COUNT (*)
FROM employees
WHERE LENGTH (first_name) > 5
GROUP BY LENGTH (first_name)
HAVING COUNT (*) > 20
ORDER BY LENGTH (first_name);
జాయిన్లను ఉపయోగించి బహుళ పట్టికల నుండి డేటాను ప్రదర్శిస్తోంది
టేబుల్ ఉద్యోగులు, విభాగాలు, స్థానాలు, దేశాలు, ప్రాంతాలు. ప్రాంతాల జాబితా మరియు ప్రతి ప్రాంతంలోని ఉద్యోగుల సంఖ్యను పొందండి
నిర్ణయం
SELECT region_name, COUNT (*)
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
JOIN countries c ON (l.country_id = c.country_id)
JOIN regions r ON (c.region_id = r.region_id)
GROUP BY region_name;
టేబుల్ ఉద్యోగులు, విభాగాలు, స్థానాలు, దేశాలు, ప్రాంతాలు. ప్రతి ఉద్యోగి గురించి వివరణాత్మక సమాచారాన్ని పొందండి:
మొదటి_పేరు, చివరి_పేరు, విభాగం, ఉద్యోగం, వీధి, దేశం, ప్రాంతం
నిర్ణయం
SELECT First_name,
Last_name,
Department_name,
Job_id,
street_address,
Country_name,
Region_name
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
JOIN countries c ON (l.country_id = c.country_id)
JOIN regions r ON (c.region_id = r.region_id);
ఉద్యోగుల పట్టిక. 6 కంటే ఎక్కువ మంది ఉద్యోగులు తమకు అధీనంలో ఉన్న అన్ని మేనేజర్లను చూపండి
నిర్ణయం
SELECT man.first_name, COUNT (*)
FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
GROUP BY man.first_name
HAVING COUNT (*) > 6;
ఉద్యోగుల పట్టిక. ఎవరికీ నివేదించని ఉద్యోగులందరినీ చూపించు
నిర్ణయం
SELECT emp.first_name
FROM employees emp
LEFT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE man.FIRST_NAME IS NULL;
SELECT first_name
FROM employees
WHERE manager_id IS NULL;
టేబుల్ ఉద్యోగులు, Job_history. ఉద్యోగుల పట్టిక అన్ని ఉద్యోగులను నిల్వ చేస్తుంది. Job_history పట్టిక కంపెనీని విడిచిపెట్టిన ఉద్యోగులను నిల్వ చేస్తుంది. ఉద్యోగులందరి గురించి మరియు కంపెనీలో వారి స్థితి గురించి నివేదికను పొందండి (పని చేసినవారు లేదా బయలుదేరిన తేదీతో కంపెనీని విడిచిపెట్టారు)
ఉదాహరణకు:
మొదటి_పేరు | హోదా
జెన్నిఫర్ | డిసెంబర్ 31, 2006న కంపెనీని విడిచిపెట్టారు
క్లారా | ప్రస్తుతం పనిచేస్తున్నారు
నిర్ణయం
SELECT first_name,
NVL2 (
end_date,
TO_CHAR (end_date, 'fm""Left the company at"" DD ""of"" Month, YYYY'),
'Currently Working')
status
FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);
టేబుల్ ఉద్యోగులు, విభాగాలు, స్థానాలు, దేశాలు, ప్రాంతాలు. యూరప్లో నివసిస్తున్న ఉద్యోగుల జాబితాను పొందండి (ప్రాంతం_పేరు)
నిర్ణయం
SELECT first_name
FROM employees
JOIN departments USING (department_id)
JOIN locations USING (location_id)
JOIN countries USING (country_id)
JOIN regions USING (region_id)
WHERE region_name = 'Europe';
SELECT first_name
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
JOIN countries c ON (l.country_id = c.country_id)
JOIN regions r ON (c.region_id = r.region_id)
WHERE region_name = 'Europe';
టేబుల్ ఉద్యోగులు, విభాగాలు. 30 కంటే ఎక్కువ మంది ఉద్యోగులు ఉన్న అన్ని విభాగాలను చూపండి
నిర్ణయం
SELECT department_name, COUNT (*)
FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
HAVING COUNT (*) > 30;
టేబుల్ ఉద్యోగులు, విభాగాలు. ఏ విభాగంలోనూ లేని ఉద్యోగులందరినీ చూపించండి
నిర్ణయం
SELECT first_name
FROM employees e
LEFT JOIN departments d ON (e.department_id = d.department_id)
WHERE d.department_name IS NULL;
SELECT first_name
FROM employees
WHERE department_id IS NULL;
టేబుల్ ఉద్యోగులు, విభాగాలు. ఉద్యోగులు లేని అన్ని విభాగాలను చూపండి
నిర్ణయం
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
ఉద్యోగుల పట్టిక. వారికి అధీనంలో ఎవరూ లేని ఉద్యోగులందరినీ చూపించండి
నిర్ణయం
SELECT man.first_name
FROM employees emp
RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE emp.FIRST_NAME IS NULL;
టేబుల్ ఉద్యోగులు, ఉద్యోగాలు, విభాగాలు. ఉద్యోగులను ఫార్మాట్లో చూపండి: మొదటి_పేరు, ఉద్యోగ_శీర్షిక, డిపార్ట్మెంట్_పేరు.
ఉదాహరణకు:
మొదటి_పేరు | ఉద్యోగం_శీర్షిక | శాఖ పేరు
డోనాల్డ్ | షిప్పింగ్ | క్లర్క్ షిప్పింగ్
నిర్ణయం
SELECT first_name, job_title, department_name
FROM employees e
JOIN jobs j ON (e.job_id = j.job_id)
JOIN departments d ON (d.department_id = e.department_id);
ఉద్యోగుల పట్టిక. 2005లో మేనేజర్లు ఉద్యోగం పొందిన ఉద్యోగుల జాబితాను పొందండి, అయితే అదే సమయంలో ఈ ఉద్యోగులు 2005కి ముందు ఉద్యోగం పొందారు.
నిర్ణయం
SELECT emp.*
FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE TO_CHAR (man.hire_date, 'YYYY') = '2005'
AND emp.hire_date < TO_DATE ('01012005', 'DDMMYYYY');
ఉద్యోగుల పట్టిక. ఏ సంవత్సరంలోనైనా జనవరిలో మేనేజర్లు ఉద్యోగం పొందిన ఉద్యోగుల జాబితాను పొందండి మరియు ఈ ఉద్యోగుల ఉద్యోగ_శీర్షిక పొడవు 15 అక్షరాల కంటే ఎక్కువ
నిర్ణయం
SELECT emp.*
FROM employees emp
JOIN employees man ON (emp.manager_id = man.employee_id)
JOIN jobs j ON (emp.job_id = j.job_id)
WHERE TO_CHAR (man.hire_date, 'MM') = '01' AND LENGTH (j.job_title) > 15;
ప్రశ్నలను పరిష్కరించడానికి సబ్క్వెరీలను ఉపయోగించడం
ఉద్యోగుల పట్టిక. పొడవైన పేరుతో ఉద్యోగుల జాబితాను పొందండి.
నిర్ణయం
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
ఉద్యోగుల పట్టిక. ఉద్యోగులందరి సగటు జీతం కంటే ఎక్కువ జీతం ఉన్న ఉద్యోగుల జాబితాను పొందండి.
నిర్ణయం
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
ఉద్యోగులు, విభాగాలు, స్థానాల పట్టిక. మొత్తం ఉద్యోగులు కనీసం సంపాదించే నగరాన్ని పొందండి.
నిర్ణయం
SELECT city
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city
HAVING SUM (salary) =
( SELECT MIN (SUM (salary))
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city);
ఉద్యోగుల పట్టిక. మేనేజర్ 15000 కంటే ఎక్కువ జీతం పొందుతున్న ఉద్యోగుల జాబితాను పొందండి.
నిర్ణయం
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
టేబుల్ ఉద్యోగులు, విభాగాలు. ఉద్యోగులు లేని అన్ని విభాగాలను చూపండి
నిర్ణయం
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
ఉద్యోగుల పట్టిక. నిర్వాహకులు కాని ఉద్యోగులందరినీ చూపించు
నిర్ణయం
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
ఉద్యోగుల పట్టిక. 6 కంటే ఎక్కువ మంది ఉద్యోగులు తమకు అధీనంలో ఉన్న అన్ని మేనేజర్లను చూపండి
నిర్ణయం
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
టేబుల్ ఉద్యోగులు, విభాగాలు. ఐటీ డిపార్ట్మెంట్లో పనిచేసే ఉద్యోగులను చూపించండి
నిర్ణయం
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
టేబుల్ ఉద్యోగులు, ఉద్యోగాలు, విభాగాలు. ఉద్యోగులను ఫార్మాట్లో చూపండి: మొదటి_పేరు, ఉద్యోగ_శీర్షిక, డిపార్ట్మెంట్_పేరు.
ఉదాహరణకు:
మొదటి_పేరు | ఉద్యోగం_శీర్షిక | శాఖ పేరు
డోనాల్డ్ | షిప్పింగ్ | క్లర్క్ షిప్పింగ్
నిర్ణయం
SELECT first_name,
(SELECT job_title
FROM jobs
WHERE job_id = e.job_id)
job_title,
(SELECT department_name
FROM departments
WHERE department_id = e.department_id)
department_name
FROM employees e;
ఉద్యోగుల పట్టిక. 2005లో మేనేజర్లు ఉద్యోగం పొందిన ఉద్యోగుల జాబితాను పొందండి, అయితే అదే సమయంలో ఈ ఉద్యోగులు 2005కి ముందు ఉద్యోగం పొందారు.
నిర్ణయం
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2005')
AND hire_date < TO_DATE ('01012005', 'DDMMYYYY');
ఉద్యోగుల పట్టిక. ఏ సంవత్సరంలోనైనా జనవరిలో మేనేజర్లు ఉద్యోగం పొందిన ఉద్యోగుల జాబితాను పొందండి మరియు ఈ ఉద్యోగుల ఉద్యోగ_శీర్షిక పొడవు 15 అక్షరాల కంటే ఎక్కువ
నిర్ణయం
SELECT *
FROM employees e
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE TO_CHAR (hire_date, 'MM') = '01')
AND (SELECT LENGTH (job_title)
FROM jobs
WHERE job_id = e.job_id) > 15;
ఇప్పటికి ఇంతే.
పనులు ఆసక్తికరంగా మరియు ఉత్తేజకరమైనవని నేను ఆశిస్తున్నాను.
నేను ఈ పనుల జాబితాకు వీలైనంత వరకు జోడిస్తాను.
ఏవైనా వ్యాఖ్యలు మరియు సలహాలను స్వీకరించడానికి నేను కూడా సంతోషిస్తాను.
PS: ఎవరైనా ఆసక్తికరమైన SELECT టాస్క్తో ముందుకు వస్తే, వ్యాఖ్యలలో వ్రాయండి మరియు నేను దానిని జాబితాకు జోడిస్తాను.
Спасибо.
మూలం: www.habr.com