Creating tables in MySQL:

-        Use your own database (e.g., c433323su01yangt2) to create tables. NOTE: The underlined should be replaced by your own account name.

 

-        Once a table has been created, you may insert tuples into it.

Note: Data may be truncated depending on the data types and the value to be inserted.

Reference: Aldo Zelen. Understanding Numerical Data Types in SQL. Online: https://learnsql.com/blog/understanding-numerical-data-types-sql/#:~:text=There%20is%20a%20small%20difference,is%20specified%20by%20the%20coder.

 

-        The problem is that there does not exist a Primary Key in the Account table.

-        EX: Revise the Create Account statement above to add accountNo as the primary key.

Drop table account;

CREATE TABLE account (

accountNo integer,

balance numeric(8,2),

Constraint primary key (accountNo)

);

 

 

-        Q: Can we change a table after it is created?

-        Answer: Yes. Use the ALTER TABLE statement.

Source: https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

EX: Revise the Account table by adding an attribute called accountType with data type CHAR.

Alter table account

     Add accountType Char After accountNo;

 

EX: Use UPDATE to set the accountType of accountNo 1313 to ‘S’ (for Saving).

Update account

Set

     accountType = ‘S’

Where

     accountNo=1313;

 

EX: Use UPDATE to set the accountType of accountNo 2313 to ‘C’ (for Checking).

 

Switch to the toyu database.

Q1: What would be returned by the following query?

select stuid, concat('number of courses = ', round(ach/3)) from student;

 

Q2: Rewrite the following JOIN query as a Nested query.

Select distinct s.* from student s, enroll e where s.stuId = e.stuId;

+--------+---------+---------+-------+-------+-----+---------+

| stuId  | fname   | lname   | major | minor | ach | advisor |

+--------+---------+---------+-------+-------+-----+---------+

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |

| 100008 | Bill    | Ching   | ARTS  | NULL  |  90 |    NULL |

+--------+---------+---------+-------+-------+-----+---------+

Q3: Rewrite the following JOIN query using NATURAL JOIN. Hint: Review https://www.w3resource.com/mysql/advance-query-in-mysql/mysql-natural-join.php for NATURAL JOIN syntax and examples.

Select * from student s, enroll e where s.stuId = e.stuId;

 

Q4: Given the following nested query, first (a) explain what this query do, and then (b) rewrite the nested query as a NATURAL JOIN query.

Hint: Use GROUP BY and HAVING.

Select * from student where EXISTS (select * from enroll where enroll.stuid = student.stuid);

+--------+---------+---------+-------+-------+-----+---------+

| stuId  | fname   | lname   | major | minor | ach | advisor |

+--------+---------+---------+-------+-------+-----+---------+

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |

| 100008 | Bill    | Ching   | ARTS  | NULL  |  90 |    NULL |

+--------+---------+---------+-------+-------+-----+---------+

Q5: Are NATURAL JOIN the same as JOIN? Compare the results from the following two queries.

Select * from student NATURAL JOIN enroll);

Select * from student JOIN enroll);

 

·        The ORDER BY keyword is used to sort the result-set in ascending or descending order.

Reference: https://www.w3schools.com/mysql/mysql_orderby.asp

Q6: Revise the query below such that the tuples are sorted on stuId.

Select * from student NATURAL JOIN enroll;

+--------+---------+---------+-------+-------+-----+---------+---------+-------+----------+

| stuId  | fname   | lname   | major | minor | ach | advisor | classId | grade | n_alerts |

+--------+---------+---------+-------+-------+-----+---------+---------+-------+----------+

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10001 | A     |        2 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10004 | A-    |        1 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10002 | B+    |        1 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   11001 | D     |        4 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10003 | C     |        0 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10000 | A     |        0 |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |   10001 | A-    |        0 |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |   10000 | NULL  |     NULL |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |   10000 | B-    |        3 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |   10002 | B+    |        2 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |   10003 | D     |        4 |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |   10004 | B+    |     NULL |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |   10003 | A     |        0 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10003 | NULL  |     NULL |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10004 | A-    |        0 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10005 | A-    |        0 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10006 | B+    |     NULL |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |   10004 | C+    |     NULL |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |   10005 | A     |     NULL |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |   10007 | F     |        4 |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |   10008 | A-    |        0 |

| 100008 | Bill    | Ching   | ARTS  | NULL  |  90 |    NULL |   10007 | C-    |        0 |

+--------+---------+---------+-------+-------+-----+---------+---------+-------+----------+


Q8: Revise the query below such that the tuples are sorted on stuId (major order) and classId (minor order).

Select * from student NATURAL JOIN enroll;

+--------+---------+---------+-------+-------+-----+---------+---------+-------+----------+

| stuId  | fname   | lname   | major | minor | ach | advisor | classId | grade | n_alerts |

+--------+---------+---------+-------+-------+-----+---------+---------+-------+----------+

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10000 | A     |        0 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10001 | A     |        2 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10002 | B+    |        1 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10003 | C     |        0 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   10004 | A-    |        1 |

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |   11001 | D     |        4 |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |   10000 | NULL  |     NULL |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |   10001 | A-    |        0 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |   10000 | B-    |        3 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |   10002 | B+    |        2 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |   10003 | D     |        4 |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |   10003 | A     |        0 |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |   10004 | B+    |     NULL |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10003 | NULL  |     NULL |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10004 | A-    |        0 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10005 | A-    |        0 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |   10006 | B+    |     NULL |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |   10004 | C+    |     NULL |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |   10005 | A     |     NULL |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |   10007 | F     |        4 |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |   10008 | A-    |        0 |

| 100008 | Bill    | Ching   | ARTS  | NULL  |  90 |    NULL |   10007 | C-    |        0 |

+--------+---------+---------+-------+-------+-----+---------+---------+-------+----------+

 

·        GROUP BY is often used together with aggregate function such as count( ).

Reference: https://www.w3schools.com/mysql/mysql_groupby.asp

Q8: Run the following query and explain what the query does.

select s.*, count(stuid) from student s natural join enroll group by stuid;

+--------+---------+---------+-------+-------+-----+---------+--------------+

| stuId  | fname   | lname   | major | minor | ach | advisor | count(stuid) |

+--------+---------+---------+-------+-------+-----+---------+--------------+

| 100000 | Tony    | Hawk    | CSCI  | CINF  |  40 |    1011 |            6 |

| 100001 | Mary    | Hawk    | CSCI  | CINF  |  35 |    1011 |            2 |

| 100002 | David   | Hawk    | CSCI  | ITEC  |  66 |    1012 |            3 |

| 100004 | Larry   | Johnson | ITEC  | NULL  |  66 |    1017 |            2 |

| 100005 | Linda   | Johnson | CINF  | ENGL  |  13 |    1015 |            4 |

| 100006 | Lillian | Johnson | CINF  | ITEC  |  18 |    1016 |            2 |

| 100007 | Ben     | Zico    | NULL  | NULL  |  16 |    NULL |            2 |

| 100008 | Bill    | Ching   | ARTS  | NULL  |  90 |    NULL |            1 |

+--------+---------+---------+-------+-------+-----+---------+--------------+

 

Q9: Revise the query above such that it only returns the students who have taken more than 4 classes.

+--------+-------+-------+-------+-------+-----+---------+--------------+

| stuId  | fname | lname | major | minor | ach | advisor | count(stuid) |

+--------+-------+-------+-------+-------+-----+---------+--------------+

| 100000 | Tony  | Hawk  | CSCI  | CINF  |  40 |    1011 |            6 |

+--------+-------+-------+-------+-------+-----+---------+--------------+