WebbServerProgrammering
PHP
Lars KaggSkolan


- Använder din kunskap i Programmering 1 och Webbutveckling
- Vi kommer att jobba med språk som PHP och SQL
- PHP använder vi att skapa dynamiskt genererade webbsidor,
inloggningsfunktioner, administrationssystem, nyhetsbrev m.m. - PHP kan integreras med databaser och då använder vi SQL.
- Stora webbplatser som Facebook, Yahoo, Flickr och Wikipedia är byggda med hjälp av PHP.
- WordPress, Drupal, Joomla och Magento, är också byggda i PHP.
- Du kommer att göra mycket övningar i PHP, SLQ och ett stort slutprojekt.
- Idrottsidan är exempel på ett slutprojekt
WebbServerProgrammering

WebbServerProgrammering

Ingår i kursen
-
PHP-frågorna
-
Externa filer Meny och footer
-
Session och Cookies
-
Formulär
-
SQL-frågorna
-
Toplistan
-
Säkerhets-uppgift
-
Slutprojekt (Större hemsida)
Installera
FTP i Sublime
Sublime - FTP
Man måste installera ett package Control.
- I Sublime så tryck på cmd+shift+p
- Skriv Install Package Control och tyck enter.
Vänta några sekunder.
Nu är Package installera och vi kan installera FTP
-
tryck på cmd+shift+p och skriv Package Control: Install Package. Tryck enter.
Vänta några sekunder. - Skriv SFTP välj och tryck enter.


Sublime - SideBar
Nästa steg är att ta fram sidebar i Sublime
- I Sublimes meny välj
View -> Side Bar -> Show Sidebar

Sublime - FTP inställningar
Nu ska vi ställa in så att vi kan skicka upp filer via FTP
- I Sublimes meny välj
File -> Open...
- Hitta din webbutveckling mapp och markera mappen tyck sedan på Open


Sublime - FTP inställningar
Nu kan du ser mappar och filer som finns där.
Dubbel klicka på en fil för att öppna den i Sublime.
Det går att höger klicka på en mapp och skapa en ny file


Sublime - FTP kopplingen
Höger klicka på webbutvecklings mappen
och välj
SFTP/FTP -> Map to Remote
En ny fil skapas sftp-config.json
Nu ska vi ändar lite i den filen
Som bilderna till höger ->
Rad 6, 8, 17, 18, 19 och 22





Installera
FTP i Visual Code
Code - FTP
Sök efter ftp-simple


Klicka på installera

Code - FTP
Knappen Fn + F1


Funkar det inte testa med: apiscp.hostup.se
Code - FTP
Knappen Fn + F1
Välj Remote


Om allt funkar så kommer du att se filerna
1. PHP - vad är?
- PHP står för Hypertext Preprocessor.
- PHP skapades ursprungligen av Rasmus Lerdorf 1994.
- Det underhålls för närvarande av PHP Development Team
- PHP är ett open source-serverns skriptspråk för att skriva dynamiskt genererade webbsidor.
- PHP-skript utförs på servern och resultatet skickas till webbläsaren som vanlig HTML.
- PHP kan integreras med databaser, som MySQL.
- Den nuvarande versionen av PHP är 8.
Vad är PHP?
- PHP kan köras på alla större operativsystem, inklusive Linux, Windows och macOS.
- En anmärkningsvärd egenskap hos PHP är att den stöder många databaser, inklusive MySQL, PostgreSQL, MS SQL, db2, Oracle Database och MongoDB.
PHP är ett plattformsoberoende språk
- PHP kan generera dynamiskt sidinnehåll
- PHP kan skapa, öppna, läsa, skriva, ta bort och stänga filer på servern
- PHP kan samla in formulärdata
- PHP kan skicka och ta emot cookies
- PHP kan lägga till, ta bort, ändra data i din databas
- PHP kan användas för att kontrollera användaråtkomst
- PHP kan kryptera data
- ....
Vad kan PHP göra?
PHP - Fördelar
- Lätt att lära sig: PHP är lätt att lära sig och använda.
- Open source: PHP är ett open source-projekt.
- Portability: PHP körs på olika plattformar som Microsoft Windows, Linux, Mac OS, etc. och det är kompatibelt med nästan alla servrar som används idag, såsom Apache, IIS, etc.
- Prestanda: PHP körs oftas snabbare än många andra skriptspråk som ASP, Ruby, Python, Java, m.m.
- Stor gemenskap: Eftersom PHP stöds av det globala samfundet, är det väldigt enkelt att hitta hjälp eller dokumentation relaterad till PHP.
Hur PHP fungerar
- Först skickar webbläsaren en HTTP-förfrågan till webbservern, t.ex. index.php.
- För det andra bearbetar PHP-förprocessorn som finns på webbservern PHP-kod för att generera HTML-dokumentet.
- För det tredje skickar webbservern HTML-dokumentet tillbaka till webbläsaren.

