MySQL Practical Lab Manual-PART 1
1. SELECT all columns or specific columns
The SELECT statement is used to retrieve data from one or more tables. You can select all
columns using '*' or specific columns by naming them.
Syntax:
SELECT column1, column2 FROM table_name;
SELECT * FROM table_name;
Examples:
SELECT * FROM CUSTOMER;
SELECT CUS_LNAME, CUS_FNAME FROM CUSTOMER;
SELECT EMP_LNAME, EMP_FNAME FROM EMP;
SELECT * FROM PRODUCT;
SELECT P_CODE, P_DESCRIPT FROM PRODUCT;
2. SELECT using WHERE clause
The WHERE clause is used to filter records that fulfill a specified condition.
Syntax:
SELECT column1, column2 FROM table_name WHERE condition;
Examples:
SELECT * FROM CUSTOMER WHERE CUS_BALANCE > 200;
SELECT * FROM EMP WHERE EMP_TITLE = 'Mr.';
SELECT * FROM PRODUCT WHERE P_PRICE > 100;
SELECT * FROM EMPLOYEE WHERE EMP_YEARS >= 10;
SELECT * FROM CUSTOMER WHERE CUS_LNAME = 'Smith';
3. Using AND, OR, NOT
Logical operators are used to combine multiple conditions in a WHERE clause.
Syntax:
SELECT column1 FROM table WHERE condition1 AND condition2;
SELECT column1 FROM table WHERE condition1 OR condition2;
SELECT column1 FROM table WHERE NOT condition;
Examples:
SELECT * FROM EMP WHERE EMP_TITLE = 'Mr.' AND EMP_AREACODE = '615';
SELECT * FROM CUSTOMER WHERE CUS_BALANCE > 300 OR CUS_LNAME = 'Smith';
SELECT * FROM EMPLOYEE WHERE NOT EMP_YEARS < 10;
SELECT * FROM PRODUCT WHERE P_PRICE > 100 AND P_QOH > 10;
SELECT * FROM EMP WHERE EMP_TITLE = 'Ms.' OR EMP_TITLE = 'Mrs.';
4. ORDER BY
The ORDER BY clause is used to sort the result-set in ascending or descending order.
Syntax:
SELECT column1 FROM table ORDER BY column1 ASC|DESC;
Examples:
SELECT * FROM CUSTOMER ORDER BY CUS_LNAME ASC;
SELECT * FROM EMPLOYEE ORDER BY EMP_YEARS DESC;
SELECT * FROM PRODUCT ORDER BY P_PRICE DESC;
SELECT * FROM VENDOR ORDER BY V_NAME ASC;
SELECT * FROM EMP ORDER BY EMP_HIRE_DATE ASC;
5. >, >=, <, <=, != (Not equal to)
Comparison operators are used to compare values in a WHERE clause.
Syntax:
SELECT * FROM table WHERE column > value;
SELECT * FROM table WHERE column != value;
Examples:
SELECT * FROM PRODUCT WHERE P_PRICE > 100;
SELECT * FROM EMPLOYEE WHERE EMP_YEARS >= 10;
SELECT * FROM CUSTOMER WHERE CUS_BALANCE < 300;
SELECT * FROM PRODUCT WHERE P_DISCOUNT != 0;
SELECT * FROM EMP WHERE EMP_NUM <= 110;
6. BETWEEN
The BETWEEN operator is used to filter values within a specified range.
Syntax:
SELECT column1 FROM table WHERE column BETWEEN value1 AND value2;
Examples:
SELECT * FROM EMPLOYEE WHERE EMP_YEARS BETWEEN 10 AND 15;
SELECT * FROM PRODUCT WHERE P_PRICE BETWEEN 10 AND 50;
SELECT * FROM CUSTOMER WHERE CUS_BALANCE BETWEEN 100 AND 500;
SELECT * FROM EMP WHERE EMP_NUM BETWEEN 105 AND 110;
SELECT * FROM LINE WHERE LINE_UNITS BETWEEN 1 AND 3;
7. IN
The IN operator allows you to specify multiple values in a WHERE clause.
Syntax:
SELECT column1 FROM table WHERE column IN (value1, value2, ...);
Examples:
SELECT * FROM EMP WHERE EMP_TITLE IN ('Mr.', 'Ms.');
SELECT * FROM PRODUCT WHERE V_CODE IN (21344, 24288);
SELECT * FROM CUSTOMER WHERE CUS_LNAME IN ('Smith', 'Brown');
SELECT * FROM EMPLOYEE WHERE EMP_AREACODE IN ('615', '901');
SELECT * FROM VENDOR WHERE V_STATE IN ('TN', 'FL');
8. LIKE
The LIKE operator is used for pattern matching using wildcards (% and _).
Syntax:
SELECT column1 FROM table WHERE column LIKE pattern;
Examples:
SELECT * FROM CUSTOMER WHERE CUS_LNAME LIKE 'S%';
SELECT * FROM PRODUCT WHERE P_DESCRIPT LIKE '%blade%';
SELECT * FROM EMP WHERE EMP_FNAME LIKE '__orge';
SELECT * FROM EMPLOYEE WHERE EMP_PHONE LIKE '324%';
SELECT * FROM VENDOR WHERE V_NAME LIKE '%Inc%';
9. LIMIT
The LIMIT clause is used to specify the number of records to return.
Syntax:
SELECT column1 FROM table LIMIT number;
Examples:
SELECT * FROM CUSTOMER LIMIT 5;
SELECT * FROM EMP LIMIT 10;
SELECT * FROM PRODUCT ORDER BY P_PRICE DESC LIMIT 3;
SELECT * FROM VENDOR LIMIT 4;
SELECT * FROM EMPLOYEE LIMIT 2;
10. HAVING
The HAVING clause is used to filter results after aggregation, unlike WHERE which filters
before aggregation.
Syntax:
SELECT column, AGG_FUNC(column2) FROM table GROUP BY column HAVING
AGG_FUNC(column2) condition;
Examples:
SELECT EMP_TITLE, COUNT(*) FROM EMP GROUP BY EMP_TITLE HAVING COUNT(*) >
2;
SELECT V_CODE, AVG(P_PRICE) FROM PRODUCT GROUP BY V_CODE HAVING
AVG(P_PRICE) > 50;
SELECT P_CODE, SUM(LINE_UNITS) FROM LINE GROUP BY P_CODE HAVING
SUM(LINE_UNITS) > 3;
SELECT CUS_CODE, COUNT(*) FROM INVOICE GROUP BY CUS_CODE HAVING COUNT(*)
>= 2;
SELECT EMP_AREACODE, COUNT(*) FROM EMPLOYEE GROUP BY EMP_AREACODE
HAVING COUNT(*) > 5;
11. GROUP BY
The GROUP BY statement is used with aggregate functions to group result-set by one or
more columns.
Syntax:
SELECT column, AGG_FUNC(column2) FROM table GROUP BY column;
Examples:
SELECT EMP_TITLE, COUNT(*) FROM EMP GROUP BY EMP_TITLE;
SELECT V_CODE, AVG(P_PRICE) FROM PRODUCT GROUP BY V_CODE;
SELECT P_CODE, SUM(LINE_UNITS) FROM LINE GROUP BY P_CODE;
SELECT EMP_AREACODE, COUNT(*) FROM EMPLOYEE GROUP BY EMP_AREACODE;
SELECT CUS_CODE, COUNT(*) FROM INVOICE GROUP BY CUS_CODE;
12. DISTINCT and ALIAS
DISTINCT removes duplicates; ALIAS gives a temporary name to columns or tables.
Syntax:
SELECT DISTINCT column FROM table;
SELECT column AS alias FROM table;
Examples:
SELECT DISTINCT EMP_TITLE FROM EMP;
SELECT EMP_LNAME AS LastName FROM EMP;
SELECT CUS_LNAME AS Customer FROM CUSTOMER;
SELECT DISTINCT V_STATE FROM VENDOR;
SELECT P_DESCRIPT AS Description FROM PRODUCT;
13. MAX, MIN, AVG, COUNT, SUM
Aggregate functions perform calculations on a set of values and return a single value.
Syntax:
SELECT MAX(column) FROM table;
SELECT MIN(column) FROM table;
SELECT AVG(column) FROM table;
SELECT COUNT(column) FROM table;
SELECT SUM(column) FROM table;
Examples:
SELECT MAX(P_PRICE) FROM PRODUCT;
SELECT MIN(EMP_YEARS) FROM EMPLOYEE;
SELECT AVG(CUS_BALANCE) FROM CUSTOMER;
SELECT COUNT(*) FROM EMP;
SELECT SUM(LINE_UNITS) FROM LINE;
MySQL Practical Lab Manual: SQL
JOINs-PART 2
1. INNER JOIN
INNER JOIN returns only the rows that have matching values in both tables.
Syntax:
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
Examples:
SELECT CUSTOMER.CUS_LNAME, INVOICE.INV_DATE FROM CUSTOMER INNER JOIN
INVOICE ON CUSTOMER.CUS_CODE = INVOICE.CUS_CODE;
SELECT LINE.P_CODE, PRODUCT.P_DESCRIPT FROM LINE INNER JOIN PRODUCT ON
LINE.P_CODE = PRODUCT.P_CODE;
SELECT EMP.EMP_LNAME, EMPLOYEE.EMP_PHONE FROM EMP INNER JOIN
EMPLOYEE ON EMP.EMP_NUM = EMPLOYEE.EMP_NUM;
SELECT PRODUCT.P_DESCRIPT, VENDOR.V_NAME FROM PRODUCT INNER JOIN
VENDOR ON PRODUCT.V_CODE = VENDOR.V_CODE;
SELECT INVOICE.INV_NUMBER, CUSTOMER.CUS_FNAME FROM INVOICE INNER JOIN
CUSTOMER ON INVOICE.CUS_CODE = CUSTOMER.CUS_CODE;
2. LEFT JOIN
LEFT JOIN returns all records from the left table, and matched records from the right table.
NULLs are returned for unmatched rows.
Syntax:
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
Examples:
SELECT PRODUCT.P_CODE, VENDOR.V_NAME FROM PRODUCT LEFT JOIN VENDOR ON
PRODUCT.V_CODE = VENDOR.V_CODE;
SELECT CUSTOMER.CUS_CODE, INVOICE.INV_DATE FROM CUSTOMER LEFT JOIN
INVOICE ON CUSTOMER.CUS_CODE = INVOICE.CUS_CODE;
SELECT EMP.EMP_NUM, EMPLOYEE.EMP_PHONE FROM EMP LEFT JOIN EMPLOYEE ON
EMP.EMP_NUM = EMPLOYEE.EMP_NUM;
SELECT LINE.INV_NUMBER, PRODUCT.P_DESCRIPT FROM LINE LEFT JOIN PRODUCT
ON LINE.P_CODE = PRODUCT.P_CODE;
SELECT VENDOR.V_CODE, PRODUCT.P_DESCRIPT FROM VENDOR LEFT JOIN PRODUCT
ON VENDOR.V_CODE = PRODUCT.V_CODE;
3. RIGHT JOIN
RIGHT JOIN returns all records from the right table, and matched records from the left table.
NULLs are returned for unmatched rows.
Syntax:
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
Examples:
SELECT PRODUCT.P_CODE, VENDOR.V_NAME FROM PRODUCT RIGHT JOIN VENDOR
ON PRODUCT.V_CODE = VENDOR.V_CODE;
SELECT INVOICE.INV_NUMBER, CUSTOMER.CUS_FNAME FROM INVOICE RIGHT JOIN
CUSTOMER ON INVOICE.CUS_CODE = CUSTOMER.CUS_CODE;
SELECT PRODUCT.P_DESCRIPT, LINE.LINE_UNITS FROM LINE RIGHT JOIN PRODUCT
ON LINE.P_CODE = PRODUCT.P_CODE;
SELECT EMP.EMP_NUM, EMPLOYEE.EMP_PHONE FROM EMP RIGHT JOIN EMPLOYEE
ON EMP.EMP_NUM = EMPLOYEE.EMP_NUM;
SELECT VENDOR.V_NAME, PRODUCT.P_DESCRIPT FROM PRODUCT RIGHT JOIN
VENDOR ON PRODUCT.V_CODE = VENDOR.V_CODE;
4. FULL OUTER JOIN (Simulated using UNION)
MySQL does not support FULL OUTER JOIN directly, but it can be simulated using UNION of
LEFT JOIN and RIGHT JOIN.
Syntax:
SELECT columns FROM table1 LEFT JOIN table2 ON condition
UNION
SELECT columns FROM table1 RIGHT JOIN table2 ON condition;
Examples:
SELECT CUSTOMER.CUS_CODE, INVOICE.INV_DATE FROM CUSTOMER LEFT JOIN
INVOICE ON CUSTOMER.CUS_CODE = INVOICE.CUS_CODE
UNION
SELECT CUSTOMER.CUS_CODE, INVOICE.INV_DATE FROM CUSTOMER RIGHT JOIN
INVOICE ON CUSTOMER.CUS_CODE = INVOICE.CUS_CODE;
SELECT PRODUCT.P_CODE, VENDOR.V_NAME FROM PRODUCT LEFT JOIN VENDOR ON
PRODUCT.V_CODE = VENDOR.V_CODE
UNION
SELECT PRODUCT.P_CODE, VENDOR.V_NAME FROM PRODUCT RIGHT JOIN VENDOR
ON PRODUCT.V_CODE = VENDOR.V_CODE;
SELECT EMP.EMP_NUM, EMPLOYEE.EMP_PHONE FROM EMP LEFT JOIN EMPLOYEE ON
EMP.EMP_NUM = EMPLOYEE.EMP_NUM
UNION
SELECT EMP.EMP_NUM, EMPLOYEE.EMP_PHONE FROM EMP RIGHT JOIN EMPLOYEE
ON EMP.EMP_NUM = EMPLOYEE.EMP_NUM;
SELECT LINE.P_CODE, PRODUCT.P_DESCRIPT FROM LINE LEFT JOIN PRODUCT ON
LINE.P_CODE = PRODUCT.P_CODE
UNION
SELECT LINE.P_CODE, PRODUCT.P_DESCRIPT FROM LINE RIGHT JOIN PRODUCT ON
LINE.P_CODE = PRODUCT.P_CODE;
SELECT INVOICE.CUS_CODE, CUSTOMER.CUS_LNAME FROM INVOICE LEFT JOIN
CUSTOMER ON INVOICE.CUS_CODE = CUSTOMER.CUS_CODE
UNION
SELECT INVOICE.CUS_CODE, CUSTOMER.CUS_LNAME FROM INVOICE RIGHT JOIN
CUSTOMER ON INVOICE.CUS_CODE = CUSTOMER.CUS_CODE;
MySQL Practical Lab Manual: University
Database-PART 3
1. CREATE DATABASE
This command is used to create a new database in MySQL.
Syntax:
CREATE DATABASE university;
Examples:
CREATE DATABASE university;
2. USE / SELECT DATABASE
The USE command selects a database to work with.
Syntax:
USE university;
Examples:
USE university;
3. DROP DATABASE
The DROP DATABASE command deletes a database permanently.
Syntax:
DROP DATABASE university;
Examples:
DROP DATABASE university;
4. CREATE TABLE
This command creates a table with various constraints like PRIMARY KEY, FOREIGN KEY,
AUTO_INCREMENT, NOT NULL, DEFAULT, and CHECK.
Syntax:
CREATE TABLE course (
courseid INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
duration INT NOT NULL,
cost DECIMAL(10,2) DEFAULT 50000 CHECK (cost >= 10000)
);
Examples:
CREATE TABLE student (
studentid INT PRIMARY KEY AUTO_INCREMENT,
studentname VARCHAR(50) NOT NULL,
email VARCHAR(50),
county VARCHAR(30),
phonenumber VARCHAR(15),
courseid INT,
FOREIGN KEY(courseid) REFERENCES course(courseid)
);
CREATE TABLE unit (
unitcode VARCHAR(10) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
duration INT,
courseid INT,
FOREIGN KEY(courseid) REFERENCES course(courseid)
);
CREATE TABLE enrollment (
studentid INT,
unitcode VARCHAR(10),
mark DECIMAL(5,2),
PRIMARY KEY(studentid, unitcode),
FOREIGN KEY(studentid) REFERENCES student(studentid) ON DELETE CASCADE,
FOREIGN KEY(unitcode) REFERENCES unit(unitcode) ON DELETE CASCADE
);
5. ADD PRIMARY KEY / DROP PRIMARY KEY
Modify existing tables to add or drop primary keys.
Syntax:
ALTER TABLE tablename ADD PRIMARY KEY (column);
ALTER TABLE tablename DROP PRIMARY KEY;
Examples:
ALTER TABLE course ADD PRIMARY KEY(courseid);
ALTER TABLE course DROP PRIMARY KEY;
6. ADD COLUMN / DROP COLUMN
Add or remove a column from a table.
Syntax:
ALTER TABLE tablename ADD columnname datatype;
ALTER TABLE tablename DROP COLUMN columnname;
Examples:
ALTER TABLE student ADD date_of_birth DATE;
ALTER TABLE student DROP COLUMN county;
7. DESCRIBE TABLE
Shows the structure of a table including column names and data types.
Syntax:
DESCRIBE tablename;
Examples:
DESCRIBE student;
DESCRIBE course;
8. DROP TABLE
Deletes a table permanently from the database.
Syntax:
DROP TABLE tablename;
Examples:
DROP TABLE enrollment;
DROP TABLE unit;
MySQL Practical Lab Manual: University
Database - Part 4
1. INSERT INTO (One record at a time)
Use the INSERT INTO statement to add a single record into a table.
Syntax:
INSERT INTO table_name VALUES (value1, value2, ...);
Examples:
INSERT INTO course VALUES (1, 'Computer Science', 4, 80000);
INSERT INTO unit VALUES ('CS101', 'Introduction to Programming', 60, 1);
INSERT INTO student VALUES (1, 'John Doe', '
[email protected]', 'Nairobi',
'0712345678', 1);
INSERT INTO enrollment VALUES (1, 'CS101', 78.5);
2. INSERT INTO (Bulk insert with listed columns)
Insert multiple records by specifying the column names explicitly.
Syntax:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value1,
value2, ...);
Examples:
INSERT INTO course (courseid, name, duration, cost) VALUES
(2, 'Information Technology', 3, 70000),
(3, 'Software Engineering', 4, 85000);
INSERT INTO unit (unitcode, name, duration, courseid) VALUES
('CS102', 'Databases', 45, 1),
('IT101', 'Networks', 50, 2);
INSERT INTO student (studentid, studentname, email, county, phonenumber, courseid)
VALUES
(2, 'Mary Ann', '
[email protected]', 'Kiambu', '0723456789', 2),
(3, 'Peter Kim', '
[email protected]', 'Mombasa', '0734567890', 3);
3. INSERT INTO (Without specifying column names)
Insert records assuming all columns are filled in the correct order.
Syntax:
INSERT INTO table_name VALUES (...), (...);
Examples:
INSERT INTO course VALUES (4, 'Data Science', 4, 90000);
INSERT INTO unit VALUES ('SE201', 'Software Design', 60, 3);
INSERT INTO student VALUES (4, 'Lucy Maina', '
[email protected]', 'Nakuru',
'0745678901', 3);
4. UPDATE Command
UPDATE is used to modify existing records in a table.
Syntax:
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
Examples:
UPDATE student SET email = '[email protected]' WHERE studentid = 1;
UPDATE course SET cost = 75000 WHERE courseid = 2;
UPDATE unit SET duration = 65 WHERE unitcode = 'CS101';
UPDATE enrollment SET mark = 85 WHERE studentid = 1 AND unitcode = 'CS101';
5. DELETE Command with ON DELETE CASCADE
DELETE removes records from a table. When used with ON DELETE CASCADE on foreign
keys, related child records are also removed.
Syntax:
DELETE FROM table_name WHERE condition;
Examples:
DELETE FROM student WHERE studentid = 4; -- Also deletes from enrollment if ON
DELETE CASCADE is set
DELETE FROM course WHERE courseid = 3; -- Deletes related students and units if
foreign keys have ON DELETE CASCADE
DELETE FROM unit WHERE unitcode = 'SE201'; -- Removes related enrollment entries if
cascading is set