SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

SQLite शामिल हों

सारांश :इस ट्यूटोरियल में, आप दो या दो से अधिक तालिकाओं से डेटा क्वेरी करने के लिए विभिन्न प्रकार के SQLite जॉइन के बारे में जानेंगे।

प्रदर्शन के लिए, हम artists . का उपयोग करेंगे और albums नमूना डेटाबेस से तालिकाएँ।

एक कलाकार के पास शून्य या कई एल्बम हो सकते हैं जबकि एक एल्बम एक कलाकार का होता है।

दोनों artists . से डेटा क्वेरी करने के लिए और albums आपके द्वारा उपयोग की जाने वाली तालिकाएँ INNER JOIN . का उपयोग कर सकती हैं , LEFT JOIN , या CROSS JOIN खंड। प्रत्येक जॉइन क्लॉज यह निर्धारित करता है कि SQLite एक टेबल से डेटा को दूसरी टेबल में पंक्तियों के साथ मिलान करने के लिए कैसे उपयोग करता है।

ध्यान दें कि SQLite सीधे RIGHT JOIN का समर्थन नहीं करता है और FULL OUTER JOIN

SQLite INNER JOIN

निम्नलिखित कथन एल्बम के शीर्षक और उनके कलाकारों के नाम लौटाता है:

SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)

यहाँ आंशिक आउटपुट है:

इस उदाहरण में, INNER JOIN खंड albums . से प्रत्येक पंक्ति से मेल खाता है artists . से प्रत्येक पंक्ति के साथ तालिका शामिल होने की स्थिति के आधार पर तालिका (artists.ArtistId = albums.ArtistId ) ON . के बाद निर्दिष्ट कीवर्ड।

यदि शामिल होने की स्थिति का मूल्यांकन सही (या 1) पर होता है, तो दोनों albums . से पंक्तियों के स्तंभ और artists परिणाम सेट में टेबल शामिल हैं।

यह क्वेरी तालिका उपनामों का उपयोग करती है (l albums . के लिए टेबल और r artists . के लिए तालिका) क्वेरी को छोटा करने के लिए:

SELECT
    l.Title, 
    r.Name
FROM
    albums l
INNER JOIN artists r ON
    r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)

यदि सम्मिलित तालिकाओं के कॉलम नाम समान हैं, उदाहरण के लिए, ArtistId , आप USING . का उपयोग कर सकते हैं सिंटैक्स इस प्रकार है:

SELECT
   Title, 
   Name
FROM
   albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)

क्लॉज USING(ArtistId) ON artists.ArtistId = albums.ArtistId

SQLite LEFT JOIN

यह कथन artists . से कलाकारों के नाम और एल्बम के शीर्षक का चयन करता है और albums LEFT JOIN का उपयोग कर टेबल खंड:

SELECT
    Name, 
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

यहाँ आउटपुट है:

LEFT JOIN क्लॉज बाएं टेबल से शुरू होने वाले डेटा का चयन करता है (artists ) और दाएँ तालिका में मेल खाने वाली पंक्तियाँ (albums ) शामिल होने की स्थिति के आधार पर (artists.ArtistId = albums.ArtistId ) ।

लेफ्ट जॉइन artists . से सभी पंक्तियों को लौटाता है तालिका (या बाईं तालिका) और albums . से मेल खाने वाली पंक्तियाँ टेबल (या दायां टेबल)।

यदि बाईं तालिका की एक पंक्ति में दाईं तालिका में मेल खाने वाली पंक्ति नहीं है, तो SQLite में बाईं तालिका में पंक्तियों के स्तंभ और NULL शामिल हैं। दाएँ तालिका के स्तंभों के लिए।

INNER JOIN के समान खंड, आप USING . का उपयोग कर सकते हैं शामिल होने की स्थिति के लिए सिंटैक्स निम्नानुसार है:

SELECT
   Name, 
   Title
FROM
   artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
   Name;Code language: SQL (Structured Query Language) (sql)

अगर आप ऐसे कलाकारों को ढूंढना चाहते हैं जिनके पास कोई एल्बम नहीं है, तो आप WHERE जोड़ सकते हैं खंड जैसा कि निम्नलिखित प्रश्न में दिखाया गया है:

SELECT
    Name,
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
WHERE Title IS NULL   
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

यह चित्र आंशिक आउटपुट दिखाता है:

आम तौर पर, इस प्रकार की क्वेरी आपको उन पंक्तियों को खोजने की अनुमति देती है जो बाईं तालिका में उपलब्ध हैं, लेकिन दाईं तालिका में संबंधित पंक्तियाँ नहीं हैं।

ध्यान दें कि LEFT JOIN और LEFT OUTER JOIN समानार्थी हैं।

SQLite CROSS JOIN

CROSS JOIN क्लॉज सम्मिलित तालिकाओं से पंक्तियों का कार्टेशियन उत्पाद बनाता है।

INNER JOIN के विपरीत और LEFT JOIN खंड, एक CROSS JOIN शामिल होने की कोई शर्त नहीं है। यहाँ CROSS JOIN का मूल सिंटैक्स दिया गया है खंड:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)

CROSS JOIN पहली तालिका से प्रत्येक पंक्ति को जोड़ती है (table1 ) दूसरी तालिका से प्रत्येक पंक्ति के साथ (table2 ) परिणाम सेट बनाने के लिए।

यदि पहली तालिका में N है पंक्तियाँ, दूसरी तालिका में M है पंक्तियाँ, अंतिम परिणाम में NxM होगा पंक्तियाँ।

CROSS JOIN का एक व्यावहारिक उदाहरण क्लॉज आगे की प्रक्रिया के लिए प्रारंभिक डेटा सेट बनाने के लिए डेटा के दो सेटों को संयोजित करना है। उदाहरण के लिए, आपके पास उत्पादों और महीनों की एक सूची है, और आप एक योजना बनाना चाहते हैं कि आप कौन से उत्पाद बेच सकते हैं।

निम्न स्क्रिप्ट products बनाती है और calendars टेबल:

CREATE TABLE products(
    product text NOT null
);

INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');



CREATE TABLE calendars(
    y int NOT NULL,
    m int NOT NULL
);

INSERT INTO calendars(y,m)
VALUES 
    (2019,1),
    (2019,2),
    (2019,3),
    (2019,4),
    (2019,5),
    (2019,6),
    (2019,7),
    (2019,8),
    (2019,9),
    (2019,10),
    (2019,11),
    (2019,12);
Code language: SQL (Structured Query Language) (sql)

यह क्वेरी CROSS JOIN का उपयोग करती है महीनों के साथ उत्पादों को संयोजित करने का खंड:

SELECT * 
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)

यहाँ आउटपुट है:

इस ट्यूटोरियल में, आपने विभिन्न प्रकार के SQLite जॉइन सीखे हैं जो आपको कई तालिकाओं से क्वेरी करने की अनुमति देते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाटाइप बेमेल (कोड 20) डालने के दौरान

  2. पूर्ण यूनिकोड समर्थन के साथ SQLite में केस-असंवेदनशील खोज को लागू करने के 5 तरीके

  3. SQLiteAssetHelper के साथ संस्करण संख्या में + का उपयोग करने से कैसे बचें?

  4. स्क्लाइट टेबल में टाइप टेक्स्ट के रूप में संग्रहीत कॉलम प्रकार पूर्णांक का अधिकतम मूल्य कैसे प्राप्त करें?

  5. यह जांचने के लिए कार्य करता है कि SQLite journal_mode=WAL या journal_mode=DELETE का उपयोग कर रहा है या नहीं