మాడ్యూల్ పాఠాలు (4/4)
యూనియన్, ఇంటర్సెక్ట్, మినహా (మరియు క్రాస్ జాయిన్)
ఇప్పటివరకు మీరు డేటాను అడ్డంగా కలిపారు: JOIN నిలువు వరుసలను జోడించారు
సంబంధిత వరుసల నుండి. SQL మరొక ఆపరేటర్ల కుటుంబాన్ని కూడా అందిస్తుంది
రెండు SELECTs ఫలితాలను పరిగణిస్తూ నిలువుగా డేటాను మిళితం చేస్తుంది
సెట్లు: 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 మరియు UNION అన్నీ
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 మరియు మినహా
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). Una colonna: ఇమెయిల్. ప్రతి ఇమెయిల్కి ఆర్డినా.
సూచనను చూపించు
రెండు ఎంపికల మధ్య UNION ఒకే ఇమెయిల్ నిలువు వరుసను అందిస్తుంది. ఆర్డర్ ద్వారా ఆర్డర్ చివరి ఫలితంపై చివరిలో ఉంటుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
ట్రోవా లే ఇమెయిల్ డీ క్లయింటీ చే హన్నో ఆర్డినాటో మా నాన్ హన్నో మై రీసెన్సిటో నుల్లా. USA మినహా. Una colonna: ఇమెయిల్. ప్రతి ఇమెయిల్కి ఆర్డినా.
సూచనను చూపించు
మినహా ఎడమవైపు SELECT నుండి కుడివైపున లేని అడ్డు వరుసలను మాత్రమే ఉంచుతుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది