Theory
એક હજાર હરોળ, એક પ્રશ્ન
marks નું કોષ્ટક હવે આખી college ધરાવે છે: હજારો હરોળ. કોઈને ક્યારેય એ બધી જોઈતી નથી.
આચાર્યને 60 અને 80 વચ્ચેના DBMS ના scores જોઈએ છે. ઓફિસને students કયાં શહેરોમાંથી આવે છે એ જોઈએ છે (દરેક શહેર એક વાર). Notice board ને ટોચના 5 જોઈએ છે. પરીક્ષા વિભાગને એવા students જોઈએ છે જેમણે પેપર ચૂક્યું (score ખૂટે છે).
SQL દરેકનો જવાબ એક નાના ગાળણના શબ્દથી આપે છે, અને આ પાઠ આખી ઓજારપેટી છે: દસ શબ્દ, દરેકનું એક કામ, તમે પહેલેથી જાણો છો એ એક કોષ્ટક પર.
Theory
એક જ પાઇપલાઇન પર ચાળણીઓ
Query ને કોષ્ટકથી તમારા પડદા સુધીની પાઇપલાઇન તરીકે વિચારો, અને દરેક શબ્દને એની પર જડાતી ચાળણી તરીકે:
WHERE મળતી હરોળ રાખે છે, DISTINCT પુનરાવર્તન ઓગાળે છે, LIMIT n હરોળ પછી પ્રવાહ કાપે છે. અને જ્યારે તમારી પાસે બે પાઇપલાઇન હોય, ત્યારે UNION એમને સાથે ઠાલવે છે, INTERSECT ફક્ત જે બંને વહન કરે એ રાખે છે, EXCEPT એકમાંથી બીજી બાદ કરે છે. કોઈ પણ સંયોજન, એ જ કોષ્ટક.
At a glance
હરોળ ગાળવાનું કુટુંબ (DISTINCT/LIMIT સિવાય બધું WHERE ની અંદર વસે છે)
| ઓજાર | એવી હરોળ રાખે છે જ્યાં... | ઉદાહરણ |
|---|---|---|
| WHERE | શરત સાચી હોય | WHERE subject = 'DBMS' |
| BETWEEN | મૂલ્ય હદમાં હોય, છેડા સહિત | score BETWEEN 60 AND 80 |
| IN | મૂલ્ય યાદીમાં હોય | city IN ('Surat', 'Navsari') |
| LIKE | લખાણ ભાત સાથે મળે (% કોઈ પણ, _ એક) | name LIKE 'R%' |
| IS NULL | મૂલ્ય ખૂટતું હોય | score IS NULL |
| DISTINCT | (output) પુનરાવર્તન કઢાયું | SELECT DISTINCT city |
| LIMIT | (output) ફક્ત પહેલી n હરોળ | LIMIT 5 |
Practical
ઓફિસના ચાર પ્રશ્નો, જવાબ સાથે
-- 1. DBMS scores from 60 to 80 (BOTH ends included)
SELECT roll, score FROM marks
WHERE subject = 'DBMS' AND score BETWEEN 60 AND 80;
-- 2. every city once
SELECT DISTINCT city FROM students;
-- 3. top 5 DBMS scores
SELECT roll, score FROM marks
WHERE subject = 'DBMS'
ORDER BY score DESC
LIMIT 5;
-- 4. students who missed the paper (score missing)
SELECT roll FROM marks
WHERE subject = 'DBMS' AND score IS NULL;
-- names starting with R: 'R%' second letter i: '_i%'
SELECT name FROM students WHERE name LIKE 'R%';
This example runs in Gri-Learn on the web, where you can edit it and see the output.
Theory
આખી queries જોડવી: UNION, INTERSECT, EXCEPT
Set નાં operators બે પૂરાં SELECT પર કામ કરે છે જેમાં ખાનાંની સંખ્યા સરખી હોય:
UNION: બેમાંથી કોઈ પણ query માં દેખાતી હરોળ (પુનરાવર્તન કઢાય;UNION ALLએમને રાખે છે).INTERSECT: બંને માં દેખાતી હરોળ.EXCEPT: પહેલીમાં પણ બીજીમાં નહીં એવી હરોળ.
ઉદાહરણ: DBMS પાસ કરનારા rolls INTERSECT Maths પાસ કરનારા rolls એ બંને પાસ કરનારા students આપે છે. INTERSECT ને બદલે EXCEPT મૂકો અને તમને એ મળે છે જેમણે DBMS પાસ કર્યું પણ Maths નહીં: ફરી પરીક્ષાની યાદી.
Quiz
એક student ગેરહાજર શોધવા લખે છે: SELECT roll FROM marks WHERE score = NULL; NULL scores હોવા છતાં એ કશું આપતું નથી. કેમ?
- NULL એ અજ્ઞાત છે, એટલે score = NULL ક્યારેય સાચું નથી; સાચી કસોટી score IS NULL છે
- Query ને roll પહેલાં DISTINCT જોઈએ
- NULL વાળી હરોળ ફક્ત LIKE 'NULL' થી શોધાય છે
- SQLite NULL ને 0 તરીકે સંઘરે છે, એટલે કસોટી score = 0 હોવી જોઈએ
Show the answer
NULL એ અજ્ઞાત છે, એટલે score = NULL ક્યારેય સાચું નથી; સાચી કસોટી score IS NULL છે
NULL એટલે અજ્ઞાત, અને અજ્ઞાત સાથે કશું સરખાવવાથી અજ્ઞાત મળે છે, ક્યારેય સાચું નહીં, એટલે = NULL કોઈ હરોળ સાથે મળતું નથી: SQL નો સૌથી જાણીતો એક ફાંદો. એકમાત્ર સાચી કસોટીઓ છે IS NULL અને IS NOT NULL. વિકલ્પ D જોખમી છે: NULL એ શૂન્ય નથી (0 નો score એ ખરેખરો score છે); વિકલ્પ B અને C query ને શણગારે છે પણ ખરેખરી સમસ્યાને અડતા નથી.
Think first
હરોળની સંખ્યા ધારો
marks માં DBMS ના scores 55, 60, 80, 95 છે (ચાર હરોળ). Tap કરતાં પહેલાં, દરેક કેટલી હરોળ આપે એ ગણો:
1. WHERE score BETWEEN 60 AND 80
2. WHERE score IN (55, 95)
3. WHERE score > 60 LIMIT 1
Show the answer
1. 2 હરોળ (60 અને 80: BETWEEN બંને છેડા સામેલ કરે છે, જે હકીકત પરીક્ષાઓ ચકાસે છે).
2. 2 હરોળ (યાદીમાં ચોક્કસ સભ્યપદ: 55 અને 95).
3. 1 હરોળ (80 અને 95 લાયક છે, LIMIT ફક્ત પહેલી અપાયેલી રાખે છે).
જો તમે BETWEEN માટે 1 હરોળ કહી, તો તમે છેડા બાકાત રાખ્યા: BETWEEN 60 AND 80 એટલે >= 60 AND <= 80, હંમેશા છેડા સહિત.
Watch out
ત્રણ ટેવપૂર્વક marks ખાનારા
IS NULL ને બદલે = NULL: ચૂપચાપ કશું આપતું નથી.
BETWEEN ના છેડા: છેડા સહિત, બંને બાજુ. તમે જાણો છો એ દેખાડવા જવાબમાં એની બાજુમાં ">= અને <=" લખો.
LIKE નાં લંગર: 'R%' = R થી શરૂ; '%R' = R થી પૂરું; '%R%' = R ધરાવે; '_i%' = બીજો અક્ષર i. ભાતને સ્થાને સ્થાને વાંચો અને query સમજાવવાનું કહેવાય ત્યારે % અને _ દરેકનો અર્થ કહો.
Theory
તમે પાયાનું BCA105 માં મળ્યા હતા
WHERE અને DISTINCT BCA105 માં મીરાની દુકાન પર દેખાયાં હતાં; અહીં નવું છે એક જ જગ્યાએ આખી ઓજારપેટી વત્તા set નાં operators. એકમ 3 માં આ જ queries cursor.execute() માટે Python ની strings માં પ્રવાસ કરે છે, અને એકમ 4 માં pandas એ જ વિચારને boolean masks તરીકે ફરી અમલમાં મૂકે છે (df[df.score > 60]). ગાળણ એ આ વિષયમાં ત્રણ વેશ પહેરેલો એક જ ખ્યાલ છે.
Summary
Key takeaways
- WHERE દરેક હરોળ ચકાસે છે; BETWEEN (છેડા સહિત), IN (યાદી), LIKE (% કોઈ પણ, _ એક અક્ષર), IS NULL એને ઝીણું કરે છે.
- = NULL ક્યારેય મળતું નથી: IS NULL / IS NOT NULL એ એકમાત્ર સાચી null ની કસોટીઓ છે.
- DISTINCT output ની પુનરાવર્તિત હરોળ કાઢે છે; LIMIT n output ની હદ બાંધે છે (ટોચની n માટે ORDER BY સાથે જોડો).
- UNION (કોઈ પણ એક, પુનરાવર્તન વગર), INTERSECT (બંને), EXCEPT (પહેલી ઓછા બીજી) એ સરખી પહોળાઈનાં બે SELECT જોડે છે.
- UNION ALL પુનરાવર્તન રાખે છે.
- Memory hook: એક જ પાઇપલાઇન પર જડાયેલી ચાળણીઓ.