You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
7.7 KiB
320 lines
7.7 KiB
CREATE DATABASE `LOCAL_REAL_ESTATE` DEFAULT CHARACTER SET utf8mb4; |
|
|
|
USE `LOCAL_REAL_ESTATE`; |
|
|
|
/* create tables of attributes */ |
|
CREATE TABLE Property( |
|
address VARCHAR(50) NOT NULL, |
|
ownerName VARCHAR(30), |
|
price INT, |
|
PRIMARY KEY(address) |
|
); |
|
|
|
CREATE TABLE House( |
|
address VARCHAR(50) NOT NULL, |
|
ownerName VARCHAR(30), |
|
price INT, |
|
bedrooms INT, |
|
bathrooms INT, |
|
size INT, |
|
FOREIGN KEY(address) REFERENCES Property(address) |
|
); |
|
|
|
CREATE TABLE BusinessProperty( |
|
address VARCHAR(50) NOT NULL, |
|
ownerName VARCHAR(30), |
|
price INT, |
|
type CHAR(20), |
|
size INT, |
|
FOREIGN KEY(address) REFERENCES Property(address) |
|
); |
|
|
|
CREATE TABLE Firm( |
|
id INT NOT NULL, |
|
name VARCHAR(30), |
|
address VARCHAR(50), |
|
PRIMARY KEY(id) |
|
); |
|
|
|
CREATE TABLE Agent( |
|
agentId INT NOT NULL, |
|
name VARCHAR(30), |
|
phone CHAR(12), |
|
firmId INT NOT NULL, |
|
dateStarted DATE, |
|
PRIMARY KEY(agentId), |
|
FOREIGN KEY(firmId) REFERENCES Firm(id) |
|
); |
|
|
|
CREATE TABLE Listing( |
|
address VARCHAR(50), |
|
agentId INT, |
|
mlsNumber INT PRIMARY KEY, |
|
dataListed DATE, |
|
FOREIGN KEY(agentId) REFERENCES Agent(agentId), |
|
FOREIGN KEY(address) REFERENCES Property(address) |
|
); |
|
|
|
CREATE TABLE Buyer( |
|
id INT NOT NULL, |
|
name VARCHAR(30), |
|
phone CHAR(12), |
|
propertyType CHAR(20), |
|
bedrooms INT, |
|
bathrooms INT, |
|
businessPropertyType CHAR(20), |
|
minimumPreferredPrice INT, |
|
maximumPreferredPrice INT, |
|
PRIMARY KEY(id) |
|
); |
|
|
|
CREATE TABLE Work_With( |
|
buyerId INT, |
|
agentId INT, |
|
FOREIGN KEY(buyerId) REFERENCES Buyer(id), |
|
FOREIGN KEY(agentId) REFERENCES Agent(agentId) |
|
); |
|
|
|
/* create an assertion */ |
|
/* |
|
CREATE ASSERTION PROPERTY_AGENT_PROJECTION CHECK |
|
(NOT EXISTS |
|
(SELECT L1.address |
|
FROM Listings L1, Listings L2 |
|
WHERE L1.address = L2.address AND L1.agentId != L2.agentId |
|
) |
|
); |
|
*/ |
|
/* insert records to each tables, each table has at least 5 records */ |
|
/* 10 records into Property */ |
|
INSERT INTO Property |
|
VALUES('2350 Gibson Road', 'John Smith', 235000); |
|
|
|
INSERT INTO Property |
|
VALUES('197 Watson Street', 'Raymond Chou', 789000); |
|
|
|
INSERT INTO Property |
|
VALUES('2525 Pottsdamer Street', 'Jim Lee', 100500); |
|
|
|
INSERT INTO Property |
|
VALUES('193 Love BLVD', 'Kim Abudal', 930000); |
|
|
|
INSERT INTO Property |
|
VALUES('647 Maston Road', 'Robert Clue', 135000); |
|
|
|
INSERT INTO Property |
|
VALUES('1350 Navada Street', 'Jack Green', 674090); |
|
|
|
INSERT INTO Property |
|
VALUES('256 Florida Street', 'Michael Kohen', 179280); |
|
|
|
INSERT INTO Property |
|
VALUES('1717 Kansas Street', 'Leah Mars', 345000); |
|
|
|
INSERT INTO Property |
|
VALUES('2613 Academic Way', 'Marry Song', 997050); |
|
|
|
INSERT INTO Property |
|
VALUES('179 Tinker Road', 'Leon Kant', 90000); |
|
|
|
/* 5 records into House */ |
|
INSERT INTO House |
|
VALUES('2350 Gibson Road', 'John Smith', 235000, 3, 2, 196); |
|
|
|
INSERT INTO House |
|
VALUES('197 Watson Street', 'Raymond Chou', 789000, 2, 4, 203); |
|
|
|
INSERT INTO House |
|
VALUES('2525 Pottsdamer Street', 'Jim Lee', 100500, 2, 3, 180); |
|
|
|
INSERT INTO House |
|
VALUES('193 Love BLVD', 'Kim Abudal', 930000, 3, 2, 401); |
|
|
|
INSERT INTO House |
|
VALUES('647 Maston Road', 'Robert Clue', 135000, 3, 2, 102); |
|
|
|
/* 5 records into BusinessProperty */ |
|
INSERT INTO BusinessProperty |
|
VALUES('1350 Navada Street', 'Jack Green', 674090, 'office space', 467); |
|
|
|
INSERT INTO BusinessProperty |
|
VALUES('256 Florida Street', 'Michael Kohen', 179280, 'gas station', 245); |
|
|
|
INSERT INTO BusinessProperty |
|
VALUES('1717 Kansas Street', 'Leah Mars', 345000, 'office space', 356); |
|
|
|
INSERT INTO BusinessProperty |
|
VALUES('2613 Academic Way', 'Marry Song', 997050, 'office space', 670); |
|
|
|
INSERT INTO BusinessProperty |
|
VALUES('179 Tinker Road', 'Leon Kant', 90000, 'store front', 128); |
|
|
|
/* 5 records into Firm */ |
|
INSERT INTO Firm |
|
VALUES(135210, 'Goldman Sash', '799 Georgia Way'); |
|
|
|
INSERT INTO Firm |
|
VALUES(146277, 'Holloway', '124 Texas Street'); |
|
|
|
INSERT INTO Firm |
|
VALUES(165034, 'Good Target', '135 California Street'); |
|
|
|
INSERT INTO Firm |
|
VALUES(230754, 'Cozy Home', '277 Beach Road'); |
|
|
|
INSERT INTO Firm |
|
VALUES(210211, 'Fast Searcher', '1010 Alas Road'); |
|
|
|
/* 10 records into Agent */ |
|
INSERT INTO Agent |
|
VALUES(100, 'Leet Kim', '135145636', 210211, '2012-01-23'); |
|
|
|
INSERT INTO Agent |
|
VALUES(112, 'Jim Alpha', '171135636', 210211, '2012-03-26'); |
|
|
|
INSERT INTO Agent |
|
VALUES(123, 'George Grey', '176321636', 135210, '2015-02-23'); |
|
|
|
INSERT INTO Agent |
|
VALUES(145, 'Sarah Core', '135145909', 135210, '2016-07-03'); |
|
|
|
INSERT INTO Agent |
|
VALUES(168, 'Livia Watson', '137145638', 146277, '2014-01-17'); |
|
|
|
INSERT INTO Agent |
|
VALUES(189, 'Nik Ray', '135873630', 146277, '2014-01-28'); |
|
|
|
INSERT INTO Agent |
|
VALUES(201, 'Cris Paul', '136141236', 165034, '2016-05-23'); |
|
|
|
INSERT INTO Agent |
|
VALUES(223, 'Lena Clay', '137145123', 165034, '2014-08-19'); |
|
|
|
INSERT INTO Agent |
|
VALUES(267, 'Kevin Nil', '190145636', 230754, '2011-07-20'); |
|
|
|
INSERT INTO Agent |
|
VALUES(310, 'Hugh Grant', '132145639', 230754, '2012-12-31'); |
|
|
|
/* 10 records into Listing */ |
|
INSERT INTO Listing |
|
VALUES('2350 Gibson Road', 100, 1212, '2013-02-04'); |
|
|
|
INSERT INTO Listing |
|
VALUES('197 Watson Street', 112, 1500, '2013-05-06'); |
|
|
|
INSERT INTO Listing |
|
VALUES('2525 Pottsdamer Street', 123, 1617, '2016-12-04'); |
|
|
|
INSERT INTO Listing |
|
VALUES('193 Love BLVD', 145, 1718, '2016-02-09'); |
|
|
|
INSERT INTO Listing |
|
VALUES('647 Maston Road', 168, 1900, '2014-12-19'); |
|
|
|
INSERT INTO Listing |
|
VALUES('1350 Navada Street', 189, 2101, '2015-06-06'); |
|
|
|
INSERT INTO Listing |
|
VALUES('256 Florida Street', 201, 2305, '2017-05-25'); |
|
|
|
INSERT INTO Listing |
|
VALUES('1717 Kansas Street', 223, 2500, '2014-12-04'); |
|
|
|
INSERT INTO Listing |
|
VALUES('2613 Academic Way', 267, 2790, '2013-10-01'); |
|
|
|
INSERT INTO Listing |
|
VALUES('179 Tinker Road', 310, 3001, '2015-09-05'); |
|
|
|
/* 6 records into Buyer */ |
|
INSERT INTO Buyer |
|
VALUES(799, 'John Nay', '125345790', 'house', 3, 2, 'not applied', 100000, 635000); |
|
|
|
INSERT INTO Buyer |
|
VALUES(801, 'Retina Grey', '146345790', 'house', 3, 2, 'not applied', 100000, 400000); |
|
|
|
INSERT INTO Buyer |
|
VALUES(813, 'Reg Neal', '189345791', 'house', 2, 3, 'not applied', 300000, 635000); |
|
|
|
INSERT INTO Buyer |
|
VALUES(845, 'Gena Sarah', '789345790', 'house', 3, 2, 'not applied', 200000, 960000); |
|
|
|
INSERT INTO Buyer |
|
VALUES(875, 'Bill Clay', '888345798', 'not applied', 0, 0, 'office space', 100000, 900000); |
|
|
|
INSERT INTO Buyer |
|
VALUES(999, 'Hilton Clag', '999345792', 'not applied', 0, 0, 'office space', 300000, 790000); |
|
|
|
/* 6 records into Works_With */ |
|
INSERT INTO Work_With |
|
VALUES(799, 100); |
|
|
|
INSERT INTO Work_With |
|
VALUES(801, 145); |
|
|
|
INSERT INTO Work_With |
|
VALUES(813, 123); |
|
|
|
INSERT INTO Work_With |
|
VALUES(845, 168); |
|
|
|
INSERT INTO Work_With |
|
VALUES(875, 189); |
|
|
|
INSERT INTO Work_With |
|
VALUES(999, 223); |
|
|
|
/* queries */ |
|
/* 1st query */ |
|
SELECT Listing.address |
|
FROM Listing, House |
|
WHERE Listing.address = House.address; |
|
|
|
/* 2nd query */ |
|
SELECT Listing.address, Listing.mlsNumber |
|
FROM Listing, House |
|
WHERE Listing.address = House.address; |
|
|
|
/* 3rd query */ |
|
SELECT Listing.address |
|
FROM Listing, House |
|
WHERE Listing.address = House.address AND House.bedrooms = 3 AND House.bathrooms = 2; |
|
|
|
/* 4th query */ |
|
SELECT address, price |
|
FROM House |
|
WHERE bedrooms = 3 AND bathrooms = 2 AND price >= 100000 AND price <= 250000 |
|
ORDER BY price DESC; |
|
|
|
/* 5th query */ |
|
SELECT address, price |
|
FROM BusinessProperty |
|
WHERE type = 'office space' |
|
ORDER BY price DESC; |
|
|
|
/* 6th query */ |
|
SELECT agentId, Agent.name, phone, Firm.name, dateStarted |
|
FROM Agent, Firm |
|
WHERE Agent.firmId = Firm.id; |
|
|
|
/* 7th query, agentId is indicated as 201 here */ |
|
SELECT Property.* |
|
FROM Property, Listing |
|
WHERE Property.address = Listing.address AND Listing.agentId = 201; |
|
|
|
/* 8th query */ |
|
SELECT Agent.name AS Agent_Name, Buyer.name AS Buyer_Name |
|
FROM Agent, Buyer, Work_With |
|
WHERE Agent.agentId = Work_With.agentId AND Buyer.id = Work_With.buyerId; |
|
|
|
/* 9th query, suppose the buyer's Id is 799 in our case */ |
|
SELECT House.* |
|
FROM House, Buyer |
|
WHERE Buyer.id = 799 AND |
|
Buyer.bedrooms = House.bedrooms AND |
|
Buyer.bathrooms = House.bathrooms AND |
|
Buyer.minimumPreferredPrice <= House.price AND |
|
Buyer.maximumPreferredPrice >= House.price; |
|
|
|
/* the end of program */
|
|
|