Skip to content

Commit

Permalink
update joins with comments
Browse files Browse the repository at this point in the history
  • Loading branch information
Danny Volkaerts committed Apr 29, 2024
1 parent 3bb6bf2 commit 5488638
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 10 deletions.
108 changes: 101 additions & 7 deletions docs/sql_course/3_joins.html
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ <h1 class="title">JOINs in SQL</h1>
</div>
</div>

<p class="date">20 Apr, 2024</p>
<p class="date">29 Apr, 2024</p>
</section>
<section class="slide level2">

Expand All @@ -414,6 +414,20 @@ <h3 id="wat-is-een-join">Wat is een JOIN?</h3>
<p>Waarom tabellen combineren?<br>
<br>
REDUNDANCY &amp; CONSISTENCY</p>
<aside class="notes">
<p>redundantie = overtolligheid = gegeven dat op meerfdere plekken in een database voorkomt.<br>
Consistency = requirement dat elke transactie alleen data kan wijzigen in de aanagegeven toegelaten manieren (DDL).</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
clip: rect(1px, 1px, 1px, 1px);
padding: 1px 0 0 0!important;
border: 0!important;
height: 1px!important;
width: 1px!important;
overflow: hidden!important;
display:block!important;
}</style></aside>
</section>
<section class="slide level2">

Expand All @@ -431,7 +445,22 @@ <h3 id="inner-join">INNER JOIN</h3>

<h3 id="inner-join-1">INNER JOIN</h3>

<img data-src="sql_course_images/joins_vis_inner.png" class="r-stretch"></section>
<img data-src="sql_course_images/joins_vis_inner.png" class="r-stretch"><aside class="notes">
<p>kleur van tabel = gemmenschappelijke sleutel<br>
X = kolom van tabel 1, y = kolom van tabel 2<br>
</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
clip: rect(1px, 1px, 1px, 1px);
padding: 1px 0 0 0!important;
border: 0!important;
height: 1px!important;
width: 1px!important;
overflow: hidden!important;
display:block!important;
}</style></aside>
</section>
<section class="slide level2">

<h3 id="inner-join---voorbeeld">INNER JOIN - voorbeeld</h3>
Expand All @@ -443,13 +472,52 @@ <h3 id="inner-join---voorbeeld">INNER JOIN - voorbeeld</h3>
<span id="cb2-4"><a href="#cb2-4"></a> <span class="kw">ON</span> departments.department_id <span class="op">=</span> employees.department_id</span>
<span id="cb2-5"><a href="#cb2-5"></a><span class="kw">WHERE</span> departments.department_name <span class="op">=</span> <span class="st">'Purchasing'</span>;</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
<aside class="notes">
<p>Herinner: IT departement: eerst IT = id 6, daarna where depart_id = 6.<br>
</p>
<p>SQLITE: duplicate column toont deze niet, wel in SQL server.</p>
<p>Dit is op zich omslachtig -&gt; tabellen AS e and as d<br>
</p>
<p>Volgend punt: USING<br>
SELECT first_name, last_name, employees.department_id,<br>
departments.department_id, department_name<br>
FROM employees INNER JOIN departments USING(department_id)<br>
WHERE departments.department_name = ‘Purchasing’;<br>
Dit KAN in SQLITE maar NIET in SQLSERVER:<br>
Voorbeeld: SELECT s.spelersnr, b.spelersnr,b.bedrag<br>
FROM spelers s inner join boetes b on(s.spelersnr=b.spelersnr)<br>
</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
clip: rect(1px, 1px, 1px, 1px);
padding: 1px 0 0 0!important;
border: 0!important;
height: 1px!important;
width: 1px!important;
overflow: hidden!important;
display:block!important;
}</style></aside>
</section>
<section class="slide level2">

<h3 id="inner-join---voorbeeld-2">INNER JOIN - voorbeeld 2</h3>
<p>Geef me de verschillende jobtitels van departement ‘Purchasing’.</p>

