Professional Documents
Culture Documents
SQL Ebook Codingthailand
SQL Ebook Codingthailand
MySQL
CodingThailand.com
.com
Programming Coach by
facebook.com/codingthailand
11
17
SELECT
SELECT
SELECT
26
1 Join
SELECT (Subqueries)
5 SQL Function
33
(Aggregate Function)
GROUP BY
HAVING
40
(Privileges)
GRANT
REVOKE
www.codingthailand.com
E-Book 2558
SQL
2558
30/12/57
www.codingthailand.com
http://www.codingthailand.com/site/index.php?r=site/courses&id=10
www.codingthailand.com
1
Data Definition Language
SQL (Structure Query Language)
SQL
SQL Data Definition Language
DDL
1.
2.
3.
4.
www.codingthailand.com
departmentID
INT
PRIMARY KEY
Name
VARCHAR(80)
2 Employee
()
employeeID
INT
PRIMARY KEY
Name
VARCHAR(80)
Job
VARCHAR(30)
Salary
INT
deparmentID
INT
FOREIGN KEY
departmentID
Department
3 EmployeeSkills
()
employeeID
INT
PRIMARY KEY
Skill
VARCHAR(15)
PRIMARY KEY employeeID
www.codingthailand.com
4 Client
()
clientID
INT
PRIMARY KEY
Name
VARCHAR(40)
Address
VARCHAR(100)
contactPerson
VARCHAR(80)
contactNumber
CHAR(12)
5 Assignment
()
clientID
INT
PRIMARY KEY
EmployeeID
INT
PRIMARY KEY
Workdate
DATE
PRIMARY KEY
Hours
FLOAT
(Data Types)
CHAR(size) (size)
CHAR(10)
VARCHAR(size) (size)
VARCHAR(20)
INT(size)
INT(6)
FLOAT(size,d) size
d FLOAT(10,2)
DATE
www.codingthailand.com
1.2 CREATE
CREATE
1.2.1 CREATE DATABASE
CREATE DATABASE
CREATE DATABASE ;
1 emp_db
CREATE DATABASE emp_db;
1.2.2 CREATE TABLE
CREATE TABLE
CREATE TABLE
(
1 ,
2 ,
3 ,
...
)
1) Constraints
1.1) PRIMARY KEY
CREATE TABLE
(
1 ,
2 ,
3 ,
...
PRIMARY KEY ( PRIMARY KEY)
)
PRIMARY KEY PRIMARY KEY
(,) PRIMARY KEY
www.codingthailand.com
CREATE TABLE
(
1 ,
2 ,
3 ,
...
PRIMARY KEY ( 1, 2, 3,)
)
1.2) FOREIGN KEY
CREATE TABLE
(
1 ,
2 ,
3 ,
...
FOREIGN KEY ( FOREIGN KEY) REFERENCES
( )
)
PRIMARY KEY
FOREIGN KEY
ON DELETE CASCADE
CREATE TABLE
(
1 ,
2 ,
3 ,
FOREIGN KEY ( FOREIGN KEY) REFERENCES
( ) ON DELETE CASCADE
)
www.codingthailand.com
PRIMARY KEY
FOREIGN KEY
ON UPDATE CASCADE
CREATE TABLE
(
1 ,
2 ,
3 ,
...
FOREIGN KEY ( FOREIGN KEY) REFERENCES
( ) ON UPDATE CASCADE
)
ON DELETE CASCADE ON UPDATE CASCADE
CREATE TABLE
(
1 ,
2 ,
3 ,
...
FOREIGN KEY ( FOREIGN KEY) REFERENCES
( ) ON DELETE CASCADE
ON UPDATE CASCADE
)
1.3) NOT NULL
NOT NULL
(Null)
www.codingthailand.com
CREATE TABLE
(
1 NOT NULL,
2 NOT NULL,
3 NOT NULL,
...
)
2 Department
CREATE TABLE Department
(
departmentID INT,
name VARCHAR(30) NOT NULL,
PRIMARY KEY (departmentID)
)
3 Employee
CREATE TABLE Employee
(
employeeID INT,
name VARCHAR(80),
job VARCHAR(30),
salary INT,
departmentID INT,
PRIMARY KEY (employeeID),
FOREIGN KEY (departmentID) REFERENCES Department (departmentID)
)
www.codingthailand.com
4 EmployeeSkills
CREATE TABLE EmployeeSkills
(
employeeID INT,
skill VARCHAR(15),
PRIMARY KEY (employeeID,skill)
)
5 Client
CREATE TABLE Client
(
clientID INT,
name VARCHAR(40),
address VARCHAR(100),
contactperson VARCHAR(80),
contactnumber CHAR(12),
PRIMARY KEY (clientID)
)
6 Assignment
CREATE TABLE Assignment
(
clientID INT,
employeeID INT,
workdate DATE,
hours FLOAT,
PRIMARY KEY (clientID, employeeID, workdate)
)
www.codingthailand.com
1.3 ALTER
1.3.1 ALTER TABLE
1) ALTER TABLE
ALTER TABLE
ADD
5 Department datestart
DATE
ALTER TABLE Department
ADD datestart DATE
2) ALTER TABLE
ALTER TABLE
DROP COLUMN
6 datestart Department
ALTER TABLE Department
DROP COLUMN datestart
3) ALTER TABLE PRIMARY KEY
PRIMARY KEY
ALTER TABLE
ADD PRIMARY KEY( )
7 PRIMARY KEY departmentID Department
ALTER TABLE Department
ADD PRIMARY KEY(departmentID)
www.codingthailand.com
10
11
2
Data Manipulation Language
Data Definition Language
SQL
Data Manipulation Language DML SELECT,
INSERT, UPDATE DELETE SELECT
1.
2.
3.
4.
www.codingthailand.com
12
www.codingthailand.com
13
3 INSERT Employee
INSERT INTO Employee (employeeID,name,job,salary,departmentID)
VALUES (1111,Somchai,Programmer,15000,1)
3 departmentID Employee
departmentID Department ( 1) departmentID
Employee FOREIGN KEY
4 INSERT EmployeeSkills
INSERT INTO EmployeeSkills (employeeID,skill)
VALUES (1111,PHP)
5 INSERT Client
INSERT INTO Client (clientID,name,address,contactperson,contactnumber)
VALUES (1,ABC Company Limited,1 Silom Rd.,Vera,02-9555123)
6 INSERT Assignment
INSERT INTO Assignment (clientID,employeeID,workdate,hours)
VALUES (1,1111,2010-04-27,8.5)
2.3 UPDATE
UPDATE
UPDATE
SET 1=1, 2=2,...
WHERE
7 UPDATE Department name
Marketing (WHERE) departmentID 1
UPDATE Department
SET name = Marketing
WHERE departmentID = 1
www.codingthailand.com
14
(Operators)
(Operators)
(Comparison Operators)
<
<=
>
>=
<>
10 UPDATE 10000
15000
UPDATE Employee
SET salary = 15000
WHERE salary < 10000
www.codingthailand.com
15
UPDATE UPDATE
(WHERE) UPDATE (record)
(WHERE) (record)
UPDATE Employee
SET salary = 24000
(WHERE) 24000
2.4 DELETE
DELETE
DELETE FROM
WHERE
11 DELETE
1111
DELETE FROM Employee
WHERE employeeID = 1111
12 DELETE
Programmer
DELETE FROM Employee
WHERE job = Programmer
DELETE
DELETE FROM
13 DELETE Assignment
DELETE FROM Assignment
www.codingthailand.com
16
Data Manipulation Language
INSERT
UPDATE
DELETE
www.codingthailand.com
17
3
Data Retrieval Command
Data Retrieval Command
Data Manipulation Language DML Data Retrieval Command
SELECT (Query)
SELECT (Operators)
SELECT
1. SELECT
2. SELECT
3. SELECT
www.codingthailand.com
18
3.1 SELECT
SELECT 5 5
Department ():
departmentID
Name
42
Finance
128
Research and Development
130
Marketing
Employee ():
employeeID
Name
1111
Somchai
2222
Wichit
3333
Somjai
4444
Yongyut
Job
Programmer
DBA
Programmer
Programmer
Salary
15000
13500
16500
20000
departmentID
128
42
128
130
EmployeeSkills: ( )
employeeID
skill
1111
JAVA
1111
PHP
2222
Linux
3333
JSP
4444
VB
4444
MySQL
Client: ( )
clientID
Name
1
ABC Company Limited
2
Imperial Industry
Address
1 Silom Rd.
100 Samutprakarn
contactPerson contactNumber
Vera
02-1234567
Mongkol
02-3456789
www.codingthailand.com
19
Assignment: ( )
clientID
employeeID
Workdate
1
1111
2010-04-10
2
2222
2010-04-20
1
1111
2010-04-25
hours
8.5
7
5
SELECT
SELECT 1, 2, 3,
FROM
1 SELECT Department
SELECT departmentID,Name
FROM Department
1
departmentID
Name
42
Finance
128
Research and Development
130
Marketing
(*)
2 Department
SELECT *
FROM Department
www.codingthailand.com
20
2
departmentID
42
128
130
Name
Finance
Research and Development
Marketing
3 employeeID Name Salary Employee
SELECT employeeID,Name,Salary
FROM Employee
3
employeeID
Name
Salary
1111
Somchai
15000
2222
Wichit
13500
3333
Somjai
16500
4444
Yongyut
20000
3.2 SELECT
SELECT
SELECT
SELECT 1, 2, 3,
FROM
WHERE
4 SELECT
Programmer
SELECT *
FROM Employee
WHERE job=Programmer
www.codingthailand.com
21
4
employeeID
Name
1111
Somchai
3333
Somjai
4444
Yongyut
Job
Programmer
Programmer
Programmer
Salary
15000
16500
20000
departmentID
128
128
130
5
16000
SELECT Name,Salary
FROM Employee
WHERE Salary > 16000
5
Name
Salary
Somjai
16500
Yongyut
20000
6 (contactPerson)
(contactNumber) Mongkol
SELECT contactPerson,contactNumber
FROM Client
WHERE contactPerson = Mongkol
6
contactPerson contactNumber
Mongkol
02-3456789
3.3 SELECT
(Operators)
SELECT SELECT
(=), (>), (<)
www.codingthailand.com
22
AND
OR
NOT
LIKE
BETWEEN
AND
OR
NOT
3.3.1 AND
7 Programmer 16000
SELECT name,salary
FROM Employee
WHERE job = Programmer AND salary < 16000
7
employeeID
Name
Job
Salary
departmentID
1111
Somchai
Programmer
15000
128
3.3.2 OR
8 (skill) JAVA PHP
SELECT *
FROM EmployeeSkills
WHERE skill = JAVA OR skill = MySQL
8
employeeID
skill
1111
JAVA
4444
MySQL
www.codingthailand.com
23
3.3.3 NOT
9 20000
SELECT employeeID,Name,Salary
FROM Employee
WHERE NOT Salary = 20000
9
employeeID
Name
Job
1111
Somchai
Programmer
2222
Wichit
DBA
3333
Somjai
Programmer
3.3.4 LIKE
10 S
SELECT name
FROM employee
WHERE name LIKE S%
10
Name
Somchai
Somjai
% (percent sign)
10 S
11 i
SELECT name
FROM employee
WHERE name LIKE %i%
11
Name
Somchai
Wichit
Somjai
www.codingthailand.com
24
_ (underscore) 1
12 (skill) 1
SP
SELECT skill
FROM Employeeskills
WHERE skill LIKE _SP
12
Name
JSP
3.3.5 BETWEEN
BETWEEN
AND
13 15000 20000
SELECT name,salary
FROM employee
WHERE salary BETWEEN 15000 AND 20000
13
Name
Salary
Somchai
15000
Somjai
16500
Yongyut
20000
14 (hours) (workdate)
(workdate) 20 .. 53 25 .. 53
SELECT hours,workdate
FROM Assignment
WHERE workdate BETWEEN 2010-04-20 AND 2010-04-25
www.codingthailand.com
25
14
hours
Workdate
7
2010-04-20
5
2010-04-25
BETWEEN DBMS
MySQL
ORDER BY 2
1. ORDER BY ASC
2. ORDER BY DESC
15
SELECT *
FROM client
ORDER BY name DESC
15
Name
contactNumber
Imperial Industry
02-3456789
ABC Company Limited
02-1234567
DESC ASC
ORDER BY ASC
SELECT (Query)
www.codingthailand.com
26
4
SELECT
1 (Joins) SELECT
(Subqueries)
1. 1 Join
2. SELECT (Subqueries)
www.codingthailand.com
27
4.1 1 Join
1
1
Join
Department ():
departmentID
Name
42
Finance
128
Research and Development
130
Marketing
Employee ():
employeeID
Name
Job
Salary
departmentID
1111
Somchai
Programmer
15000
128
2222
Wichit
DBA
13500
42
3333
Somjai
Programmer
16500
128
4444
Yongyut
Programmer
20000
Null
EmployeeSkills: ( )
employeeID
skill
1111
JAVA
1111
PHP
2222
Linux
3333
JSP
4444
VB
4444
MySQL
Client: ( )
clientID
Name
Address
contactPerson contactNumber
1
ABC Company Limited 1 Silom Rd.
Vera
02-1234567
2
Imperial Industry
100 Samutprakarn
Mongkol
02-3456789
www.codingthailand.com
28
Assignment: ( )
clientID
employeeID
Workdate
1
1111
2010-04-10
2
2222
2010-04-20
1
1111
2010-04-25
hours
8.5
7
5
Join
1. INNER JOIN
SELECT . ,
FROM 1
INNER JOIN 2
ON 1. 1=2. 2
1 2
1
SELECT employee.Name,department.Name
FROM Employee
INNER JOIN Department
ON Employee.departmentID = Department.departmentID
1
Name
Name
Somchai
Research and Development
Wichit
Finance
Somjai
Research and Development
INNER JOIN
1 departmentID Employee
departmentID Department
www.codingthailand.com
29
Employee
Department
SELECT employee.Name,department.Name
FROM Employee
LEFT JOIN Department
ON Employee.departmentID = Department.departmentID
2
employeeName
departmentName
Somchai
Research and Development
Wichit
Finance
Somjai
Research and Development
Yongyut
Null
www.codingthailand.com
30
Department
SELECT employee.Name,department.Name
FROM Employee
RIGHT JOIN Department
ON Employee.departmentID = Department.departmentID
www.codingthailand.com
31
3
employeeName
departmentName
Somchai
Research and Development
Somjai
Research and Development
Wichit
Finance
RIGHT JOIN ( Department)
( Employee)
departmentID employee departmentID Department
Employee
Department
www.codingthailand.com
32
4
Name
Name
Somchai
Research and Development
Somjai
Research and Development
4.2 SELECT (Subqueries)
SELECT
5 (Assignment) Somchai
SELECT *
FROM Assignment
WHERE employeeID =
(SELECT employeeID
FROM employee
WHERE name=Somchai)
5
clientID
employeeID
Workdate
hours
1
1111
2010-04-10
8.5
1
1111
2010-04-25
5
SELECT SELECT
WHERE 1 5 WHERE
(employeeID) Subquery
Subquery
join 1 join INNER
JOIN join
LEFT JOIN INNER
JOIN ( Null
) RIGHT JOIN (
Null ) SELECT
www.codingthailand.com
33
5
SQL Function
(DBMS) SQL Function
SQL Function
SQL Function DBMS
SQL Function DBMS
1. (Aggregate Function)
2. GROUP BY
3. HAVING
www.codingthailand.com
34
COUNT
(query)
MAX
MIN
SUM
Department ():
departmentID
Name
42
Finance
128
Research and Development
130
Marketing
Employee ():
employeeID
Name
Job
Salary
departmentID
1111
Somchai
Programmer
15000
128
2222
Wichit
DBA
13500
42
3333
Somjai
Programmer
16500
128
4444
Yongyut
Programmer
20000
Null
EmployeeSkills: ( )
employeeID
skill
1111
JAVA
1111
PHP
2222
Linux
3333
JSP
www.codingthailand.com
35
4444
VB
4444
MySQL
Client: ( )
clientID
Name
Address
1
ABC Company Limited 1 Silom Rd.
2
Imperial Industry
100 Samutprakarn
Assignment: ( )
clientID
employeeID
Workdate
1
1111
2010-04-10
2
2222
2010-04-20
1
1111
2010-04-25
contactPerson contactNumber
Vera
02-1234567
Mongkol
02-3456789
hours
8.5
7
5
5.1.1 AVG
SELECT AVG( )
FROM
1
SELECT AVG(salary)
FROM Employee
1
AVG(salary)
16250.0000
5.1.2 (query) COUNT
SELECT COUNT( )
FROM
www.codingthailand.com
36
2
SELECT COUNT(*)
FROM Department
2
COUNT(*)
3
5.1.3 MAX
SELECT MAX( )
FROM
3
SELECT MAX(salary)
FROM Employee
3
MAX(salary)
20000
5.1.4 MIN
SELECT MIN( )
FROM
4
SELECT MIN(salary)
FROM Employee
4
MIN(salary)
13500
www.codingthailand.com
37
5.1.5 SUM
SELECT SUM( )
FROM
5
SELECT SUM(salary)
FROM Employee
5
SUM(salary)
65000
WHERE
6 15000
SELECT AVG(salary)
FROM Employee
WHERE salary <= 15000
6
AVG(salary)
14250.0000
5.2 GROUP BY
Aggregate
Function (set) 1
GROUP BY
www.codingthailand.com
38
SELECT , ( )
FROM
WHERE
GROUP BY
WHERE
7 (skill)
SELECT employeeID, COUNT(skill)
FROM EmployeeSkills
GROUP BY employeeID
7
employeeID
COUNT(skill)
1111
2
2222
1
3333
1
4444
2
7 employeeID
8 3333
(skill)
SELECT employeeID, COUNT(skill)
FROM EmployeeSkills
WHERE employeeID >= 3333
GROUP BY employeeID
8
employeeID
COUNT(skill)
3333
1
4444
2
www.codingthailand.com
39
5.3 HAVING
HAVING
SELECT , ( )
FROM
WHERE
GROUP BY
HAVING ( )
WHERE
9 1
SELECT employeeID, COUNT(skill)
FROM EmployeeSkills
GROUP BY employeeID
HAVING COUNT(skill) > 1
9
employeeID
COUNT(skill)
1111
2
4444
2
9 COUNT
HAVING
(DBMS) SQL Function
Aggregate Function
SUM AVG COUNT
MIN MAX
www.codingthailand.com
40
6
Data Control Language
Data Control Language DCL
2 GRANT REVOKE
1. (Privileges)
2. GRANT
3. REVOKE
www.codingthailand.com
41
6.1 (Privileges)
(DBMS)
(Privilege)
(Privileges)
SELECT
INSERT
UPDATE
DELETE
ALTER
ALL
(Privileges)
6.2 (Privileges) GRANT
GRANT (Privileges)
GRANT 1, 2,
ON
TO 1, 2,
GRANT ALL PRIVILEGES
ON
TO 1, 2,
www.codingthailand.com
42
1 Employee user1
GRANT SELECT
ON Employee
TO user1
2
Employee user1
GRANT ALL PRIVILEGES
ON Employee
TO user1
3 Employee user1
GRANT SELECT,UPDATE,DELETE
ON Employee
TO user1
6.3 (Privileges) REVOKE
REVOKE (Privileges)
REVOKE 1, 2,
ON
FROM 1, 2,
REVOKE ALL PRIVILEGES
ON
FROM 1, 2,
www.codingthailand.com
43
4 Employee user1
REVOKE SELECT
ON Employee
FROM user1
5 Employee user1
GRANT SELECT,UPDATE,DELETE
ON Employee
FROM user1
6
Employee user1
REVOKE ALL PRIVILEGES
ON Employee
FROM user1
Data Control Language DCL
GRANT
REVOKE
www.codingthailand.com