Ravindra BagaleCourses & study guides English

Beginners साठी SQL SELECT Query Examples

पहिल्या SQL chapter मध्ये आपण rows साठवल्या. खरी apps जास्त वेळ त्या rows ना प्रश्न विचारण्यात घालवतात: Pune मध्ये कोणते users राहतात, सगळ्यात मोठे तीन कोण, कुणाचं नाव "r" ने सुरू होतं, प्रत्येक department चा एकूण पगार किती. या chapter मध्ये आपण हे सगळे प्रश्न एकाच command ने, SELECT आणि त्याच्या clauses ने सोडवू. शेवटी UPDATE ने data बदलू आणि ते ALTER TABLE पेक्षा कसं वेगळं आहे ते बघू.

या class मध्ये काय शिकणार

  • Repeat काढायला DISTINCT, आणि output मधल्या column ला नवं नाव द्यायला AS
  • ASC (default), DESC आणि एकापेक्षा जास्त columns सह ORDER BY
  • =, !=, <>, <, >, <=, >= सह WHERE, आणि AND / OR
  • IN, BETWEEN (दोन्ही टोकं धरून, text वर सुद्धा), IS NULL / IS NOT NULL, आणि % व _ सह LIKE
  • LIMIT आणि OFFSET
  • पैशासाठी DECIMAL(10,2) असलेला emp table, आणि MAX, MIN, SUM, AVG, COUNT(*) विरुद्ध COUNT(column)
  • Subqueries: सगळ्यात जास्त, सगळ्यात कमी आणि second-highest salary
  • GROUP BY आणि HAVING, आणि HAVING हा WHERE पेक्षा कसा वेगळा
  • Data बदलायला UPDATE ... SET ... WHERE, आणि ते ALTER TABLE पेक्षा कसं वेगळं

1. Practice data

का: खालच्या प्रत्येक query चा result दिलेला आहे. तुम्ही याच दहा rows टाकल्या, तर तुम्हाला अगदी तीच उत्तरं मिळतील आणि स्वतः तपासता येईल.

कसं:

  1. mysql -u root -p ने login करा.
  2. Practice साठी नवीन database बनवा आणि त्यात जा:

    CREATE DATABASE practice;
    USE practice;
    
  3. पहिल्या SQL chapter मधला ओळखीचा users table बनवा:

    CREATE TABLE users (id INT, name VARCHAR(100), city VARCHAR(50), age INT);
    
  4. एकाच INSERT मध्ये दहा rows टाका:

    INSERT INTO users VALUES
    (1, 'ravi', 'solapur', 30), (2, 'zoya', 'pune', NULL), (3, 'siya', 'pune', 27),
    (4, 'maya', 'mumbai', 25), (5, 'amit', 'nashik', 20), (6, 'neha', 'mumbai', 25),
    (7, 'kiran', 'delhi', 37), (8, 'priya', 'solapur', 22), (9, 'arjun', 'dubai', 37),
    (10, 'ravi', 'nashik', 28);
    
  5. SELECT * FROM users; सगळ्या दहा rows दाखवतो.

पुढे लागणाऱ्या दोन गोष्टी लक्षात ठेवा: ravi नावाचे दोन users आहेत (एक Solapur चा, एक Nashik चा), आणि zoya ची age NULL आहे.

2. DISTINCT: प्रत्येक value एकदाच

का: SELECT city FROM users; प्रत्येक row ची एक city देतो, म्हणून pune, mumbai, solapur आणि nashik प्रत्येकी दोनदा येतात. "आपले users कोणत्या cities मध्ये राहतात?" याचं उत्तर हवं असेल, तर प्रत्येक city एकदाच पाहिजे.

काय: DISTINCT result मधून repeat झालेल्या rows काढतो. Table स्वतः बदलत नाही.

Classroom line

Unique means it appears only once; it must not repeat again and again.

कसं:

  1. SELECT city FROM users; 10 rows देतो.
  2. SELECT DISTINCT city FROM users; 6 rows देतो: solapur, pune, mumbai, nashik, delhi, dubai.
  3. SELECT DISTINCT name FROM users; 9 नावं देतो: ravi एकदाच येतो.
  4. SELECT DISTINCT age FROM users; 8 values देतो, आणि NULL सुद्धा त्यातली एक value म्हणून मोजली जाते.
  5. DISTINCT लगेच SELECT नंतर येतो आणि तुम्ही select केलेल्या पूर्ण row वर चालतो. SELECT DISTINCT city, age FROM users; 9 rows देतो: फक्त mumbai | 25 ही जोडी दोनदा होती (maya आणि neha), म्हणून फक्त ती एकदा दिसते.

3. AS: column ला nickname

का: city किंवा SUM(salary) सारख्या headings तुम्हाला चालतात, पण report किंवा app ला जास्त स्पष्ट नावं लागू शकतात.

काय: AS column ला फक्त या एका query च्या output मध्ये नवं नाव देतो. Table मधली खरी column नावं तशीच राहतात.

Classroom line

An alias is like an "also known as", a nickname.

कसं:

  1. SELECT city AS gaav, name AS naav FROM users; gaav आणि naav headings दाखवतो.
  2. DESC users; अजूनही city आणि name च दाखवतो. Table मध्ये काहीच बदललं नाही.
  3. Alias मध्ये space असेल तर quotes लागतात: SELECT name AS 'full name' FROM users;
  4. Aliases calculations बरोबर सगळ्यात उपयोगी, उदा. या chapter मध्ये पुढे येणारं SELECT MAX(salary) AS highest FROM emp;
DISTINCT repeat काढतो; AS output मधल्याcolumn ला नवं नाव देतो SELECT city FROM users; citysolapurpunepunemumbainashikmumbaidelhisolapurdubainashik 10 rows: pune, mumbai, solapur, nashik परत परत SELECT DISTINCT city ... citysolapurpunemumbainashikdelhidubai 6 rows: प्रत्येक city एकदाच SELECT city AS gaav, name AS naav ... gaavnaavsolapurravipunezoyapunesiya फक्त heading बदलतं. Table मध्ये city आणि name तसेच. Alias मध्ये space असेल तर quotes लागतात: name AS 'full name' DISTINCT तुम्ही select केलेल्या columns वर चालतो; ASफक्त त्या query पुरतं nickname.

Figure 1. SELECT city repeat सह 10 rows देतो; SELECT DISTINCT city प्रत्येक city एकदाच देतो; AS फक्त output मधलं heading बदलतो.

4. ORDER BY: result sort करा

का: ORDER BY शिवाय MariaDB त्याला सोयीच्या क्रमाने rows देतो. Users A ते Z, किंवा सगळ्यात मोठे आधी हवे असतील, तर तसं सांगावं लागतं.

