MariaDB [toyu]> WITH ma AS -> (SELECT s.major AS deptCode, COUNT(s.stuId) AS numMajor -> FROM student AS s -> GROUP BY s.major), -> mi AS -> (SELECT s.minor AS deptCode, COUNT(s.stuId) AS numMinor -> FROM student AS s -> GROUP BY s.minor), -> f AS -> (SELECT f.deptCode, COUNT(f.facId) AS numFaculty -> FROM faculty AS f -> GROUP BY f.deptCode) -> SELECT d.deptCode, -> d.deptName, -> IFNULL(f.numFaculty, 0) AS numFaculty, -> IFNULL(ma.numMajor, 0) AS numMajor, -> IFNULL(mi.numMinor, 0) AS numMinor -> FROM department AS d LEFT JOIN ma USING (deptCode) -> LEFT JOIN mi USING (deptCode) -> LEFT JOIN f USING (deptCode); +----------+------------------------------+------------+----------+----------+ | deptCode | deptName | numFaculty | numMajor | numMinor | +----------+------------------------------+------------+----------+----------+ | ACCT | Accounting | 1 | 0 | 0 | | ARTS | Arts | 1 | 2 | 0 | | CINF | Computer Information Systems | 2 | 2 | 3 | | CSCI | Computer Science | 4 | 3 | 1 | | ENGL | English | 1 | 0 | 1 | | ITEC | Information Technology | 2 | 2 | 2 | | MATH | Mathematics | 0 | 0 | 0 | +----------+------------------------------+------------+----------+----------+ 7 rows in set (0.002 sec) MariaDB [toyu]> MariaDB [toyu]> SET @sql = "SELECT * FROM toyu.student";SET @sql = "SELECT * FROM toyu.student";SET @sql = "SELECT * FROM toyu.student"; Query OK, 0 rows affected (0.001 sec) Query OK, 0 rows affected (0.000 sec) Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SELECT @sql; +----------------------------+ | @sql | +----------------------------+ | SELECT * FROM toyu.student | +----------------------------+ 1 row in set (0.000 sec) MariaDB [toyu]> PREPARE stmt FROM @sql; Query OK, 0 rows affected (0.001 sec) Statement prepared MariaDB [toyu]> EXECUTE stmt; +--------+-----------+----------+-------+-------+------+---------+ | 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 | | 100003 | Catherine | Lim | ITEC | CINF | 20 | NULL | | 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 | | 100009 | Linda | King | ARTS | CSCI | 125 | 1018 | | 100111 | Cathy | Johanson | NULL | NULL | 0 | 1018 | +--------+-----------+----------+-------+-------+------+---------+ 11 rows in set (0.001 sec) MariaDB [toyu]> EXECUTE stmt; +--------+-----------+----------+-------+-------+------+---------+ | 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 | | 100003 | Catherine | Lim | ITEC | CINF | 20 | NULL | | 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 | | 100009 | Linda | King | ARTS | CSCI | 125 | 1018 | | 100111 | Cathy | Johanson | NULL | NULL | 0 | 1018 | +--------+-----------+----------+-------+-------+------+---------+ 11 rows in set (0.001 sec) MariaDB [toyu]> EXECUTE stmt; +--------+-----------+----------+-------+-------+------+---------+ | 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 | | 100003 | Catherine | Lim | ITEC | CINF | 20 | NULL | | 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 | | 100009 | Linda | King | ARTS | CSCI | 125 | 1018 | | 100111 | Cathy | Johanson | NULL | NULL | 0 | 1018 | +--------+-----------+----------+-------+-------+------+---------+ 11 rows in set (0.001 sec) MariaDB [toyu]> EXECUTE stmt; +--------+-----------+----------+-------+-------+------+---------+ | 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 | | 100003 | Catherine | Lim | ITEC | CINF | 20 | NULL | | 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 | | 100009 | Linda | King | ARTS | CSCI | 125 | 1018 | | 100111 | Cathy | Johanson | NULL | NULL | 0 | 1018 | +--------+-----------+----------+-------+-------+------+---------+ 11 rows in set (0.000 sec) MariaDB [toyu]> DEALLOCATE PREPARE stmt; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> -- with placeholders. MariaDB [toyu]> SET @sql = "SELECT * FROM toyu.student WHERE major = ? AND ach >= ?"; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> PREPARE stmt FROM @sql; Query OK, 0 rows affected (0.000 sec) Statement prepared MariaDB [toyu]> SET @major = 'CSCI'; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @ach = 38; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> EXECUTE stmt USING @major, @ach; +--------+-------+-------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+-------+-------+-------+------+---------+ | 100000 | Tony | Hawk | CSCI | CINF | 40 | 1011 | | 100002 | David | Hawk | CSCI | ITEC | 66 | 1012 | +--------+-------+-------+-------+-------+------+---------+ 2 rows in set (0.000 sec) MariaDB [toyu]> MariaDB [toyu]> EXECUTE stmt USING 'CSCI', 38; +--------+-------+-------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+-------+-------+-------+------+---------+ | 100000 | Tony | Hawk | CSCI | CINF | 40 | 1011 | | 100002 | David | Hawk | CSCI | ITEC | 66 | 1012 | +--------+-------+-------+-------+-------+------+---------+ 2 rows in set (0.000 sec) MariaDB [toyu]> MariaDB [toyu]> SET @major = 'CINF'; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @ach = 15; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> EXECUTE stmt USING @major, @ach; +--------+---------+---------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+---------+---------+-------+-------+------+---------+ | 100006 | Lillian | Johnson | CINF | ITEC | 18 | 1016 | +--------+---------+---------+-------+-------+------+---------+ 1 row in set (0.000 sec) MariaDB [toyu]> MariaDB [toyu]> SET @major = 'ITEC'; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @ach = 25; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> EXECUTE stmt USING @major, @ach; +--------+-------+---------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+---------+-------+-------+------+---------+ | 100004 | Larry | Johnson | ITEC | NULL | 66 | 1017 | +--------+-------+---------+-------+-------+------+---------+ 1 row in set (0.000 sec) MariaDB [toyu]> MariaDB [toyu]> DEALLOCATE PREPARE stmt; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @sql = "SELECT * FROM toyu.student WHERE major = ? AND ach >= ?"; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> PREPARE stmt FROM @sql; Query OK, 0 rows affected (0.000 sec) Statement prepared MariaDB [toyu]> SET @major = 'CSCI'; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @ach = 38; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> EXECUTE stmt USING @major, @ach; +--------+-------+-------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+-------+-------+-------+------+---------+ | 100000 | Tony | Hawk | CSCI | CINF | 40 | 1011 | | 100002 | David | Hawk | CSCI | ITEC | 66 | 1012 | +--------+-------+-------+-------+-------+------+---------+ 2 rows in set (0.001 sec) MariaDB [toyu]> EXECUTE stmt USING @major, 15; +--------+-------+-------+-------+-------+------+---------+ | 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 | +--------+-------+-------+-------+-------+------+---------+ 3 rows in set (0.001 sec) MariaDB [toyu]> EXECUTE stmt USING @major, 15 + 40; +--------+-------+-------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+-------+-------+-------+------+---------+ | 100002 | David | Hawk | CSCI | ITEC | 66 | 1012 | +--------+-------+-------+-------+-------+------+---------+ 1 row in set (0.001 sec) MariaDB [toyu]> MariaDB [toyu]> EXECUTE stmt USING 'CSCI', 38; +--------+-------+-------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+-------+-------+-------+------+---------+ | 100000 | Tony | Hawk | CSCI | CINF | 40 | 1011 | | 100002 | David | Hawk | CSCI | ITEC | 66 | 1012 | +--------+-------+-------+-------+-------+------+---------+ 2 rows in set (0.001 sec) MariaDB [toyu]> MariaDB [toyu]> SET @major = 'CINF'; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @ach = 15; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> EXECUTE stmt USING @major, @ach; +--------+---------+---------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+---------+---------+-------+-------+------+---------+ | 100006 | Lillian | Johnson | CINF | ITEC | 18 | 1016 | +--------+---------+---------+-------+-------+------+---------+ 1 row in set (0.000 sec) MariaDB [toyu]> MariaDB [toyu]> SET @major = 'ITEC'; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @ach = 25; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> EXECUTE stmt USING @major, @ach; +--------+-------+---------+-------+-------+------+---------+ | stuId | fname | lname | major | minor | ach | advisor | +--------+-------+---------+-------+-------+------+---------+ | 100004 | Larry | Johnson | ITEC | NULL | 66 | 1017 | +--------+-------+---------+-------+-------+------+---------+ 1 row in set (0.000 sec) MariaDB [toyu]> DEALLOCATE PREPARE stmt; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SET @sql = "SELECT * FROM toyu.student"; -- @: session variable. Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> PREPARE stmt_2 FROM @sql; Query OK, 0 rows affected (0.000 sec) Statement prepared MariaDB [toyu]> EXECUTE stmt_2; +--------+-----------+----------+-------+-------+------+---------+ | 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 | | 100003 | Catherine | Lim | ITEC | CINF | 20 | NULL | | 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 | | 100009 | Linda | King | ARTS | CSCI | 125 | 1018 | | 100111 | Cathy | Johanson | NULL | NULL | 0 | 1018 | +--------+-----------+----------+-------+-------+------+---------+ 11 rows in set (0.000 sec) MariaDB [toyu]> DEALLOCATE PREPARE stmt_2; Query OK, 0 rows affected (0.000 sec) MariaDB [toyu]> SELECT s.schoolCode, s.schoolName, -> COUNT(d.deptCode) AS n_departments -> FROM school AS s LEFT JOIN department AS d ON (s.schoolCode = d.schoolCode) -> GROUP BY s.schoolCode, s.schoolName; +------------+-------------------------------+---------------+ | schoolCode | schoolName | n_departments | +------------+-------------------------------+---------------+ | BUS | Business | 1 | | CSE | Science and Engineering | 4 | | EDU | Education | 0 | | HSH | Human Sciences and Humanities | 2 | +------------+-------------------------------+---------------+ 4 rows in set (0.001 sec) MariaDB [toyu]> MariaDB [toyu]> CREATE OR REPLACE VIEW school_summary( -> schoolCode, schoolName, n_departments) AS -> SELECT s.schoolCode, s.schoolName, -> COUNT(d.deptCode) AS n_departments -> FROM school AS s LEFT JOIN department AS d ON (s.schoolCode = d.schoolCode) -> GROUP BY s.schoolCode, s.schoolName; Query OK, 0 rows affected (0.006 sec) MariaDB [toyu]> SHOW CREATE VIEW school_summary; +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | school_summary | CREATE ALGORITHM=UNDEFINED DEFINER=`yue`@`localhost` SQL SECURITY DEFINER VIEW `school_summary` AS select `s`.`schoolCode` AS `schoolCode`,`s`.`schoolName` AS `schoolName`,count(`d`.`deptCode`) AS `n_departments` from (`school` `s` left join `department` `d` on(`s`.`schoolCode` = `d`.`schoolCode`)) group by `s`.`schoolCode`,`s`.`schoolName` | cp850 | cp850_general_ci | +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 1 row in set (0.000 sec) MariaDB [toyu]> -- Note something like "ALGORITHM=UNDEFINED DEFINER=`yue`@`localhost` SQL SECURITY DEFINER" MariaDB [toyu]> -- (default values) may be added. MariaDB [toyu]> DESC school_summary; +---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | schoolCode | char(3) | NO | | NULL | | | schoolName | varchar(30) | NO | | NULL | | | n_departments | bigint(21) | NO | | 0 | | +---------------+-------------+------+-----+---------+-------+ 3 rows in set (0.009 sec) MariaDB [toyu]> MariaDB [toyu]> SELECT * -> FROM school_summary -> WHERE n_departments > 0; +------------+-------------------------------+---------------+ | schoolCode | schoolName | n_departments | +------------+-------------------------------+---------------+ | BUS | Business | 1 | | CSE | Science and Engineering | 4 | | HSH | Human Sciences and Humanities | 2 | +------------+-------------------------------+---------------+ 3 rows in set (0.001 sec) MariaDB [toyu]> notee