handbook/tools/3.Web-Hacking/4.Injection/SQL/Language/SQL-Language.md
2024-08-31 01:07:22 +02:00

424 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Manipulation
## ## **SELECT**
```
SELECT * (or SOMETHING) FROM table_name;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- SOMETHING = Speficy the name of the columns we want to take the information (Columns Name)
- FROM = Indicate what table to check --> *`clause`*
- table_name = EX: Table (Composed of coluns and rows) (Data in form of TEXT, DATE, REAL, ...)
- ; = end of the statment
**AS**
```
SELECT name AS 'Titles'
FROM movies;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- name = columns normal name
- AS = Change the name of the Column
- 'Titles' = The name column renamed
- - FROM = Indicate what table to check --> *`clause`*
- table_name = EX: Table (Composed of coluns and rows) (Data in form of TEXT, DATE, REAL, ...)
- ; = end of the statment
**DISTINCT**
```
SELECT DISTINCT tools
FROM inventory;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- DISTINCT = Return unique values in the output
- tools = Column name
- FROM = Indicate what table to check --> *`clause`*
- table_name = EX: Table (Composed of coluns and rows) (Data in form of TEXT, DATE, REAL, ...)
- ; = end of the statment
**Opperation**
```
SELECT *
FROM movies
WHERE imdb_rating > 8;
```
- `=` `!=` `>` `<` `>=` `<=`
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- imdb_rating > 8 = Looking for imdb_rating that is unter 8
- ; = end of the statment
**LIKE**
```
SELECT * 
FROM movies
WHERE name LIKE 'Se_en';
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- name = columns
- LIKE 'Se_en' = `LIKE 'Se_en'` is a condition evaluating the `name` column for a specific pattern.
- ; = end of the statment
**LIKE**
```
SELECT * 
FROM movies
WHERE name LIKE '%man%';
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- name = Column name
- LIKE = `LIKE` is a condition evaluating the `name` column for a specific pattern.
- '%man%' = Mean anything that has something before 'man' and something after
- ; = end of the statment
**IS / IS NOT**
```
SELECT name
FROM movies
WHERE imdb_rating IS (NOT) NULL;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- imbd_rating = columns name
- IS (NOT) NULL = Looking for field that are NULL or NOT
- ; = end of the statment
**BETWEEN**
```
SELECT *
FROM movies
WHERE name BETWEEN 'D 'AND 'G';
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- name = Column name
- BETWEEN = Looking for value between 2 elements
- 'D' AND 'G' = Values we are looking for
- IS (NOT) NULL = Looking for field that are NULL or NOT
- ; = end of the statment
**AND**
```
SELECT * 
FROM movies
WHERE year BETWEEN 1990 AND 1999
   AND genre = 'romance';
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- year = Column name
- BETWEEN = Looking for value between 2 elements
- '1990' AND '1999' = Values we are looking for
- AND = Add a condition
- genre = 'romance'; = Looking for column genre = romance
- ; = end of the statment
**Or**
```
SELECT *FROM movies
WHERE year > 2014   
OR genre = 'action';
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- WHERE = Looking for value (following statement)
- year = Column name
- > 2014 = Biger the 2014
- OR = Add a OR condition
- genre = 'action'; = Looking for column genre = romance
- ; = end of the statment
**Order By**
```
SELECT *
FROM movies
ORDER BY name ASD,DSC;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- ORDER BY = Order by
- name = columns name
- ASD, DSC = Assendent, Dessendent
- ; = end of the statment
**Limit**
```
SELECT *
FROM movies
LIMIT 10;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- LIMIT 10 = Limit the number of responses to 10 (In this case)
- ; = end of the statment
**Case**
```
SELECT name,
CASE
  WHEN imdb_rating > 8 THEN 'Fantastic'
  WHEN imdb_rating > 6 THEN 'Poorly Received'
  ELSE 'Avoid at All Costs'