काय: ORDER BY हा SELECT चा एक clause आहे. तो FROM नंतर येतो (आणि WHERE असेल तर त्याच्याही नंतर).

  1. ASC म्हणजे ascending: A ते Z, लहान number आधी. हा default आहे, म्हणून तो क्वचितच type करावा लागतो.
  2. DESC म्हणजे descending: Z ते A, मोठा number आधी.
  3. NULL सगळ्यात लहान value म्हणून धरला जातो: ASC मध्ये तो आधी येतो आणि DESC मध्ये शेवटी.

Classroom line

When we don't say anything, it is ascending by default.

कसं:

  1. SELECT name, age FROM users ORDER BY age; आधी zoya (NULL), मग 20, 22, 25 ... असं 37 पर्यंत देतो.
  2. SELECT name, age FROM users ORDER BY age DESC; आधी 37 वर्षांचे, आणि zoya शेवटी.
  3. SELECT * FROM users ORDER BY name; नावं A ते Z sort करतो.
  4. SELECT * FROM users ORDER BY id DESC; सगळ्यात नवीन ids आधी दाखवतो.
  5. दोन users चं नाव ravi आहे. कोणता ravi आधी हे ठरवायला दुसरा column जोडा:

    SELECT name, city FROM users ORDER BY name, city;
    
  6. आता ravi | nashik हे ravi | solapur च्या आधी येतं. दुसरा column फक्त पहिला सारखा असेल तेव्हाच वापरला जातो.

  7. प्रत्येक column ला स्वतःची दिशा देता येते: ORDER BY name, city DESC नावं A ते Z, आणि दोन ravi साठी cities Z ते A.
  8. अगदी सारख्या sort value च्या rows (दोन 37 वर्षांचे) यांचा आपसातला क्रम ठरलेला नसतो. क्रम महत्त्वाचा असेल तर अजून एक column जोडा.

Classroom line

When names repeat, those rows should be ordered by the city column.

ORDER BY result sort करतो: default ascending SELECT name, age FROM users ORDER BY age; zoya NULL · amit 20 · priya 22 · neha 25 · maya 25· siya 27 · ravi 28 · ravi 30 · kiran 37 · arjun 37 ASC default: लहान आधी. Ascending मध्ये NULL सगळ्यात आधी. Numbers value ने, text A ते Z. SELECT name, age FROM users ORDER BY age DESC; arjun 37 · kiran 37 · ravi 30 · ravi 28 · siya 27 ·maya 25 · neha 25 · priya 22 · amit 20 · zoya NULL DESC: मोठं आधी. आता NULL शेवटी. Age सारखा? त्यांचा क्रम ठरलेला नाही. SELECT name, city FROM users ORDER BY name, city; amit nashik · arjun dubai · kiran delhi · mayamumbai · neha mumbai · priya solapur · ravi nashik· ravi solapur · siya pune · zoya pune दोन ravi rows: दुसरा column city tie सोडवतो (nashik आधी). प्रत्येक column ला स्वतःचा DESC देता येतो. ORDER BY एक clause: तो FROM आणि WHERE नंतर येतो.

Figure 2. Animation: ORDER BY age (ascending, NULL आधी), ORDER BY age DESC (NULL शेवटी), आणि ORDER BY name, city जिथे दोन ravi मधला tie city सोडवतो.

5. WHERE: फक्त हव्या त्या rows ठेवा

का: App ला जवळजवळ कधीच सगळ्या rows लागत नाहीत. "Mumbai चे users दाखवा" किंवा "27 किंवा कमी वयाचे users" म्हणजे filter करणं.

काय: WHERE FROM नंतर येतो आणि condition खरी असलेल्या rows च ठेवतो.

  1. Text values quotes मध्ये: city = 'mumbai'.
  2. Numbers quotes शिवाय: age = 37.

Classroom line

If the value is text, we write it inside single or double quotes.

कसं: comparison operators, प्रत्येकाचं आपल्या data वर उदाहरण:

  1. = बरोबर: SELECT * FROM users WHERE city = 'mumbai'; ने maya आणि neha.
  2. != बरोबर नाही: SELECT * FROM users WHERE city != 'mumbai'; ने उरलेल्या 8 rows.
  3. <> हा "बरोबर नाही" लिहायचा दुसरा मार्ग: WHERE city <> 'mumbai' ने त्याच 8 rows.
  4. Condition च्या आधी NOT सुद्धा चालतो: WHERE NOT city = 'mumbai'.
  5. < पेक्षा कमी: WHERE age < 25 ने amit (20) आणि priya (22).
  6. > पेक्षा जास्त: WHERE age > 30 ने kiran आणि arjun (37).
  7. <= कमी किंवा बरोबर: WHERE age <= 27 ने siya, maya, amit, neha आणि priya.
  8. >= जास्त किंवा बरोबर: WHERE age >= 30 ने ravi (30), kiran आणि arjun.
  9. दोन characters चे operators याच क्रमाने लिहा: <= आणि >=, कधीच =< किंवा => नाही.
WHERE फक्त condition जुळणाऱ्या rows ठेवतो SELECT * FROM users WHERE city = 'mumbai'; = बरोबर city = 'mumbai' maya, neha != or <> बरोबर नाही city !='mumbai' 8 rows < पेक्षा कमी age < 25 amit, priya > पेक्षा जास्त age > 30 kiran, arjun <= कमी किंवा बरोबर age <= 22 amit, priya >= जास्त किंवा बरोबर age >= 30 ravi, kiran, arjun Text quotes मध्ये, numbers शिवाय. दोन characters चे operators नेमके लिहा: आधी less-than किंवाgreater-than चिन्ह, मग equals चिन्ह.

Figure 3. =, != किंवा <>, <, >, <= आणि >= सह WHERE, प्रत्येकाचं users table वर उदाहरण आणि मिळणाऱ्या rows.

6. AND आणि OR: एकापेक्षा जास्त conditions

का: खऱ्या filters मध्ये क्वचितच एकच condition असते: "25 पेक्षा मोठे Pune चे users". AND result लहान करतो, OR मोठा करतो, आणि गोंधळ झाला तर चुकीच्या rows येतात.

काय:

  1. AND: दोन्ही conditions खऱ्या पाहिजेत.
  2. OR: किमान एक condition खरी पाहिजे.

Classroom line

If both conditions must be true, use AND.

