Glossar - telltec

Werbung
Glossar
MySQL
…ist eine Datenbanksoftware/Art, die sehr weit verbreitet ist. In einer Datenbank
kann man Tabellen anlegen, in die die einzelnen Informationen gespeichert
werden. Ein Beispiel:
+-------------------------------+
| ID
Name Eintrag |
| 01
Andi
Hallo !! |
| 02
Rafi
Hallo !! |
+-------------------------------+
So könnte eine kleine Tabelle für ein Gästebuch aussehen. Aus einer Tabelle wird normal mit PHP
gelesen. MySQL verwendet man in aller Regel zusammen mit einem Webserver (z.B. Apache).
DDL – Data Definition Language
Zur Erzeugung eines Datenmodells.
DML – Data Manipulation Language
Zur Modifikation der verwaltenden Daten
DRL – Data Retrieval Language
Abfragen an Datenbanken
DCL – Data Control Language
Administration. Verwalten der Rechte
User Anlegen
Mysql> use mysql
Insert into user set user=“Dominic“, password=password(„geheim“);
Select user from user;
MySQL Dienst starten und beende
Normal CMD öffnen und dann „net start-„ oder „net Stopp mysql“ eingeben und mit Enter bestätigen.
Auf Externe MySQL Datenbank zugreifen
????
Datenbank mit Tabelle erstellen und abfüllen
' neue Datenbank erstellen
create database New1;
' Datenbank benutzen
use New1;
'Tabelle erstellen
create table tb2;
'Tabelle abfüllen
(id integer not null auto_increment,
Vorname varchar (50),
Name varchar (50),
Adresse varchar (50),
primary key (id));
'auf Tabelle zugreifen
desc tb1;
'Tabelle mit Daten abfüllen
insert into tb1 (Vorname, Name, Adresse)
values ("Dominic", "Jaeggi", "Himmelrichstrasse 2");
Dominic Jäggi
1 von 6
14.05.2016
Glossar zur MySQL
insert into tb1 (Vorname, Name, Adresse)
values ("André", "Frischknecht", "Teufelstrasse 23c");
insert into tb1 (Vorname, Name, Adresse)
values ("Daniel", "Guggisberg", "Äscherwisplatz 12");
insert into tb1 (Vorname, Name, Adresse)
values ("Tanja", "Schorno", "Äschetürlistrasse 82");
'Tabelle anschauen
select * from tb1;
Operationen für SQL Gleichheitstest
=
<>
<
>
<=
>=
IS NULL
IS NOT NULL
BETWEEN
IN
Create Database „“
Gleichheitstest
Test auf Ungleichheit
Test auf kleiner
Test auf grösser
kleiner oder gleich
grösser oder gleich
Testet ob eine Spalte null ist
Testet ob eine Spalte nicht NULL enthält
Testet ob ein Wert in vorgegebenen Grenzen liegt
Testet ob ein Wert innerhalb einer vorgeg. Menge ist
erstellt eine neue Datenbank
Funktionen für MySQL
Syntax
Beschreibung
Sample
count()
Anzahl Werte einer Ergebnismenge
SELECT count(lname) FROM employee;
count(distinct)
Anzahl unterschiedlicher werte
SELECT count(DISTINCT lname) FROM employee;
min()
Minimum
select min(salary) FROM employee;
max()
Maximum
select max(salary) FROM employee;
avg()
Durchschnitt
select avg(salary) FROM employee;
sum()
Summe
select sum(salary) FROM employee;
abs(zahl)
absoluten Werte einer Zahl
-
ceiling(zahl)
rundet die Zahl auf die nächst höhere
-
floor(zahl)
rundet die Zahl auf die nächst kleinere
-
round(zahl)
rundet normal nach math. Regeln
-
round(zahl,stellen)
rundet normal nach math. Regeln auf
Anzahl Stellen
-
log(zahl)
natürlichen logarithmus ermitteln
-
mod(zahl1,zahl2)
Liefert den Rest der Ganzzahldivison
-
pi()
Liefer pi
-
rand()
Zufallszahl zwischen Null und 1
-
sign(zahl)
Ermiitelt Vorzeichen, liefert -1,0,1
-
sin(zahl)
cos(zahl)
tan(zahl)
Winkelfunktion
-
sqrt(zahl)
Quadratwurzel
-
LOCATE
Ein Zeichen in einem String finden
LOCATE(',',ADDRESS)
SUBSTRING
Nur einen Teil eines Strings
zurückgeben
CONCAT
Dominic Jäggi
SUBSTRING(ADDRESS,2) --> Ab 2. zeichen
SUBSTRING(ADDRESS,-2) --> letzte 2 zeichen
SUBSTRING(ADDRESS,2,7) --> vom 2. bis 7. zeichen
CONCAT('Hello','world','!')
String zusammensetzen
2 von 6
14.05.2016
Glossar zur MySQL
Joins für MySQL
Syntax
Beschreibung
Sample
SELECT datenfelder FROM tabelle1
INNER JOIN tabelle2 ON bedingung;
Inner-Join
SELECT fname,dname FROM employee e
INNER JOIN department d
ON d.dnumber = e.dno;
SELECT datenfelder FROM ((tabelle1
INNER JOIN tabelle2 ON bedingung)
INNER JOIN tabelle 3 ON bedingung) …
;
SELECT DISTINCT datenfelder FROM
tabelle1
INNER JOIN tabelle2 ON bedingung
WHERE bedingung;
SELECT datenfelder FROM tabelle1
LEFT OUTER JOIN tabelle2 ON
bedingung;
Inner-Join über
mehrere Tabellen
-
Natural Join
SELECT DISTINCT e.lname,w.hours FROM employee e
INNER JOIN works_on w ON e.ssn=w.essn
WHERE w.hours=10;
Left Outer Join
SELECT kat.name AS Kategorie, COUNT(p.pk) AS
Anzahl FROM kategorie kat
LEFT OUTER JOIN produkt p ON p.kategorie_fk = kat.pk
GROUP BY Kategorie;
SELECTSELECT datenfelder FROM
tabelle1
RIGHT OUTER JOIN tabelle2 ON
bedingung;
SELECT datenfelder FROM tabelle1
FULL JOIN tabelle2 ON bedingung;
Right Outer Join
SELECT w.essn,w.pno,d.essn,d.dependent_name
FROM dependent AS d
RIGHT OUTER JOIN works_on w ON w.essn=d.essn;
Full Outer Join
wird noch nicht unterstützt
SELECT DISTINCT datenfelder FROM
tabelle1
INNER JOIN tabelle2 ON bedingung
WHERE bedingung;
SELECT datenfelder FROM tabelle1
INNER JOIN tabelle2 ON bedingung
[WHERE bedingung]
[ORDER BY angabe];
Semi Join
SELECT DISTINCT e.fname,e.lname FROM employee e
INNER JOIN works_on w ON e.ssn = w.essn
WHERE w.hours >= 15;
Self Join
SELECT ma1.fname,ma1.lname,ma2.lname AS chef
FROM employee ma1
INNER JOIN employee ma2
ON ma1.superssn = ma2.ssn;
Allgemeines für MySQL
Syntax
Beschreibung
Sample
CREATE DATABASE [IF NOT EXISTS];
eine Datenbank erstellen
CREATE DATABASE beat;
USE;
Datenbank wechseln
USE beat;
SHOW DATABASES;
Alle Datenbanken anzeigen
-
DROP DATABASE;
eine Datenbank löschen
einen neuen Benutzer
erstellen
DROP DATABASE beat;
INSERT INTO user host='localhost',
user='beat',
password=PASSWORD('beat');
INSERT INTO user SET host="<Hostname>",
user="<Benutzername>",
password=PASSWORD("<Passwort>");
FLUSH PRIVILEGES;
GRANT <Zugriffsrechte> ON
<Datenbankobjekt>
TO <Benutzername>@<Hostname>
<Optionen>;
REVOKE <Zugriffsrecht> ON
<Datenbankobjekt>
FROM <Benutzername>@<Hostname>;
DELETE FROM user WHERE
user="<Benutzername>"
[AND host="<Hostname>"]
Dominic Jäggi
Berechtigungstabelle user
neu lesen
Zugriffsrechte für Benutzer
setzen
GRANT ALL PRIVILEGES ON *.* TO
beat@'%';
Zugriffsrechte entziehen
REVOKE ALL PRIVILEGES ON *.* FROM
beat@'%';
Benutzer löschen
Alle anonymen Benutzer
löschen
DELETE FROM user WHERE user='beat';
DELETE FROM user WHERE user=' ';
3 von 6
14.05.2016
Glossar zur MySQL
CREATE TABLE tabellenname
(datenfeld1 datentyp2 [DEFAUKT
standardwert1]
[NULL | NOT NULL] [AUTO_INCREMENT],
…,
PRIMARY KEY(datenfeldname));
Tabelle erstellen
CREATE TABLE adressen
(ID INTEGER NOT NULL
AUTO_INCREMENT,
NAME TEXT NULL,
VORNAME TEXT NULL,
PRIMARY KEY(ID));
CREATE TABLE
inkl. Gültigkeitsprüfung
CREATE TABLE t_ma_abt
(id INTEGER NOT NULL,
abtname VARCHAR(15) DEFAULT
"Produktion",
ma_nr INTEGER,
CONSTRAINT mpruef CHECK(ma_nr > 10));
CREATE TABLE
inkl. ENUM
CREATE TABLE farben (
farbe ENUM('rot','gruen','blau'));
CREATE TABLE
inkl. SET
CREATE TABLE buchstaben (
x SET('a','b','c','d'));
SELECT * FROM buchstaben WHERE x & 4;
SHOW TABLES
[FROM datenbankname] [LIKE "muster"];
Vorhandene Tabellen
anzeigen
-
ALTER TABLE tabellenname
[ADD datenfelddefinition]
[ADD indexdefinition]
[ADD CONSTRAINT contraintname
CHECK (gültigkeitsbedingung)]
[DROP objektname];
Tabellenstruktur ändern
ALTER TABLE adressen ADD STRASSE
TEXT NULL;
DROP TABLE tabellenname;
Tabelle löschen
DROP TABLE adressen;
DESCRIBE tabellenname;
Tabelleninformationen
anzeigen
Daten in Tabelle einfügen
DESCRIBE adressen;
INSERT INTO tabellenname1 (feld1,…,feldx)
SELECT datenfelder FROM tabellenname2
[WHERE bedingung];
Mehrere Datensätze
einfügen aus anderer Tabelle
INSERT INTO einwohner
(vorname,nachname) SELECT vorname,name
FROM mitglieder;
UPDATE tabellenname SET feld1='wert1'
[WHERE bedingung] ;
Daten aktualisieren
DELETE FROM tabellenname [WHERE
bedingung]
SELECT [DISCTINCT] *|Datenfelder FROM
tabelle
[WHERE Bedingung]
[GROUP BY Datenfelder [HAVING
Bedingung] ]
[ORDER BY Datenfelder [ASC | DESC] ]
[LIMIT [Start, ] Anzahl] ;
SELECT [DISCTINCT] *|Datenfelder FROM
tabelle
[WHERE Bedingung]
SELECT DISTINCT Datenfelder AS neu
FROM tabelle;
Daten löschen
UPDATE adressen SET
strasse='Grünaustrasse 16'
WHERE NAME='MEIER' AND
VORNAME='BEAT';
DELETE FROM adressen WHERE
NAME='Meyer';
SELECT * FROM mitarbeiter:
INSERT INTO tabellenname (feld1,…,feldx)
VALUES (wert1,…,wertx);
Daten ausgeben
INSERT INTO adressen (NAME,VORNAME)
VALUES('Meyer','Andreas');
Daten ausgeben
SELECT Name,Vorname
FROM mitarbeiter WHERE Name="English";
Daten ausgeben
SELECT DISTINCT Lohn AS Jahreslohn
FROM mitarbeiter ORDER BY Lohn;
SELECT Datenfelder
FROM tabelle [LIMIT [Start, ] Anzahl] ;
Daten ausgeben
SELECT * FROM mitarbeiter LIMIT 3,2;
SELECT Zahl1*Zahl2 AS Ergebnis 1,
Zahl1/Zahl2 AS Ergebnis 2,
Zahl1+Zahl2 AS Ergebnis 3,
Zahl1-Zahl2 AS Ergebnis 4
FROM tabelle;
Daten rechnen und ausgeben SELECT DISTINCT
Lohn,
ROUND(Lohn/12) as Monatslohn,
(ROUND(Lohn/12)*13) AS Jahreseinkommen
FROM mitarbeiter
WHERE ROUND(Lohn/12) > 3000 ORDER BY
Lohn;
Dominic Jäggi
4 von 6
14.05.2016
Glossar zur MySQL
SELECT
Daten ausgeben mit Aliases
SELECT m.Name,m.Vorname,f.Name
FROM mitarbeiter m,funktionen f
WHERE m.ID_Funktion=f.ID_Funktion;
SELECT datenfelder FROM tabelle
WHERE datenfeld LIKE "Muster" [ESCAPE
"Zeichen "];
Daten ausgeben mit
Fluchtzeichen
SELECT datenfekder FROM tabelle
WHERE datenfeld LIKE "";
Daten ausgeben mit LIKE
SELECT Name,Abteilung
FROM mitarbeiter
WHERE Abteilung LIKE "Abt\ ;%" ESCAPE "\
";
SELECT Name FROM mitarbeiter
WHERE Name LIKE "E%";
SELECT … GROUP BY
datenfeld[,datenfeld,...]
[HAVING Bedingung]
Daten ausgeben mit GROUP
SELECT o.Ort,COUNT(m.Name) AS "Anzahl
Wohnende"
FROM orte o, mitarbeiter m
WHERE m.ID_Ort=o.ID_Ort GROUP BY ort;
SELECT … GROUP BY
datenfeld[,datenfeld,...]
[HAVING Bedingung]
Daten ausgeben mit GROUP
und
HAVING
SELECT o.Ort,COUNT(m.Name) AS "Anzahl
Wohnende"
FROM orte o, mitarbeiter m
WHERE m.ID_Ort=o.ID_Ort
GROUP BY ort HAVING COUNT(m.Name) >
1;
SELECT … ORDER BY datenfeld, …
[ASC|DESC]
CREATE TABLE ( … PRIMARY KEY
(datenfeldname));
Daten ausgeben und
sortieren
Primary Key erstellen
SELECT * FROM mitarbeiter ORDER BY
name,vorname;
CREATE TABLE test (ID INT(11) NOT NULL
PRIMARY KEY (ID), Name TEXT NULL);
CREATE TABLE ( … UNIQUE
schlüsselname
(datenfeldname,…));
CREATE TABLE ( … FOREIGN KEY
(datenfeldname)
REFERENCES
tabellenname(datenfeldname));
FOREIGN KEY (datenfeldname)
REFERENCES
tabellenname(datenfeldname) ON DELETE
CASCADE;
ALTER TABLE tabellenname ADD PRIMARY
KEY
(datenfeldname);
ALTER TABLE tabellenname ADD UNIQUE
schlüsselname(datenfeld,…);
Sekundärschlüssel erstellen
-
Fremdschlüssel erstellen
-
referenzierte Datensätze
beim
Löschen einschliessen
-
Primärschlüssel nachträglich
hinzufügen
-
ALTER TABLE tabellenname ADD FOREIGN
KEY …;
ALTER TABLE tabellenname DROP
PRIMARY KEY;
ALTER TABLE tabellenname DROP INDEX
name;
CREATE INDEX indexname ON
tabelle(datenfeld);
DROP INDEX indexname [ON tabellenname];
Sekundärschlüssel
nachträglich
erstellen
Fremdschlüssel nachträglich erstellen
Primary Key löschen
-
Sekundärschlüssel löschen
-
einen Index erstellen
-
einen Index löschen
-
SHOW INDEX FROM tabellenname;
Indexes für Tabelle anzeigen
-
CREATE VIEW viewname [(datenfeldliste)]
AS SELECT
DROP VIEW viewname;
Eine Sicht erstellen
Eine Sicht löschen
geht noch nicht in MYSQL
INSERT INTO viewname …;
In eine Sicht Daten füllen
-
UPDATE viewname SET … ;
Eine Sicht updaten (wie
TABLE)
Aus einer sicht löschen
-
DECLARE cursorname CURSOR FOR
SELECT …;
OPEN cursorname
FETCH cursorname INTO | USING
:hostvariable, … ;
CLOSE cursorname;
Einen Cursor erstellen
geht noch nicht in MYSQL
Datenzugriff mit dem Cursor
OPEN c_lager;
FETCH c_lager INTO :id, :stueck, :preis;
Einen Cursor schliessen
-
DELIMITER <<Zeichen>>
Neuen Delimiter setzen als ;
DELIMITER //
DELETE FROM viewname …;
Dominic Jäggi
5 von 6
14.05.2016
-
Glossar zur MySQL
SELECT datenfelder FROM tabelle
WHERE feld > ALL (SELECT datenfelder
FROM
tabelle2 WHERE bedingung)
SELECT datenfelder FROM tabelle
WHERE feld > ANY (SELECT datenfelder
FROM
tabelle2 WHERE bedingung)
Dominic Jäggi
Sub-Query mit ALL
hier: grösser alles alle
anderen
SELECT lname,salary FROM employee
WHERE salary > ALL (SELECT salary
FROM employee WHERE dno=5);
Sub-Query mit ANY
hier: mehr als irgend einer
SELECT * FROM employee
WHERE salary > ANY (SELECT e.SALARY
FROM EMPLOYEE e, DEPARTMENT d
WHERE e.SSN = d.MGRSSN);
6 von 6
14.05.2016
Glossar zur MySQL
Herunterladen