2. PHP - Basics
- <?php ?>
- Echo och Print
- Kommentar
- Variabler
PHP - Scriptspråk
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<?php
echo "Detta är skrivet inne i kodtaggen";
?>
</body>
</html>- PHP är inbäddat i html och går att göra hur många gångar du vill på en HTML-sida.
- PHP är ett scriptspråk som när det visas i webbläsaren för användaren så är det alltid html-kod.
PHP - Scriptspråk
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<?php
echo "Detta är skrivet inne i kodtaggen";
?>
</body>
</html>- När man ska skriva en PHP-kod så måste det alltid ligga mellan två PHP-taggar <?php och ?>
<?php /* PHP-kod läggs här */ ?><!DOCTYPE html>
<html>
<head>
<title>Detta är en testsida med PHP</title-taggar>
<meta charset="utf-8" />
</head>
<body>
<h2>Provningssida</h2>
<p>
Denna sida innehåller HTML-kod med PHP-taggar. <br />
<?php /* Infoga PHP-kod här */ ?>
Här är några små tester:
</p>
<ul>
<li style="color: blue;">Text i blått</li>
<li style="color: red;">Text i rött</li>
<li style="color: green;">Text i grönt</li>
</ul>
<?php
/* Mer PHP
Alltid PHP */
?>
</body>
</html>Echo & Print
-
Echo & print - kan skriva ut en eller flera strängar.
-
Man kan skriva ut t.ex. sträng, siffror, variabler, resultat av uttryck etc.
-
Vill du grotta ner lite extra i skillnader mellan echo och print så sök på php.net.
** Glöm inte semikolon ; på slutet **
<?php
// Displaying string of text
echo "Hello World!";
print("Hello World!");
?>Kommentarer
<?php
// This is a single line comment
# This is also a single line comment
/*
This is a multiple line comment block
that spans across more than
one line
*/
echo "Hello, world!";
?>Variabler
- I PHP behöver en variabel inte deklareras innan man lägger till ett värde för det.
- PHP omvandlar automatiskt variabeln till rätt datatyp.
- Alla variabler i PHP börjar med en $ -tecken, följt av variabelns namn.
- Ett variabelt namn måste börja med ett bokstav eller understecken _.
- Ett variabelt namn kan inte börja med ett nummer.
- Ett variabelt namn i PHP kan bara innehålla alfanumeriska tecken och understreck (A-z, 0-9 och _).
- Ett variabelt namn kan inte innehålla mellanslag.
- $x och $X är två olika variabler.
<?php $namn = "Håkan Brorson" ?>Case Sensitive
PHP är case sensitive som...
$casecode ='E1001';
print('caseCode :' . Casecode);
//Error- Casecode is not defined
Variabler och utskrifter
<?php
// Declaring variables
$txt = "Hello World!"; // String
$number = 10; // Interger
// Displaying variables value
echo $txt; // Output: Hello World!
echo $number; // Output: 10
?><?php
// Defining variables
$txt = "Hello World!";
$num = 123456789;
$colors = array("Red", "Green", "Blue");
// Displaying variables
echo $txt;
echo "<br>";
echo $num;
echo "<br>";
echo $colors[0];
?>3. PHP - Data Types
- bool
- int
- float
- sting
- String Functions
PHP bestämmer datatypen
-
För användaren verkar det som att PHP inte använder datatyper men skillanden mot de flesta andra språk är att PHP själv håller koll på vilken datatyp en viss variabel har.
-
Om vi jämför med Java, C++ eller C# så talar vi om vid skapandet att en specifik variabel har en specifik datatyp och sedan kan det inte ändras när programmet körs.
-
I PHP så har en viss variabel en bestämd datatyp vid ett enskilt tillfälle men den kan ändra datatyp lite senare. PHP-tolken tar själv hand om vilken datatyp som är lagrad i variabeln.
Datatyper
int
$count = 0;
$max = 1000;
$page_size = 10;float
$price = 10.25;
$tax = 0.08;string
$str = 'PHP scalar type';
$message = "PHP data types";boolean
$is_admin = true;
$is_user_logged_in = false;null
$email = null;
var_dump($email); // NULLDatatyper - String
-
Någonting som är väldigt användbart i PHP är den mängd av stringsfunktioner som finns tillhands.
$str = " Steve Jobs ";
$str = trim($str); // Lagras som "Steve Jobs"
echo strlen($str); // Skriver ut 10 ("Steve Jobs")
echo strtoupper($str); // Skriver ut "STEVE JOBS"
echo strtolower($str); // Skriver ut "steve jobs"
echo str_replace("Steve", "Kalle", $str); // Skriver ut "Kalle Jobs"För en komplett lista över användbara string functions,
4. PHP - Operators
<?php
$x = 10;
$y = 4;
echo($x + $y); // 0utputs: 14
echo($x - $y); // 0utputs: 6
echo($x * $y); // 0utputs: 40
echo($x / $y); // 0utputs: 2.5
echo($x % $y); // 0utputs: 2
?>Operators - Beräkning
| Operator | Description | Example | Result |
|---|---|---|---|
| + | Addition | $x + $y | Sum of $x and $y |
| - | Subtraction | $x - $y | Difference of $x and $y. |
| * | Multiplication | $x * $y | Product of $x and $y. |
| / | Division | $x / $y | Quotient of $x and $y |
| % | Modulus | $x % $y | Remainder of $x divided by $y |
Operators - Tilldela
| Operator | Description | Example | Is The Same As |
|---|---|---|---|
| = | Assign | $x = $y | $x = $y |
| += | Add and assign | $x += $y | $x = $x + $y |
| -= | Subtract and assign | $x -= $y | $x = $x - $y |
| *= | Multiply and assign | $x *= $y | $x = $x * $y |
| /= | Divide and assign quotient | $x /= $y | $x = $x / $y |
| %= | Divide and assign modulus | $x %= $y | $x = $x % $y |
<?php
$x = 10;
echo $x;
echo "<br>";
$x = 20;
$x += 30;
echo $x;
echo "<br>";
$x = 50;
$x -= 20;
echo $x;
echo "<br>";
$x = 5;
$x *= 25;
echo $x;
echo "<br>";
$x = 50;
$x /= 10;
echo $x;
echo "<br>";
$x = 100;
$x %= 15;
echo $x;
?>Operators - Jämförelse
| Operator | Name | Example | Result |
|---|---|---|---|
| == | Equal | $x == $y | True if $x is equal to $y |
| === | Identical | $x === $y | True if $x is equal to $y, and they are of the same type |
| != | Not equal | $x != $y | True if $x is not equal to $y |
| <> | Not equal | $x <> $y | True if $x is not equal to $y |
| !== | Not identical | $x !== $y | True if $x is not equal to $y, or they are not of the same type |
| < | Less than | $x < $y | True if $x is less than $y |
| > | Greater than | $x > $y | True if $x is greater than $y |
| >= | Greater than or equal to | $x >= $y | True if $x is greater than or equal to $y |
| <= | Less than or equal to | $x <= $y | True if $x is less than or equal to $y |
Incrementing and Decrementing
| Operator | Name | Effect |
|---|---|---|
| ++$x | Pre-increment | Increments $x by one, then returns $x |
| $x++ | Post-increment | Returns $x, then increments $x by one |
| --$x | Pre-decrement | Decrements $x by one, then returns $x |
| $x-- | Post-decrement | Returns $x, then decrements $x by one |
<?php
$x = 10;
echo ++$x; // Outputs: 11
echo $x; // Outputs: 11
$x = 10;
echo $x++; // Outputs: 10
echo $x; // Outputs: 11
$x = 10;
echo --$x; // Outputs: 9
echo $x; // Outputs: 9
$x = 10;
echo $x--; // Outputs: 10
echo $x; // Outputs: 9
?>Incrementing and Decrementing
Logical Operators
| Operator | Name | Example | Result |
|---|---|---|---|
| and | And | $x and $y | True if both $x and $y are true |
| or | Or | $x or $y | True if either $x or $y is true |
| && | And | $x && $y | True if both $x and $y are true |
| || | Or | $x || $y | True if either $$x or $y is true |
| ! | Not | !$x | True if $x is not true |
Logical Operators
<?php
$year = 2014;
// Leap years are divisible by 400 or by 4 but not 100
if(($year % 400 == 0) || (($year % 100 != 0) && ($year % 4 == 0))){
echo "$year is a leap year.";
} else{
echo "$year is not a leap year.";
}
?>String Operators
<?php
$x = "Hello";
$y = " World!";
echo $x . $y; // Outputs: Hello World!
$x .= $y;
echo $x; // Outputs: Hello World!
?>| Operator | Description | Example | Result |
|---|---|---|---|
| . | Concatenation | $str1 . $str2 | Concatenation of $str1 and $str2 |
| .= | Concatenation assignment | $str1 .= $str2 | Appends the $str2 to the $str1 |
5. PHP - If...Else
- if
- else
- elseif
If...Else
-
Liksom de flesta programmeringsspråk kan du också skriva kod som utför olika åtgärder baserat på resultaten av logiska eller jämförande testförhållanden.
-
Det betyder att du kan skapa testvillkor i form av uttryck som utvärderar till antingen sant eller falskt och baserat på dessa resultat.
-
The if statement
- The if...else statement
- The if...elseif....else statement
- The switch...case statement
if
-
if används endast för att exekvera ett block av kod om det angivna villkoret utvärderas till sant. Detta är de enklaste PHP: s villkorliga uttalanden och kan skrivas som:
if(condition){
// Code to be executed
}<?php
$d = date("D");
if($d == "Fri"){
echo "Have a nice weekend!";
}
?>Följande exempel kommer att mata ut "Have a nice weekend!" om dagens dag är fredag:
if...else
-
Du kan förbättra beslutsprocessen genom att ge ett alternativt val.
-
if...else tillåter dig att exekvera kod om det angivna villkoret utvärderas till sant eller om det utvärderas till falskt.
if(condition){
// Code to be executed if condition is true
} else{
// Code to be executed if condition is false
}
<?php
$d = date("D");
if($d == "Fri"){
echo "Have a nice weekend!";
} else{
echo "Have a nice day!";
}
?>if...elseif...else
-
if...elseif...else är speciellt uttalande som används för att kombinera flera if...else statements.
if(condition1){
// Code to be executed if condition1 is true
} elseif(condition2){
// Code to be executed if the condition1 is false and condition2 is true
} else{
// Code to be executed if both condition1 and condition2 are false
}<?php
$d = date("D");
if($d == "Fri"){
echo "Have a nice weekend!";
} elseif($d == "Sun"){
echo "Have a nice Sunday!";
} else{
echo "Have a nice day!";
}
?>The Ternary Operator
-
Den kortfattat sätt att skriva if...else.
-
Den representeras av ett frågetecknet (?)
-
Tar tre operander: villkor att kontrollera, resultat för sant och resultat för falskt.
<?php
if($age < 18){
echo 'Child'; // Display Child if age is less than 18
} else{
echo 'Adult'; // Display Adult if age is greater than or equal to 18
}
?><?php echo ($age < 18) ? 'Child' : 'Adult'; ?>6. PHP - Switch…Case
If...Else Vs Switch...Case
-
Switch-case är ett alternativ till if...elseif...else-satsen
-
Den gör nästan samma sak som if...else.
-
Switch-case tester en variabel mot en serie värden tills den hittar en matchning.
switch(n){
case label1:
// Code to be executed if n=label1
break;
case label2:
// Code to be executed if n=label2
break;
...
default:
// Code to be executed if n is different from all labels
}<?php
$today = date("D");
switch($today){
case "Mon":
echo "Today is Monday. Clean your house.";
break;
case "Tue":
echo "Today is Tuesday. Buy some food.";
break;
case "Wed":
echo "Today is Wednesday. Visit a doctor.";
break;
case "Thu":
echo "Today is Thursday. Repair your car.";
break;
case "Fri":
echo "Today is Friday. Party tonight.";
break;
case "Sat":
echo "Today is Saturday. Its movie time.";
break;
case "Sun":
echo "Today is Sunday. Do some rest.";
break;
default:
echo "No information available for that day.";
break;
}
?>7. PHP - Loop
- While
- do while
- for
- foreach
Loopar
-
Loopar används för att exekvera samma block av kod igen och igen tills ett visst villkor är uppfyllt.
-
Den grundläggande idén bakom en loop är att automatisera, repeterande uppgifterna inom ett program för att spara tid och ansträngning.
-
while - loopar genom ett block av kod tills villkoret är att utvärdera till sant.
-
do...While - koden exekveras en gång. Om villkoret är sant upprepas uttalandet så länge som angivet villkor är sant.
-
for - loopar genom ett block av kod tills räknaren når ett angivet antal.
-
foreach - loopar genom ett block av kod för varje element i en array.
-
Loop - While
-
Samtidigt uttalandet kommer att slingras genom ett block av kod tills villkoret i stund-satsen utvärderar till sant.
while(condition){
// Code to be executed
}<?php
$i = 1;
while($i <= 3){
$i++;
echo "The number is " . $i . "<br>";
}
?>Loop - Do...While
-
do-while är en variant av medan while. Men som exekveras i slutet av varje loop.
do{
// Code to be executed
}
while(condition);<?php
$i = 1;
do{
$i++;
echo "The number is " . $i . "<br>";
}
while($i <= 3);
?>Loop - For
-
for-loopen upprepar ett block av kod tills ett visst villkor är uppfyllt. Det brukar användas för att utföra ett block av kod för ett visst antal gånger.
for(initialization; condition; increment){
// Code to be executed
}<?php
for($i=1; $i<=3; $i++){
echo "The number is " . $i . "<br>";
}
?>Loop - Foreach på arrayer
-
Den vanligaste användningen av foreach loop är att loopa igenom objekten i en array.
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
echo "$x <br>";
}8. PHP - Array
- Indexering
- Associative Array
- Sortering
Array
-
Det finns några olika sätta att spara värden i en array i PHP.
-
De här påminner mycket om hur man gör i C#
// Define an indexed array
$colors = ['Shaolinmunk', 'Drunken Master', 'American Ninja',
'Det var en gång i Kina', 'Ersättningsmördare'];$movie[0] = 'Shaolinmunk';
$movie[1] = 'Drunken Master';
$movie[2] = 'American Ninja';
$movie[3] = 'Det var en gång i Kina';
$movie[4] = 'Ersättningsmördare';$movie = array(0 => "Shaolin Monk",
1 => "Drunken Master",
2 => "American Ninja",
3 => "Det var en gång i Kina",
4 =>"Ersättningsmördare" );Alternativ 3:
Alternativ 2:
Alternativ 1:
Associative Array
Associativ array skiljer sig från numerisk array i den meningen att associativ array använder beskrivande namn för id-nycklar.
$student_one = array("Matte"=>95,
"Fysik"=>90,
"Kemi"=>96,
"Engelska"=>93,
"Programmering"=>98); /* Looping through an array using foreach */
echo "Looping using foreach: \n";
foreach ($student_one as $subject => $marks){
echo "Student one got ".$marks." in ".$subject."\n";
} $subject = array_keys($student_one);
$marks = count($student_one);
for($i=0; $i < $marks; ++$i) {
echo $subject[$i] . ' ' . $student_one[$subject[$i]] . "\n";
}foreach:
for:
Array - Sorting
-
I PHP finns det ett antal inbyggda funktioner som är utformade speciellt för att sortera array-element.
-
Alfabetiskt eller numeriskt i stigande eller nedåtgående ordning.
-
sort() och rsort()
Sortera indexerade arrays -
asort() och arsort()
Sortera namngivna nycklar efter värde -
ksort() och krsort()
Sortera namngivna nycklar efter nyckel
-
9. PHP - Functions
Functions
En funktion skapa funktion och anropas på samma sätt som i C#
function welcome()
{
echo 'Welcome!';
}
welcome();Funktion kan ha noll eller flera parametrar.
function function_name(parameter1, parameter2, ...) {
}Anropa en funktion
Anropar funktionen med parametrar
function welcome_user($username)
{
echo 'Welcome ' . $username;
}
echo welcome_user('Admin');HTML-kod inuti funktionen
<?php function welcome_user($username) { ?>
<span>Welcome <?= $username ?></span>
<?php } ?> Funktion Global
Lokal
$message = 'Hello';
function say()
{
$message = 'Hi';
echo $message;
}
say();
echo $message; // HelloGlobal
$message = 'Hello';
echo $message; // Hello
function say()
{
global $message;
$message = 'Hi';
//echo $message;
}
say();
echo $message; // Hello10. Felhantering
Error
Här kommer några felmeddelanden
Parse error: syntax error in error.php on line 7Vanligtvis betyder det att ditt problem är på rad 7, men det är inte alltid fallet. Ibland är det föregående rad som har problem, så kom ihåg att titta runt den angivna linjen.
$id_news = 5$id_news = 5;Glömt Semikolon
echo "Bonjour !;echo "Bonjour !";Glömt dubbelfnuttar "
echo "J'ai " . $age " ans";echo "J'ai " . $age . " ans";Glömt punkt
Visa felmedelande
Skapa en fil som heter .user.ini
i filen lägger du display_errors = on
Filen ska ligga i root, brevid index.php
display_errors = on
Error
Här kommer några felmeddelanden
<?php
$users = [
[
'full_name' => 'Mickaël Andrieu',
'email' => 'mickael.andrieu@exemple.com'
'age' => 34,
],
[
'full_name' => 'Mathieu Nebra',
'email' => 'mathieu.nebra@exemple.com',
'age' => 34,
],
[
'full_name' => 'Laurène Castor',
'email' => 'laurene.castor@exemple.com',
'age' => 28,
],
];
$recipes = [
[
'title' => 'Cassoulet',
'recipe' => '',
'author' => 'mickael.andrieu@exemple.com',
'is_enabled' => true,
],
[
'title' => 'Couscous',
'recipe' => '',
'author' => 'mickael.andrieu@exemple.com',
'is_enabled' => false,
],
[
'title' => 'Escalope milanaise',
'recipe' => '',
'author' => 'mathieu.nebra@exemple.com',
'is_enabled' => true,
],
[
'title' => 'Salade Romaine',
'recipe' => '',
'author' => 'laurene.castor@exemple.com',
'is_enablad' => false,
],
];
function display_recipe(array $recipe) : string
{
$recipe_content = '';
if ($recipe['is_enabled']) {
$recipe_content = '<article>';
$recipe_content .= '<h3>' . $recipe['title'] . '</h3>';
$recipe_content .= '<div>' . $recipe['recipe'] . '</div>';
$recipe_content .= '<i>' . $recipe['author'] . '</i>';
$recipe_content .= '</article>';
}
return $recipe;
}
function display_author(string $authorEmail, array $users) : string
{
for ($i = 0; $i < count($users); $i++) {
$author = $users[$i];
if ($authorEmail === $author['email']) {
return $author['full_name'] . '(' . $author['age'] . ' ans)';
}
}
}
function get_recipes(array $recipes) : array
{
$valid_recipes = [];
foreach($recipes as $recipe) {
if ($recipe['is_enabled']) {
$valid_recipes[] = $recipe;
}
}
return $valid_recipes;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Les recettes mais page blanche :(</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet"
>
</head>
<body>
<div class="container">
<h1>Liste des recettes</h1>
<!-- Plus facile à lire -->
<?php foreach(get_recipes($recipes) as $recipe) : ?>
<article>
<h3><?php echo($recipe['title']); ?></h3>
<div><?php echo($recipe['recipe']); ?></div>
<i><?php echo(display_author($recipe['author'], $users)); ?></i>
</article>
<?php endforeach ?>
</div>
</body>
</html>
Nu ska vi testa en kod och försöka lösa problemen.
Klistar in koden
Error
Här kommer några felmeddelanden
<?php
// innan
[
'email' => 'mickael.andrieu@exemple.com' // fel
'age' => 34,
]
// efter
[
'email' => 'mickael.andrieu@exemple.com',
'age' => 34,
]Nu ska vi testa en kod och försöka lösa problemen
Parse error: syntax error, unexpected ''age'' (T_CONSTANT_ENCAPSED_STRING), expecting ']'
in exemple.php on line 7
Så det finns ett fel på rad 7, eller runt ...
Ett kommatecken saknas på rad 6
Error
Här kommer några felmeddelanden
<?php
// innan
[
'title' => 'Salade Romaine',
'recipe' => '',
'author' => 'laurene.castor@exemple.com',
'is_enablad' => false, // fel
]
// efter
[
'title' => 'Salade Romaine',
'recipe' => '',
'author' => 'laurene.castor@exemple.com',
'is_enabled' => false,
]Notice: Undefined index: is_enabled in exemple.php on line 78
Det var ett mycket litet stavfel:
is_enabled
is_enablad
Error
Här kommer några felmeddelanden
<?php
function display_author(string $authorEmail, array $users) : string
{
for ($i = 0; $i < count($users); $i++) {
$author = $users[$i];
if ($authorEmail === $author['email']) {
return $author['full_name'] . '(' . $author['age'] . ' ans)';
}
}
}Fatal error: Uncaught TypeError: Return value of display_author() must be of the type string,
none returned in exemple.php:71
Stack trace: #0 exemple.php(107): display_author() #1 {main} thrown in exemple.php on line 71Det var ett mycket litet stavfel:
is_enabled
is_enablad
11. PHP - Math Operations
Math
PHP har flera inbyggda funktioner som hjälper dig att utföra allt från enkla tillägg eller subtraktion till avancerade beräkningar.
<?php
echo 5 + 4 * 10; // 0utputs: 45
echo (5 + 4) * 10; // 0utputs: 90
echo 5 + 4 * 10 / 2; // 0utputs: 25
echo 8 * 10 / 4 - 2; // 0utputs: 18
echo 8 * 10 / (4 - 2); // 0utputs: 40
echo 8 + 10 / 4 - 2; // 0utputs: 8.5
echo (8 + 10) / (4 - 2); // 0utputs: 9
?>Avrunda
Funktionen ceil() kan användas för att runda ett värde upp till nästa högsta heltal
Medan funktionen floor() användas för att runda ett värde ner till nästa lägsta heltal.
<?php
// Round fractions up
echo ceil(4.2); // 0utputs: 5
echo ceil(9.99); // 0utputs: 10
echo ceil(-5.18); // 0utputs: -5
// Round fractions down
echo floor(4.2); // 0utputs: 4
echo floor(9.99); // 0utputs: 9
echo floor(-5.18); // 0utputs: -6
?>Kvot
Du kan använda sqrt() -funktionen för att hitta kvadratroten av ett positivt tal.
Den returnerar ett specialvärde NAN för negativa tal.
<?php
echo sqrt(9); // 0utputs: 3
echo sqrt(25); // 0utputs: 5
echo sqrt(10); // 0utputs: 3.1622776601684
echo sqrt(-16); // 0utputs: NAN
?>Random
Rand () -funktionen kan användas för att generera ett slumptal.
Du kan valfritt ange ett intervall genom att skicka min och maxi.
Om du inte ange något tal, så slumpas det ett tal mellan noll och ett tiosiffrigt tal.
<?php
// Generate some random numbers
echo rand() . "<br>";
echo rand() . "<br>";
// Generate some random numbers between 1 and 10 (inclusive)
echo rand(1, 10) . "<br>";
echo rand(1, 10) . "<br>";
?>12. PHP - Date & Time
date()
time()
Tid
PHP lagrar datum och tider i ett format som heter UNIX Timestamp, vilket mäter tiden i antal sekunder sedan Unix-epoken började
den 1 januari 1970 00:00:00
Det är lättar att för php att arbeta i sekunder
echo time(); // 1722253446echo date("Y-m-d H:i:s"); // 2024-07-29 11:46:52Skriva ut dagens datum och tid
echo date("d/m/Y") . "<br>";
echo date("d-m-Y") . "<br>";
echo date("d.m.Y");echo date("h:i:s") . "<br>";
echo date("F d, Y h:i:s A") . "<br>";
echo date("h:i a");13. PHP -
Include & Require files
Inkludera en PHP-fil
include() och require() statement tillåter dig att inkludera koden en PHP-fil från en annan PHP-fil.
Inkluderar en fil ger samma resultat som att kopiera koden.
Lagra kod i en separat PHP-fil och inkludera den där du vill använda koden med include() eller require() istället för att skriva koden flera gånger.
Ett typiskt exempel är bland sidhuvudet, sidfot och menyfil.
include("path/to/filename"); -Or- include "path/to/filename";
require("path/to/filename"); -Or- require "path/to/filename";Inkludera en PHP-fil
Följande exempel visar hur du lägger till de gemensamma rubrikerna, sidfot och menykoder som lagras i respektive "header.php", "footer.php" och "menu.php" -filerna, inom alla sidor på din webbplats.
Med hjälp av denna teknik kan du uppdatera alla sidor på webbplatsen samtidigt genom att ändra ändringarna i en fil.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Tutorial Republic</title>
</head>
<body>
<?php include "header.php"; ?>
<?php include "menu.php"; ?>
<h1>Welcome to Our Website!</h1>
<p>Here you will find lots of useful information.</p>
<?php include "footer.php"; ?>
</body>
</html>Include vs. Require
Om man får ett PHP-varning så:
include() generera en PHP-varning men tillåter att script fortsätter.
require() generera en PHP-varning men tillåter stoppar script att fortsätta
Tips: Det rekommenderas att använda require() om du inkluderar funktioner, konfigurationsvariabler eller databaskonfigurationsfilen.
Include_once vs. Require_once
Om du av misstag inkluderar samma fil mer än en gång i din kod med hjälp av include() eller require() kan det orsaka konflikter.
För att förhindra denna kan man använda include_once och require_once.
Dom beter sig på samma sätt som att include() och require() men med ett undantag.
include_once() och require_once() kommer att inkludera filen så många gånger du vill.
Include_once & Require_once
<?php
// Including file
require "my_functions.php";
// Calling the function
multiplySelf(2); // Output: 4
echo "<br>";
// Including file once again
require "my_functions.php";
// Calling the function
multiplySelf(5); // Doesn't execute
?><?php
function multiplySelf($var){
$var *= $var; // multiply variable by itself
echo $var;
}
?>my_functions.php
require.php
<?php
// Including file
require_once "my_functions.php";
// Calling the function
multiplySelf(2); // Output: 4
echo "<br>";
// Including file once again
require_once "my_functions.php";
// Calling the function
multiplySelf(5); // Output: 25
?>require_once.php
14. PHP - isset()
isset()
isset() är en funktion som kolla om en variabel har ett värde.
Funktionen retunerar true om en variabeln har ett värde,
annars returnerar den false
Man får ett felmeddelande om en variabeln inte har ett värde.
Warning: Undefined variable $var1 in index.php on line 5Ett sätt att lösa felmeddelandet:
if (isset($b)) {
echo "Variable 'b' is set.";
}15. PHP - Cookies & Session

Vad är Cookie?
Cookies är små textfiler som lagras på användarens dator av webbläsaren. De används för att spara information som kan återanvändas vid senare besök.
Vanligtvis så används cookies för att förbättra användarupplevelsen.
Till exempel användarnamn, lösenord, språkinställningar, temaval, kundvagn i e-handel.
Varje gång webbläsaren begär en sida till servern skickas all data i cookien automatiskt till servern inom begäran.
Varför använda Cookie?
Inloggning och autentisering: Cookies kan hålla användare inloggade.
Inställningar: Cookies sparar användarinställningar som språkval eller tema.
Användarbeteende: Cookies spårar hur användare interagerar med webbplatsen för att förbättra användarupplevelsen och för marknadsföringsändamål.
Cookie
name (string, obligatorisk): Namnet på cookien. Exempel: "user"
value (string, valfri): Värdet av cookien. Exempel: "John Doe"
expire (int, valfri): Utgångstiden för cookien, angiven som en Unix-tidsstämpel (antal sekunder sedan 1 januari 1970).
setcookie(name, value, expire, path, domain, secure, httponly);Cookie - setcookie()
// Setting a cookie
setcookie("username", "John Carter", time() + 86400*30 );Skapa en cookie använder man setcookie() -funktionen.
Skapa en cookie med namnet username och tilldela värdet John Carter till den.
Sätt att kakan ska löpa ut efter 30 dagar (86400*30).
Cookie - setcookie()
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
// 86400 = 1 day
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>För att skriva ut så använder vi $_COOKIE
Funktionen setcookie() bör sättas före <html>-taggen.
Cookie - ändra värde
<?php
$cookie_name = "user";
$cookie_value = "Alex Porter";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>För att ändra värdet i en cookie,
görs på samma sätt som när man skapar en Cookie.
Cookie - Delete
<?php
// set the expiration date to one hour ago
setcookie("user", "", time() - 3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' is deleted.";
?>
</body>
</html>För att radera en cookie, använd setcookie() funktionen fast med ett utgångsdatum i det förflutna:
Cookie - aktiverad
<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>
<?php
if(count($_COOKIE) > 0) {
echo "Cookies are enabled.";
} else {
echo "Cookies are disabled.";
}
?>
</body>
</html>Kolla om cookie fortfarande är aktiv.
Använda funktionen count();
Session - Vad är?
Även om du kan lagra data med hjälp av cookies men det har vissa säkerhetsproblem.
Eftersom cookies lagras på användarens dator är det möjligt för en angripare att enkelt ändra ett cookieinnehåll.
Använder vi istället sessionen.
PHP-session lagrar data på servern.
Här får användaren istället ett unikt id - session identifier eller SID.
Session-ID används för att länka varje användare med sin egen information på servern som e-post, inlägg etc.
Session livslängd är som standard 1440 sekunder
Till exempel: En användare loggar in, bläddrar igenom din applikation eller webbplats, i timmar, i dagar. Inga problem.
Session - starta
<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Set session variables
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>
</body>
</html>En session startas med session_start() funktionen.
session_start() måste alltid ligga allra först i HTML-dokumentet,
före alla HTML-taggar
Session - skriva ut variabler
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
?>
</body>
</html>session_start() måste alltid ligga allra först i HTML-dokumentet,
före alla HTML-taggar
Session - ändar en variabel
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// to change a session variable, just overwrite it
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>
</body>
</html>För att ändra en sessionsvariabel, skriv bara över den:
Session - destroy
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// remove all session variables
session_unset();
// destroy the session
session_destroy();
?>
</body>
</html>För att ta bort alla globala sessionsvariabler och förstöra sessionen, använd session_unset() och session_destroy():
Sessions - Tillägg
Det finns ett tillägg i Chrome som rensar Sessions

16. PHP - GET & POST
Metoder att skicka information
Metoder för att skicka information till server
En webbläsare kommunicerar med servern genom att använda en av de två metoderna för HTTP (Hypertext Transfer Protocol) - GET och POST.
Båda metoderna överför informationen olika och har olika fördelar och nackdelar.
Get - fördelar och nackdelar
Data som skickas av GET-metoden visas i webbadressen, vilket gör det möjligt att gör egna ändringar i webbadressen.
GET-metoden är inte lämplig för att överföra känslig information, t.ex. användarnamnet och lösenordet.
Webbadressens längd är begränsad.
PHP ger superglobalvariabeln $_GET tillgång till all information som skickas antingen via webbadressen eller skickas via en HTML-blankett med metoden="get".
GET-metoden skickas data i URL-parametrar som strängar
namn=värden
namn och värden, separerade av "&".
http://www.example.com/action.php?name=john&age=24Get - Exemple
Det finns två sätta att skicka vidare informationen gäller både
Gäller för både GET och POST
Skicka till en egen sida:
action="sida2.php"
Skickar till samma sida:
action="<?php echo $_SERVER["PHP_SELF"];?>"
Get - Exemple
<!DOCTYPE html>
<html lang="en">
<head>
<title>Example of PHP GET method</title>
</head>
<body>
<?php
if(isset($_GET["name"])){
echo "<p>Hi, " . $_GET["name"] . "</p>";
}
?>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"];?>">
<label for="inputName">Name:</label>
<input type="text" name="name" id="inputName">
<input type="submit" value="Submit">
</form>
</body>
</html>Skickar GET till samma sida:
action="<?php echo $_SERVER["PHP_SELF"];?>"
POST
POST-metoden överför information via HTTP-rubriker.
Det är säkrare än GET, eftersom inmatad information aldrig syns i URL-strängen eller i serverns loggar.
Det finns en mycket större gräns för hur många data som kan skickas.
Som $_GET, ger PHP en annan superglobal variabel $_POST för att få tillgång till all information som skickas via postmetod eller skickad via en HTML-blankett med metoden = "post".
POST
<!DOCTYPE html>
<html lang="en">
<head>
<title>Example of PHP POST method</title>
</head>
<body>
<?php
if(isset($_POST["name"])){
echo "<p>Hi, " . $_POST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
<label for="inputName">Name:</label>
<input type="text" name="name" id="inputName">
<input type="submit" value="Submit">
</form>
</body>
</html>$_REQUEST
Det finns en annan superglobal variabel $_REQUEST
Den innehåller värdena för både $_GET och $_POST-variablerna, liksom värdena på $_COOKIE superglobal-variabeln.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Example of PHP $_REQUEST variable</title>
</head>
<body>
<?php
if(isset($_REQUEST["name"])){
echo "<p>Hi, " . $_REQUEST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
<label type="inputName">Name:</label>
<input type="text" name="name" id="inputName">
<input type="submit" value="Submit">
</form>
</body>
</html>17. PHP - Email
mail(to, subject, message, headers, parameters);Man använda PHP: s inbyggda e-post() -funktion för att skapa och skicka e-postmeddelanden till en eller flera mottagare dynamiskt från din PHP-applikation antingen i en vanlig textform eller formaterad HTML.
Syntaxen för denna funktion:
| Parameter | Description |
|---|---|
| Obligatorisk | |
| to | Email adress |
| subject | Ämnet för e-postmeddelandet som ska skickas. |
| message | Definierar meddelandet som ska skickas. Varje rad ska separeras med en radmatning-LF (\ n). |
| Valfritt | |
|---|---|
| headers | Detta används vanligtvis för att lägga till extra rubriker som "Från", "Cc", "Bcc". |
| parameters | Används för att skicka ytterligare parametrar. |
Email - exempel
<?php
$to = 'maryjane@email.com';
$subject = 'Marriage Proposal';
$message = 'Hi Jane, will you marry me?';
$from = 'peterparker@email.com';
// Sending email
if(mail($to, $subject, $message)){
echo 'Your mail has been sent successfully.';
} else{
echo 'Unable to send email. Please try again.';
}
?>Email - Skicka HTML-format
<?php
$to = 'maryjane@email.com';
$subject = 'Marriage Proposal';
$from = 'peterparker@email.com';
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Create email headers
$headers .= 'From: '.$from."\r\n".
'Reply-To: '.$from."\r\n" .
'X-Mailer: PHP/' . phpversion();
// Compose a simple HTML email message
$message = '<html><body>';
$message .= '<h1 style="color:#f40;">Hi Jane!</h1>';
$message .= '<p style="color:#080;font-size:18px;">Will you marry me?</p>';
$message .= '</body></html>';
// Sending email
if(mail($to, $subject, $message, $headers)){
echo 'Your mail has been sent successfully.';
} else{
echo 'Unable to send email. Please try again.';
}
?>18. PHP - Form
Form
Vi börjar med att skapa ett enkelt kontaktformulär
Här ska man kunna gör det möjligt för användare att ange sin kommentar och feedback och sedan visa den till webbläsaren med PHP.
Skapa en ny PHP-fil "contact-form.php"
Skriv nu följande kod och spara den här filen.
Koden på nästa slide
Form
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contact Form</title>
</head>
<body>
<h2>Contact Us</h2>
<p>Please fill in this form and send us.</p>
<form action="process-form.php" method="post">
<p>
<label for="inputName">Name:<sup>*</sup></label>
<input type="text" name="name" id="inputName">
</p>
<p>
<label for="inputEmail">Email:<sup>*</sup></label>
<input type="text" name="email" id="inputEmail">
</p>
<p>
<label for="inputSubject">Subject:</label>
<input type="text" name="subject" id="inputSubject">
</p>
<p>
<label for="inputComment">Message:<sup>*</sup></label>
<textarea name="message" id="inputComment" rows="5" cols="30"></textarea>
</p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
</body>
</html>Form
Observera att det finns två attribut i den taggen <form>
Action - här skriver du var du ska skicka din info.
Method - vilken metod du ska skicka formulärdata via POST eller GET.
Nu skapar vi "process-form.php" som ska ta emot formens information.
Form
När en användare skickar ovanstående kontaktformulär genom att klicka på skicka-knappen, skickas formdata till filen "process-form.php" på servern för bearbetning.
Den fångar helt enkelt in den information som skickas av användaren och visar den till webbläsaren.
<ol>
<li><em>Name:</em> <?php echo $_POST["name"]?></li>
<li><em>Email:</em> <?php echo $_POST["email"]?></li>
<li><em>Subject:</em> <?php echo $_POST["subject"]?></li>
<li><em>Message:</em> <?php echo $_POST["message"]?></li>
</ol>$ _GET - skickas via URL
$ _POST (data kommer inte att synas i URL: n).
$ _REQUEST Funkar som båda get och post
19. PHP -
Databas & MySQL


Databas
En databas är en samling information som är organiserad på ett sådant sätt att det är lätt att söka efter och hämta enskilda bitar information, samt ofta även att ändra informationen.
Databaser nås via ett s.k. gränssnitt.
När datorer började användas inom
affärsvärlden på 1960-talet blev det viktigt att kunna spara data på ett säkert sätt.
De första databaserna lagringsmedia var på magnetband.

Vad är MariaDB?
- är ett databassystem som används på webben
- är ett databassystem som körs på en server
- är idealiskt för både små och stora applikationer
- är mycket snabb, pålitlig och enkel att använda
- använder standard SQL
- kompilerar på ett antal plattformar
- är gratis att ladda ner och använda
- Open Source
Data i en MariaDB-databas lagras i tabeller. En tabell är en samling relaterad data och den består av kolumner och rader.

MariaDB
MariaDB skapades som en fri (open source) fortsättning av de ursprungliga utvecklarna, för att garantera öppenhet efter att Oracle tog över.

MySQL
MySQL är en databashanterare.
Den använder sig av frågespråket SQL.
MySQL är fri programvara, licensierad under GNU General Public License.
Programmet skrevs och underhölls före 2008 av det svenska företaget MySQL AB i Uppsala.
2008 köptes MySQL AB av Sun Microsystems för en miljard dollar och den 27 januari 2010 köptes Sun upp av Oracle för 8,5 miljarder amerikanska dollar.
20. SQL

Vad är SQL
SQL är ett standardspråk för att komma åt och manipulera databaser.
- SQL står för Structured Query Language
- SQL låter dig komma åt och manipulera databaser
- SQL blev en standard 1986
- köra frågor mot en databas
- hämta data från en databas
- infoga poster i en databas
- uppdatera poster i en databas
- ta bort poster från en databas
- skapa nya databaser
- skapa nya tabeller i en databas
- skapa lagrade procedurer
- skapa vyer i en databas
Vad kan SQL göra?
phpMyAdmin
phpMyAdmin är ett webbaserat verktyg för att hantera MySQL-databaser
Det ger en användarvänlig gränssnitt för att interagera med databaser, vilket gör det lättare att utföra uppgifter som att skapa, ändra och ta bort databaser och tabeller, samt att utföra SQL-frågor utan att behöva använda kommandoraden.


21. SQL - Fylla databasen

SQL - Lägga till tabeller
Innan vi börjar så måste vi ha några tabeller i våran databasen så att vi kan hämta info ifrån.
Vi kommer att kopiera in SQL-koden via PHPMyAdmin.
Vi ska skapa 8 st tabeller
- Categories
- Customers
- Products
- Orders
- Orderdetails
- Emplyees
- Shippers
- Suppliers
SQL - Tabell - Categories
CREATE TABLE Categories (
CategoryId int NOT NULL PRIMARY KEY AUTO_INCREMENT,
CategoryName VARCHAR(255),
Description VARCHAR(255)
);INSERT INTO Categories (CategoryName, Description)
VALUES
('Beverages', 'Soft drinks, coffees, teas, beers, and ales'),
('Condiments', 'Sweet and savory sauces, relishes, spreads, and seasonings'),
('Confections', 'Desserts, candies, and sweet breads'),
('Dairy Products', 'Cheeses'),
('Grains/Cereals', 'Breads, crackers, pasta, and cereal'),
('Meat/Poultry', 'Prepared meats'),
('Produce', 'Dried fruit and bean curd'),
('Seafood', 'Seaweed and fish');Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - Customers
CREATE TABLE Customers (
CustomerId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
CustomerName VARCHAR(255),
ContactName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
PostalCode VARCHAR(255),
Country VARCHAR(255)
);INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES
('Alfreds Futterkiste', 'Maria Anders', 'Obere Str. 57', 'Berlin', '12209', 'Germany'),
('Ana Trujillo Emparedados y helados', 'Ana Trujillo', 'Avda. de la Constitucion 2222', 'Mexico D.F.', '05021', 'Mexico'),
('Antonio Moreno Taquera', 'Antonio Moreno', 'Mataderos 2312', 'Mexico D.F.', '05023', 'Mexico'),
('Around the Horn', 'Thomas Hardy', '120 Hanover Sq.', 'London', 'WA1 1DP', 'UK'),
('Berglunds snabbkoep', 'Christina Berglund', 'Berguvsvegen 8', 'Lulea', 'S-958 22', 'Sweden'),
('Blauer See Delikatessen', 'Hanna Moos', 'Forsterstr. 57', 'Mannheim', '68306', 'Germany'),
('Blondel pere et fils', 'Frederique Citeaux', '24, place Kleber', 'Strasbourg', '67000', 'France'),
('Bolido Comidas preparadas', 'Martin Sommer', 'C/ Araquil, 67', 'Madrid', '28023', 'Spain'),
('Bon app', 'Laurence Lebihans', '12, rue des Bouchers', 'Marseille', '13008', 'France'),
('Bottom-Dollar Marketse', 'Elizabeth Lincoln', '23 Tsawassen Blvd.', 'Tsawassen', 'T2F 8M4', 'Canada'),
('Bs Beverages', 'Victoria Ashworth', 'Fauntleroy Circus', 'London', 'EC2 5NT', 'UK'),
('Cactus Comidas para llevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', '1010', 'Argentina'),
('Centro comercial Moctezuma', 'Francisco Chang', 'Sierras de Granada 9993', 'Mexico D.F.', '05022', 'Mexico'),
('Chop-suey Chinese', 'Yang Wang', 'Hauptstr. 29', 'Bern', '3012', 'Switzerland'),
('Comercio Mineiro', 'Pedro Afonso', 'Av. dos Lusiadas, 23', 'Sao Paulo', '05432-043', 'Brazil'),
('Consolidated Holdings', 'Elizabeth Brown', 'Berkeley Gardens 12 Brewery ', 'London', 'WX1 6LT', 'UK'),
('Drachenblut Delikatessend', 'Sven Ottlieb', 'Walserweg 21', 'Aachen', '52066', 'Germany'),
('Du monde entier', 'Janine Labrune', '67, rue des Cinquante Otages', 'Nantes', '44000', 'France'),
('Eastern Connection', 'Ann Devon', '35 King George', 'London', 'WX3 6FW', 'UK'),
('Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', '8010', 'Austria'),
('Familia Arquibaldo', 'Aria Cruz', 'Rua Oros, 92', 'Sao Paulo', '05442-030', 'Brazil'),
('FISSA Fabrica Inter. Salchichas S.A.', 'Diego Roel', 'C/ Moralzarzal, 86', 'Madrid', '28034', 'Spain'),
('Folies gourmandes', 'Martine Rance', '184, chaussee de Tournai', 'Lille', '59000', 'France'),
('Folk och fe HB', 'Maria Larsson', 'Akergatan 24', 'Brecke', 'S-844 67', 'Sweden'),
('Frankenversand', 'Peter Franken', 'Berliner Platz 43', 'Munchen', '80805', 'Germany'),
('France restauration', 'Carine Schmitt', '54, rue Royale', 'Nantes', '44000', 'France'),
('Franchi S.p.A.', 'Paolo Accorti', 'Via Monte Bianco 34', 'Torino', '10100', 'Italy'),
('Furia Bacalhau e Frutos do Mar', 'Lino Rodriguez ', 'Jardim das rosas n. 32', 'Lisboa', '1675', 'Portugal'),
('Galeria del gastronomo', 'Eduardo Saavedra', 'Rambla de Cataluna, 23', 'Barcelona', '08022', 'Spain'),
('Godos Cocina Tipica', 'Jose Pedro Freyre', 'C/ Romero, 33', 'Sevilla', '41101', 'Spain'),
('Gourmet Lanchonetes', 'Andre Fonseca', 'Av. Brasil, 442', 'Campinas', '04876-786', 'Brazil'),
('Great Lakes Food Market', 'Howard Snyder', '2732 Baker Blvd.', 'Eugene', '97403', 'USA'),
('GROSELLA-Restaurante', 'Manuel Pereira', '5th Ave. Los Palos Grandes', 'Caracas', '1081', 'Venezuela'),
('Hanari Carnes', 'Mario Pontes', 'Rua do Paco, 67', 'Rio de Janeiro', '05454-876', 'Brazil'),
('HILARION-Abastos', 'Carlos Hernandez', 'Carrera 22 con Ave. Carlos Soublette #8-35', 'San Cristobal', '5022', 'Venezuela'),
('Hungry Coyote Import Store', 'Yoshi Latimer', 'City Center Plaza 516 Main St.', 'Elgin', '97827', 'USA'),
('Hungry Owl All-Night Grocers', 'Patricia McKenna', '8 Johnstown Road', 'Cork', '', 'Ireland'),
('Island Trading', 'Helen Bennett', 'Garden House Crowther Way', 'Cowes', 'PO31 7PJ', 'UK'),
('Koniglich Essen', 'Philip Cramer', 'Maubelstr. 90', 'Brandenburg', '14776', 'Germany'),
('La corne d abondance', 'Daniel Tonini', '67, avenue de l Europe', 'Versailles', '78000', 'France'),
('La maison d Asie', 'Annette Roulet', '1 rue Alsace-Lorraine', 'Toulouse', '31000', 'France'),
('Laughing Bacchus Wine Cellars', 'Yoshi Tannamuri', '1900 Oak St.', 'Vancouver', 'V3F 2K1', 'Canada'),
('Lazy K Kountry Store', 'John Steel', '12 Orchestra Terrace', 'Walla Walla', '99362', 'USA'),
('Lehmanns Marktstand', 'Renate Messner', 'Magazinweg 7', 'Frankfurt a.M. ', '60528', 'Germany'),
('Lets Stop N Shop', 'Jaime Yorres', '87 Polk St. Suite 5', 'San Francisco', '94117', 'USA'),
('LILA-Supermercado', 'Carlos Gonzalez', 'Carrera 52 con Ave. Bolivar #65-98 Llano Largo', 'Barquisimeto', '3508', 'Venezuela'),
('LINO-Delicateses', 'Felipe Izquierdo', 'Ave. 5 de Mayo Porlamar', 'I. de Margarita', '4980', 'Venezuela'),
('Lonesome Pine Restaurant', 'Fran Wilson', '89 Chiaroscuro Rd.', 'Portland', '97219', 'USA'),
('Magazzini Alimentari Riuniti', 'Giovanni Rovelli', 'Via Ludovico il Moro 22', 'Bergamo', '24100', 'Italy'),
('Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', 'B-1180', 'Belgium'),
('Mere Paillarde', 'Jean Fresniere', '43 rue St. Laurent', 'Montreal', 'H1J 1C3', 'Canada'),
('Morgenstern Gesundkost', 'Alexander Feuer', 'Heerstr. 22', 'Leipzig', '04179', 'Germany'),
('North/South', 'Simon Crowther', 'South House 300 Queensbridge', 'London', 'SW7 1RZ', 'UK'),
('Oceano Atlantico Ltda.', 'Yvonne Moncada', 'Ing. Gustavo Moncada 8585 Piso 20-A', 'Buenos Aires', '1010', 'Argentina'),
('Old World Delicatessen', 'Rene Phillips', '2743 Bering St.', 'Anchorage', '99508', 'USA'),
('Ottilies Keseladen', 'Henriette Pfalzheim', 'Mehrheimerstr. 369', 'Koln', '50739', 'Germany'),
('Paris specialites', 'Marie Bertrand', '265, boulevard Charonne', 'Paris', '75012', 'France'),
('Pericles Comidas clasicas', 'Guillermo Fernandez', 'Calle Dr. Jorge Cash 321', 'Mexico D.F.', '05033', 'Mexico'),
('Piccolo und mehr', 'Georg Pipps', 'Geislweg 14', 'Salzburg', '5020', 'Austria'),
('Princesa Isabel Vinhoss', 'Isabel de Castro', 'Estrada da saude n. 58', 'Lisboa', '1756', 'Portugal'),
('Que Delicia', 'Bernardo Batista', 'Rua da Panificadora, 12', 'Rio de Janeiro', '02389-673', 'Brazil'),
('Queen Cozinha', 'Lucia Carvalho', 'Alameda dos Canarios, 891', 'Sao Paulo', '05487-020', 'Brazil'),
('QUICK-Stop', 'Horst Kloss', 'Taucherstrasse 10', 'Cunewalde', '01307', 'Germany'),
('Rancho grande', 'Sergio Gutiarrez', 'Av. del Libertador 900', 'Buenos Aires', '1010', 'Argentina'),
('Rattlesnake Canyon Grocery', 'Paula Wilson', '2817 Milton Dr.', 'Albuquerque', '87110', 'USA'),
('Reggiani Caseifici', 'Maurizio Moroni', 'Strada Provinciale 124', 'Reggio Emilia', '42100', 'Italy'),
('Ricardo Adocicados', 'Janete Limeira', 'Av. Copacabana, 267', 'Rio de Janeiro', '02389-890', 'Brazil'),
('Richter Supermarkt', 'Michael Holz', 'Grenzacherweg 237', 'Genève', '1203', 'Switzerland'),
('Romero y tomillo', 'Alejandra Camino', 'Gran Via, 1', 'Madrid', '28001', 'Spain'),
('Santa Gourmet', 'Jonas Bergulfsen', 'Erling Skakkes gate 78', 'Stavern', '4110', 'Norway'),
('Save-a-lot Markets', 'Jose Pavarotti', '187 Suffolk Ln.', 'Boise', '83720', 'USA'),
('Seven Seas Imports', 'Hari Kumar', '90 Wadhurst Rd.', 'London', 'OX15 4NB', 'UK'),
('Simons bistro', 'Jytte Petersen', 'Vinbeltet 34', 'Kobenhavn', '1734', 'Denmark'),
('Specialites du monde', 'Dominique Perrier', '25, rue Lauriston', 'Paris', '75016', 'France'),
('Split Rail Beer & Ale', 'Art Braunschweiger', 'P.O. Box 555', 'Lander', '82520', 'USA'),
('Supremes delices', 'Pascale Cartrain', 'Boulevard Tirou, 255', 'Charleroi', 'B-6000', 'Belgium'),
('The Big Cheese', 'Liz Nixon', '89 Jefferson Way Suite 2', 'Portland', '97201', 'USA'),
('The Cracker Box', 'Liu Wong', '55 Grizzly Peak Rd.', 'Butte', '59801', 'USA'),
('Toms Spezialiteten', 'Karin Josephs', 'Luisenstr. 48', 'Manster', '44087', 'Germany'),
('Tortuga Restaurante', 'Miguel Angel Paolino', 'Avda. Azteca 123', 'Mexico D.F.', '05033', 'Mexico'),
('Tradicao Hipermercados', 'Anabela Domingues', 'Av. Ines de Castro, 414', 'Sao Paulo', '05634-030', 'Brazil'),
('Trails Head Gourmet Provisioners', 'Helvetius Nagy', '722 DaVinci Blvd.', 'Kirkland', '98034', 'USA'),
('Vaffeljernet', 'Palle Ibsen', 'Smagsloget 45', 'Arhus', '8200', 'Denmark'),
('Victuailles en stock', 'Mary Saveley', '2, rue du Commerce', 'Lyon', '69004', 'France'),
('Vins et alcools Chevalier', 'Paul Henriot', '59 rue de l Abbaye', 'Reims', '51100', 'France'),
('Die Wandernde Kuh', 'Rita Moller', 'Adenauerallee 900', 'Stuttgart', '70563', 'Germany'),
('Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', '90110', 'Finland'),
('Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', '08737-363', 'Brazil'),
('White Clover Markets', 'Karl Jablonski', '305 - 14th Ave. S. Suite 3B', 'Seattle', '98128', 'USA'),
('Wilman Kala', 'Matti Karttunen', 'Keskuskatu 45', 'Helsinki', '21240', 'Finland'),
('Wolski', 'Zbyszek', 'ul. Filtrowa 68', 'Walla', '01-012', 'Poland');Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - Products
CREATE TABLE Products (
ProductId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
ProductName VARCHAR(255),
SupplierID INT,
CategoryId INT,
Unit VARCHAR(255),
Price DOUBLE
);INSERT INTO Products (ProductName, SupplierID, CategoryId, Unit, Price)
VALUES
('Chais', 1, 1, '10 boxes x 20 bags', 18),
('Chang', 1, 1, '24 - 12 oz bottles', 19),
('Aniseed Syrup', 1, 2, '12 - 550 ml bottles', 10),
('Chef Anton\'s Cajun Seasoning', 2, 2, '48 - 6 oz jars', 22),
('Chef Anton\'s Gumbo Mix', 2, 2, '36 boxes', 21.35),
('Grandma\'s Boysenberry Spread', 3, 2, '12 - 8 oz jars', 25),
('Uncle Bob\'s Organic Dried Pears', 3, 7, '12 - 1 lb pkgs.', 30),
('Northwoods Cranberry Sauce', 3, 2, '12 - 12 oz jars', 40),
('Mishi Kobe Niku', 4, 6, '18 - 500 g pkgs.', 97),
('Ikura', 4, 8, '12 - 200 ml jars', 31),
('Queso Cabrales', 5, 4, '1 kg pkg.', 21),
('Queso Manchego La Pastora', 5, 4, '10 - 500 g pkgs.', 38),
('Konbu', 6, 8, '2 kg box', 6),
('Tofu', 6, 7, '40 - 100 g pkgs.', 23.25),
('Genen Shouyu', 6, 2, '24 - 250 ml bottles', 15.5),
('Pavlova', 7, 3, '32 - 500 g boxes', 17.45),
('Alice Mutton', 7, 6, '20 - 1 kg tins', 39),
('Carnarvon Tigers', 7, 8, '16 kg pkg.', 62.5),
('Teatime Chocolate Biscuits', 8, 3, '10 boxes x 12 pieces', 9.2),
('Sir Rodney\'s Marmalade', 8, 3, '30 gift boxes', 81),
('Sir Rodney\'s Scones', 8, 3, '24 pkgs. x 4 pieces', 10),
('Gustaf\'s Knäckebröd', 9, 5, '24 - 500 g pkgs.', 21),
('Tunnbröd', 9, 5, '12 - 250 g pkgs.', 9),
('Guaraná Fantástica', 10, 1, '12 - 355 ml cans', 4.5),
('NuNuCa Nuß-Nougat-Creme', 11, 3, '20 - 450 g glasses', 14),
('Gumbär Gummibärchen', 11, 3, '100 - 250 g bags', 31.23),
('Schoggi Schokolade', 11, 3, '100 - 100 g pieces', 43.9),
('Rössle Sauerkraut', 12, 7, '25 - 825 g cans', 45.6),
('Thüringer Rostbratwurst', 12, 6, '50 bags x 30 sausgs.', 123.79),
('Nord-Ost Matjeshering', 13, 8, '10 - 200 g glasses', 25.89),
('Gorgonzola Telino', 14, 4, '12 - 100 g pkgs', 12.5),
('Mascarpone Fabioli', 14, 4, '24 - 200 g pkgs.', 32),
('Geitost', 15, 4, '500 g', 2.5),
('Sasquatch Ale', 16, 1, '24 - 12 oz bottles', 14),
('Steeleye Stout', 16, 1, '24 - 12 oz bottles', 18),
('Inlagd Sill', 17, 8, '24 - 250 g jars', 19),
('Gravad lax', 17, 8, '12 - 500 g pkgs.', 26),
('Côte de Blaye', 18, 1, '12 - 75 cl bottles', 263.5),
('Chartreuse verte', 18, 1, '750 cc per bottle', 18),
('Boston Crab Meat', 19, 8, '24 - 4 oz tins', 18.4),
('Jack\'s New England Clam Chowder', 19, 8, '12 - 12 oz cans', 9.65),
('Singaporean Hokkien Fried Mee', 20, 5, '32 - 1 kg pkgs.', 14),
('Ipoh Coffee', 20, 1, '16 - 500 g tins', 46),
('Gula Malacca', 20, 2, '20 - 2 kg bags', 19.45),
('Røgede sild', 21, 8, '1k pkg.', 9.5),
('Spegesild', 21, 8, '4 - 450 g glasses', 12),
('Zaanse koeken', 22, 3, '10 - 4 oz boxes', 9.5),
('Chocolade', 22, 3, '10 pkgs.', 12.75),
('Maxilaku', 23, 3, '24 - 50 g pkgs.', 20),
('Valkoinen suklaa', 23, 3, '12 - 100 g bars', 16.25),
('Manjimup Dried Apples', 24, 7, '50 - 300 g pkgs.', 53),
('Filo Mix', 24, 5, '16 - 2 kg boxes', 7),
('Perth Pasties', 24, 6, '48 pieces', 32.8),
('Tourtière', 25, 6, '16 pies', 7.45),
('Pâté chinois', 25, 6, '24 boxes x 2 pies', 24),
('Gnocchi di nonna Alice', 26, 5, '24 - 250 g pkgs.', 38),
('Ravioli Angelo', 26, 5, '24 - 250 g pkgs.', 19.5),
('Escargots de Bourgogne', 27, 8, '24 pieces', 13.25),
('Raclette Courdavault', 28, 4, '5 kg pkg.', 55),
('Camembert Pierrot', 28, 4, '15 - 300 g rounds', 34),
('Sirop d\'érable', 29, 2, '24 - 500 ml bottles', 28.5),
('Tarte au sucre', 29, 3, '48 pies', 49.3),
('Vegie-spread', 7, 2, '15 - 625 g jars', 43.9),
('Wimmers gute Semmelknödel', 12, 5, '20 bags x 4 pieces', 33.25),
('Louisiana Fiery Hot Pepper Sauce', 2, 2, '32 - 8 oz bottles', 21.05),
('Louisiana Hot Spiced Okra', 2, 2, '24 - 8 oz jars', 17),
('Laughing Lumberjack Lager', 16, 1, '24 - 12 oz bottles', 14),
('Scottish Longbreads', 8, 3, '10 boxes x 8 pieces', 12.5),
('Gudbrandsdalsost', 15, 4, '10 kg pkg.', 36),
('Outback Lager', 7, 1, '24 - 355 ml bottles', 15),
('Fløtemysost', 15, 4, '10 - 500 g pkgs.', 21.5),
('Mozzarella di Giovanni', 14, 4, '24 - 200 g pkgs.', 34.8),
('Röd Kaviar', 17, 8, '24 - 150 g jars', 15),
('Longlife Tofu', 4, 7, '5 kg pkg.', 10),
('Rhönbräu Klosterbier', 12, 1, '24 - 0.5 l bottles', 7.75),
('Lakkalikööri', 23, 1, '500 ml', 18),
('Original Frankfurter grüne Soße', 12, 2, '12 boxes', 13);Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - Orders
CREATE TABLE Orders (
OrderId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
CustomerId INT,
EmployeeID INT,
OrderDate DATE,
ShipperID INT
);INSERT INTO Orders (OrderId, CustomerId, EmployeeID, OrderDate, ShipperID)
VALUES
(10248, 90, 5, '1996-07-04', 3),
(10249, 81, 6, '1996-07-05', 1),
(10250, 34, 4, '1996-07-08', 2),
(10251, 84, 3, '1996-07-08', 1),
(10252, 76, 4, '1996-07-09', 2),
(10253, 34, 3, '1996-07-10', 2),
(10254, 14, 5, '1996-07-11', 2),
(10255, 68, 9, '1996-07-12', 3),
(10256, 88, 3, '1996-07-15', 2),
(10257, 35, 4, '1996-07-16', 3),
(10258, 20, 1, '1996-07-17', 1),
(10259, 13, 4, '1996-07-18', 3),
(10260, 55, 4, '1996-07-19', 1),
(10261, 61, 4, '1996-07-19', 2),
(10262, 65, 8, '1996-07-22', 3),
(10263, 20, 9, '1996-07-23', 3),
(10264, 24, 6, '1996-07-24', 3),
(10265, 7, 2, '1996-07-25', 1),
(10266, 87, 3, '1996-07-26', 3),
(10267, 25, 4, '1996-07-29', 1),
(10268, 33, 8, '1996-07-30', 3),
(10269, 89, 5, '1996-07-31', 1),
(10270, 87, 1, '1996-08-01', 1),
(10271, 75, 6, '1996-08-01', 2),
(10272, 65, 6, '1996-08-02', 2),
(10273, 63, 3, '1996-08-05', 3),
(10274, 85, 6, '1996-08-06', 1),
(10275, 49, 1, '1996-08-07', 1),
(10276, 80, 8, '1996-08-08', 3),
(10277, 52, 2, '1996-08-09', 3),
(10278, 5, 8, '1996-08-12', 2),
(10279, 44, 8, '1996-08-13', 2),
(10280, 5, 2, '1996-08-14', 1),
(10281, 69, 4, '1996-08-14', 1),
(10282, 69, 4, '1996-08-15', 1),
(10283, 46, 3, '1996-08-16', 3),
(10284, 44, 4, '1996-08-19', 1),
(10285, 63, 1, '1996-08-20', 2),
(10286, 63, 8, '1996-08-21', 3),
(10287, 67, 8, '1996-08-22', 3),
(10288, 66, 4, '1996-08-23', 1),
(10289, 11, 7, '1996-08-26', 3),
(10290, 15, 8, '1996-08-27', 1),
(10291, 61, 6, '1996-08-27', 2),
(10292, 81, 1, '1996-08-28', 2),
(10293, 80, 1, '1996-08-29', 3),
(10294, 65, 4, '1996-08-30', 2),
(10295, 85, 2, '1996-09-02', 2),
(10296, 46, 6, '1996-09-03', 1),
(10297, 7, 5, '1996-09-04', 2),
(10298, 37, 6, '1996-09-05', 2),
(10299, 67, 4, '1996-09-06', 2),
(10300, 49, 2, '1996-09-09', 2),
(10301, 86, 8, '1996-09-09', 2),
(10302, 76, 4, '1996-09-10', 2),
(10303, 30, 7, '1996-09-11', 2),
(10304, 80, 1, '1996-09-12', 2),
(10305, 55, 8, '1996-09-13', 3),
(10306, 69, 1, '1996-09-16', 3),
(10307, 48, 2, '1996-09-17', 2),
(10308, 2, 7, '1996-09-18', 3),
(10309, 37, 3, '1996-09-19', 1),
(10310, 77, 8, '1996-09-20', 2),
(10311, 18, 1, '1996-09-20', 3),
(10312, 86, 2, '1996-09-23', 2),
(10313, 63, 2, '1996-09-24', 2),
(10314, 65, 1, '1996-09-25', 2),
(10315, 38, 4, '1996-09-26', 2),
(10316, 65, 1, '1996-09-27', 3),
(10317, 48, 6, '1996-09-30', 1),
(10318, 38, 8, '1996-10-01', 2),
(10319, 80, 7, '1996-10-02', 3),
(10320, 87, 5, '1996-10-03', 3),
(10321, 38, 3, '1996-10-03', 2),
(10322, 58, 7, '1996-10-04', 3),
(10323, 39, 4, '1996-10-07', 1),
(10324, 71, 9, '1996-10-08', 1),
(10325, 39, 1, '1996-10-09', 3),
(10326, 8, 4, '1996-10-10', 2),
(10327, 24, 2, '1996-10-11', 1),
(10328, 28, 4, '1996-10-14', 3),
(10329, 75, 4, '1996-10-15', 2),
(10330, 46, 3, '1996-10-16', 1),
(10331, 9, 9, '1996-10-16', 1),
(10332, 51, 3, '1996-10-17', 2),
(10333, 87, 5, '1996-10-18', 3),
(10334, 84, 8, '1996-10-21', 2),
(10335, 37, 7, '1996-10-22', 2),
(10336, 60, 7, '1996-10-23', 2),
(10337, 25, 4, '1996-10-24', 3),
(10338, 55, 4, '1996-10-25', 3),
(10339, 51, 2, '1996-10-28', 2),
(10340, 9, 1, '1996-10-29', 3),
(10341, 73, 7, '1996-10-29', 3),
(10342, 25, 4, '1996-10-30', 2),
(10343, 44, 4, '1996-10-31', 1),
(10344, 89, 4, '1996-11-01', 2),
(10345, 63, 2, '1996-11-04', 2),
(10346, 65, 3, '1996-11-05', 3),
(10347, 21, 4, '1996-11-06', 3),
(10348, 86, 4, '1996-11-07', 2),
(10349, 75, 7, '1996-11-08', 1),
(10350, 41, 6, '1996-11-11', 2),
(10351, 20, 1, '1996-11-11', 1),
(10352, 28, 3, '1996-11-12', 3),
(10353, 59, 7, '1996-11-13', 3),
(10354, 58, 8, '1996-11-14', 3),
(10355, 4, 6, '1996-11-15', 1),
(10356, 86, 6, '1996-11-18', 2),
(10357, 46, 1, '1996-11-19', 3),
(10358, 41, 5, '1996-11-20', 1),
(10359, 72, 5, '1996-11-21', 3),
(10360, 7, 4, '1996-11-22', 3),
(10361, 63, 1, '1996-11-22', 2),
(10362, 9, 3, '1996-11-25', 1),
(10363, 17, 4, '1996-11-26', 3),
(10364, 19, 1, '1996-11-26', 1),
(10365, 3, 3, '1996-11-27', 2),
(10366, 29, 8, '1996-11-28', 2),
(10367, 83, 7, '1996-11-28', 3),
(10368, 20, 2, '1996-11-29', 2),
(10369, 75, 8, '1996-12-02', 2),
(10370, 14, 6, '1996-12-03', 2),
(10371, 41, 1, '1996-12-03', 1),
(10372, 62, 5, '1996-12-04', 2),
(10373, 37, 4, '1996-12-05', 3),
(10374, 91, 1, '1996-12-05', 3),
(10375, 36, 3, '1996-12-06', 2),
(10376, 51, 1, '1996-12-09', 2),
(10377, 72, 1, '1996-12-09', 3),
(10378, 24, 5, '1996-12-10', 3),
(10379, 61, 2, '1996-12-11', 1),
(10380, 37, 8, '1996-12-12', 3),
(10381, 46, 3, '1996-12-12', 3),
(10382, 20, 4, '1996-12-13', 1),
(10383, 4, 8, '1996-12-16', 3),
(10384, 5, 3, '1996-12-16', 3),
(10385, 75, 1, '1996-12-17', 2),
(10386, 21, 9, '1996-12-18', 3),
(10387, 70, 1, '1996-12-18', 2),
(10388, 72, 2, '1996-12-19', 1),
(10389, 10, 4, '1996-12-20', 2),
(10390, 20, 6, '1996-12-23', 1),
(10391, 17, 3, '1996-12-23', 3),
(10392, 59, 2, '1996-12-24', 3),
(10393, 71, 1, '1996-12-25', 3),
(10394, 36, 1, '1996-12-25', 3),
(10395, 35, 6, '1996-12-26', 1),
(10396, 25, 1, '1996-12-27', 3),
(10397, 60, 5, '1996-12-27', 1),
(10398, 71, 2, '1996-12-30', 3),
(10399, 83, 8, '1996-12-31', 3),
(10400, 19, 1, '1997-01-01', 3),
(10401, 65, 1, '1997-01-01', 1),
(10402, 20, 8, '1997-01-02', 2),
(10403, 20, 4, '1997-01-03', 3),
(10404, 49, 2, '1997-01-03', 1),
(10405, 47, 1, '1997-01-06', 1),
(10406, 62, 7, '1997-01-07', 1),
(10407, 56, 2, '1997-01-07', 2),
(10408, 23, 8, '1997-01-08', 1),
(10409, 54, 3, '1997-01-09', 1),
(10410, 10, 3, '1997-01-10', 3),
(10411, 10, 9, '1997-01-10', 3),
(10412, 87, 8, '1997-01-13', 2),
(10413, 41, 3, '1997-01-14', 2),
(10414, 21, 2, '1997-01-14', 3),
(10415, 36, 3, '1997-01-15', 1),
(10416, 87, 8, '1997-01-16', 3),
(10417, 73, 4, '1997-01-16', 3),
(10418, 63, 4, '1997-01-17', 1),
(10419, 68, 4, '1997-01-20', 2),
(10420, 88, 3, '1997-01-21', 1),
(10421, 61, 8, '1997-01-21', 1),
(10422, 27, 2, '1997-01-22', 1),
(10423, 31, 6, '1997-01-23', 3),
(10424, 51, 7, '1997-01-23', 2),
(10425, 41, 6, '1997-01-24', 2),
(10426, 29, 4, '1997-01-27', 1),
(10427, 59, 4, '1997-01-27', 2),
(10428, 66, 7, '1997-01-28', 1),
(10429, 37, 3, '1997-01-29', 2),
(10430, 20, 4, '1997-01-30', 1),
(10431, 10, 4, '1997-01-30', 2),
(10432, 75, 3, '1997-01-31', 2),
(10433, 60, 3, '1997-02-03', 3),
(10434, 24, 3, '1997-02-03', 2),
(10435, 16, 8, '1997-02-04', 2),
(10436, 7, 3, '1997-02-05', 2),
(10437, 87, 8, '1997-02-05', 1),
(10438, 79, 3, '1997-02-06', 2),
(10439, 51, 6, '1997-02-07', 3),
(10440, 71, 4, '1997-02-10', 2),
(10441, 55, 3, '1997-02-10', 2),
(10442, 20, 3, '1997-02-11', 2),
(10443, 66, 8, '1997-02-12', 1);Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - OrderDetails
CREATE TABLE OrderDetails (
OrderDetail_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
OrderId INT,
ProductId INT,
Quantity INT
);INSERT INTO OrderDetails (OrderId, ProductId, Quantity)
VALUES
(10248, 11, 12),
(10248, 42, 10),
(10248, 72, 5),
(10249, 14, 9),
(10249, 51, 40),
(10250, 41, 10),
(10250, 51, 35),
(10250, 65, 15),
(10251, 22, 6),
(10251, 57, 15),
(10251, 65, 20),
(10252, 20, 40),
(10252, 33, 25),
(10252, 60, 40),
(10253, 31, 20),
(10253, 39, 42),
(10253, 49, 40),
(10254, 24, 15),
(10254, 55, 21),
(10254, 74, 21),
(10255, 2, 20),
(10255, 16, 35),
(10255, 36, 25),
(10255, 59, 30),
(10256, 53, 15),
(10256, 77, 12),
(10257, 27, 25),
(10257, 39, 6),
(10257, 77, 15),
(10258, 2, 50),
(10258, 5, 65),
(10258, 32, 6),
(10259, 21, 10),
(10259, 37, 1),
(10260, 41, 16),
(10260, 57, 50),
(10260, 62, 15),
(10260, 70, 21),
(10261, 21, 20),
(10261, 35, 20),
(10262, 5, 12),
(10262, 7, 15),
(10262, 56, 2),
(10263, 16, 60),
(10263, 24, 28),
(10263, 30, 60),
(10263, 74, 36),
(10264, 2, 35),
(10264, 41, 25),
(10265, 17, 30),
(10265, 70, 20),
(10266, 12, 12),
(10267, 40, 50),
(10267, 59, 70),
(10267, 76, 15),
(10268, 29, 10),
(10268, 72, 4),
(10269, 33, 60),
(10269, 72, 20),
(10270, 36, 30),
(10270, 43, 25),
(10271, 33, 24),
(10272, 20, 6),
(10272, 31, 40),
(10272, 72, 24),
(10273, 10, 24),
(10273, 31, 15),
(10273, 33, 20),
(10273, 40, 60),
(10273, 76, 33),
(10274, 71, 20),
(10274, 72, 7),
(10275, 24, 12),
(10275, 59, 6),
(10276, 10, 15),
(10276, 13, 10),
(10277, 28, 20),
(10277, 62, 12),
(10278, 44, 16),
(10278, 59, 15),
(10278, 63, 8),
(10278, 73, 25),
(10279, 17, 15),
(10280, 24, 12),
(10280, 55, 20),
(10280, 75, 30),
(10281, 19, 1),
(10281, 24, 6),
(10281, 35, 4),
(10282, 30, 6),
(10282, 57, 2),
(10283, 15, 20),
(10283, 19, 18),
(10283, 60, 35),
(10283, 72, 3),
(10284, 27, 15),
(10284, 44, 21),
(10284, 60, 20),
(10284, 67, 5),
(10285, 1, 45),
(10285, 40, 40),
(10285, 53, 36),
(10286, 35, 100),
(10286, 62, 40),
(10287, 16, 40),
(10287, 34, 20),
(10287, 46, 15),
(10288, 54, 10),
(10288, 68, 3),
(10289, 3, 30),
(10289, 64, 9),
(10290, 5, 20),
(10290, 29, 15),
(10290, 49, 15),
(10290, 77, 10),
(10291, 13, 20),
(10291, 44, 24),
(10291, 51, 2),
(10292, 20, 20),
(10293, 18, 12),
(10293, 24, 10),
(10293, 63, 5),
(10293, 75, 6),
(10294, 1, 18),
(10294, 17, 15),
(10294, 43, 15),
(10294, 60, 21),
(10294, 75, 6),
(10295, 56, 4),
(10296, 11, 12),
(10296, 16, 30),
(10296, 69, 15),
(10297, 39, 60),
(10297, 72, 20),
(10298, 2, 40),
(10298, 36, 40),
(10298, 59, 30),
(10298, 62, 15),
(10299, 19, 15),
(10299, 70, 20),
(10300, 66, 30),
(10300, 68, 20),
(10301, 40, 10),
(10301, 56, 20),
(10302, 17, 40),
(10302, 28, 28),
(10302, 43, 12),
(10303, 40, 40),
(10303, 65, 30),
(10303, 68, 15),
(10304, 49, 30),
(10304, 59, 10),
(10304, 71, 2),
(10305, 18, 25),
(10305, 29, 25),
(10305, 39, 30),
(10306, 30, 10),
(10306, 53, 10),
(10306, 54, 5),
(10307, 62, 10),
(10307, 68, 3),
(10308, 69, 1),
(10308, 70, 5),
(10309, 4, 20),
(10309, 6, 30),
(10309, 42, 2),
(10309, 43, 20),
(10309, 71, 3),
(10310, 16, 10),
(10310, 62, 5),
(10311, 42, 6),
(10311, 69, 7),
(10312, 28, 4),
(10312, 43, 24),
(10312, 53, 20),
(10312, 75, 10),
(10313, 36, 12),
(10314, 32, 40),
(10314, 58, 30),
(10314, 62, 25),
(10315, 34, 14),
(10315, 70, 30),
(10316, 41, 10),
(10316, 62, 70),
(10317, 1, 20),
(10318, 41, 20),
(10318, 76, 6),
(10319, 17, 8),
(10319, 28, 14),
(10319, 76, 30),
(10320, 71, 30),
(10321, 35, 10),
(10322, 52, 20),
(10323, 15, 5),
(10323, 25, 4),
(10323, 39, 4),
(10324, 16, 21),
(10324, 35, 70),
(10324, 46, 30),
(10324, 59, 40),
(10324, 63, 80),
(10325, 6, 6),
(10325, 13, 12),
(10325, 14, 9),
(10325, 31, 4),
(10325, 72, 40),
(10326, 4, 24),
(10326, 57, 16),
(10326, 75, 50),
(10327, 2, 25),
(10327, 11, 50),
(10327, 30, 35),
(10327, 58, 30),
(10328, 59, 9),
(10328, 65, 40),
(10328, 68, 10),
(10329, 19, 10),
(10329, 30, 8),
(10329, 38, 20),
(10329, 56, 12),
(10330, 26, 50),
(10330, 72, 25),
(10331, 54, 15),
(10332, 18, 40),
(10332, 42, 10),
(10332, 47, 16),
(10333, 14, 10),
(10333, 21, 10),
(10333, 71, 40),
(10334, 52, 8),
(10334, 68, 10),
(10335, 2, 7),
(10335, 31, 25),
(10335, 32, 6),
(10335, 51, 48),
(10336, 4, 18),
(10337, 23, 40),
(10337, 26, 24),
(10337, 36, 20),
(10337, 37, 28),
(10337, 72, 25),
(10338, 17, 20),
(10338, 30, 15),
(10339, 4, 10),
(10339, 17, 70),
(10339, 62, 28),
(10340, 18, 20),
(10340, 41, 12),
(10340, 43, 40),
(10341, 33, 8),
(10341, 59, 9),
(10342, 2, 24),
(10342, 31, 56),
(10342, 36, 40),
(10342, 55, 40),
(10343, 64, 50),
(10343, 68, 4),
(10343, 76, 15),
(10344, 4, 35),
(10344, 8, 70),
(10345, 8, 70),
(10345, 19, 80),
(10345, 42, 9),
(10346, 17, 36),
(10346, 56, 20),
(10347, 25, 10),
(10347, 39, 50),
(10347, 40, 4),
(10347, 75, 6),
(10348, 1, 15),
(10348, 23, 25),
(10349, 54, 24),
(10350, 50, 15),
(10350, 69, 18),
(10351, 38, 20),
(10351, 41, 13),
(10351, 44, 77),
(10351, 65, 10),
(10352, 24, 10),
(10352, 54, 20),
(10353, 11, 12),
(10353, 38, 50),
(10354, 1, 12),
(10354, 29, 4),
(10355, 24, 25),
(10355, 57, 25),
(10356, 31, 30),
(10356, 55, 12),
(10356, 69, 20),
(10357, 10, 30),
(10357, 26, 16),
(10357, 60, 8),
(10358, 24, 10),
(10358, 34, 10),
(10358, 36, 20),
(10359, 16, 56),
(10359, 31, 70),
(10359, 60, 80),
(10360, 28, 30),
(10360, 29, 35),
(10360, 38, 10),
(10360, 49, 35),
(10360, 54, 28),
(10361, 39, 54),
(10361, 60, 55),
(10362, 25, 50),
(10362, 51, 20),
(10362, 54, 24),
(10363, 31, 20),
(10363, 75, 12),
(10363, 76, 12),
(10364, 69, 30),
(10364, 71, 5),
(10365, 11, 24),
(10366, 65, 5),
(10366, 77, 5),
(10367, 34, 36),
(10367, 54, 18),
(10367, 65, 15),
(10367, 77, 7),
(10368, 21, 5),
(10368, 28, 13),
(10368, 57, 25),
(10368, 64, 35),
(10369, 29, 20),
(10369, 56, 18),
(10370, 1, 15),
(10370, 64, 30),
(10370, 74, 20),
(10371, 36, 6),
(10372, 20, 12),
(10372, 38, 40),
(10372, 60, 70),
(10372, 72, 42),
(10373, 58, 80),
(10373, 71, 50),
(10374, 31, 30),
(10374, 58, 15),
(10375, 14, 15),
(10375, 54, 10),
(10376, 31, 42),
(10377, 28, 20),
(10377, 39, 20),
(10378, 71, 6),
(10379, 41, 8),
(10379, 63, 16),
(10379, 65, 20),
(10380, 30, 18),
(10380, 53, 20),
(10380, 60, 6),
(10380, 70, 30),
(10381, 74, 14),
(10382, 5, 32),
(10382, 18, 9),
(10382, 29, 14),
(10382, 33, 60),
(10382, 74, 50),
(10383, 13, 20),
(10383, 50, 15),
(10383, 56, 20),
(10384, 20, 28),
(10384, 60, 15),
(10385, 7, 10),
(10385, 60, 20),
(10385, 68, 8),
(10386, 24, 15),
(10386, 34, 10),
(10387, 24, 15),
(10387, 28, 6),
(10387, 59, 12),
(10387, 71, 15),
(10388, 45, 15),
(10388, 52, 20),
(10388, 53, 40),
(10389, 10, 16),
(10389, 55, 15),
(10389, 62, 20),
(10389, 70, 30),
(10390, 31, 60),
(10390, 35, 40),
(10390, 46, 45),
(10390, 72, 24),
(10391, 13, 18),
(10392, 69, 50),
(10393, 2, 25),
(10393, 14, 42),
(10393, 25, 7),
(10393, 26, 70),
(10393, 31, 32),
(10394, 13, 10),
(10394, 62, 10),
(10395, 46, 28),
(10395, 53, 70),
(10395, 69, 8),
(10396, 23, 40),
(10396, 71, 60),
(10396, 72, 21),
(10397, 21, 10),
(10397, 51, 18),
(10398, 35, 30),
(10398, 55, 120),
(10399, 68, 60),
(10399, 71, 30),
(10399, 76, 35),
(10399, 77, 14),
(10400, 29, 21),
(10400, 35, 35),
(10400, 49, 30),
(10401, 30, 18),
(10401, 56, 70),
(10401, 65, 20),
(10401, 71, 60),
(10402, 23, 60),
(10402, 63, 65),
(10403, 16, 21),
(10403, 48, 70),
(10404, 26, 30),
(10404, 42, 40),
(10404, 49, 30),
(10405, 3, 50),
(10406, 1, 10),
(10406, 21, 30),
(10406, 28, 42),
(10406, 36, 5),
(10406, 40, 2),
(10407, 11, 30),
(10407, 69, 15),
(10407, 71, 15),
(10408, 37, 10),
(10408, 54, 6),
(10408, 62, 35),
(10409, 14, 12),
(10409, 21, 12),
(10410, 33, 49),
(10410, 59, 16),
(10411, 41, 25),
(10411, 44, 40),
(10411, 59, 9),
(10412, 14, 20),
(10413, 1, 24),
(10413, 62, 40),
(10413, 76, 14),
(10414, 19, 18),
(10414, 33, 50),
(10415, 17, 2),
(10415, 33, 20),
(10416, 19, 20),
(10416, 53, 10),
(10416, 57, 20),
(10417, 38, 50),
(10417, 46, 2),
(10417, 68, 36),
(10417, 77, 35),
(10418, 2, 60),
(10418, 47, 55),
(10418, 61, 16),
(10418, 74, 15),
(10419, 60, 60),
(10419, 69, 20),
(10420, 9, 20),
(10420, 13, 2),
(10420, 70, 8),
(10420, 73, 20),
(10421, 19, 4),
(10421, 26, 30),
(10421, 53, 15),
(10421, 77, 10),
(10422, 26, 2),
(10423, 31, 14),
(10423, 59, 20),
(10424, 35, 60),
(10424, 38, 49),
(10424, 68, 30),
(10425, 55, 10),
(10425, 76, 20),
(10426, 56, 5),
(10426, 64, 7),
(10427, 14, 35),
(10428, 46, 20),
(10429, 50, 40),
(10429, 63, 35),
(10430, 17, 45),
(10430, 21, 50),
(10430, 56, 30),
(10430, 59, 70),
(10431, 17, 50),
(10431, 40, 50),
(10431, 47, 30),
(10432, 26, 10),
(10432, 54, 40),
(10433, 56, 28),
(10434, 11, 6),
(10434, 76, 18),
(10435, 2, 10),
(10435, 22, 12),
(10435, 72, 10),
(10436, 46, 5),
(10436, 56, 40),
(10436, 64, 30),
(10436, 75, 24),
(10437, 53, 15),
(10438, 19, 15),
(10438, 34, 20),
(10438, 57, 15),
(10439, 12, 15),
(10439, 16, 16),
(10439, 64, 6),
(10439, 74, 30),
(10440, 2, 45),
(10440, 16, 49),
(10440, 29, 24),
(10440, 61, 90),
(10441, 27, 50),
(10442, 11, 30),
(10442, 54, 80),
(10442, 66, 60),
(10443, 11, 6),
(10443, 28, 12);Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - Emplyees
CREATE TABLE Employees (
EmployeeID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
LastName varchar(255),
FirstName varchar(255),
BirthDate date,
Photo varchar(255),
Notes text
);INSERT INTO Employees (LastName, FirstName, BirthDate, Photo, Notes) VALUES
('Davolio', 'Nancy', '1968-12-08', 'EmpID1.pic', 'Education includes a BA in psychology from Colorado State University. She also completed (The Art of the Cold Call). Nancy is a member of Toastmasters International.'),
('Fuller', 'Andrew', '1952-02-19', 'EmpID2.pic', 'Andrew received his BTS commercial and a Ph.D. in international marketing from the University of Dallas. He is fluent in French and Italian and reads German. He joined the company as a sales representative, was promoted to sales manager and was then named vice president of sales. Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.'),
('Leverling', 'Janet', '1963-08-30', 'EmpID3.pic', 'Janet has a BS degree in chemistry from Boston College). She has also completed a certificate program in food retailing management. Janet was hired as a sales associate and was promoted to sales representative.'),
('Peacock', 'Margaret', '1958-09-19', 'EmpID4.pic', 'Margaret holds a BA in English literature from Concordia College and an MA from the American Institute of Culinary Arts. She was temporarily assigned to the London office before returning to her permanent post in Seattle.'),
('Buchanan', 'Steven', '1955-03-04', 'EmpID5.pic', 'Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree. Upon joining the company as a sales representative, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent post in London, where he was promoted to sales manager. Mr. Buchanan has completed the courses Successful Telemarketing and International Sales Management. He is fluent in French.'),
('Suyama', 'Michael', '1963-07-02', 'EmpID6.pic', 'Michael is a graduate of Sussex University (MA, economics) and the University of California at Los Angeles (MBA, marketing). He has also taken the courses Multi-Cultural Selling and Time Management for the Sales Professional. He is fluent in Japanese and can read and write French, Portuguese, and Spanish.'),
('King', 'Robert', '1960-05-29', 'EmpID7.pic', 'Robert King served in the Peace Corps and traveled extensively before completing his degree in English at the University of Michigan and then joining the company. After completing a course entitled Selling in Europe, he was transferred to the London office.'),
('Callahan', 'Laura', '1958-01-09', 'EmpID8.pic', 'Laura received a BA in psychology from the University of Washington. She has also completed a course in business French. She reads and writes French.'),
('Dodsworth', 'Anne', '1969-07-02', 'EmpID9.pic', 'Anne has a BA degree in English from St. Lawrence College. She is fluent in French and German.'),
('West', 'Adam', '1928-09-19', 'EmpID10.pic', 'An old chum.');Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - Shippers
CREATE TABLE Shippers (
ShipperID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
ShipperName varchar(255),
Phone varchar(255)
);INSERT INTO Shippers (ShipperName, Phone) VALUES
('Speedy Express', '(503) 555-9831'),
('United Package', '(503) 555-3199'),
('Federal Shipping', '(503) 555-9931');
Skapa tabellen:
Lägger till info i tabellen:
SQL - Tabell - Suppliers
CREATE TABLE Suppliers (
SupplierID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
SupplierName varchar(255),
ContactName varchar(255),
Address varchar(255),
City varchar(255),
PostalCode varchar(255),
Country varchar(255),
Phone varchar(255)
);INSERT INTO Suppliers (SupplierName, ContactName, Address, City, PostalCode, Country, Phone) VALUES
('Exotic Liquid', 'Charlotte Cooper', '49 Gilbert St.', 'Londona', 'EC1 4SD', 'UK', '(171) 555-2222'),
('New Orleans Cajun Delights', 'Shelley Burke', 'P.O. Box 78934', 'New Orleans', '70117', 'USA', '(100) 555-4822'),
('Grandma Kelly\'s Homestead', 'Regina Murphy', '707 Oxford Rd.', 'Ann Arbor', '48104', 'USA', '(313) 555-5735'),
('Tokyo Traders', 'Yoshi Nagase', '9-8 Sekimai Musashino-shi', 'Tokyo', '100', 'Japan', '(03) 3555-5011'),
('Cooperativa de Quesos \'Las Cabras\'', 'Antonio del Valle Saavedra', 'Calle del Rosal 4', 'Oviedo', '33007', 'Spain', '(98) 598 76 54'),
('Mayumi\'s', 'Mayumi Ohno', '92 Setsuko Chuo-ku', 'Osaka', '545', 'Japan', '(06) 431-7877'),
('Pavlova, Ltd.', 'Ian Devling', '74 Rose St. Moonie Ponds', 'Melbourne', '3058', 'Australia', '(03) 444-2343'),
('Specialty Biscuits, Ltd.', 'Peter Wilson', '29 King\'s Way', 'Manchester', 'M14 GSD', 'UK', '(161) 555-4448'),
('PB Knäckebröd AB', 'Lars Peterson', 'Kaloadagatan 13', 'Göteborg', 'S-345 67', 'Sweden', '031-987 65 43'),
('Refrescos Americanas LTDA', 'Carlos Diaz', 'Av. das Americanas 12.890', 'São Paulo', '5442', 'Brazil', '(11) 555 4640'),
('Heli Süßwaren GmbH & Co. KG', 'Petra Winkler', 'Tiergartenstraße 5', 'Berlin', '10785', 'Germany', '(010) 9984510'),
('Plutzer Lebensmittelgroßmärkte AG', 'Martin Bein', 'Bogenallee 51', 'Frankfurt', '60439', 'Germany', '(069) 992755'),
('Nord-Ost-Fisch Handelsgesellschaft mbH', 'Sven Petersen', 'Frahmredder 112a', 'Cuxhaven', '27478', 'Germany', '(04721) 8713'),
('Formaggi Fortini s.r.l.', 'Elio Rossi', 'Viale Dante, 75', 'Ravenna', '48100', 'Italy', '(0544) 60323'),
('Norske Meierier', 'Beate Vileid', 'Hatlevegen 5', 'Sandvika', '1320', 'Norway', '(0)2-953010'),
('Bigfoot Breweries', 'Cheryl Saylor', '3400 - 8th Avenue Suite 210', 'Bend', '97101', 'USA', '(503) 555-9931'),
('Svensk Sjöföda AB', 'Michael Björn', 'Brovallavägen 231', 'Stockholm', 'S-123 45', 'Sweden', '08-123 45 67'),
('Aux joyeux ecclésiastiques', 'Guylène Nodier', '203, Rue des Francs-Bourgeois', 'Paris', '75004', 'France', '(1) 03.83.00.68'),
('New England Seafood Cannery', 'Robb Merchant', 'Order Processing Dept. 2100 Paul Revere Blvd.', 'Boston', '02134', 'USA', '(617) 555-3267'),
('Leka Trading', 'Chandra Leka', '471 Serangoon Loop, Suite #402', 'Singapore', '0512', 'Singapore', '555-8787'),
('Lyngbysild', 'Niels Petersen', 'Lyngbysild Fiskebakken 10', 'Lyngby', '2800', 'Denmark', '43844108'),
('Zaanse Snoepfabriek', 'Dirk Luchte', 'Verkoop Rijnweg 22', 'Zaandam', '9999 ZZ', 'Netherlands', '(12345) 1212'),
('Karkki Oy', 'Anne Heikkonen', 'Valtakatu 12', 'Lappeenranta', '53120', 'Finland', '(953) 10956'),
('G\'day, Mate', 'Wendy Mackenzie', '170 Prince Edward Parade Hunter\'s Hill', 'Sydney', '2042', 'Australia', '(02) 555-5914'),
('Ma Maison', 'Jean-Guy Lauzon', '2960 Rue St. Laurent', 'Montréal', 'H1J 1C3', 'Canada', '(514) 555-9022'),
('Pasta Buttini s.r.l.', 'Giovanni Giudici', 'Via dei Gelsomini, 153', 'Salerno', '84100', 'Italy', '(089) 6547665'),
('Escargots Nouveaux', 'Marie Delamare', '22, rue H. Voiron', 'Montceau', '71300', 'France', '85.57.00.07'),
('Gai pâturage', 'Eliane Noz', 'Bat. B 3, rue des Alpes', 'Annecy', '74000', 'France', '38.76.98.06'),
('Forêts d\'érables', 'Chantal Goulet', '148 rue Chasseur', 'Ste-Hyacinthe', 'J2S 7S8', 'Canada', '(514) 555-2955');
Skapa tabellen:
Lägger till info i tabellen:
22. SQL - Select
- All *
- Distinct & Count
- Where
- Order by
- And
- Or
- Not

SQL - Select
Uttrycket SELECT används för att välja data från en databas.
SELECT CustomerName, City FROM Customers;Returnera data från tabellen Kunder:
Syntax:
SELECT column1, column2, ...
FROM table_name;
column1, column2, ... är fältnamnen på tabellen du vill välja data från.
table_name representerar namnet på tabellen du vill välja data från.
SQL - Select - All
Om du vill returnera alla kolumner, utan att ange varje kolumnnamn,
kan du använda syntaxen SELECT *
SELECT * FROM Customers;Returnera alla kolumner från tabellen Kunder:
SQL - Distinct & Count
Satsen SELECT DISTINCT används för att endast returnera distinkta (olika) värden.
SELECT DISTINCT Country FROM Customers;Välj alla olika länder från tabellen "Kunder":
COUNT
Genom att använda DISTINCT i en funktion som heter COUNT, kan vi returnera antalet olika länder.
SELECT COUNT(DISTINCT Country) FROM Customers;SQL - Where
WHERE används för att filtrera poster.
SELECT * FROM Customers
WHERE Country='Mexico';Välj alla kunder från Mexiko:
SELECT * FROM Customers
WHERE CustomerID=1;Numeriska fält
SELECT * FROM Customers
WHERE Country='Mexico';Större än
| = | Lika |
| > | Större än |
| > | Mindre än |
| >= | Större än eller lika |
| <= | Mindre än eller lika |
| != | inte lika med |
| BETWEEN | Mellan |
| LIKE | Samma |
Större än
Även med:
SQL - Order By
Nyckelordet ORDER BYanvänds för att sortera resultatuppsättningen i stigande eller fallande ordning.
SELECT * FROM Products
ORDER BY Price;Sortera produkterna efter pris:
DESC
sortera posterna i fallande ordning.
Nyckelordet ORDER BYanvänds för att sortera resultatuppsättningen i stigande eller fallande ordning.
SELECT * FROM Products
ORDER BY Price DESC;ASC
sortera posterna i stigande ordning.
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;SQL - And & Or
WHERE kan innehålla en eller flera AND operatorer.
Alla villkor måste vara sanna
Följande SQL-sats väljer alla fält Customers varifrån Country är "Tyskland" OCH City är "Berlin" OCH PostalCode är högre än 12000:
SELECT * FROM Customers
WHERE Country = 'Germany'
AND City = 'Berlin'
AND PostalCode > 12000;Kombinera And och Or
SELECT * FROM Customers
WHERE Country = 'Spain' AND
(CustomerName LIKE 'G%' OR CustomerName LIKE 'R%');SQL - Not
SELECT * FROM Customers
WHERE NOT Country = 'Spain';Välj bara de kunder som INTE kommer från Spanien:
NOT används i kombination med andra operatorer för att ge motsatt resultat, ett negativt resultat.
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'A%';Välj kunder som inte börjar med bokstaven "A":
SELECT * FROM Customers
WHERE CustomerID NOT BETWEEN 10 AND 60;Välj kunder med ett kund-ID som inte är mellan 10 och 60:
SELECT * FROM Customers
WHERE NOT CustomerID > 50;Välj kunder med ett kund-ID som inte är större än 50:
SELECT * FROM Customers
WHERE City NOT IN ('Paris', 'London');Välj kunder som inte är från Paris eller London:
23. SQL - Insert Into
- Syntax
- Exempel
- Angivna kolumner
- Flera rader

SQL - Insert Into - Syntax
INSERT INTO används för att infoga nya poster i en tabell.
Det är möjligt att skriva påståendet INSERT INTO på två sätt:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);1. Ange både kolumnnamnen och värdena som ska infogas:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);2. Om du lägga till alla kolumner till tabellen så behöver man inte agen kolumnnamnen i SQL-frågan.
Se dock till att ordningen på värdena är i samma ordning som kolumnerna i tabellen.
SQL - Insert Into - Exempel
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');Följande SQL-sats infogar en ny post i tabellen "Kunder":


Före och efter
Tänkte du att vi inte har infogat något nummer i CustomerID?
CustomerID har auto-increment och kommer där för genereras automatiskt ett nytt nr när en ny post infogas i tabellen.
SQL - Insert Into - Angivna Kolumner
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');Det är också möjligt att endast infoga data i specifika kolumner.
Följande SQL-sats infogar en ny post, men infogar bara data i kolumnerna
"CustomerName", "City" och "Country"
(kund-ID uppdateras automatiskt):

SQL - Insert Into - Flera Rader
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES
('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway'),
('Greasy Burger', 'Per Olsen', 'Gateveien 15', 'Sandnes', '4306', 'Norway'),
('Tasty Tee', 'Finn Egan', 'Streetroad 19B', 'Liverpool', 'L1 0AA', 'UK');Det är också möjligt att infoga flera rader.
Vi använder samma INSERT INTO sats, men med flera värden:

Glöm inte , mellan varje uppsättning.
24. SQL - Update
- Syntax
- Where
- Flera poster
- Varning

SQL - Update - Syntax
Satsen UPDATE används för att modifiera befintliga poster i en tabell.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;Syntax
Obs:
Lägg märke till WHERE anger vilka poster som ska uppdateras.
Om du utelämnar WHERE kommer alla poster i tabellen att uppdateras!
SQL - Update - Where
UPDATE Customers
SET customerName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;Följande SQL-sats uppdaterar den första kunden (CustomerID = 1) med en ny kontaktperson och en ny stad.

SQL - Update - Flera Poster
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';Det är WHERE som avgör hur många poster som ska uppdateras.
Följande SQL-sats kommer att uppdatera ContactName till "Juan" för alla poster där landet är "Mexico":

SQL - Update - Varning
UPDATE Customers
SET ContactName='Juan';Var försiktig när du uppdaterar poster.
Om du utelämnar WHERE kommer ALLA poster att uppdateras!

25. SQL - Delete
- Syntax
- Exempel
- Ta bort alla poster
- Ta bort en tabell

SQL - Delete - Syntax
Satsen DELETEanvänds för att radera befintliga poster i en tabell.
DELETE FROM table_name WHERE condition;Obs:
Var försiktig när du raderar poster i en tabell!
Lägg märke till WHERE.
WHERE anger vilken eller vilka poster som ska raderas.
Om du utelämnar WHERE så kommer alla poster i tabellen att raderas!!!!!
SQL - Delete - Exempel
Följande SQL-sats tar bort kunden "Alfreds Futterkiste" från tabellen "Kunder":
DELETE FROM Customers WHERE CustomerName='Alfed Schmidt';


Före och efter
SQL - Delete - Alla Poster
Man kan ta bort alla rader i en tabell utan att ta bort tabellen.
Detta innebär att tabellstrukturen, attributen och indexen kommer att vara intakta:
DELETE FROM Customers;SQL - Delete - Ta Bort Tabell
Ta bort en tabell
För att ta bort tabellen helt, använd DROP TABLE:
DROP TABLE Customers;26. SQL - Functions
- Limit
- Min & Max
- Sum
- Avg
- Like
- Wildcards
- Between
- Aliases
- Date

SQL - LIMIT
Limit används för att specificera antalet poster som ska returneras.
Limit är användbar på stora tabeller med tusentals poster.
Att returnera ett stort antal poster kan påverka prestandan.
Obs!
Om ni söker på webben så kan man även hitta TOP som funkar på samma sätt som LIMIT.
MySQL databassystemet stöder inte TOP
SELECT * FROM Customers
LIMIT 3;SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;SQL - MIN() och MAX()
MIN() returnerar det minsta värdet i den valda kolumnen.
MAX() returnerar det största värdet i den valda kolumnen.
SELECT MIN(Price)
FROM Products;SELECT MAX(Price)
FROM Products;
SQL - SUM()
SUM() returnerar den totala summan av en numerisk kolumn.
SELECT SUM(Quantity)
FROM OrderDetails;Returnera summan av alla Quantityf fält från OrderDetails tabellen:

SELECT SUM(Quantity)
FROM OrderDetails
WHERE ProductId = 11;Returnera summan av fältet Quantity för produkten med ProductID 11:

SELECT SUM(Quantity * 10)
FROM OrderDetails;Använd ett uttryck i SUM()funktionen:

SQL - AVG()
AVG() returnerar medelvärdet för en numerisk kolumn.
Räknar ut det genomsnittliga priset på alla produkter:
SELECT AVG(Price)
FROM Products;AVG() och GROUP BY för att returnera det genomsnittliga priset för varje kategori i tabellen Produkter:
SELECT AVG(Price), CategoryID
FROM Products
GROUP BY CategoryID;SQL - Like & Wildcards
LIKE används i en WHERE sats för att söka efter ett specificerat mönster.
Det finns två Wildcards som ofta används tillsammans med
LIKE kommandot:
- Procenttecknet % representerar noll, ett eller flera tecken
- Understreck _ representerar ett enda tecken
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';Välj alla kunder som börjar med bokstaven "a":
SELECT * FROM Customers
WHERE city LIKE 'L_nd__';Returnera alla kunder från en stad som börjar med 'L' följt av ett jokertecken, sedan 'nd' och sedan två jokertecken:
SQL - BETWEEN
BETWEEN väljer värden inom ett givet intervall.
Värdena kan vara siffror, text eller datum.
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;Väljer alla produkter med ett pris mellan 10 och 20:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;Alla produkter med ett produktnamn alfabetiskt mellan Carnarvon Tigers och
Mozzarella di Giovanni:
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';Alla beställningar med ett OrderDate mellan '01-juli-1996' och '31-juli-1996':
SQL - Aliases, AS
SQL-alias används för att ge en tabell, eller en kolumn i en tabell,
ett tillfälligt namn.
Alias används ofta för att göra kolumnnamn mer läsbara.
Ett alias existerar bara under den tid frågan pågår.
Ett alias skapas med AS
SELECT CustomerID AS ID
FROM Customers;SELECT ProductName AS "My Great Products"
FROM Products;Använda "dubbla citattecken" för alias med mellanslag:
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;Använda "dubbla citattecken" för alias med mellanslag:
SQL - Date
Det svåra med DATE är att får matcha formatet rätt.
Så länge din data endast innehåller datumdelen kommer dina frågor att fungera som förväntat.
MySQL har följande datatyper för att lagra ett datum eller ett datum/tidsvärde i databasen:
- DATE- format ÅÅÅÅ-MM-DD
- DATETIME- format: ÅÅÅÅ-MM-DD TT:MI:SS
- TIMESTAMP- format: ÅÅÅÅ-MM-DD TT:MI:SS
- YEAR- formatera YYYY eller YY
SELECT * FROM Orders WHERE OrderDate='2008-11-11'27. SQL - JOINS
- Inner Join
- Left Join
- Right Join
- Union
- Union All

SQL - JOIN
JOIN används för att kombinera rader från två eller flera tabeller,
baserat på relaterad mellan kolumnerna.
Orders


Customers
Kolumnen "CustomerID" i tabellen "Orders" refererar till
"CustomerID" i tabellen "Customers".
Relationen mellan de två tabellerna ovan är kolumnen "CustomerID".
SQL - JOIN
SQL-satsen INNER JOIN väljer poster som har matchande värden i båda tabellerna:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;Ny tillfällig tabell:
Orders


Customers

SQL - Olika typer av JOIN
- (INNER) JOIN: Returnerar poster som har matchande värden i båda tabellerna
- LEFT (OUTER) JOIN: Returnerar alla poster från den vänstra tabellen och de matchade posterna från den högra tabellen
- RIGHT (OUTER) JOIN: Returnerar alla poster från den högra tabellen och de matchade posterna från den vänstra tabellen
-
FULL (OUTER) JOIN:
Returnerar alla poster när
det finns en matchning i
antingen vänster eller
höger tabell

SQL - INNER JOIN
INNER JOIN väljer poster som har matchande värden i båda tabellerna.


SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID
ORDER BY ProductIDProducts
Categories
Fältet CategoryID som sammanfogar tabellerna
Ny tillfällig tabell


SQL - INNER JOIN - Flera Tabeller
Obs! från Sliden innan
INNER JOIN returnerar endast rader med matchning i båda tabellerna. Vilket betyder att om du har en produkt utan CategoryID, eller med ett CategoryID som inte finns i tabellen Kategorier,
så tas inte den posten med.
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);Följande SQL-sats väljer alla beställningar med kund- och avsändarinformation:
SQL - LEFT JOIN
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;LEFT JOIN returnerar alla poster från den vänstra tabellen (tabell1) och de matchande posterna från den högra tabellen (tabell2).
Resultatet kan bli 0 poster om höger sidan inte har någon matchning.


Orders
Customers
Poster i tabellerna:
Customers 91
Orders 196


LEFT JOIN
Även tomma poster från Customers
RIGHT JOIN
Alla poster från Orders

alla kunder och alla beställningar de kan ha:
SQL - RIGHT JOIN
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;Samma som LEFT JOIN fast tvärtom.
Employees
Orders
Poster i tabellerna:
Orders 196
Employees 10
LEFT JOIN
Även tomma poster från Orders
RIGHT JOIN
Alla poster från Employees

alla kunder och alla beställningar de kan ha:




SQL - UNION
UNION används för att kombinera två eller flera SELECT
- Varje SELECT inom UNION måste ha samma antal kolumner
- Kolumnerna måste också ha liknande datatyper
- Kolumnerna i varje SELECT måste också vara i samma ordning



Suppliers
Customers
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
SQL - UNION ALL
Från sliden innan.
- UNION: Om vissa kunder eller leverantörer har samma stad, kommer varje stad bara att listas en gång
- UNION ALL för att även välja dubbletter av värden!
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;


UNION
UNION ALL
28. SQL - Create & DROP Databas

SQL - CREATE, DROP DATABASE
OBS!
Det går inte att köra den här SQL-satsen på den här webbserven.
Det handlar om rättigheter, vissa webbservrar går det att köra.
Men vi kommer att gå igenom det, så vet ni hur det funkar.
CREATE DATABASE testDB;Följande SQL-sats skapar en databas som heter "testDB":
DROP DATABASE testDB;Följande SQL-sats tar bort den befintliga databasen "testDB":
29. SQL - CREATE TABLE
- Create
- Varchar
- Drop & Truncate
- Alter
- Not null
- Uniqe
- Primary Key
- Foreign Key
- Auto increment

SQL - CREATE TABLE
CREATE TABLE används för att skapa en ny tabell i en databas.
Kolumnparametrarna anger namnen på kolumnerna i tabellen.
Datatype-parametern anger vilken typ av data kolumnen kan innehålla (t.ex. varchar, heltal, datum, etc.).
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);Följande exempel skapar en tabell som heter "Persons" som innehåller fem kolumner:
PersonID, LastName, FirstName, Address, City:
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);Fortsättning nästa sida
SQL - CREATE TABLE
Kolumnen PersonID är av typen int och kommer att innehålla ett heltal.
Kolumnerna LastName, FirstName, Address och City är av typen varchar och kommer att innehålla tecken, och den maximala längden för dessa fält är 255 tecken.
Den tomma tabellen "Personer" kommer nu att se ut så här:
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
SQL - VARCHAR
VARCHAR är en datatyp lagrar teckensträngar.
- VARCHAR sparar endast den faktiska mängden data
plus en extra byte eller två (beroende på databashanteraren),
vilket minskar lagringsutrymme jämfört med CHAR som alltid använder fullt tilldelat utrymme.
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);Eftersom VARCHAR inte alltid tar upp samma mängd lagringsutrymme, kan det göra så att prestandan blir bättre,
särskilt när du har mycket data.
SQL - DROP & TRUNCATE
DROP TABLE används för att ta bort en befintlig tabell i en databas.
DROP TABLE Shippers;
Obs!
Var försiktig innan du ta bort ett tabell.
Att ta bort en tabell kommer att resultera i att alla information försvinner, allt som är lagrat i tabellen.
TRUNCATE TABLE används för att radera data i en tabell,
men inte själva tabellen.
TRUNCATE TABLE Shippers;
SQL - ALTER
ALTER TABLE används för att lägga till, ta bort eller ändra kolumner i en befintlig tabell.
Man ändrar tabellens uppbyggnad inte posterna.
ALTER TABLE Customers
ADD Email varchar(255);Lägger till en kolumn.
ALTER TABLE Customers
DROP COLUMN Email;Ta bort en kolumn.
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;Ändra namet på en kolumn.
SQL - NOT NULL
Som standard kan en kolumn innehålla NULL-värden.
NOT NULL tvingar en kolumn att INTE acceptera NULL-värden.
Detta tvingar ett fält att alltid innehålla ett värde, vilket innebär att du inte kan infoga en ny post, eller uppdatera en post utan att lägga till ett värde i detta fält.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);SQL säkerställer att kolumnerna "ID", "LastName" och "FirstName" INTE accepterar NULL-värden när tabellen "Persons" skapas
SQL - UNIQE
UNIQUE säkerställer att alla värden i en kolumn är olika.
Både begränsningarna UNIQUE och PRIMARY KEY ger en garanti för unikhet för en kolumn eller uppsättning kolumner.
En PRIMARY KEY begränsning har automatiskt en UNIQUE begränsning.
Du kan dock ha många UNIQUE begränsningar per tabell, men bara en PRIMARY KEY begränsning per tabell.
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);SQL skapar en UNIQUE begränsning i kolumnen "ID" när tabellen "Persons" skapas:
SQL - PRIMARY KEY
PRIMARY KEY identifierar unikt varje post i en tabell.
Primära nycklar måste innehålla UNIKA värden och
får inte innehålla NULL-värden.
En tabell kan bara ha EN primärnyckel.
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);SQL skapar en PRIMARY KEY i kolumnen "ID" när tabellen "Persons" skapas:
SQL - FOREIGN KEY
FOREIGN KEY används för att förhindra åtgärder som skulle förstöra länkar mellan tabeller.
FOREIGN KEY är ett fält (eller en samling av fält) i en tabell, som refererar till den PRIMARY KEY i en annan tabell.
Tabellen med den FOREIGN KEY kallas den "child" tabellen, och tabellen med den PRIMARY KEY kallas den refererade eller "parent" tabellen.
PRIMARY KEY

