diff --git a/README.md b/README.md index 47317c0..c700aab 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,9 @@ OpenShift
OpenShift

Beginner :baby:
Bash
Shell Scripting

Beginner :baby:
Advanced :star: + + sql
SQL

Beginner :baby:
Advanced :star: + @@ -2005,6 +2008,160 @@ A short way of using if/else. An example: [[ $a = 1 ]] && b="yes, equal" || b="nope" +## SQL + + +#### :baby: Beginner + +
+What does SQL stand for?
+ +Structured Query Language +
+ +
+How is SQL Different from NoSQL
+ +The main difference is that SQL databases are structured (data is stored in the form of +tables with rows and columns - like an excel spreadsheet table) while NoSQL is +unstructured, and the data storage can vary depending on how the NoSQL DB is set up, such +as key-value pair, document-oriented, etc. +
+ +
+What does it mean when a database is ACID compliant?
+ +ACID stands for Atomicity, Consistency, Isolation, Durability. In order to be ACID compliant, the database much meet each of the four criteria + +**Atomicity** - When a change occurs to the database, it should either succeed or fail as a whole. + +For example, if you were to update a table, the update should completely execute. If it only partially executes, the +update is considered failed as a whole, and will not go through - the DB will revert back to it's original +state before the update occurred. It should also be mentioned that Atomicity ensures that each +transaction is completed as it's own stand alone "unit" - if any part fails, the whole statement fails. + +**Consistency** - any change made to the database should bring it from one valid state into the next. + +For example, if you make a change to the DB, it shouldn't corrupt it. Consistency is upheld by checks and constraints that +are pre-defined in the DB. For example, if you tried to change a value from a string to an int when the column +should be of datatype string, a consistent DB would not allow this transaction to go through, and the action would +not be executed + +**Isolation** - this ensures that a database will never be seen "mid-update" - as multiple transactions are running at +the same time, it should still leave the DB in the same state as if the transactions were being run sequentially. + +For example, let's say that 20 other people were making changes to the database at the same time. At the +time you executed your query, 15 of the 20 changes had gone through, but 5 were still in progress. You should +only see the 15 changes that had completed - you wouldn't see the database mid-update as the change goes through. + +**Durability** - Once a change is committed, it will remain committed regardless of what happens +(power failure, system crash, etc.). This means that all completed transactions +must be recorded in non-voliatile memory. + +Note that SQL is by nature ACID compliant. Certain NoSQL DB's can be ACID compliant depending on +how they operate, but as a general rule of thumb, NoSQL DB's are not considered ACID compliant +
+ +
+When is it best to use SQL? NoSQL?
+ +SQL - Best used when data integrity is crucial. SQL is typically implemented with many +businesses and areas within the finance field due to it's ACID compliance. + +NoSQL - Great if you need to scale things quickly. NoSQL was designed with web applications +in mind, so it works great if you need to quickly spread the same information around to +multiple servers + +Additionally, since NoSQL does not adhere to the strict table with columns and rows structure +that Relational Databases require, you can store different data types together. +
+ +
+What is a Cartesian Product?
+ +A Cartesian product is when all rows from the first table are joined to all rows in the second +table. This can be done implicitly by not defining a key to join, or explicitly by +calling a CROSS JOIN on two tables, such as below: + +Select * from customers **CROSS JOIN** orders; + +Note that a Cartesian product can also be a bad thing - when performing a join +on two tables in which both do not have unique keys, this could cause the returned information +to be incorrect. +
+ +##### SQL Specific Questions + +For these questions, we will be using the Customers and Orders tables shown below: + +**Customers** + +Customer_ID | Customer_Name | Items_in_cart | Cash_spent_to_Date +------------ | ------------- | ------------- | ------------- +100204 | John Smith | 0 | 20.00 +100205 | Jane Smith | 3 | 40.00 +100206 | Bobby Frank | 1 | 100.20 + +**ORDERS** +Customer_ID | Order_ID | Item | Price | Date_sold +------------ | ------------- | ------------- | ------------- | ------------- +100206 | A123 | Rubber Ducky | 2.20 | 2019-09-18 +100206 | A123 | Bubble Bath | 8.00 | 2019-09-18 +100206 | Q987 | 80-Pack TP | 90.00 | 2019-09-20 +100205 | Z001 | Cat Food - Tuna Fish | 10.00 | 2019-08-05 +100205 | Z001 | Cat Food - Chicken | 10.00 | 2019-08-05 +100205 | Z001 | Cat Food - Beef | 10.00 | 2019-08-05 +100205 | Z001 | Cat Food - Kitty quesadilla | 10.00 | 2019-08-05 +100204 | X202 | Coffee | 20.00 | 2019-04-29 + +
+How would I select all fields from this table?
+ +Select * +From Customers; +
+ +
+How many items are in John's cart?
+ +Select Items_in_cart +From Customers +Where Customer_Name = "John Smith"; +
+ +
+What is the sum of all the cash spent across all customers?
+ +Select SUM(Cash_spent_to_Date) as SUM_CASH +From Customers; +
+ +
+How many people have items in their cart?
+ +Select count(1) as Number_of_People_w_items +From Customers +where Items_in_cart > 0; +
+ +
+How many people have items in their cart?
+ +Select count(1) as Number_of_People_w_items +From Customers +where Items_in_cart > 0; +
+ +
+How would you join the customer table to the order table?
+ +You would join them on the unique key. In this case, the unique key is Customer_ID in +both the Customers table and Orders table +
+ + +#### Advanced + ## Scenarios Scenarios are questions which don't have verbal answer and require you one of the following: diff --git a/images/sql.png b/images/sql.png new file mode 100644 index 0000000..45b2826 Binary files /dev/null and b/images/sql.png differ