diff --git a/README.md b/README.md index 0df77fb..895ace8 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,380 @@ -# Getting Started with SQL +# Queries for all the examples chapter-wise -Thank you for reading *Getting Started with SQL*. These are the database files for the book. +# Chapter 4 **SELECT** -# Having Download Trouble? +### Retrieving Data +``` +select * FROM PRODUCT; +``` -This book requires basic proficiency in downloading, unzipping, and navigating files and folders. +### Expressions in SELECT statements +``` +select *,PRICE*1.07 FROM PRODUCT; +select *,PRICE*1.07 AS TAXED_PRICE FROM PRODUCT; +select *,round(PRICE*1.07,0) AS TAXED_PRICE FROM PRODUCT; +``` -If you need assistance in extracting a zipped folder, [please see this short tutorial](http://www.wikihow.com/Open-a-Zip-File). +### Describe Table +``` +pragma table_info('customer'); +``` -For SQLiteStudio, easy-to-use installers are now available so you should not have to unzip/copy/paste SQLiteStudio: https://sqlitestudio.pl/index.rvt?act=download +### Text Concatenation +``` +select name, city||' '||state as location from customer; +select name, region|| ' ' || street_address || ',' || city || ',' || state || ',' || zip as shipping_address from customer; +``` +# Chapter 5 **WHERE** +### Using Where on Numbers +``` +select * from station_data where year>2005 and year<2010 ; +select * from station_data where year between 2005 and 2010; +``` +### AND, OR and IN statements +``` +select * from station_data where month=3 or month=6 or month=9 or month=12; +select * from station_data where month in (3,6,9,12); +select * from station_data where month not in (3,6,9,12); +select * from station_data where month%3=0; +``` -![](https://images-na.ssl-images-amazon.com/images/I/51A7fbsp0EL.jpg) +### Using WHERE on Text +``` +select * from station_data where length(report_code)=6; +select * from station_data where report_code like 'b%'; +select * from station_data where report_code like 'b_c%'; +``` +### Using WHERE on Booleans +``` +select * from station_data where tornado=1 and hail=1; +select * from station_data where tornado and hail; +select * from station_data where tornado=0 and hail; +select * from station_data where not tornado and hail; +``` +### Handling NULL +``` +select * from station_data where snow_depth is NULL; + +//coalesce() function +select report_code, coalesce(precipitation,0) as rainfall from station_data where precipitation <=0.5; +select * from station_data where (rain=1 and temperature<=32) or snow_depth>0; +``` +# Chapter 6 **GROUP BY and ORDER BY** +### Grouping Records +``` +select count(*) from station_data where tornado; +select year, month, count(*) as count from station_data group by year; + +// Grouping using ordinal positions +select count(*) from station_data where tornado; +select year, month, count(*) as count from station_data group by 1; +``` +### Ordering Records +``` +select * from station_data where tornado=1 group by 1,2 order by 1,4 desc; +``` +### Aggregate Functions +``` +//sum() function +select year, sum(snow_depth) from station_data where year>=2000 group by year; + +//max() function +select year, sum(snow_depth) as total_snow , sum(precipitation) as total_precipitation, max(precipitation) from station_data where year>=2000 and tornado group by year; +``` +### HAVING Statement +``` +select year, sum(precipitation) from station_data group by year having precipitation>0.5; +``` +### Getting DISTINCT Records +``` +select DISTINCT STATION_NUMBER FROM STATION_DATA ORDER BY STATION_NUMBER ASC; +``` + +# Chapter 7 **CASE Statements** + +### The CASE Statement +``` +select report_code,year,month,wind_speed, + CASE + when wind_speed>=4 then 'high' + when wind_speed between 3 and 4 then 'moderate' + else 'low' end as wind_severity +from station_data; + +//More efficient method +select report_code,year,month,wind_speed, +CASE + when wind_speed>=4 then 'high' + when wind_speed >=3 then 'moderate' + else 'low' +END AS wind_severity +from station_data; +``` + +### Grouping CASE Statements +``` +select year, +CASE + when wind_speed>=4 then 'high' + when wind_speed >=3 then 'moderate' + else 'low' +END AS wind_severity , +count(*) as count +from station_data +GROUP BY 1,2; +``` + +### The "Zero/Null" CASE Trick +``` +select year, month, +sum(case + when tornado=0 then precipitation + else 0 END) +AS non_tornado_precipitation, +sum(case + when tornado=1 then precipitation + else 0 END) +as tornado_precipitation +from station_data +group by year,month; +``` +``` +select year,month, +max(case when tornado=1 then precipitation else Null end) as max_precipitation_tornado, +max (case when tornado=0 then precipitation else NULL end) as max_precipitation_non_tornado +from station_data +group by year; +``` +``` +select month, +avg(case when rain or hail then temperature else NULL end) as avg_preicpitation_temp, +avg(case when not (rain or hail) then temperature else NULL end) as avg_non_precipitation_temp +from station_data +where year>2000 +group by month +``` + +# Chapter 8 **JOIN** +## INNER JOIN +``` +select order_id, customer.customer_id, order_date, ship_date, name, street_address, street_Address, city, state, zip,product_id, order_qty +from customer inner join customer_order +on customer.CUSTOMER_ID= customer_order.CUSTOMER_ID; +``` +## LEFT JOIN +``` +select order_id, customer_id, order_date, +ship_date, name, street_address, street_Address, +city, state, zip,product_id, order_qty +from customer LEFT join customer_order +on customer.CUSTOMER_ID= customer_order.CUSTOMER_ID; +``` +``` +SELECT ORDER_ID, CUSTOMER_ID,NAME +FROM CUSTOMER LEFT JOIN CUSTOMER_ORDER +ON CUSTOMER.CUSTOMER_ID = CUSTOMER_ORDER.CUSTOMER_ID +WHERE ORDER_ID IS NULL; +``` +## Other JOIN Types +### RIGHT JOIN and OUTER JOIN +Not featured in SQLite due to their highly niche nature. + +## Joining Multiple Tables +``` +SELECT ORDER_ID, customer.CUSTOMER_ID, name, +street_address,city,state,zip,order_date,product_id,description, order_qty +FROM CUSTOMER +INNER JOIN CUSTOMER_ORDER +ON CUSTOMER.CUSTOMER_ID = CUSTOMER_ORDER.CUSTOMER_ID +INNER JOIN PRODUCT +ON CUSTOMER_ORDER.PRODUCT_ID=PRODUCT.PRODUCT_ID ; +``` +``` +SELECT ORDER_ID, customer.CUSTOMER_ID, name, +street_address,city,state,zip,order_date,product_id,description, order_qty, ORDER_QTY*PRICE AS REVENUE +FROM CUSTOMER +INNER JOIN CUSTOMER_ORDER +ON CUSTOMER.CUSTOMER_ID = CUSTOMER_ORDER.CUSTOMER_ID +INNER JOIN PRODUCT +ON CUSTOMER_ORDER.PRODUCT_ID=PRODUCT.PRODUCT_ID ; +``` +## Grouping JOINs +``` +SELECT ORDER_ID, customer.CUSTOMER_ID, name, +street_address,city,state,zip,order_date,product_id,description, order_qty, sum(ORDER_QTY*PRICE) AS totalRevenue +FROM CUSTOMER +INNER JOIN CUSTOMER_ORDER +ON CUSTOMER.CUSTOMER_ID = CUSTOMER_ORDER.CUSTOMER_ID +INNER JOIN PRODUCT +ON CUSTOMER_ORDER.PRODUCT_ID=PRODUCT.PRODUCT_ID +group by customer.customer_id, name; +``` +``` +SELECT ORDER_ID, customer.CUSTOMER_ID, name, +street_address,city,state,zip,order_date,product_id,description, order_qty, sum(ORDER_QTY*PRICE) AS totalRevenue +FROM CUSTOMER +left JOIN CUSTOMER_ORDER +ON CUSTOMER.CUSTOMER_ID = CUSTOMER_ORDER.CUSTOMER_ID +LEFT JOIN PRODUCT +ON CUSTOMER_ORDER.PRODUCT_ID=PRODUCT.PRODUCT_ID +group by 2,3; +``` +*NOTE*: Upon mixing INNER and LEFT join, INNER will always win and all the NULL values will get filtered out. +``` +SELECT ORDER_ID, customer.CUSTOMER_ID, name, +street_address,city,state,zip,order_date,product_id,description, order_qty, coalesce(sum(ORDER_QTY*PRICE),0) AS totalRevenue +FROM CUSTOMER +left JOIN CUSTOMER_ORDER +ON CUSTOMER.CUSTOMER_ID = CUSTOMER_ORDER.CUSTOMER_ID +LEFT JOIN PRODUCT +ON CUSTOMER_ORDER.PRODUCT_ID=PRODUCT.PRODUCT_ID +group by 2,3; +``` +# CHAPTER 9 **Database Design** +## Creating a New Database and Tables +``` +CREATE TABLE Company ( + Company_Id INTEGER PRIMARY KEY AUTOINCREMENT, + Company_name VARCHAR (30) NOT NULL, + Description VARCHAR (60), + Contact INTEGER (10) NOT NULL +); + +CREATE TABLE Attendees ( + Attendee_Id Integer Primary key autoincrement, + Attendee_Name Varchar (60) NOT NULL, + Phone Integer (10) not null, + Email varchar (60), + VIP boolean default(0) +); + +create table Room ( + Room_Id integer primary key autoincrement, + Floor_No integer not null, + Seat_Capacity integer not null +); + +create table Presentations ( + Presentation_Id Integer primary key autoincrement, + Company_Id integer not null, + Room_Id integer not null, + Start_Time time, + End_Time time, + constraint fk_room + foreign key (room_id) + references room(room_id), + constraint fk_companies + foreign key(company_id) + references company(company_id) +); + +create table Presentation_Attendance ( + Ticket_Id integer primary key autoincrement, + Attendee_Id integer , + Presentation_Id integer, + constraint fk_attendees + foreign key (attendee_id) + references attendees (attendee_id), + constraint fk_presentation + foreign key (presentation_id) + references presentation(presentation_id) + +); + +``` +## Creating Views +``` +CREATE VIEW Presentation_VW AS + SELECT company.company_name AS name, + room.room_id AS room_no, + room.floor_no AS floor_no, + room.seat_capacity AS seat_capacity, + start_time, + end_time + FROM presentations + INNER JOIN + company ON company.company_id = presentations.company_id + INNER JOIN + room ON room.room_id = presentations.room_id; +``` + +# CHAPTER 10 **Managing Data** +## Insert +``` +insert into attendee (name) +values('arzoo'); +``` +## Multiple Inserts +``` +insert into attendee(name) +values +('b'), +('c'), +('d'); +``` +## Testing Foreign Keys +### Correcting Mistake- Altering table company to have a foregin key attendee_id +``` +pragma foreign_keys=off; +begin transaction; +alter table company rename to company_old; + +CREATE TABLE company ( + Company_Id INTEGER PRIMARY KEY AUTOINCREMENT, + Company_Name VARCHAR (30) NOT NULL, + Description VARCHAR (60), + Attendee_Id INTEGER NOT NULL + REFERENCES Attendees (Attendee_Id), + CONSTRAINT fk_Attendees FOREIGN KEY ( + Attendee_Id + ) + REFERENCES Attendees (Attendee_Id) +); + +insert into company select * from company_old; +commit; +pragma foreign_keys=on; +``` + +### Testing Foreign Keys +The following snippet throws error : FOREIGN KEY constraint failed +``` +insert into company (company_name, attendee_id) +values ('rexapp solutions', 4); +``` +The following snippet works: +``` +insert into company (company_name, attendee_id) +values ('rexapp solutions', 3); +``` + +## DELETE +It deletes all records +``` +delete from company where description is null; +``` + +## TRUNCATE TABLE +Not supported by sqlite but it is the preferred way of deleting records in MySQL,etc. +``` +TRUNCATE TABLE ATTENDEES; +``` + +## UPDATE +``` +update attendees set email=upper(email), +attendee_name=upper(attendee_name) +``` + +``` +update attendees +set vip=1 +where attendee_id in (1,3); +``` + +## DROP TABLE +``` +drop table company_old; +``` \ No newline at end of file diff --git a/surgetech_self.db b/surgetech_self.db new file mode 100644 index 0000000..2aa2502 Binary files /dev/null and b/surgetech_self.db differ diff --git a/tempCodeRunnerFile.cpp b/tempCodeRunnerFile.cpp new file mode 100644 index 0000000..b456912 --- /dev/null +++ b/tempCodeRunnerFile.cpp @@ -0,0 +1,10 @@ +#include +using namespace std; +#define INF 999 +int V=8; +int dist[8]={INF}; + +int main(){ + + return 0; +} diff --git a/tempCodeRunnerFile.exe b/tempCodeRunnerFile.exe new file mode 100644 index 0000000..ce0bfa7 Binary files /dev/null and b/tempCodeRunnerFile.exe differ