# Queries

## SELECT Statement

*Basic SELECT*

```sql
SELECT column1, column2 FROM $TABEL_NAME;
```

*Select All Columns*

```sql
SELECT * FROM $TABEL_NAME;
```

*Select with Alias*

```sql
SELECT column1 AS alias_name FROM $TABEL_NAME;
```

*Select Distinct Values*

```sql
SELECT DISTINCT column1 FROM $TABEL_NAME;
```

*Select with Calculations*

```sql
SELECT column1, column2 * 2 AS calculated_column FROM $TABEL_NAME;
```

***

## Filtering

*Basic WHERE Clause*

```sql
SELECT * FROM $TABEL_NAME WHERE condition;
```

*Comparison Operators*

```sql
SELECT * FROM $TABEL_NAME WHERE column1 = 'value';SELECT * FROM $TABEL_NAME WHERE column1 != 'value';
SELECT * FROM $TABEL_NAME WHERE column1 > 100;
SELECT * FROM $TABEL_NAME WHERE column1 >= 100;
SELECT * FROM $TABEL_NAME WHERE column1 < 100;
SELECT * FROM table_name WHERE column1 <= 100;
```

*Logical Operators*

```sql
SELECT * FROM $TABEL_NAME WHERE condition1 AND condition2;
SELECT * FROM $TABEL_NAME WHERE condition1 OR condition2;
SELECT * FROM $TABEL_NAME WHERE NOT condition;
```

*LIKE Pattern Matching*

```sql
SELECT * FROM $TABEL_NAME WHERE column1 LIKE 'pattern%';
SELECT * FROM $TABEL_NAME WHERE column1 LIKE '%pattern';
SELECT * FROM $TABEL_NAME WHERE column1 LIKE '%pattern%';
SELECT * FROM $TABEL_NAME WHERE column1 LIKE '_pattern';
```

*IN Operator*

```sql
SELECT * FROM $TABEL_NAME WHERE column1 IN ('value1', 'value2', 'value3');
```

*BETWEEN Operator*

```sql
SELECT * FROM $TABEL_NAME WHERE column1 BETWEEN value1 AND value2;
```

*NULL Values*

```sql
SELECT * FROM $TABEL_NAME WHERE column1 IS NULL;
SELECT * FROM $TABEL_NAME WHERE column1 IS NOT NULL;
```

***

## Sorting & Limiting

*ORDER BY Ascending*

```sql
SELECT * FROM $TABEL_NAME ORDER BY column1;
SELECT * FROM $TABEL_NAME ORDER BY column1 ASC;
```

*ORDER BY Descending*

```sql
SELECT * FROM $TABEL_NAME ORDER BY column1 DESC;
```

*Multiple Column Sorting*

```sql
SELECT * FROM $TABEL_NAME ORDER BY column1, column2 DESC;
```

*Sort by Column Position*

```sql
SELECT column1, column2 FROM $TABEL_NAME ORDER BY 2 DESC;
```

*LIMIT Results*

```sql
SELECT * FROM $TABEL_NAME LIMIT 10;
```

*LIMIT with OFFSET*

```sql
SELECT * FROM $TABEL_NAME LIMIT 10 OFFSET 20;
SELECT * FROM $TABEL_NAME LIMIT 20, 10;
```

*Top N Results*

```sql
SELECT * FROM $TABEL_NAME ORDER BY column1 DESC LIMIT 5;
```

***

## Aggregate Functions

*COUNT Function*

```sql
SELECT COUNT(*) FROM $TABEL_NAME;
SELECT COUNT(column1) FROM $TABEL_NAME;
SELECT COUNT(DISTINCT column1) FROM $TABEL_NAME;
```

*SUM Function*

```sql
SELECT SUM(column1) FROM $TABEL_NAME;
```

*AVG Function*

```sql
SELECT AVG(column1) FROM $TABEL_NAME;
```

*MIN and MAX Functions*

```sql
SELECT MIN(column1) FROM $TABEL_NAME;
SELECT MAX(column1) FROM $TABEL_NAME;
```

*Multiple Aggregates*

```sql
SELECT COUNT(*), SUM(column1), AVG(column1), MIN(column1), MAX(column1) FROM $TABEL_NAME;
```

*String Functions*

```sql
SELECT CONCAT(column1, column2) FROM table_name;
SELECT LENGTH(column1) FROM $TABEL_NAME;
SELECT UPPER(column1) FROM $TABEL_NAME;
SELECT LOWER(column1) FROM $TABEL_NAME;
SELECT SUBSTRING(column1, 1, 3) FROM $TABEL_NAME;
```

*Date Functions*

```sql
SELECT NOW();
SELECT DATE(column1) FROM $TABEL_NAME;
SELECT YEAR(column1) FROM $TABEL_NAME;
SELECT MONTH(column1) FROM $TABEL_NAME;
SELECT DAY(column1) FROM $TABEL_NAME;
SELECT DATEDIFF(NOW(), column1) FROM $TABEL_NAME;
```

***

## GROUP BY and HAVING

*Basic GROUP BY*

```sql
SELECT column1, COUNT(*) FROM $TABEL_NAME GROUP BY column1;
```

*GROUP BY Multiple Columns*

```sql
SELECT column1, column2, COUNT(*) FROM $TABEL_NAME GROUP BY column1, column2;
```

*GROUP BY with Aggregates*

```sql
SELECT column1, COUNT(*), SUM(column2), AVG(column2) FROM $TABEL_NAME GROUP BY column1;
```

*HAVING Clause*

```sql
SELECT column1, COUNT(*) FROM $TABEL_NAME GROUP BY column1 HAVING COUNT(*) > 5;
```

*HAVING with Multiple Conditions*

```sql
SELECT column1, AVG(column2) FROM $TABEL_NAME GROUP BY column1 HAVING AVG(column2) > 100 AND COUNT(*) > 3;
```

*WHERE vs HAVING*

```sql
SELECT column1, COUNT(*) FROM $TABEL_NAME WHERE column2 > 50 GROUP BY column1 HAVING COUNT(*) > 2;
```

***

## Joins

*INNER JOIN*

```sql
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id;
```

*LEFT JOIN*

```sql
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id;
```

*RIGHT JOIN*

```sql
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;
```

*FULL OUTER JOIN (MySQL Alternative)*

```sql
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_idUNIONSELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;
```

*CROSS JOIN*

```sql
SELECT * FROM table1 CROSS JOIN table2;
```

*SELF JOIN*

```sql
SELECT t1.column1, t2.column1 FROM table1 t1 INNER JOIN table1 t2 ON t1.manager_id = t2.id;
```

*Multiple Table JOIN*

```sql
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_idINNER JOIN table3 ON table2.id = table3.table2_id;
```

*JOIN with WHERE*

```sql
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id WHERE table1.column1 = 'value';
```

*JOIN with GROUP BY*

```sql
SELECT table1.column1, COUNT(*) FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id GROUP BY table1.column1;
```