कसं:

  1. SELECT * FROM users WHERE city = 'pune' AND age <= 27; ने फक्त siya. zoya सुद्धा Pune ची आहे, पण तिची age NULL आहे, म्हणून तिच्यासाठी age <= 27 खरं नाही.
  2. SELECT * FROM users WHERE city = 'nashik' OR age > 30; ने amit आणि ravi (Nashik), आणि kiran व arjun (30 पेक्षा जास्त).
  3. Mumbai किंवा Pune चे users:

    SELECT * FROM users WHERE city = 'mumbai' OR city = 'pune';
    
  4. OR नंतर column चं नाव परत लिहा. WHERE city = 'mumbai' OR 'pune' स्वीकारलं जातं, पण नुसतं 'pune' ही condition नाही: MariaDB फक्त Mumbai च्या rows देतो (warnings सह).

  5. WHERE city = 'mumbai' AND city = 'pune' empty set देतो. एका row ची एकच city असते, ती दोन्ही कधीच असू शकत नाही.

Classroom line

Many people go wrong here and write city='mumbai' or 'pune'.

7. IN: एक column, values ची list

का: OR ने तीन cities म्हणजे city = तीनदा type करणं. IN तेच एका छोट्या list मध्ये सांगतो.

कसं:

  1. SELECT * FROM users WHERE city IN ('mumbai', 'pune', 'solapur'); त्या तीन cities चे users देतो.
  2. Numbers सुद्धा असेच, quotes शिवाय: WHERE age IN (20, 25, 27) ने siya, maya, amit आणि neha.
  3. NOT IN उलटं: WHERE city NOT IN ('mumbai', 'pune') ने बाकी सगळे.

Classroom line

When it's one column with a condition on several values, we use IN.

8. BETWEEN: range

का: Ranges सगळीकडे असतात: वय 18 ते 25, किंमत 500 ते 1000, या महिन्याच्या orders. BETWEEN ते एका छोट्या condition मध्ये सांगतो.

काय: BETWEEN a AND b a पासून b पर्यंतच्या values ठेवतो, दोन्ही टोकं धरून.

Classroom line

If it's a range, use BETWEEN.

कसं:

  1. SELECT * FROM users WHERE age BETWEEN 20 AND 27; ने siya (27), maya (25), amit (20), neha (25) आणि priya (22). 20 आणि 27 दोन्ही धरले जातात.
  2. हे WHERE age >= 20 AND age <= 27 सारखंच, फक्त छोटं.
  3. नेहमी लहान value आधी लिहा. BETWEEN 27 AND 20 काहीच देत नाही.
  4. BETWEEN text वर सुद्धा चालतो, alphabetical क्रमाने: WHERE name BETWEEN 'neha' AND 'siya' ने neha, priya, दोन्ही ravi आणि siya.
Conditions जोडा: AND, OR, IN आणि BETWEEN AND दोन्ही खरं पाहिजे. city = 'pune' AND age <= 27 Rows: siya OR किमान एक खरं पाहिजे. city = 'nashik' OR age > 30 Rows: amit, kiran, arjun, ravi IN एक column, values ची list. city IN ('mumbai', 'pune') Rows: zoya, siya, maya, neha BETWEEN Range; दोन्ही टोकं धरून. age BETWEEN 20 AND 27 Rows: siya, maya, amit, neha, priya OR नंतर column परत लिहा city = 'mumbai' OR 'pune' तुम्हाला वाटतं ते करत नाही; फक्त Mumbai च्या rows देतो. एकाच column च्या दोन values वर AND, city = 'mumbai' AND city ='pune', empty set देतो.

Figure 4. AND (दोन्ही खरं), OR (किमान एक), IN (एका column साठी list) आणि BETWEEN (दोन्ही टोकं धरून range), प्रत्येकाच्या rows सह, आणि टाळायची OR ची चूक.

9. NULL: IS NULL आणि IS NOT NULL

काय: NULL म्हणजे "value च नाही". तो 0 नाही आणि 'NULL' text सुद्धा नाही. Value च नसल्यामुळे त्याची = ने तुलना कधीच खरी होत नाही.

कसं:

  1. SELECT * FROM users WHERE age = NULL; Empty set देतो, zoya ची age नसली तरी.
  2. SELECT * FROM users WHERE age = 'NULL'; सुद्धा Empty set देतो; तो NULL या text शी तुलना करतो.
  3. बरोबर मार्ग IS NULL:

    SELECT * FROM users WHERE age IS NULL;
    
  4. तो zoya देतो.

  5. SELECT * FROM users WHERE age IS NOT NULL; उरलेले 9 users देतो.

10. LIKE: text मध्ये शोधा

का: Search box ला ("r ने सुरू होणारी नावं", "phone असलेली products") exact values नाही, patterns लागतात.

काय: LIKE text ची pattern शी तुलना करतो, आणि pattern मध्ये दोन wildcards असू शकतात:

  1. % म्हणजे कितीही characters, शून्य सुद्धा.
  2. _ म्हणजे नेमका एक character.

Classroom line

If you want to build a search feature, you'll need LIKE.

कसं:

  1. SELECT name FROM users WHERE name LIKE 'r%'; r ने सुरू होणारी नावं देतो: ravi, ravi.
  2. WHERE name LIKE '%ya' ya ने संपणारी नावं: zoya, siya, maya, priya.
  3. WHERE name LIKE '%ir%' ज्यात ir आहे अशी नावं: kiran.
  4. WHERE name LIKE '____' (चार underscores) नेमक्या 4 characters ची नावं: ravi, zoya, siya, maya, amit, neha, ravi.
  5. WHERE name LIKE '_____' (पाच underscores) ने kiran, priya, arjun.
  6. 's%a' म्हणजे s ने सुरू आणि a ने संपणारं: siya.
  7. % किंवा _ नसेल तर LIKE 'ravi' हे = 'ravi' सारखंच वागतं.
  8. MariaDB च्या default settings मध्ये LIKE 'R%' ने सुद्धा ravi सापडतो: तुलना capital-small फरक बघत नाही.

Classroom line

As many characters as you need, that many underscores.

NULL ला IS NULL लागतो; LIKE % आणि _ नेtext शोधतो WHERE age = NULL WHERE age = 'NULL' Empty set WHERE age IS NULL zoya WHERE age IS NOT NULL उरलेल्या 9 NULL म्हणजे value च नाही, म्हणून = कधीच जुळत नाही. नेहमी IS NULL वापरा. LIKE pattern अर्थ जुळतं 'r%' r ने सुरू ravi, ravi '%ya' ya ने संपतं zoya, siya, maya, priya '%ir%' मध्ये ir kiran '____' नेमके 4 characters ravi, zoya, amit ... '_____' नेमके 5 characters kiran, priya, arjun % कितीही characters, शून्य सुद्धा _ नेमका एक character % किंवा _ नसेल तर LIKE = सारखाच. Default settingsमध्ये LIKE capital-small फरक बघत नाही.