FOREIGN KEY
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int,
FOREIGN KEY (PersonID) REFERENCES Persons(ID)
);Mer nästa slide
SQL - FOREIGN KEY
Observera att kolumnen "PersonID" i tabellen "Orders" pekar mot kolumnen "PersonID" i tabellen "Persons".
"PersonID" i tabellen "Persons" är kolumnen PRIMARY KEY.
"PersonID" i tabellen "Orders" är en FOREIGN KEY.
FOREIGN KEY förhindrar att ogiltiga data infogas i kolumnen för FOREIGN KEY, eftersom värdet måste finnas med i överordnade tabellen.


SQL - AUTO_INCREMENT
Auto-increment gör att ett unikt nummer kan genereras automatiskt när en ny post infogas i en tabell.
Oftas används detta på primära nyckelfältet, där man vill automatiskt skapa ett nytt nummer varje gång en ny post infogas.
CREATE TABLE Persons (
Personid int NOT NULL AUTO_INCREMENT PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);SQL-sats definierar kolumnen "Personid" som ett
PRIMARY KEY fält med automatisk ökning i tabellen "Persons"
Mer nästa slide
SQL - AUTO_INCREMENT
Som standard är startvärdet för AUTO_INCREMENT 1
och det kommer att öka med 1 för varje ny post.
Det går att få sekvensen att börja på ett annat värde
ALTER TABLE Persons AUTO_INCREMENT=100;
För att infoga en ny post i tabellen "Persons" behöver vi INTE ange ett värde för kolumnen "Personid"
(ett unikt värde läggs till automatiskt):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');30. SQL - VIEW