<img data-src="sql_course_images/inner_join_ex2.png" id="fig-erd-hr" class="r-stretch"></section>
<img data-src="sql_course_images/inner_join_ex2.png" id="fig-erd-hr" class="r-stretch"><aside class="notes">
<p>Nuance: de jobs die effectief uitgevoerd worden!</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
clip: rect(1px, 1px, 1px, 1px);
padding: 1px 0 0 0!important;
border: 0!important;
height: 1px!important;
width: 1px!important;
overflow: hidden!important;
display:block!important;
}</style></aside>
</section>
<section class="slide level2">

<h3 id="inner-join---voorbeeld-2-1">INNER JOIN - voorbeeld 2</h3>
Expand All @@ -461,7 +529,7 @@ <h3 id="inner-join---voorbeeld-2-1">INNER JOIN - voorbeeld 2</h3>
<span id="cb3-4"><a href="#cb3-4"></a><span class="kw">WHERE</span> d.department_name <span class="op">=</span> <span class="st">'Purchasing'</span>;</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
<aside class="notes">
<p>DISTINCT</p>
<p>SELECT DISTINCT job_title…</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
Expand Down Expand Up @@ -494,8 +562,21 @@ <h3 id="left-join-right-join-1">LEFT JOIN (&amp; RIGHT JOIN)</h3>
<section class="slide level2">

<h3 id="left-join-voorbeeld">LEFT JOIN voorbeeld</h3>

<img data-src="sql_course_images/left_join_ex1.png" class="r-stretch"></section>
<p>Geef me alle landen en hun eventuele locaties. <img data-src="sql_course_images/left_join_ex1.png"></p>
<aside class="notes">
<p>Let op de kardinaliteit: 0 … N -&gt; niet elk land hoeft een locatie te hebben!</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
clip: rect(1px, 1px, 1px, 1px);
padding: 1px 0 0 0!important;
border: 0!important;
height: 1px!important;
width: 1px!important;
overflow: hidden!important;
display:block!important;
}</style></aside>
</section>
<section class="slide level2">

