diff --git a/Week2/assignment/Aggregate_Functions.js b/Week2/assignment/Aggregate_Functions.js new file mode 100644 index 000000000..4856fca98 --- /dev/null +++ b/Week2/assignment/Aggregate_Functions.js @@ -0,0 +1,62 @@ +import mysql from "mysql2/promise"; + +const connection = await mysql.createConnection({ + host: "localhost", + user: "hyfuser", + password: "hyfpassword", + database: "database_assingnment", +}); +console.log(" Connected to database: database_assingnment"); + +const [paperAuthors] = await connection.execute(` + select + rp.paper_id, + rp.paper_title, + count(ap.author_id) as number_of_authors + from research_Papers rp + join author_paper ap on rp.paper_id = ap.paper_id + group by rp.paper_id, rp.paper_title +`); +console.log("all research papers and number of authors that wrote them"); +console.table(paperAuthors); + +// +const [femalePaperCount] = await connection.execute(` + select count(distinct ap.paper_id) as total_unique_female_papers + from author_paper ap + join authors a ON ap.author_id = a.author_id + where a.gender = 'female' + `); +console.log("total research papers by femal authors"); +console.table(femalePaperCount); + +// +const [avgHIndexPerUni] = await connection.execute(` + select university, avg(h_index) as average_h_index + from authors + group by university +`); +console.log("Average h-index per university"); +console.table(avgHIndexPerUni); + +// +const [totalPapersPerUni] = await connection.execute(` + select a.university, count(distinct ap.paper_id) as total_unique_papers + from authors a + join author_paper ap ON a.author_id = ap.author_id + group by a.university +`); +console.log("Total research papers per university"); +console.table(totalPapersPerUni); + +// +const [minMaxHIndex] = await connection.execute(` + select university, min(h_index) as min_h_index, max(h_index) as max_h_index + from authors + group by university +`); +console.log("min and max h-index per university:"); +console.table(minMaxHIndex); + +// +await connection.end(); diff --git a/Week2/assignment/joins.js b/Week2/assignment/joins.js new file mode 100644 index 000000000..8da73e295 --- /dev/null +++ b/Week2/assignment/joins.js @@ -0,0 +1,34 @@ +import mysql from "mysql2/promise"; + +const connection = await mysql.createConnection({ + host: "localhost", + user: "hyfuser", + password: "hyfpassword", + database: "database_assingnment", +}); +console.log(" Connected to database: database_assingnment"); + +const [authorsWithMentors] = await connection.execute(` + select a.author_name as author, + m.author_name as mentor + from authors a left join authors m on a.mentor = m.author_id + + `); +console.log("authors and thier mentors"); +console.table(authorsWithMentors); + +// + +const [authorsAndPapers] = await connection.execute(` + select a.author_name as author, + rp.paper_title as paper from authors a + left join author_paper ap on a.author_id = ap.author_id + left join research_papers rp ON ap.paper_id = rp.paper_id + + `); + +console.log("Authors and their papers:"); +console.table(authorsAndPapers); +// + +await connection.end(); diff --git a/Week2/assignment/keys.js b/Week2/assignment/keys.js new file mode 100644 index 000000000..c4727aa04 --- /dev/null +++ b/Week2/assignment/keys.js @@ -0,0 +1,40 @@ +import mysql from "mysql2/promise"; + +const connection = await mysql.createConnection({ + host: "localhost", + user: "hyfuser", + password: "hyfpassword", + database: "database_assingnment", +}); +console.log(" Connected to database: database_assingnment"); +// +await connection.execute(`DROP TABLE IF EXISTS author_paper`); +await connection.execute(`DROP TABLE IF EXISTS research_papers`); +await connection.execute(`DROP TABLE IF EXISTS authors`); + +await connection.execute(` + create table authors ( + author_id INT auto_increment primary key, + author_name varchar(100), + university varchar(100), + date_of_birth date, + h_index INT, + gender varchar(10), + mentor INT, + foreign key (mentor) REFERENCES authors(author_id) + ); + + `); + +console.log('Table "authors" created with mentor as foreign key'); + +// +await connection.execute(` + insert into authors (author_name, university, date_of_birth, h_index, gender) + values + ('rizan', 'hyf', '1998-01-01', 45, 'male'), + ('gea', 'Stanford', '1975-05-15', 38, 'female'), + ('araz', 'Oxford', '1992-11-23', 29, 'male'); +`); + +await connection.end(); diff --git a/Week2/assignment/package-lock.json b/Week2/assignment/package-lock.json new file mode 100644 index 000000000..cd5647e44 --- /dev/null +++ b/Week2/assignment/package-lock.json @@ -0,0 +1,143 @@ +{ + "name": "assignment", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "assignment", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "mysql2": "^3.14.1" + } + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/mysql2": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + } + } +} diff --git a/Week2/assignment/package.json b/Week2/assignment/package.json new file mode 100644 index 000000000..05f623bb2 --- /dev/null +++ b/Week2/assignment/package.json @@ -0,0 +1,16 @@ +{ + "name": "assignment", + "version": "1.0.0", + "main": "Aggregate_Functions.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "mysql2": "^3.14.1" + } +} diff --git a/Week2/assignment/relationships.js b/Week2/assignment/relationships.js new file mode 100644 index 000000000..7251f1c4c --- /dev/null +++ b/Week2/assignment/relationships.js @@ -0,0 +1,61 @@ +import mysql from "mysql2/promise"; + +const connection = await mysql.createConnection({ + host: "localhost", + user: "hyfuser", + password: "hyfpassword", + database: "database_assingnment", +}); +console.log(" Connected to database: database_assingnment"); + +await connection.execute(`drop table if exists author_paper`); +await connection.execute(`drop table if exists research_papers`); + +/// Clean up data and reset auto-increment + +await connection.execute(`ALTER TABLE authors AUTO_INCREMENT = 1`); + +await connection.execute(` + create table research_papers( + paper_id int auto_increment primary key, + paper_title varchar(100), + conference varchar(100), + publish_date date + + ) + `); +console.log("Table 'research_papers' created"); + +await connection.execute(` + create table author_paper ( + author_id INT, + paper_id INT, + primary key (author_id, paper_id), + foreign key (author_id) references authors(author_id) on delete CASCADE, + foreign key (paper_id) references research_papers(paper_id) on delete CASCADE + ); +`); +console.log("Table 'author_paper'junction table created"); + +await connection.execute(` + insert into research_papers (paper_title, conference, publish_date) + values + ('AI in Healthcare', 'NeurIPS', '2022-12-01'), + ('Quantum Computing Basics', 'QCon', '2023-06-15'), + ('Climate Change Models', 'UNConf', '2021-09-20'); +`); + +console.log("Sample research papers inserted"); + +// +await connection.execute(` + insert into author_paper (author_id, paper_id) + values + (1, 1), + (1, 2), + (2, 2), + (3, 3); +`); +console.log("Sample author-paper relationships inserted"); + +await connection.end(); diff --git a/Week2/prep_exercise/package-lock.json b/Week2/prep_exercise/package-lock.json new file mode 100644 index 000000000..80d3d7bdb --- /dev/null +++ b/Week2/prep_exercise/package-lock.json @@ -0,0 +1,143 @@ +{ + "name": "prep_exercise", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "prep_exercise", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "mysql2": "^3.14.1" + } + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/mysql2": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + } + } +} diff --git a/Week2/prep_exercise/package.json b/Week2/prep_exercise/package.json new file mode 100644 index 000000000..012be0fed --- /dev/null +++ b/Week2/prep_exercise/package.json @@ -0,0 +1,16 @@ +{ + "name": "prep_exercise", + "version": "1.0.0", + "main": "server.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "mysql2": "^3.14.1" + } +} diff --git a/Week2/prep_exercise/recipes_db.sql b/Week2/prep_exercise/recipes_db.sql new file mode 100644 index 000000000..b020fc876 --- /dev/null +++ b/Week2/prep_exercise/recipes_db.sql @@ -0,0 +1,216 @@ +drop database if exists recipes_db; +create database recipes_db; +use recipes_db; + +create table recipes( +recipeid int auto_increment primary key, +name varchar (100) + +); + + +create table ingredients( +ingredientID int auto_increment primary key, +name varchar (100) +); + +create table categories( +categoryid int auto_increment primary key, +name varchar (100) + +); + + + +create table steps( +stepID int auto_increment primary key, +name varchar (100) + +); +-- those are the junction tables + + +create table recipe_ingredients( +recipeID int ,ingredientID int ,primary key (recipeID, ingredientID), +foreign key (recipeID) references recipes (recipeID) on delete cascade, +foreign key (ingredientID) references ingredients (ingredientID) on delete cascade + +); + + +create table recipe_categories( +recipeID int ,categoryID int, primary key (recipeID,categoryID), +foreign key(recipeID) references recipes (recipeID) on delete cascade, +foreign key(categoryid) references categories(categoryid) on delete cascade + +); + + create table recipe_steps( + recipeid int , stepID int , primary key (recipeid,stepID), + foreign key(recipeid) references recipes (recipeid) on delete cascade, + foreign key (stepID) references steps (stepID) on delete cascade + ); + +-- -- -- inserting + +use recipes_db; +SET SQL_SAFE_UPDATES = 0; +delete from recipes; +delete from categories; +delete from ingredients; +delete from recipe_categories; +delete from recipe_ingredients; +delete from recipe_steps; +delete from steps; +ALTER TABLE recipes AUTO_INCREMENT = 1; +ALTER TABLE ingredients AUTO_INCREMENT = 1; +ALTER TABLE categories AUTO_INCREMENT = 1; +ALTER TABLE steps AUTO_INCREMENT = 1; + + + + +insert into recipes (name) values +('cheesecake'),('roasted brussels sprouts'), +('mac&cheese'),('Tamagoyaki Japanese Omelette'); + +insert into categories (name) values +('cake'), +('no-bake'), +('vegetarian'), +('Vegan'), +('Gluten-Free'), +('Japanese'); + + +insert into ingredients (name) values +('condensed milk'), +('cream cheese'), +('lemon juice'), +('pie crust'), +('cherry jam'), +('Brussels Sprouts'), +('Sesame seeds'), +('Pepper'), +('Salt'), +('Olive oil'), +('Macaroni'), +('Butter'), +('Flour'), +('Shredded Cheddar cheese'), +('Eggs'), +('Soy sauce'), +('Sugar'), +('potatoes'); + +insert into steps (name) values +('beat cream cheese'), +('add condensed milk and blend'), +('add lemon juice and blend'), +('add the mix to pe crust'), +('spread the cherry jam'), +('place in refrigerator for 3h'), +('Preheat the oven'), +('Mix the ingredients in a bowl'), +('Spread the mix on baking sheet'), +('Bake for 30'), +('Cook Macaroni for 8'), +('Melt butter in a saucepan'), +('Add flour, salt, pepper and mix'), +('Add Milk and mix'), +('Cook until mix is smooth'), +('Add cheddar cheese'), +('Add the macaroni'), +('Beat the eggs'), +('Add soy sauce, sugar and salt'), +('Add oil to a sauce pan'), +('Bring to medium heat'), +('Add some mix to the sauce pan'), +('Let it cook for 1'), +('Remove pan from fire'), +('Add oil to a saucepan again'), +('Add some mix to the saucepan again'), +('Let it cook for 1 minute again'); + +-- insert into the junctions tables. + +insert into recipe_categories (recipeid,categoryid) +values +(1, 1), -- No-Bake Cheesecake: Cake +(1, 2), -- No-Bake Cheesecake: No-Bake +(1, 3), -- No-Bake Cheesecake: Vegetarian + +(2, 4), -- Roasted Brussels Sprouts: Vegan +(2, 5), -- Roasted Brussels Sprouts: Gluten-Free + +(3, 3), -- Mac & Cheese: Vegetarian + +(4, 3), -- Tamagoyaki Japanese Omelette: Vegetarian +(4, 6); -- Tamagoyaki Japanese Omelette: Japanese + + +insert into recipe_ingredients (recipeid,ingredientid) +values +(1, 1), -- No-Bake Cheesecake: Condensed Milk +(1, 2), -- No-Bake Cheesecake: Cream Cheese +(1, 3), -- No-Bake Cheesecake: Lemon Juice +(1, 4), -- No-Bake Cheesecake: Pie Crust +(1, 5), -- No-Bake Cheesecake: Cherry Jam + +(2, 6), -- Roasted Brussels Sprouts: Brussels Sprouts +(2, 3), -- Roasted Brussels Sprouts: Lemon Juice +(2, 7), -- Roasted Brussels Sprouts: Sesame Seeds +(2, 8), -- Roasted Brussels Sprouts: Pepper +(2, 9), -- Roasted Brussels Sprouts: Salt +(2, 10), -- Roasted Brussels Sprouts: Olive Oil + +(3, 11), -- Mac & Cheese: Macaroni +(3, 12), -- Mac & Cheese: Butter +(3, 13), -- Mac & Cheese: Flour +(3, 9), -- Mac & Cheese: Salt +(3, 8), -- Mac & Cheese: Pepper +(3, 14), -- Mac & Cheese: Milk +(3, 15), -- Mac & Cheese: Shredded Cheddar Cheese +(3,18), + + +(4, 15), -- Tamagoyaki Japanese Omelette: Eggs +(4, 16), -- Tamagoyaki Japanese Omelette: Soy Sauce +(4,17), -- Tamagoyaki Japanese Omelette: Sugr +(4, 9), -- Tamagoyaki Japanese Omelette: Salt +(4, 10); -- Tamagoyaki Japanese Omelette: Olive Oil + + +insert into recipe_steps (recipeid,stepID) +values +(1, 1), -- No-Bake Cheesecake: Beat Cream Cheese +(1, 2), -- No-Bake Cheesecake: Add Condensed Milk and Blend +(1, 3), -- No-Bake Cheesecake: Add Lemon Juice and Blend +(1, 4), -- No-Bake Cheesecake: Add the Mix to the Pie Crust +(1, 5), -- No-Bake Cheesecake: Spread the Cherry Jam +(1, 6), -- No-Bake Cheesecake: Place in Refrigerator for 3h + +(2, 7), -- Roasted Brussels Sprouts: Preheat the Oven +(2, 8), -- Roasted Brussels Sprouts: Mix the Ingredients in a Bowl +(2, 9), -- Roasted Brussels Sprouts: Spread the Mix on Baking Sheet +(2, 10), -- Roasted Brussels Sprouts: Bake for 30 minutes + +(3, 11), -- Mac & Cheese: Cook Macaroni for 8 minutes +(3, 12), -- Mac & Cheese: Melt Butter in a Saucepan +(3, 13), -- Mac & Cheese: Add Flour, Salt, Pepper, and Mix +(3, 14), -- Mac & Cheese: Add Milk and Mix +(3, 15), -- Mac & Cheese: Cook Until Mix is Smooth +(3, 16), -- Mac & Cheese: Add Cheddar Cheese +(3, 17), -- Mac & Cheese: Add the Macaroni + +(4, 18), -- Tamagoyaki Japanese Omelette: Beat the Eggs +(4, 19), -- Tamagoyaki Japanese Omelette: Add Soy Sauce, Sugar, and Salt +(4, 20), -- Tamagoyaki Japanese Omelette: Add Oil to a Saucepan +(4, 21), -- Tamagoyaki Japanese Omelette: Bring to Medium Heat +(4, 22), -- Tamagoyaki Japanese Omelette: Add Some Mix to the Saucepan +(4, 23), -- Tamagoyaki Japanese Omelette: Let It Cook for 1 minute +(4, 24), -- Tamagoyaki Japanese Omelette: Add Oil to a Saucepan Again +(4, 25), -- Tamagoyaki Japanese Omelette: Add Some Mix to the Saucepan Again +(4, 26), -- Tamagoyaki Japanese Omelette: Let It Cook for 1 minute Again +(4, 27); -- Tamagoyaki Japanese Omelette: Remove Pan from Fire + diff --git a/Week2/prep_exercise/server.js b/Week2/prep_exercise/server.js new file mode 100644 index 000000000..110c5e0a1 --- /dev/null +++ b/Week2/prep_exercise/server.js @@ -0,0 +1,63 @@ +import mysql from "mysql2"; + +const connection = mysql.createConnection({ + host: "localhost", + user: "hyfuser", + password: "hyfpassword", + database: "recipes_db", +}); + +connection.connect((err) => { + if (err) throw err; + console.log("Connected to MySQL database"); + + runQueries(connection); +}); + +// Function to run all queries + +const runQueries = (connection) => { + const vegetarianWithPotatoes = ` + SELECT recipes.name AS recipe + FROM recipes + JOIN recipe_ingredients ON recipes.recipeid = recipe_ingredients.recipeid + JOIN ingredients ON recipe_ingredients.ingredientid = ingredients.ingredientid + JOIN recipe_categories ON recipes.recipeid = recipe_categories.recipeid + JOIN categories ON recipe_categories.categoryid = categories.categoryid + WHERE categories.name = 'vegetarian' AND ingredients.name = 'potatoes'; + `; + + connection.query(vegetarianWithPotatoes, (err, results) => { + if (err) throw err; + console.log("Vegetarian Recipes with Potatoes:", results); + }); + + const cakesNoBaking = ` + SELECT recipes.name AS recipe + FROM recipes + JOIN recipe_categories AS rc1 ON recipes.recipeid = rc1.recipeid + JOIN categories AS c1 ON rc1.categoryid = c1.categoryid + JOIN recipe_categories AS rc2 ON recipes.recipeid = rc2.recipeid + JOIN categories AS c2 ON rc2.categoryid = c2.categoryid + WHERE c1.name = 'Cake' + AND c2.name = 'No-Bake'; + `; + + connection.query(cakesNoBaking, (err, results) => { + if (err) throw err; + console.log("Cakes that do not need baking:", results); + }); + + const veganAndJapanese = ` + SELECT recipes.name as recipe, categories.name as category + FROM recipes + JOIN recipe_categories ON recipes.recipeid = recipe_categories.recipeid + JOIN categories ON recipe_categories.categoryid = categories.categoryid + WHERE categories.name IN ('Vegan', 'Japanese'); + `; + + connection.query(veganAndJapanese, (err, results) => { + if (err) throw err; + console.log("Vegan and Japanese Recipes:", results); + }); +};