SQL - VIEW
I SQL är en VIEW en virtuell tabell baserad på resultatet av en SQL-sats.
En VIEW innehåller rader och kolumner, precis som en riktig tabell.
Du kan lägga till SQL-satser och funktioner i en vy och presentera data som om data kom från en enda tabell.
En VIEW skapas med CREATE VIEW uttalandet.
En vy visar alltid aktuella data!
Databasmotorn återskapar vyn, varje gång en användare frågar den.
CREATE VIEW BrazilCustomers AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = 'Brazil';CREATE VIEW UserOrders AS
SELECT Users.UserID, Users.Username, Orders.OrderID, Orders.OrderDate
FROM Users
JOIN Orders ON Users.UserID = Orders.UserID;SELECT * FROM BrazilCustomers;Anropa VIEW
31. SQL - References
- SQL Keywords
- MySQL Functions

SQL -
Länk till W3Shools
32. PHP - Databas & Connect
- MySQLi
- Connect
- Close

SQL - MySQLi
När man ska använda SQL i PHP så finns det två bibliotek.
MySQLi och PDO.
Vi kommer att använda MySQLi.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>MySQLi
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>PDO
SQL - Conection
Börja med att skapa en PHP-fil som heter con.php
Kopiera in koden och ändar så att det stämmer med dina uppgifter.
<?php
$servername = "localhost";
$username = "kagg_hakanbrorson_te20";
$password = "lösenord";
$database = "kagg_hakanbrorson_te20";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>SQL - Close
Anslutningen stängs automatiskt när skriptet avslutas. För att stänga anslutningen innan, använd följande:
<?php
mysqli_close($conn);
?>33. PHP - Create Table