END
FROM movies;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- name = Column name
- CASE = Only show element that correspond to specific CASE
WHEN = Condition
ELSE = Everything that does not fit in those condition
- END = End the case statement
- FROM = Indicate what table to check --> *`clause`*
- movies = Table name
- ; = end of the statment
## ## **Join**
```
SELECT *
FROM orders
JOIN customers
  ON orders.customer_id = customers.customer_id;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- * = Everything
- orders = Table
- JOIN = Join to the other table
- customer = Second table (the one we merge in)
- ON = Explain what field are the same (to add the right info the right customer)
## ## **CREATE**
```
CREATE TABLE table_name (
   id INTEGER,
   name TEXT,
   age INTEGER
);
```
- CREATE = Indicate the action --> *`clause
- TABLE = Specify the table
- table_name = EX: Table (Composed of coluns and rows) (Data in form of TEXT, DATE, REAL, ...)
- id, name, age = Indicate the name of the columns
- INTEGER, TEXT, ... = Indicate the type of value that will be incerted
- ; = end of the statment
## ## **INSERT**
```
INSERT INTO celebs (id, name, age)
VALUES (1, 'Justin Bieber', 22);
```
- INSERT INTO = Indicate the action (Add info to a table) --> *`clause
- (id, name, age) = Identifying the columns that data will be inserted into.
- VALUES = Specify the value that will be inclouded in the table --> *`clause
- (1, 'Justin Bieber', 22) = Value included
- ; = end of the statment
## ## **ALTER**
```
ALTER TABLE celebs
ADD COLUMN twitter_handle TEXT;
```
- ALTER TABLE = Indicate the action (change the structure of the database) --> *`clause
- celebs = Table selected
- ADD COLUMN = Specify to add a columns --> *`clause
- twitter_handle = Name of the column added
- TEXT = Type of element in this column
- ; = End of the statment
## ## **Update**
```
UPDATE celebs
SET twitter_handle = '@taylorswift13'
WHERE id = 4;
```
- UPDATE = Indicate the action --> *`clause
- celebs = table selected
- SET = Action --> *`clause
- twitter_handle = Column name
- = '@...' = Input to be added
- WHERE id equal 4 = Searching for id equal 4
- ; = End of the statment
## ## **Delete**
```
DELETE FROM celebs
WHERE twitter_handle IS NULL;
```
- DELETE = Indicate the action
- FROM = Indicate what table to check --> *`clause
- celebs =
- WHERE = Searching for --> *`clause
- twitter_handle = Column Name
- IS NULL = Equal Nothing (Empty) --> *`clause
- ; = End of the statment
## ## **Constraints**
Reject & accept specific data
```
CREATE TABLE celebs (
   id INTEGER PRIMARY KEY,
   name TEXT UNIQUE,
   date_of_birth TEXT NOT NULL,
   date_of_death TEXT DEFAULT 'Not Applicable'
);
```
1. `PRIMARY KEY` columns can be used to uniquely identify the row. Attempts to insert a row with an identical value to a row already in the table will result in a _constraint violation_ which will not allow you to insert the new row.
2. `UNIQUE` columns have a different value for every row. This is similar to `PRIMARY KEY` except a table can have many different `UNIQUE` columns.
3. `NOT NULL` columns must have a value. Attempts to insert a row without a value for a `NOT NULL` column will result in a constraint violation and the new row will not be inserted.
4. `DEFAULT` columns take an additional argument that will be the assumed value for an inserted row if the new row does not specify a value for that column.
## Function
## ## **Count**
```
SELECT COUNT(*)
FROM table_name;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- COUNT() = Count the number of row in the column (star) = ALL --> *`clause
- FROM = Indicate what table to check --> *`clause`*
- table_name = table name
- ; = End of the statement
## ## **Sum**
```
SELECT SUM(downloads)
FROM table_name;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- SUM(downloads) = Check the summury of the download column --> *`clause
- FROM = Indicate what table to check --> *`clause`*
- table_name = table name
- ; = End of the statement
## ## **Max / Min**
```
SELECT MAX(downloads)
FROM Table_name;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- MAX(downloads) = Check the maximum download (Highest value) --> *`clause
- FROM = Indicate what table to check --> *`clause`*
- table_name = table name
- ; = End of the statement
## ## **Average**
```
SELECT AVG(downloads)
FROM fake_apps;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- AVG(downloads) = Check the average download --> *`clause
- FROM = Indicate what table to check --> *`clause`*
- table_name = table name
- ; = End of the statement
## ## **Round**
```
SELECT ROUND(price, 0)
FROM fake_apps;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- ROUND(price, 0) = round the price value with 0 precision value after the decimal
- FROM = Indicate what table to check --> *`clause`*
- table_name = table name
- ; = End of the statement
## ## **Group By I**
```
SELECT year,
   AVG(imdb_rating)
FROM movies
GROUP BY year
ORDER BY year;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- year, AVG(imdb_rating) = columns
- FROM = Indicate what table to check --> *`clause`*
- movies = Table
- GROUP BY year = Group elements by years
- ; = End of the statement
## ## **Group By II**
```
SELECT category,
   price,
   AVG(downloads)
FROM fake_apps
GROUP BY category, price;
```
- SELECT = Indicate the action (Witch is select) --> *`clause`*
- year, AVG(imdb_rating), ... = columns
- FROM = Indicate what table to check --> *`clause`*
- movies = Table
- GROUP BY category, price = Group elements by category and price
- ; = End of the statement