- Structured Query Language (SQL)
- Relational Databases
- SQLite
- Writing Basic Queries
For this lab you will:
- write SQL statements against a pre-populated database using an online tool. Once you have the correct SQL Statement for each query, write it inside the
queries.md
file under the appropriate heading. - install
SQLite Studio
and use it to create a database within this codebase. - using
SQLite Studio
add a table to the database you just created. - write API endpoints to interact with your database
Visit SQL Try Editor at W3Schools.com using the Google Chrome (or Chromium if you use Linux) browser and write SQL queries for the following requirements:
- find all customers that live in London. Returns 6 records.
- find all customers with postal code 1010. Returns 3 customers.
- find the phone number for the supplier with the id 11. Should be (010) 9984510.
- list orders descending by the order date. The order with date 1997-02-12 should be at the top.
- find all suppliers who have names longer than 20 characters. You can use
length(SupplierName)
to get the length of the name. Returns 11 records. - find all customers that include the word "market" in the name. Should return 4 records.
- add a customer record for "The Shire", the contact name is "Bilbo Baggins" the address is "1 Hobbit-Hole" in "Bag End", postal code "111" and the country is "Middle Earth".
- update Bilbo Baggins record so that the postal code changes to "11122".
Clicking the Restore Database
button in the page will repopulate the database with the original data and discard all changes you have made.
-
use
SQLite Studio
to create a database, name itbudget.db3
and save it in thedata
folder of this repository. You must use this exact name and save it within thedata
folder or youraccounts-model
will not be able to connect. -
add an
accounts
table with the following schema:id
, numeric value with no decimal places that should auto-increment.name
, stringbudget
numeric value.
-
constraints
- the
id
should be the primary key for the table. - account
name
should be required and unique. - account
budget
is required.
- the
Database access will be done using the accounts-model.js
file included inside the data
folder. This file publishes the following methods:
All these methods are asynchronous and return a promise.
find()
: callingfind
returns a promise that resolves with an array of all the accounts contained in the database.findById()
: this method expects anid
as it's only parameter and returns a promise that resolves with the account corresponding to theid
provided or a falsy value if an account with thatid
is not found.add()
: calling add passing it a account object will add it to the database and return a promise that resolves with the newly inserted account.update()
: accepts two arguments, the first is theid
of the account to update and the second is an object with thechanges
to apply. It returns a promise that resolves with the count of updated records. If the count is1
it means the record was updated correctly.remove()
: the remove method accepts anid
as it's first parameter and upon successfully deleting the account from the database it returns returns a promise that resolves with the number of records deleted.
Now that we have a way to add, update, remove and retrieve data from the provided database, it is time to work on the API.
- Within
server.js
add CRUD endpoints for the account resource. You may usedata/accounts-model.js
for access to your newly created database. The methods included in theaccounts-model
are described above in the Database Access section. - Use these endpoints to manually test that your database is working as expected.
The following exercises require research, the concepts needed to complete them have not been covered in class yet.
- delete all customers that have no orders. Should delete 18 records.
- list orders grouped by customer showing the number of orders per customer. Rattlesnake Canyon Grocery should have 7 orders.
- list customers names and the number of orders per customer. Sort the list by number of orders in descending order. Ernst Handel should be at the top with 10 orders followed by QUICK-Stop, Rattlesnake Canyon Grocery and Wartian Herkku with 7 orders each.
- list orders grouped by customer's city showing number of orders per city. Returns 58 Records with Aachen showing 2 orders and Albuquerque showing 7 orders.