PHP - Create Table
CREATE TABLE-satsen används för att skapa en tabell i MySQL.
Vi kommer att skapa en tabell med namnet "MyGuests", med fem kolumner: "id", "firstname", "lastname", "email" och "reg_date":
CREATE TABLE MyGuests (
id INT(6) AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)- NOT NULL - Nullvärden är inte tillåtna
- DEFAULT - Ange ett standardvärde som läggs till när inget annat värde passeras
- AUTO INCREMENT - Fältets värde ökar med 1 varje gång en ny post läggs till
- PRIMARY KEY - Gör så att alla poster är unika.
PHP - Create Table
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// sql to create table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if (mysqli_query($conn, $sql)) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . mysqli_error($conn);
}
mysqli_close($conn);
?>Mer på nästa slide
PHP - mysqli_query
mysqli_query är en funktion för PHP som används för att utföra SQL-frågor mot en MySQL-databas.
Den kan användas för att skicka olika typer av SQL-kommandon, som SELECT, INSERT, UPDATE, DELETE, etc.
$conn: Anslutningsobjektet
$sql: SQL-frågan som ska köras.
if (mysqli_query($conn, $sql)) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . mysqli_error($conn);
}
mysqli_close($conn);34. PHP - Insert Data
- Insert Into
- Insert Multiple

