முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 5 · பாடம் 4 இன் 4பாடத்திட்டத்தில் 20/57~12 min
தொகுதி பாடங்கள் (4/4)

யூனியன், இன்டர்செக்ட், தவிர (மற்றும் குறுக்கு இணைப்பு)

இதுவரை நீங்கள் தரவை கிடைமட்டமாக இணைத்துள்ளீர்கள்: JOIN நெடுவரிசைகளை இணைக்கிறது தொடர்புடைய வரிசைகளிலிருந்து. SQL ஆபரேட்டர்களின் மற்றொரு குடும்பத்தையும் வழங்குகிறது தரவை ஒருங்கிணைக்கிறது செங்குத்தாக, இரண்டு SELECTகளின் முடிவுகளை இவ்வாறு கருதுகிறது செட்: UNION, INTERSECT, EXCEPT. நாங்கள் மீண்டும் CROSS JOIN, தி கார்ட்டீசியன் தயாரிப்பு.

குறுக்கு இணைப்பு: ஒவ்வொரு வரிசையிலும் ஒவ்வொரு வரிசை

CROSS JOIN இல் ON இல்லை: இது ** சாத்தியமான ஒவ்வொரு கலவையையும்** உருவாக்குகிறது இரண்டு அட்டவணைகளுக்கு இடையே உள்ள வரிசைகள் (கார்ட்டீசியன் தயாரிப்பு). A இல் n வரிசைகள் மற்றும் B இருந்தால் m வரிசைகள் உள்ளன, விளைவாக n × m உள்ளது.

SQL
-- Tutte le combinazioni cliente × prodotto:
SELECT c.email, p.name
FROM   customers c
CROSS JOIN products p;

12 வாடிக்கையாளர்கள் × 16 பொருட்கள் = 192 வரிசைகள். உண்மையான தரவுகளில் இது அரிதாகவே பயன்படுத்தப்படுகிறது (அது விலை உயர்ந்தது!), ஆனால் இது பயனுள்ளதாக இருக்கும்:

  • "அனைவருக்கும் எதிராக அனைத்தும்" சேர்க்கைகளை உருவாக்குதல் (எ.கா. இணக்க அணி);
  • மாறிலிகள் / அளவுருக்களின் சிறிய அட்டவணையுடன் அட்டவணையை இணைத்தல்.

யூனியன் மற்றும் யூனியன் அனைத்து

UNION இரண்டு SELECTகளின் முடிவுகளை ஒரே எண்ணுடன் இணைக்கிறது மற்றும் நெடுவரிசைகளின் வகை:

SQL
SELECT email FROM customers WHERE country = 'Italia'
UNION
SELECT email FROM customers WHERE country = 'Francia';

விதிகள்:

  • இரண்டு SELECTகள் இணக்கமான அதே எண்ணிக்கையிலான நெடுவரிசைகளைக் கொண்டிருக்க வேண்டும் வகைகள்;
  • UNION (ALL இல்லாமல்) நகல்களை நீக்குகிறது — திறம்பட செயல்படுத்துகிறது DISTINCT இறுதி முடிவில்;
  • UNION ALL நகல்களையும் வைத்திருக்கிறது, மேலும் மிக வேகமாக இருப்பதால் இரட்டிப்புக்கான வரிசை/ஹாஷைத் தவிர்க்கிறது.
SQL
-- 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 இரண்டாவது ** (தொகுப்பு) இல் இல்லாத முதல் வரிசைகளை ** வைத்திருக்கிறது "வேறுபாடு").

SQL
-- 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 மாறுபாடுகள் இல்லை.

நீங்களே முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#sql.m5.l4.e1
முயற்சிகள்: 0ஏற்றுகிறது…

Trova tutte le email dei clienti che hanno ordinato qualcosa OPPURE recensito qualcosa (senza duplicati). உனா கொலோனா: மின்னஞ்சல். மின்னஞ்சலுக்கு ஓர்டினா.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

ஒரே மின்னஞ்சல் நெடுவரிசையை வழங்கும் இரண்டு தேர்வுகளுக்கு இடையிலான UNION. ஆர்டர் மூலம் ஆர்டர் முடிவில், இறுதி முடிவில் செல்கிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#sql.m5.l4.e2
முயற்சிகள்: 0ஏற்றுகிறது…

Trova le email dei clienti che hanno ordinato ma non hanno mai recensito nulla. அமெரிக்கா தவிர. உனா கொலோனா: மின்னஞ்சல். மின்னஞ்சலுக்கு ஓர்டினா.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

தவிர வலதுபுறத்தில் இல்லாத இடது SELECT இலிருந்து வரிசைகளை மட்டுமே வைத்திருக்கும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்