Figure 5. = NULL कधीच जुळत नाही, IS NULL जुळतो; % (कितीही characters) आणि _ (नेमका एक character) सह LIKE patterns, आणि प्रत्येक pattern ला जुळणारी नावं.

11. LIMIT आणि OFFSET

का: Table मध्ये लाखो rows असू शकतात. काही rows मध्ये डोकावायचं, "top 3" दाखवायचे, किंवा results page by page दाखवायचे असतात.

काय:

  1. LIMIT n जास्तीत जास्त n rows देतो.
  2. OFFSET m आधी m rows सोडतो. तो दिला नाही तर offset 0.

Classroom line

OFFSET means skip that many and show the rest.

कसं:

  1. SELECT * FROM users LIMIT 2; पहिल्या 2 rows देतो.
  2. SELECT * FROM users LIMIT 3 OFFSET 2; 2 rows सोडून पुढच्या 3 देतो (ids 3, 4 आणि 5).
  3. एका page वर 3 असलेल्या list चं page 1 म्हणजे LIMIT 3 OFFSET 0, page 2 LIMIT 3 OFFSET 3, page 3 LIMIT 3 OFFSET 6.
  4. "Top N" साठी आधी sort करा. सगळ्यात मोठे तीन users:

    SELECT name, age FROM users ORDER BY age DESC LIMIT 3;
    
  5. ORDER BY शिवाय "पहिल्या 3 rows" ला guaranteed अर्थ नसतो; क्रम महत्त्वाचा असेल तेव्हा नेहमी sort करा.

LIMIT फक्त N rows दाखवतो; OFFSET आधी rowsसोडतो id name city age 1 ravi solapur 30 2 zoya pune NULL 3 siya pune 27 4 maya mumbai 25 5 amit nashik 20 6 neha mumbai 25 7 kiran delhi 37 8 priya solapur 22 9 arjun dubai 37 10 ravi nashik 28 SELECT * FROM users LIMIT 2; 1 ravi solapur 30 2 zoya pune NULL LIMIT 2: पहिल्या 2 rows. मोठ्या table मध्ये डोकावायला उपयोगी. SELECT * FROM users LIMIT 3 OFFSET 2; 3 siya pune 27 4 maya mumbai 25 5 amit nashik 20 OFFSET 2: 2 rows सोडा, मग LIMIT 3: पुढच्या 3 दाखवा (ids 3, 4, 5). Apps page 2, page 3 ... असंच दाखवतात. SELECT name, age FROM users ORDER BY age DESC LIMIT 3; arjun 37 kiran 37 ravi 30 Top 3: आधी sort, मग LIMIT. ORDER BY शिवाय rows चा क्रम guaranteed नाही.

Figure 6. Animation: LIMIT 2 पहिल्या दोन rows दाखवतो; LIMIT 3 OFFSET 2 दोन सोडून पुढच्या तीन दाखवतो; ORDER BY age DESC LIMIT 3 सगळ्यात मोठे तीन users देतो.

12. पगारासाठी table: emp, आणि पैशासाठी DECIMAL

का: Calculations practise करायला बेरीज करण्यासारखे numbers लागतात. Departments आणि salaries असलेला employee table हे classic उदाहरण.

काय: पैशासाठी DECIMAL(10,2) वापरा: एकूण 10 अंकांपर्यंत, त्यातले 2 दशांश चिन्हानंतर. DECIMAL नेमकी value साठवतो. FLOAT अंदाजे value साठवतो, त्यामुळे 0.10 सारख्या रकमा थोड्या round होऊ शकतात; वजनासाठी ते चालतं, पैशासाठी नाही.

कसं:

  1. Table बनवा:

    CREATE TABLE emp (id INT, name VARCHAR(20), dept VARCHAR(20), salary DECIMAL(10,2));
    
  2. पाच employees टाका:

    INSERT INTO emp VALUES (1, 'ravi', 'IT', 100000), (2, 'neha', 'Account', 250000),
    (3, 'govinda', 'IT', 270000), (4, 'pooja', 'HR', 10000), (6, 'ram', 'HR', 25000);
    
  3. SELECT * FROM emp; salaries दोन decimals सह दाखवतो, उदा. 100000.00.

13. Aggregate functions: MAX, MIN, SUM, AVG आणि COUNT

का: "सगळ्यात जास्त salary किती?", "आपण एकूण किती पगार देतो?" या प्रश्नांना अनेक rows मधून काढलेलं एक उत्तर लागतं.

Classroom line

Which is the highest salary of all?

कसं:

  1. SELECT MAX(salary) FROM emp; सगळ्यात जास्त देतो: 270000.00.
  2. SELECT MIN(salary) FROM emp; सगळ्यात कमी देतो: 10000.00.
  3. SELECT SUM(salary) FROM emp; एकूण देतो: 655000.00.
  4. SELECT AVG(salary) FROM emp; सरासरी देतो: 131000 (सहा decimals सह छापतो).
  5. SELECT ROUND(AVG(salary), 2) FROM emp; ते 131000.00 असं round करतो.
  6. SELECT COUNT(salary) FROM emp; salaries मोजतो: 5.
  7. Aliases सह एकदम अनेक: SELECT MAX(salary) AS highest, MIN(salary) AS lowest FROM emp;

खालच्या screenshots मधले numbers तेच आहेत; किती decimals दिसतात ते फक्त column च्या type वर अवलंबून असतं.

MariaDB terminal: select sum(salary) from emp; prints 655000. select avg(salary) from emp; prints 131000. select count(salary) from emp; prints 5. select count(name) from emp; prints 5.

Whiteboard: emp table वर SUM, AVG, COUNT(salary) आणि COUNT(name): 655000, 131000, 5 आणि 5.

13.1 COUNT(*) विरुद्ध COUNT(column)

  1. फक्त id आणि salary असलेला employee टाका:

    INSERT INTO emp (id, salary) VALUES (7, 10000);
    
  2. या row साठी name आणि dept NULL आहेत.

  3. SELECT COUNT(*) FROM emp; 6 देतो: COUNT(*) rows मोजतो.
  4. SELECT COUNT(name) FROM emp; 5 देतो: COUNT(column) फक्त NULL नसलेल्या values मोजतो.
  5. SELECT COUNT(id) FROM emp; 6 देतो, कारण प्रत्येक row ला id आहे.
  6. म्हणून "आपल्याकडे किती employees आहेत?" म्हणजे COUNT(*). हा interview मधला अगदी नेहमीचा प्रश्न आहे.

Classroom line

The COUNT function doesn't count NULL.

MariaDB terminal: insert into emp (id, salary) values (7,10000); Query OK, 1 row affected. select * from emp; shows six rows, the last one 7, NULL, NULL, 10000. select count(name) from emp; prints 5. select count(id) from emp; prints 6.

