தொகுதி பாடங்கள் (4/4)
யூனியன், இன்டர்செக்ட், தவிர (மற்றும் குறுக்கு இணைப்பு)
இதுவரை நீங்கள் தரவை கிடைமட்டமாக இணைத்துள்ளீர்கள்: JOIN நெடுவரிசைகளை இணைக்கிறது
தொடர்புடைய வரிசைகளிலிருந்து. SQL ஆபரேட்டர்களின் மற்றொரு குடும்பத்தையும் வழங்குகிறது
தரவை ஒருங்கிணைக்கிறது செங்குத்தாக, இரண்டு SELECTகளின் முடிவுகளை இவ்வாறு கருதுகிறது
செட்: UNION, INTERSECT, EXCEPT. நாங்கள் மீண்டும் CROSS JOIN, தி
கார்ட்டீசியன் தயாரிப்பு.
குறுக்கு இணைப்பு: ஒவ்வொரு வரிசையிலும் ஒவ்வொரு வரிசை
CROSS JOIN இல் ON இல்லை: இது ** சாத்தியமான ஒவ்வொரு கலவையையும்** உருவாக்குகிறது
இரண்டு அட்டவணைகளுக்கு இடையே உள்ள வரிசைகள் (கார்ட்டீசியன் தயாரிப்பு). A இல் n வரிசைகள் மற்றும் B இருந்தால்
m வரிசைகள் உள்ளன, விளைவாக n × m உள்ளது.
-- Tutte le combinazioni cliente × prodotto:
SELECT c.email, p.name
FROM customers c
CROSS JOIN products p;12 வாடிக்கையாளர்கள் × 16 பொருட்கள் = 192 வரிசைகள். உண்மையான தரவுகளில் இது அரிதாகவே பயன்படுத்தப்படுகிறது (அது விலை உயர்ந்தது!), ஆனால் இது பயனுள்ளதாக இருக்கும்:
- "அனைவருக்கும் எதிராக அனைத்தும்" சேர்க்கைகளை உருவாக்குதல் (எ.கா. இணக்க அணி);
- மாறிலிகள் / அளவுருக்களின் சிறிய அட்டவணையுடன் அட்டவணையை இணைத்தல்.
யூனியன் மற்றும் யூனியன் அனைத்து
UNION இரண்டு SELECTகளின் முடிவுகளை ஒரே எண்ணுடன் இணைக்கிறது மற்றும்
நெடுவரிசைகளின் வகை:
SELECT email FROM customers WHERE country = 'Italia'
UNION
SELECT email FROM customers WHERE country = 'Francia';விதிகள்:
- இரண்டு
SELECTகள் இணக்கமான அதே எண்ணிக்கையிலான நெடுவரிசைகளைக் கொண்டிருக்க வேண்டும் வகைகள்; UNION(ALLஇல்லாமல்) நகல்களை நீக்குகிறது — திறம்பட செயல்படுத்துகிறதுDISTINCTஇறுதி முடிவில்;UNION ALLநகல்களையும் வைத்திருக்கிறது, மேலும் மிக வேகமாக இருப்பதால் இரட்டிப்புக்கான வரிசை/ஹாஷைத் தவிர்க்கிறது.
-- Email di clienti che hanno ordinato O recensito qualcosa, senza duplicati:
SELECT c.email
FROM customers c JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.email
FROM customers c JOIN reviews r ON r.customer_id = c.id;இன்டர்செக்ட் மற்றும் தவிர
INTERSECT **இரண்டு முடிவுகளிலும் உள்ள வரிசைகளை மட்டும் வைத்திருக்கிறது; EXCEPT
இரண்டாவது ** (தொகுப்பு) இல் இல்லாத முதல் வரிசைகளை ** வைத்திருக்கிறது
"வேறுபாடு").
-- Clienti che hanno sia ordinato sia recensito:
SELECT c.email FROM customers c JOIN orders o ON o.customer_id = c.id
INTERSECT
SELECT c.email FROM customers c JOIN reviews r ON r.customer_id = c.id;
-- Clienti che hanno ordinato ma mai recensito:
SELECT c.email FROM customers c JOIN orders o ON o.customer_id = c.id
EXCEPT
SELECT c.email FROM customers c JOIN reviews r ON r.customer_id = c.id;INTERSECT மற்றும் EXCEPT ஆகியவையும் இயல்பாகவே நகல்களை அகற்றும்; தி
INTERSECT ALL / EXCEPT ALL மாறுபாடுகள் இல்லை.
நீங்களே முயற்சி செய்து பாருங்கள்
Trova tutte le email dei clienti che hanno ordinato qualcosa OPPURE recensito qualcosa (senza duplicati). உனா கொலோனா: மின்னஞ்சல். மின்னஞ்சலுக்கு ஓர்டினா.
குறிப்பைக் காட்டு
ஒரே மின்னஞ்சல் நெடுவரிசையை வழங்கும் இரண்டு தேர்வுகளுக்கு இடையிலான UNION. ஆர்டர் மூலம் ஆர்டர் முடிவில், இறுதி முடிவில் செல்கிறது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
Trova le email dei clienti che hanno ordinato ma non hanno mai recensito nulla. அமெரிக்கா தவிர. உனா கொலோனா: மின்னஞ்சல். மின்னஞ்சலுக்கு ஓர்டினா.
குறிப்பைக் காட்டு
தவிர வலதுபுறத்தில் இல்லாத இடது SELECT இலிருந்து வரிசைகளை மட்டுமே வைத்திருக்கும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்