PHP - mysqli_query
INSERT INTO använder också mysqli_query() som Create tabell.
Obs: Vi lägger inte till något i Kolumnen id för den har AUTO_INCREMENT, vilket gör att den räknar själv.
eller reg_date som har TIMESTAMP.
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);PHP - mysqli_multi_query()
Infoga flera poster i MySQL
Flera SQL-satser exekveras med mysqli_multi_query()
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";
if (mysqli_multi_query($conn, $sql)) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}35. PHP - Prepared Statements

SQL - Injection
PHP - Prepared Statements
Förklaring på nästa sida
// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "New records created successfully";
$stmt->close();
$conn->close();PHP - Prepared Statements
Förbereder SQL-frågan för exekvering.
? Platsinnehållare för parametrar i frågan.
Det innebär att vi kommer att binda värden till dessa platshållare senare, vilket skyddar mot SQL-injektion.
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");$stmt->bind_param("sss", $firstname, $lastname, $email);Binder PHP-variabler till platshållarna i den förberedda SQL-frågan.
"sss": Specifierar datatyperna för de bundna parametrarna.
I det här fallet står varje "s" för en sträng (string).
Det finns 4 st: i för Integer, d för Double, s för string och b för Blob som används för större filer och data
PHP - Prepared Statements
Sätta parametrar och köra frågan:
// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();- Sätta parametrar: Tilldela värden till de variabler som kommer att bindas till SQL-frågan.
- $stmt->execute(): Kör SQL-frågan med de aktuella parametrarna. Här körs samma SQL-instruktion tre gånger med olika värden, vilket lägger till tre nya rader i tabellen MyGuests.
PHP - Prepared Statements
Stänga statement och anslutning:
- $stmt->close(): Frigör resurser som är kopplade till det förberedda statementet.
- $conn->close(): Stänger anslutningen till MySQL-databasen.
$stmt->close();
$conn->close();36. PHP - Select Data
- Select
- Where
- Prepared Statements