Whiteboard: फक्त id आणि salary सह row 7 टाकल्यानंतर: name आणि dept NULL, COUNT(name) 5 आणि COUNT(id) 6.

Aggregate functions अनेक rows मधून एकउत्तर काढतात emp idnamedeptsalary1raviIT100000.002nehaAccount250000.003govindaIT270000.004poojaHR10000.006ramHR25000.007NULLNULL10000.00 पहिल्या 5 rows (row 7 टाकण्याआधी) MAX(salary) 270000.00 सगळ्यात जास्त MIN(salary) 10000.00 सगळ्यात कमी SUM(salary) 655000.00 एकूण AVG(salary) 131000.00 सरासरी COUNT(salary) 5 column मधल्या values Row 7 नंतर (name नाही, dept नाही) COUNT(*) 6 प्रत्येक row COUNT(name) 5 NULL name सोडतो एकूण employees? COUNT(*) वापरा. Row 7 असा टाकला: INSERT INTO emp (id, salary) VALUES (7, 10000); salary DECIMAL(10,2): 2 decimals सह नेमके पैसे. AVGजास्त decimals दाखवतो; ROUND(AVG(salary), 2) नीटकरतो.

Figure 7. emp table वर MAX, MIN, SUM, AVG आणि COUNT, आणि row 7 टाकल्यानंतर: COUNT(*) प्रत्येक row मोजतो (6), COUNT(name) NULL name सोडतो (5).

14. Subquery: query मध्ये query

का: MAX(salary) सगळ्यात जास्त salary सांगतो, पण ती कोण कमावतो ते नाही. त्यासाठी पहिल्या query चं उत्तर वापरणारी दुसरी query लागते.

काय: Subquery म्हणजे brackets मधला SELECT, दुसऱ्या query च्या आत. आतली query आधी चालते, आणि बाहेरची query तिचा result वापरते.

Classroom line

We call this a query in a query.

कसं:

  1. सगळ्यात जास्त कोण कमावतो?

    SELECT name, salary FROM emp WHERE salary = (SELECT MAX(salary) FROM emp);
    
  2. आतली query 270000.00 देते, म्हणून बाहेरची query WHERE salary = 270000.00 होते आणि govinda देते.

  3. आत आणि बाहेर एकच table चं नाव वापरा: salaries emp मध्ये आहेत, म्हणून दोन्ही भाग FROM emp म्हणतात.
  4. सगळ्यात कमी कोण कमावतो? MAX ऐवजी MIN लिहा: तुम्हाला दोन rows मिळतात, pooja आणि NULL name ची row, कारण दोघांचा पगार 10000.00. Subquery जुळणाऱ्या सगळ्या rows देते.
  5. Second-highest salary, interview चा आवडता प्रश्न:

    SELECT MAX(salary) FROM emp WHERE salary < (SELECT MAX(salary) FROM emp);
    
  6. आतली query 270000.00 शोधते; बाहेरची त्याच्या खालची सगळ्यात जास्त salary शोधते: 250000.00 (neha).

MariaDB terminal: select name, salary from emp where salary=(select max(salary) from emp); prints govinda 270000. select name, salary from emp where salary=(select min(salary) from emp); prints two rows, pooja 10000 and NULL 10000.

Whiteboard: emp वर subqueries: सगळ्यात जास्त salary govinda ची 270000; सगळ्यात कमी, 10000, दोन rows ना जुळते, pooja आणि NULL name ची row.

Subquery म्हणजे query मध्ये query: आतली आधीचालते SELECT name, salary FROM emp WHERE salary = (SELECT MAX(salary) FROM emp); 1. आतली query SELECT MAX(salary) FROM emp -> 270000.00 2. बाहेरची query वापरते WHERE salary = 270000.00 3. Result govinda 270000.00 MAX ऐवजी MIN: दोन rows, कारण pooja आणि row 7 दोघांचापगार 10000. Subquery जुळणाऱ्या सगळ्या rows देते, एकच नाही. Second-highest salary (interview चा आवडता प्रश्न) SELECT MAX(salary) FROM emp WHERE salary < (SELECT MAX(salary) FROM emp); -> 250000.00 top च्या खालचा सगळ्यात मोठा

Figure 8. आतली query आधी चालते आणि 270000.00 देते; बाहेरची query ते वापरून govinda देते. MIN दोन tie rows देतो. Second-highest salary म्हणजे MAX च्या खालचा MAX: 250000.00.

15. GROUP BY: प्रत्येक group चं एक उत्तर

का: SUM(salary) पूर्ण company चा एक total देतो. "प्रत्येक department चा एकूण पगार" म्हणजे प्रत्येक department साठी एक total.

काय: GROUP BY dept सारख्या dept च्या rows एकत्र करतो, आणि aggregate function प्रत्येक group साठी एकदा चालतं.

Classroom line

Whenever you need a group-wise answer, use GROUP BY.

कसं:

  1. SELECT SUM(salary) FROM emp GROUP BY dept; चार totals देतो, पण कोणता कुणाचा ते कळत नाही.
  2. Group चा column SELECT मध्ये जोडा:

    SELECT dept, SUM(salary) FROM emp GROUP BY dept;
    
  3. Result: NULL 10000.00, Account 250000.00, HR 35000.00, IT 370000.00.

  4. Department नसलेल्या rows चा स्वतःचा NULL group बनतो.
  5. इतर functions सुद्धा प्रत्येक group वर चालतात: SELECT dept, COUNT(*) AS people, AVG(salary) FROM emp GROUP BY dept;
  6. SELECT मध्ये फक्त group केलेला column आणि aggregate functions ठेवा. name सारख्या column च्या एका group मध्ये अनेक values असतात, म्हणून त्याचं एक उत्तर नसतं.
MariaDB terminal: select sum(salary) from emp group by dept; prints 10000, 250000, 35000 and 370000. select dept, sum(salary) from emp group by dept; prints NULL 10000, Account 250000, HR 35000 and IT 370000.

Whiteboard: dept प्रमाणे group केलेला SUM(salary), आधी dept column शिवाय आणि मग त्यासह.

16. HAVING: groups filter करा

का: "एकापेक्षा जास्त users असलेली शहरं" ही groups वरची condition, rows वरची नाही. WHERE grouping आधी चालतो म्हणून हे करू शकत नाही; HAVING करू शकतो.

काय: HAVING ही GROUP BY नंतर groups वरची condition. WHERE ही grouping च्या आधी rows वरची condition.

Classroom line

If the condition is on groups, we don't use WHERE; we use HAVING.

