$count = $db->exec("INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00);");
exec
runs the given SQL code and returns the number of rows affected.
$db = new PDO("mysql:dbname=imdb_small", "jessica", "guiness");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$rows = $db->query("SEEELECT * FROM movies WHERE year = 2000");
# kaboom!
Using setAttribute
, you can tell PDO to throw (generate) a
PDOException
when an error occurs.
The exceptions will appear as error messages on the page output.
You can catch the exception to gracefully handle the error.
Database querying
Database manipulation (create/insert)
Accessing SQL from PHP with the PDO object
grades
with student_id
)
SELECT col(s)
FROM table1, table2, ...
WHERE table1.a = table2.b
AND table2.c > '42';
SELECT students.name, grades.*
FROM students, grades
WHERE students.id = grades.student_id
AND grades.grade > 'C';
Result table
SELECT students.name, grades.*
FROM students, grades
WHERE students.id = grades.student_id
AND grades.grade > 'C';
A more compact solution (giving variable names to tables)
SELECT s.name, g.*
FROM students s, grades g
WHERE s.id = g.student_id
AND g.grade > 'C';
SELECT s.name, g.*
FROM students s, grades g
WHERE s.id = g.student_id
AND g.grade > 'C';
SELECT s.name, g.*
FROM students s
JOIN grades g ON s.id = g.student_id
WHERE g.grade > 'C';
The JOIN
keyword is another way to join multiple tables. Some people find
this more intuitive, while others find joining tables on multiple WHERE conditions more
intuitive. Use whichever form you prefer most!
Note: There are other types of JOINS you may find on the recommended SQL query practice sites. You may learn these for fun if you'd like, but we don't cover it in this class (you will learn about them in other database courses). The JOIN keyword in this slide's example is also known as an "INNER JOIN"
Exercise: What courses have been taken by both Bart and Lisa?
SELECT bart.course_id
FROM grades bart, grades lisa
WHERE lisa.course_id = bart.course_id
AND bart.student_id = 123
AND lisa.student_id = 888;
What's wrong here?
What courses have been taken by both Bart and Lisa?
SELECT DISTINCT c.name
FROM courses c, students lisa, students bart, grades g1, grades g2
WHERE g1.course_id = c.id
AND g1.student_id = bart.id
AND g2.course_id = c.id
AND g2.student_id = lisa.id
AND bart.name = 'Bart'
AND lisa.name = 'Lisa';
Why so many tables?
student
and grades
information distinctly,
so we need to have two variables for each of these tables to join them correctly.What are the names of all teachers Bart has had?
How many total students has Ms. Krabappel taught, and what are their names?
Figure out the proper SQL queries in the following way:
FROM
)SELECT
)JOIN
and/or WHERE
) and values
filtered (WHERE
)?DISTINCT
records?
imdb-small
is also provided on the query tester page for testing queries
with a smaller dataset
What are the names of all movies released in 1995?
How many people played a part in the movie "Lost in Translation"?
What are the names of all the people who played a part in the movie "Lost in Translation"?
Who directed the movie "Fight Club"?
How many movies has Clint Eastwood directed?
What are the names of all movies Clint Eastwood has directed?
What are the names of all directors who have directed at least one horror film?
What are the names of every actor who has appeared in a movie directed by Christopher Nolan?
Tips for practicing SQl for your final HW and the exam:
create.sql
file, creating a few tables of your choice.
INSERT
statements to populate these tables with different data (as
Kyle did for his todolist example on Fridaymysql
and use source create.sql
to create your tables in your mysql database.
This exercise is actually not too long, but will be very helpful for HW7 and your creative projects (and could be a good piece in your software development portfolio