PHP - SELECT
Följande exempel väljer kolumnerna id, firstname och lastname från tabellen MyGuests och visar det på PHP-sidan
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();Förklarning på nästa slide
PHP - SELECT
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();- Först SQL-fråga
- Nästa rad med kod kör frågan och placerar den resulterande datan i en variabel som heter $result.
- Sedan kontrollerar funktionen num_rows() om det finns fler än noll rader som returneras.
- Om det returneras fler än noll rader lägger funktionen fetch_assoc() alla resultat i en array som vi kan loopa igenom.
- Loopen while() går igenom resultatuppsättningen och matar ut data från kolumnerna id, firstname och lastname.
PHP - SELECT - WHERE
// Förbered en SQL-fråga
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests WHERE lastname = ?");
// Binda parameter
$lastname = "Doe";
$stmt->bind_param("s", $lastname); // "s" för sträng
// Kör frågan
$stmt->execute();
// Hämta resultat
$result = $stmt->get_result();
// Skriv ut resultatet i en HTML-tabell
echo "<table border='1'>
<tr>
<th>ID</th>
<th>Firstname</th>
<th>Lastname</th>
</tr>";
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr>
<td>" . $row["id"] . "</td>
<td>" . $row["firstname"] . "</td>
<td>" . $row["lastname"] . "</td>
</tr>";
}
} else {
echo "<tr><td colspan='3'>0 results</td></tr>";
}
echo "</table>";
// Stäng statement och anslutning
$stmt->close();
$conn->close();SELECT med WHERE och Prepared Statements
Som ni kom ihåg från SQL så filtrera WHERE poster.
Vi skriv ut alla poster i en HTML-tabell
37. PHP - Delete Data
- DELETE
- Prepared Statement
PHP - DELETE
DELETE ser lika dan ut som INSERT
// sql to delete a record
$sql = "DELETE FROM MyGuests WHERE id=3";
if (mysqli_query($conn, $sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . mysqli_error($conn);
}
mysqli_close($conn);PHP - DELETE - Prepared Statements
DELETE med Prepared Statements
// Förbered en SQL DELETE-fråga
$stmt = $conn->prepare("DELETE FROM MyGuests WHERE id = ?");
// Binda parameter
$id = 3; // ID för posten som ska raderas
$stmt->bind_param("i", $id); // "i" för heltal
// Kör frågan och kontrollera resultatet
if ($stmt->execute()) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $stmt->error;
}
// Stäng statement och anslutning
$stmt->close();
$conn->close();38. PHP - Update Data
- UPDATE
- Prepared Statements
PHP - UPDATE
UPDATE ser lika dan ut som INSERT
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();PHP - UPDATE - Prepared Statements
UPDATE med Prepared Statements
// Förbered en SQL UPDATE-fråga
$stmt = $conn->prepare("UPDATE MyGuests SET lastname = ? WHERE id = ?");
// Binda parametrar
$new_lastname = "Doe";
$id = 2;
$stmt->bind_param("si", $new_lastname, $id); // "s" för sträng, "i" för heltal
// Kör frågan och kontrollera resultatet
if ($stmt->execute()) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $stmt->error;
}
// Stäng statement och anslutning
$stmt->close();
$conn->close();39. PHP - Reference
- Array
- Calender
- Date
- ...
PHP - Reference
PHP-referensen innehåller olika kategorier av alla PHP-funktioner, nyckelord och konstanter, tillsammans med exempel.
40. FORM
Lägg till data från en Form
PHP - Skapa Formuläret
Skapa Formuläret i HTML
och skickar till php sidan insert.php med metoden POST
<!DOCTYPE html>
<html>
<body>
<h2>Guest Form</h2>
<form action="insert.php" method="post">
First name:<br>
<input type="text" name="firstname" required>
<br>
Last name:<br>
<input type="text" name="lastname" required>
<br>
Email:<br>
<input type="email" name="email" required>
<br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>PHP - Hantera Formulärdata
Hantera Formulärdata och Infoga i Databasen
<!DOCTYPE html>
<html>
<body>
<?php
require "dbcon.php";
// Förbered och bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// Sätt parametrar och kör
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$stmt->execute();
echo "New record created successfully";
$stmt->close();
$conn->close();
?>
</body>
</html>41. PHP - Datamodellering
ER-modellen "Entity-Relationship"