कसं:

  1. ज्यांचा एकूण पगार 100000 पेक्षा जास्त आहे असे departments:

    SELECT dept, SUM(salary) FROM emp GROUP BY dept HAVING SUM(salary) > 100000;
    
  2. Result: Account 250000.00 आणि IT 370000.00.

  3. SELECT * FROM emp WHERE SUM(salary) > 100000; ERROR 1111 ... Invalid use of group function देतो: WHERE एका वेळी एकच row बघतो, totals बनण्याआधीच.
  4. दोन्ही वापरता येतात: WHERE आधी rows काढतो, मग HAVING groups काढतो:

    SELECT dept, SUM(salary) AS total FROM emp
    WHERE dept IS NOT NULL
    GROUP BY dept HAVING total > 100000
    ORDER BY total DESC;
    
  5. ते आधी IT (370000.00) आणि मग Account (250000.00) देतं.

MariaDB terminal: select dept, sum(salary) from emp group by dept having sum(salary) > 100000; prints two rows, Account 250000 and IT 370000.

Whiteboard: HAVING SUM(salary) > 100000 सह GROUP BY dept फक्त Account आणि IT ठेवतो.

GROUP BY प्रत्येक group ची एक row; HAVINGgroups filter करतो SELECT * FROM emp; emp rows, dept प्रमाणे रंग 1 ravi IT 100000.00 2 neha Account 250000.00 3 govinda IT 270000.00 4 pooja HR 10000.00 6 ram HR 25000.00 7 NULL NULL 10000.00 1. सहा rows; तोच dept परत परत. SELECT dept, SUM(salary) FROM emp GROUP BY dept; प्रत्येक dept ची एक row NULL 10000.00 Account 250000.00 HR 35000.00 IT 370000.00 2. GROUP BY dept: प्रत्येक dept ची एक row; NULL dept चावेगळा group. SELECT dept, SUM(salary) FROM emp GROUP BY dept HAVINGSUM(salary) > 100000; Account 250000.00 IT 370000.00 HAVING Account आणि IT ठेवतो (एकूण 100000 पेक्षा जास्त). 3. WHERE grouping च्या आधी rows filter करतो; HAVING नंतरgroups.

Figure 9. Animation: department प्रमाणे रंगवलेल्या emp च्या सहा rows, प्रत्येक department चा एक total बनवणारा GROUP BY dept (NULL group सह), आणि 100000 पेक्षा जास्त असलेले groups च ठेवणारा HAVING.

Ravindra Bagale's Tip

मोठा SELECT MariaDB ज्या क्रमाने चालवतो त्या क्रमाने वाचा: FROM (कोणता table), WHERE (कोणत्या rows), GROUP BY (कोणते groups), HAVING (कोणते groups टिकतात), SELECT (कोणते columns), ORDER BY (कोणत्या क्रमाने), LIMIT (किती). Query ने अनपेक्षित उत्तर दिलं, तर ती एक-एक clause करून परत चालवा, आधीचा result बरोबर दिसल्यावरच पुढचा clause जोडा.

17. UPDATE: असलेला data बदला

का: User city बदलतो, किंवा नाव चुकीचं type झालं. तुम्ही असलेल्या rows बदलता; delete करून परत insert करत नाही.

काय:

  1. UPDATE rows मधला data बदलतो. तो CRUD मधला U आहे.
  2. ALTER TABLE table चं structure बदलतो: columns जोडतो, बदलतो किंवा काढतो. Rows जशा आहेत तशाच राहतात. उदा. ALTER TABLE users ADD phone VARCHAR(15); रिकामा phone column जोडतो. ALTER TABLE पुढच्या SQL chapter मध्ये नीट बघू.

UPDATE चं रूप:

UPDATE table SET column = value WHERE condition;

कसं: दुसऱ्या ravi चं (id 10, Nashik चा) नाव ravindra करायचं आहे. Solapur चा ravi बदलता कामा नये.

Classroom line

I don't want to change the ravi from Solapur; only the ravi from Nashik should become ravindra.

  1. आधी जी condition वापरणार आहात तिचा SELECT चालवा: SELECT * FROM users WHERE name = 'ravi';
  2. तो दोन rows देतो. UPDATE users SET name = 'ravindra' WHERE name = 'ravi'; दोन्ही बदलेल.
  3. नेमकी एकच row निवडणारा column वापरा. इथे तो id:

    UPDATE users SET name = 'ravindra' WHERE id = 10;
    
  4. MariaDB Query OK, 1 row affected आणि Rows matched: 1 Changed: 1 असं उत्तर देतो.

  5. तपासा: SELECT * FROM users WHERE name LIKE 'ravi%'; ravi (Solapur) आणि ravindra (Nashik) दाखवतो.
  6. Commas ने एकदम अनेक columns बदला: UPDATE users SET age = 26, city = 'pune' WHERE id = 5;
  7. WHERE शिवाय UPDATE table मधली प्रत्येक row बदलतो. नेहमी आधी WHERE लिहा.
  8. प्रत्येक वेळी "rows affected" चा number वाचा. तो अपेक्षेपेक्षा मोठा असेल, तर तुमची condition हव्यापेक्षा जास्त rows ना जुळली.
SELECT मधल्या clauses चा क्रम, आणि UPDATEविरुद्ध ALTER TABLE SELECT columns FROM table WHERE rows filter GROUP BY groups बनवा HAVING groups filter ORDER BY sort LIMIT किती नको ते सोडा, पण हाच क्रम ठेवा. उदाहरण: SELECT dept, SUM(salary) AS total FROM emp WHERE dept IS NOT NULL GROUP BY dept HAVING total > 100000 ORDER BY total DESC LIMIT 2; UPDATE rows मधला DATA बदलतो UPDATE users SET name = 'ravindra' WHERE id = 10; आधी तसाच SELECT चालवा. WHERE नसेल तर प्रत्येक row बदलते. ALTER TABLE STRUCTURE बदलतो ALTER TABLE users ADD phone VARCHAR(15); Columns जोडतो, बदलतो किंवा काढतो. Rows जशा आहेत तशाच.

Figure 10. SELECT मधल्या clauses चा क्रम, आणि UPDATE (rows मधला data बदलतो) विरुद्ध ALTER TABLE (table चं structure बदलतो).

Practice झाल्यावर exit; type करा आणि EC2 instance stop करा.

