From 5129a3a8a168e3d2061b139c70654ba8b4e71210 Mon Sep 17 00:00:00 2001 From: zdj21jdz Date: Sun, 20 Oct 2019 23:17:42 -0400 Subject: [PATCH] Added SQL questions, as well as SQL Icon for top section of README --- README.md | 157 +++++++++++++++++++++++++++++++++++++++++++++++++ images/sql.png | Bin 0 -> 23979 bytes 2 files changed, 157 insertions(+) create mode 100644 images/sql.png 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 0000000000000000000000000000000000000000..45b2826fb9292c28d53f70ba1571203f419becfc GIT binary patch literal 23979 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 Q2)mH&uMQ_Gk9)`b8>iE%q5uE@ literal 0 HcmV?d00001