Varför ritar vi upp databasen först?
Att skapa ett ER-diagram (ritningen) ger oss flera stora fördelar:
-
Helhetsbild: Vi ser direkt hur allt hänger ihop – från kunder till produkter.
-
Hitta fel tidigt: Det är mycket lättare att flytta ett streck i ett diagram än att skriva om 500 rader kod senare.
-
Gemensamt språk: Diagrammet gör att alla i teamet (eller du själv om en månad) förstår exakt hur datan är organiserad.
-
Bättre kod: När ritningen är klar blir själva programmeringen i PHP och SQL mycket enklare och snabbare.

Kråkfotssymboler
Vi använder Kråkfotsnotation för att visa mängden i en relation (kardinalitet):
- Ett streck: Betyder "exakt en".
- En "kråkfot": Betyder "många".

Dessa symboler gör det
enkelt att se om t.ex. en
kund kan ha flera
beställningar eller bara en.
Fallstudie - PC-shoppen
För att göra datamodelleringen praktisk använder vi ett exempel från verkligheten: En butik som säljer datorkomponenter.
Scenariot: Kunden Anna ska bygga en ny speldator och besöker butiken "TechBuild".
Butikens databas måste kunna hantera hela processen – från att Anna registrerar sig till att hon får sitt kvitto.
Vad behöver systemet hålla koll på? För att detta ska fungera måste vi spåra tre huvuddelar:
Kunder: Vem handlar? (Namn, e-post, adress).
Produkter: Vad finns i lager? (Grafikkort, processorer, fläktar).
Beställningar: Vilka köp har gjorts och av vem?
Tabellerna
Kund :
- Kund-ID (primärnyckel)
- Kundens förnamn (t.ex. ”Erik”)
- Kundens efternamn (t.ex. ”Eriksson”)
- E-post
- Telefonnummer
Beställning :
- Order-ID (primärnyckel)
- Beställningsdatum
- Totalbelopp
Produkt :
- Produkt-ID (primärnyckel)
- Produktnamn (t.ex. ”Röd ros”)
- Pris
- Lagerkvantitet

4. Definiera relationer
Här kommer vi att avgöra hur entiteterna relaterar till varandra.
-
Kund till order (1:N):
En kund kan göra hur många beställningar som helst, men varje beställning tillhör alltid exakt en
kund.
-
Order till produkt:
Varje order kan innehålla flera produkter, och varje produkt kan förekomma i flera ordrar (t.ex. Erik som köper både rosor och en mask i en order).
Detta skapar en många-till-många -relation.




4. Definiera relationer
-
Order till OrderProduct : Detta är en en-till-många- relation, eftersom varje order kan ha flera poster i OrderProduct- tabellen.
- Produkt till OrderProduct : På liknande sätt är detta också en en-till-många- relation, eftersom varje produkt kan förekomma i flera OrderProduct- poster.

Vi har även lagt till
Order_ID och Product_ID
i tabellen Orderproduct
För att får en koppling mellan de andra tabellerna
Webbserverprogrammering 1 - PHP
By Håkan Brorson
Webbserverprogrammering 1 - PHP
En kurs på Lars Kaggskolan av Håkan Brorson
- 2,242