18. पूर्ण class एका page वर

  1. SELECT DISTINCT city FROM users; प्रत्येक value एकदा. SELECT city AS gaav ... heading बदलतो.
  2. ORDER BY col ascending (default), ORDER BY col DESC, tie साठी ORDER BY name, city.
  3. =, != / <>, <, >, <=, >= सह WHERE; text quotes मध्ये, numbers शिवाय.
  4. AND दोन्ही खरं, OR किमान एक; OR नंतर column परत लिहा.
  5. IN (...) list; BETWEEN a AND b दोन्ही टोकं धरून range, text वर सुद्धा.
  6. IS NULL / IS NOT NULL; = NULL कधीच जुळत नाही.
  7. % (कितीही characters) आणि _ (नेमका एक) सह LIKE.
  8. LIMIT n OFFSET m; top N साठी आधी ORDER BY ने sort.
  9. पैसे DECIMAL(10,2) मध्ये. MAX, MIN, SUM, AVG, COUNT(*) (rows) आणि COUNT(col) (NULL नसलेल्या values).
  10. Subquery: WHERE salary = (SELECT MAX(salary) FROM emp); second highest: MAX च्या खालचा MAX.
  11. GROUP BY dept प्रत्येक group चं एक उत्तर; HAVING groups filter करतो, WHERE rows.
  12. UPDATE t SET col = val WHERE ...; data बदलतो; ALTER TABLE structure बदलतो.

19. Hands-on lab: practice table वर दहा queries

हा lab का. खालची प्रत्येक query app खरंच विचारतो अशा प्रश्नाचं उत्तर देते. Section 1 मधल्या दहा rows वापरा, म्हणजे तुमचे results तंतोतंत जुळतील.

  1. प्रत्येक शहर एकदा
    • Command: SELECT DISTINCT city FROM users;
    • काय दिसेल: 6 rows: solapur, pune, mumbai, nashik, delhi, dubai.
    • Check करा: 6 rows in set, 10 नाही.
    • का: City dropdown ला प्रत्येक value एकदाच हवी. DISTINCT फक्त result मधले repeats काढतो; table तसाच राहतो.
  2. Pune चे users
    • Command: SELECT name, age FROM users WHERE city = 'pune';
    • काय दिसेल: zoya | NULL आणि siya | 27.
    • Check करा: 2 rows in set.
    • का: WHERE फक्त जुळणाऱ्या rows ठेवतो. Text values ना quotes लागतात.
  3. एकदम दोन शहरं
    • Command: SELECT name FROM users WHERE city IN ('pune', 'mumbai');
    • काय दिसेल: zoya, siya, maya, neha.
    • Check करा: 4 rows in set.
    • का: IN म्हणजे city = 'pune' OR city = 'mumbai' लिहायचा छोटा मार्ग.
  4. वयाची range
    • Command: SELECT name, age FROM users WHERE age BETWEEN 25 AND 30;
    • काय दिसेल: ravi 30, siya 27, maya 25, neha 25, ravi 28.
    • Check करा: 5 rows in set; 25 आणि 30 समाविष्ट.
    • का: BETWEEN दोन्ही टोकं समाविष्ट करतो. Zoya चं NULL वय कोणत्याच range मध्ये येत नाही.
  5. नसलेल्या values
    • Command: SELECT name FROM users WHERE age IS NULL;
    • काय दिसेल: zoya
    • Check करा: WHERE age = NULL Empty set देतो.
    • का: NULL म्हणजे value नाही, म्हणून = त्याच्याशी कधीच जुळत नाही. नेहमी IS NULL वापरा.
  6. r ने सुरू होणारी नावं
    • Command: SELECT id, name FROM users WHERE name LIKE 'r%';
    • काय दिसेल: 1 ravi आणि 10 ravi.
    • Check करा: 2 rows in set.
    • का: % म्हणजे कितीही अक्षरं. Type करताना search box नावं अशीच शोधतो.
  7. सगळ्यात मोठे तीन
    • Command: SELECT name, age FROM users ORDER BY age DESC LIMIT 3;
    • काय दिसेल: kiran आणि arjun (37), मग ravi (30).
    • Check करा: 3 rows in set.
    • का: DESC मोठ्यापासून sort करतो; LIMIT 3 पहिले तीन ठेवतो. ORDER BY शिवाय "पहिले तीन" ला अर्थ नाही.
  8. Rows आणि values मोजा
    • Command: SELECT COUNT(*), COUNT(age), MAX(age), MIN(age) FROM users;
    • काय दिसेल: 10 | 9 | 37 | 20
    • Check करा: Zoya च्या NULL मुळे COUNT(age) एकने कमी.
    • का: COUNT(*) rows मोजतो; COUNT(column) NULL सोडतो. "किती users" साठी COUNT(*) वापरा.
  9. सगळ्यात मोठा कोण?
    • Command: SELECT name FROM users WHERE age = (SELECT MAX(age) FROM users);
    • काय दिसेल: kiran आणि arjun.
    • Check करा: 2 rows in set.
    • का: MAX value देतो, व्यक्ती नाही. आतली query 37 शोधते; बाहेरची ते कोणाचं ते शोधते.
  10. एकापेक्षा जास्त users असलेली शहरं
    • Command: SELECT city, COUNT(*) AS total FROM users GROUP BY city HAVING COUNT(*) > 1;
    • काय दिसेल: mumbai 2, nashik 2, pune 2, solapur 2.
    • Check करा: delhi आणि dubai (प्रत्येकी 1) बाहेर.
    • का: GROUP BY प्रत्येक शहरासाठी एक row बनवतो; HAVING ते groups filter करतो. WHERE करू शकत नाही, कारण तो grouping आधी चालतो.
  11. एक row बदला
    • Command: UPDATE users SET city = 'pune' WHERE id = 8;
    • काय दिसेल: Query OK, 1 row affected आणि Rows matched: 1 Changed: 1 Warnings: 0.
    • Check करा: SELECT name, city FROM users WHERE id = 8; → priya | pune.
    • का: आधी जुळणारा SELECT चालवा आणि count तपासा. WHERE शिवाय प्रत्येक row बदलेल.

20. Try at home

Try at home

Task 1: filters

  1. Section 1 मधला users practice data टाका.
  2. प्रत्येक age एकदा, सगळ्यात मोठ्यापासून लहानापर्यंत sort करून दाखवा.
  3. Pune किंवा Solapur चे users दाखवा, आधी OR ने, मग IN ने.
  4. 22 ते 28 वयाचे users BETWEEN ने, मग >= आणि <= ने दाखवा. Results ची तुलना करा.
  5. ज्यांची age माहीत नाही ते users शोधा.
  6. ज्यांच्या नावात i आहे अशी नावं, आणि नेमक्या 5 अक्षरांची नावं शोधा.

Task 2: sorting आणि pages

  1. Age असलेले दोन सगळ्यात लहान users दाखवा.
  2. एका page वर 3 users: pages 1, 2 आणि 3 च्या queries लिहा.