<h3 id="left-join-voorbeeld-1">LEFT JOIN voorbeeld</h3>
Expand Down Expand Up @@ -572,12 +653,16 @@ <h3 id="full-outer-join-voorbeeld">FULL OUTER JOIN voorbeeld</h3>
mand_id INTEGER<br>
);<br>
</p>
<p>Hoe ziet het schema eruit?<br>
</p>
<p>INSERT INTO mand (mand_id, mand_naam)<br>
VALUES<br>
(1, ‘A’),<br>
(2, ‘B’),<br>
(3, ‘C’);<br>
</p>
<p>Runnen en nog eens proberen te runnen -&gt; UNIQUE CONSTRAINT!<br>
</p>
<p>INSERT INTO fruit (<br>
fruit_id,<br>
fruit_naam,<br>
Expand Down Expand Up @@ -605,6 +690,13 @@ <h3 id="full-outer-join-voorbeeld">FULL OUTER JOIN voorbeeld</h3>
WHERE<br>
fruit_naam IS NULL;<br>
</p>
<p>DELETE FROM TABLE fruits<br>
WHERE fruit_id &gt;0;<br>
</p>
<p>DROP TABLE fruits;<br>
</p>
<p>Let op! Verschil lege tabel en geen tabel! (empty vs error)<br>
</p>
<style type="text/css">
span.MJX_Assistive_MathML {
position:absolute!important;
Expand Down Expand Up @@ -656,7 +748,9 @@ <h3 id="self-join-voorbeeld-2">SELF JOIN voorbeeld</h3>
<span id="cb11-4"><a href="#cb11-4"></a><span class="co">-- verder aan te vullen</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div>
<aside class="notes">
<p>SELECT<br>
<p>Moeten we in dit geval een employee toevoegen of een manager?<br>
=&gt; Steven King als employee want heeft geen manager!<br>
SELECT<br>
e.first_name || ’ ’ || e.last_name AS employee,<br>
m.first_name || ’ ’ || m.last_name AS manager<br>
FROM<br>
Expand Down
51 changes: 49 additions & 2 deletions sql_course/3_joins.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ Waarom tabellen combineren?\
\
REDUNDANCY & CONSISTENCY

:::{.notes}
redundantie = overtolligheid = gegeven dat op meerfdere plekken in een database voorkomt.\
Consistency = requirement dat elke transactie alleen data kan wijzigen in de aanagegeven toegelaten manieren (DDL).

:::
---

### INNER JOIN
Expand All @@ -44,7 +49,10 @@ ON tabel1.gemeenschappelijke_kolom = tabel2.gemeenschappelijke_kolom;

![](sql_course_images/joins_vis_inner.png){}


:::{.notes}
kleur van tabel = gemmenschappelijke sleutel\
X = kolom van tabel 1, y = kolom van tabel 2\
:::
------------------------------------------------------------------------

### INNER JOIN - voorbeeld
Expand All @@ -59,6 +67,24 @@ FROM employees INNER JOIN departments
WHERE departments.department_name = 'Purchasing';
```

:::{.notes}
Herinner: IT departement: eerst IT = id 6, daarna where depart_id = 6.\

SQLITE: duplicate column toont deze niet, wel in SQL server.

Dit is op zich omslachtig -> tabellen AS e and as d\

Volgend punt: USING\
SELECT first_name, last_name, employees.department_id, \
departments.department_id, department_name\
FROM employees INNER JOIN departments USING(department_id)\
WHERE departments.department_name = 'Purchasing';\
Dit KAN in SQLITE maar NIET in SQLSERVER:\
Voorbeeld: SELECT s.spelersnr, b.spelersnr,b.bedrag\
FROM spelers s inner join boetes b on(s.spelersnr=b.spelersnr)\

:::

------------------------------------------------------------------------

### INNER JOIN - voorbeeld 2
Expand All @@ -67,6 +93,9 @@ Geef me de verschillende jobtitels van departement 'Purchasing'.

![](sql_course_images/inner_join_ex2.png){#fig-erd-hr}

:::{.notes}
Nuance: de jobs die effectief uitgevoerd worden!
:::
------------------------------------------------------------------------

### INNER JOIN - voorbeeld 2
Expand All @@ -81,7 +110,7 @@ WHERE d.department_name = 'Purchasing';
```

:::{.notes}
DISTINCT
SELECT DISTINCT job_title...
:::

------------------------------------------------------------------------
Expand All @@ -108,8 +137,12 @@ ON tabel1.gemeenschappelijke_kolom = tabel2.gemeenschappelijke_kolom;

### LEFT JOIN voorbeeld

Geef me alle landen en hun eventuele locaties.
![](sql_course_images/left_join_ex1.png)

:::{.notes}
Let op de kardinaliteit: 0 ... N -> niet elk land hoeft een locatie te hebben!
:::
------------------------------------------------------------------------

### LEFT JOIN voorbeeld
Expand Down Expand Up @@ -186,12 +219,16 @@ CREATE TABLE fruit (\
mand_id INTEGER\
);\

Hoe ziet het schema eruit?\

INSERT INTO mand (mand_id, mand_naam)\
VALUES\
(1, 'A'),\
(2, 'B'),\
(3, 'C');\

Runnen en nog eens proberen te runnen -> UNIQUE CONSTRAINT!\

INSERT INTO fruit (\
fruit_id,\
fruit_naam,\
Expand All @@ -218,6 +255,14 @@ FROM\
FULL OUTER JOIN mand ON mand.mand_id = fruit.mand_id\
WHERE\
fruit_naam IS NULL;\

DELETE FROM TABLE fruits \
WHERE fruit_id >0;\

DROP TABLE fruits;\

Let op! Verschil lege tabel en geen tabel! (empty vs error)\

:::


Expand Down Expand Up @@ -271,6 +316,8 @@ FROM employees e
```

:::{.notes}
Moeten we in dit geval een employee toevoegen of een manager?\
=> Steven King als employee want heeft geen manager!\
SELECT \
e.first_name || ' ' || e.last_name AS employee,\
m.first_name || ' ' || m.last_name AS manager\
Expand Down
2 changes: 1 addition & 1 deletion sql_course/index_sql.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Oefeningen hoofstuk 1 en 2.

---

9. [**Oefeningen H3**](8_exercises.html){target="_blank"}\
9. [**Oefeningen H3**](9_exercises_joins.html){target="_blank"}\
Oefeningen hoofstuk 3 - joins.

---
Expand Down

0 comments on commit 5488638

Please sign in to comment.