Task 3: emp

  1. salary DECIMAL(10,2) सह emp बनवा आणि पाच employees टाका.
  2. सगळ्यात जास्त, सगळ्यात कमी, एकूण आणि सरासरी salary शोधा, प्रत्येकाला alias देऊन.
  3. फक्त id आणि salary असलेला employee टाका, मग COUNT(*) आणि COUNT(name) ची तुलना करा.
  4. सगळ्यात जास्त salary कोण कमावतो, आणि second-highest salary किती ते शोधा.
  5. प्रत्येक department चे employees आणि एकूण salary दाखवा, फक्त एकापेक्षा जास्त employees असलेल्या departments साठी.

Task 4: UPDATE

  1. id = 10 साठी SELECT चालवा, मग UPDATE ने त्या user ची city pune करा.
  2. "rows affected" ची line वाचा. मग SELECT ने तपासा.

Recap

थोडक्यात

  1. DISTINCT result मधल्या repeat rows काढतो; AS फक्त output मधल्या column ला नाव देतो.
  2. ORDER BY हा FROM आणि WHERE नंतरचा clause; ASC default, DESC उलटा; दुसरा column tie सोडवतो.
  3. WHERE =, != किंवा <>, <, >, <=, >= ने rows filter करतो; AND आणि OR ने जोडा.
  4. List साठी IN, range साठी BETWEEN (दोन्ही टोकं धरून), नसलेल्या values साठी IS NULL, patterns साठी % आणि _ सह LIKE.
  5. LIMIT आणि OFFSET rows चा तुकडा देतात; top N साठी आधी sort.
  6. पैशासाठी DECIMAL(10,2); MAX, MIN, SUM, AVG आणि COUNT अनेक rows मधून एक उत्तर काढतात; COUNT(*) rows मोजतो, COUNT(col) NULL सोडतो.
  7. Subquery आधी चालते आणि बाहेरच्या query ला उत्तर देते, उदा. सगळ्यात जास्त कोण कमावतो किंवा second-highest salary शोधायला.
  8. GROUP BY प्रत्येक group चं एक उत्तर देतो; HAVING groups filter करतो, WHERE rows.
  9. UPDATE ... SET ... WHERE data बदलतो (आधी SELECT ने तपासा; WHERE नसेल तर प्रत्येक row बदलते); ALTER TABLE structure बदलतो.

सराव Tasks

या scenario बद्दल

Paris Fashion Hub हा पॅरिस मधला फॅशन व्यवसाय आहे. Camille Laurent त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे EUR मध्ये मोजले जातात आणि AWS resources eu-west-3 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 10

सोपं मोठ्या orders आधी

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Order id व amount, मोठी amount आधी.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

सोपं City नुसार customers

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Pune मधल्या customers ची नावं.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

सोपं MariaDB मध्ये login करा

का: mysql client ने database server वर SQL चालवता येतं.

काय करायचं: MariaDB client root user म्हणून उघडा व password विचारू द्या.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम एकूण sales

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: सगळ्या order amounts ची बेरीज.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम Customer नावांसह orders

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: प्रत्येक customer नाव व order amount.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम लहान orders काढा

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: 200 पेक्षा कमी amount चे orders delete.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम City दुरुस्त करा

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Customer 5 Rome ला गेले. Record update करा.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

अवघड Customer नुसार sales

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Customer नुसार total, फक्त 1000 पेक्षा जास्त.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

अवघड Orders नसलेले customers

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: कधीच order न केलेल्या customers ची नावं.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

अवघड Database चा file मध्ये backup घ्या

का: mysqldump पूर्ण database SQL म्हणून लिहितो. मोठ्या बदलांआधी save करा.

काय करायचं: parisfashion_wp database root user ने (password विचारून) parisfashion_wp.sql मध्ये dump करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

झटपट उजळणी cards

हा lesson दोन मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR त्याचा lesson उघडतो.

तुलना card: COUNT(*) vs COUNT(column). COUNT(*): सगळ्या rows मोजतो. COUNT(column): त्या column मध्ये NULL नसलेल्या rows मोजतो.
तुलना: COUNT(*) vs COUNT(column) · PNG download करा
उजळणी card: WHERE ने rows filter. Tables मध्ये लाखो rows; फक्त जुळणाऱ्या हव्यात. WHERE test pass होणाऱ्या rows ठेवतो: =, <>, , IN, BETWEEN, LIKE, IS NULL. AND / OR ने tests जोडा; LIKE मध्ये % म्हणजे कोणताही text. Query:
उजळणी card: WHERE ने rows filter · PNG download करा
उजळणी card: ORDER BY, LIMIT आणि OFFSET. Top 10 किंवा results चं page 2 हवं असतं. ORDER BY sort (ASC default, DESC). LIMIT rows मर्यादित. OFFSET rows skip. आधी sort, मग limit. Top 3 salaries:
उजळणी card: ORDER BY, LIMIT आणि OFFSET · PNG download करा
उजळणी card: Aggregate functions. Reports ना raw rows नाही, totals आणि averages हवे. MAX, MIN, SUM, AVG आणि COUNT अनेक rows चा एक number करतात. Money साठी DECIMAL(10,2) म्हणजे sums अचूक. Average salary:
उजळणी card: Aggregate functions · PNG download करा
उजळणी card: GROUP BY आणि HAVING. प्रत्येक city किंवा department साठी एक total हवा. GROUP BY groups बनवतो; HAVING aggregation नंतर groups filter करतो. WHERE grouping आधी rows filter करतो; HAVING नंतर. 5 पेक्षा जास्त staff असलेली cities:
उजळणी card: GROUP BY आणि HAVING · PNG download करा
तुलना: WHERE vs HAVING. WHERE: एकेक rows filter करतो. HAVING: GROUP BY ने बनलेले groups filter करतो.
तुलना: WHERE vs HAVING · PNG download करा
मुलाखत card: WHERE vs HAVING: फरक काय?. WHERE grouping आधी rows filter करतो; HAVING नंतर groups. COUNT(*) सारखे aggregates grouping नंतरच असतात. WHERE salary > 0 … GROUP BY city HAVING COUNT(*) > 5.
मुलाखत card: WHERE vs HAVING: फरक काय? · PNG download करा
मुलाखत card: दुसरा सगळ्यात जास्त salary कसा शोधता?. Subquery ने overall max पेक्षा कमी max शोधा. वरच्या ties योग्य handle करतो. Query:
मुलाखत card: दुसरा सगळ्यात जास्त salary कसा शोधता? · PNG download करा
मुलाखत card: BETWEEN दोन्ही टोकं include करतो का?. हो. BETWEEN 10 AND 20 मध्ये 10 आणि 20 येतात. करत नाही असं मानल्याने off-by-one errors. असं:
मुलाखत card: BETWEEN दोन्ही टोकं include करतो का? · PNG download करा

अजून cards: Ravi Sir's Cards.