mirror of
https://github.com/m-lamonaca/dev-notes.git
synced 2025-04-06 10:56:41 +00:00
285 lines
7.2 KiB
Markdown
285 lines
7.2 KiB
Markdown
|
# SQL
|
||
|
|
||
|
`mysql -u root`: avvio mysql come utente root
|
||
|
|
||
|
## DDL
|
||
|
|
||
|
```sql
|
||
|
show databases; -- mostra database
|
||
|
CREATE DATABASE <database>; -- dataabse creation
|
||
|
use <database_name>; -- usa un database particolare
|
||
|
exit; -- exit mysql
|
||
|
|
||
|
show tables; -- mostra tabelle del database
|
||
|
|
||
|
-- INLINE COMMENT
|
||
|
/* MULTI-LINE COMMENT */
|
||
|
```
|
||
|
|
||
|
### Table Creation
|
||
|
|
||
|
```sql
|
||
|
CREATE TABLE <table_name>
|
||
|
(<field_name> <field_type> <option>,
|
||
|
...);
|
||
|
```
|
||
|
|
||
|
### PRIMARY KEY from multiple fields
|
||
|
|
||
|
```sql
|
||
|
CREATE TABLE <table_name>(
|
||
|
...,
|
||
|
PRIMARY KEY (<field1>, ...),
|
||
|
);
|
||
|
```
|
||
|
|
||
|
### Table Field Options
|
||
|
|
||
|
```sql
|
||
|
PRIMARY KEY -- marks primary key as field option
|
||
|
NOT NULL -- marks a necessary field
|
||
|
REFERENCES <table> (<field>) -- adds foreign key reference
|
||
|
UNIQUE (<field>) -- set field as unique (MySQL)
|
||
|
<field> UNIQUE -- T-SQL
|
||
|
```
|
||
|
|
||
|
### Table Modification
|
||
|
|
||
|
```sql
|
||
|
ALTER TABLE <table>
|
||
|
ADD PRIMARY KEY (<field>, ...), -- definition of PK after table creation
|
||
|
ADD <field_name> <field_type> <option>; -- addition of a new field, field will have no value in the table
|
||
|
|
||
|
ALTER TABLE <table>
|
||
|
CHANGE <field_name> <new_name> <new_type>;
|
||
|
ALTER COLUMN <field_name> <new_name> <new_type>; -- T-SQL
|
||
|
|
||
|
ALTER TABLE <table>
|
||
|
DROP <field>;
|
||
|
|
||
|
ALTER TABLE <table>
|
||
|
ADD FOREIGN KEY (<field>) REFERENCES <TABLE> (<FIELD>);
|
||
|
```
|
||
|
|
||
|
## DML
|
||
|
|
||
|
### Data Insertion
|
||
|
|
||
|
```sql
|
||
|
INSERT INTO <table> (field_1, ...) VALUES (value_1, ...), (value_1, ...);
|
||
|
INSERT INTO <table> VALUES (value_1, ...), (value_1, ...); -- field order MUST respest tables's columns order
|
||
|
```
|
||
|
|
||
|
### Data Update
|
||
|
|
||
|
```sql
|
||
|
UPDATE <table> SET <field> = <value>, <field> = <value>, ... WHERE <condition>;
|
||
|
```
|
||
|
|
||
|
### Data Elimination
|
||
|
|
||
|
```sql
|
||
|
DELETE FROM <table> WHERE <condition>
|
||
|
DELETE FROM <table> -- empty the table
|
||
|
```
|
||
|
|
||
|
## Data Selection
|
||
|
|
||
|
`*` Indica tutti i campi
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table>; -- show table contents
|
||
|
SHOW columns FROM <table>; -- show table columns
|
||
|
DESCRIBE <table>; -- shows table
|
||
|
```
|
||
|
|
||
|
### Alias Tabelle
|
||
|
|
||
|
```sql
|
||
|
SELECT <field/funzione> as <alias>; -- mostra <field/funzione> con nome <alias>
|
||
|
```
|
||
|
|
||
|
### Selezione Condizionale
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table> WHERE <condition>; -- mostra elementi che rispettano la condizione
|
||
|
AND, OR, NOT -- connettivi logici
|
||
|
|
||
|
SELECT * FROM <table> WHERE <field> Between <value_1> AND <value_2>;
|
||
|
```
|
||
|
|
||
|
### Ordinamento
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table> ORDER BY <field>, ...; -- mostra tabella ordinata in base a colonna <field>
|
||
|
SELECT * FROM <table> ORDER BY <field>, ... DESC; -- mostra tabella ordinata decrescente in base a colonna <field>
|
||
|
SELECT * FROM <table> ORDER BY <field>, ... LIMIT n; -- mostra tabella ordinata in base a colonna <field>, mostra n elementi
|
||
|
SELECT TOP(n) * FROM <table> ORDER BY <field>, ...; -- T-SQL
|
||
|
```
|
||
|
|
||
|
## Raggruppamento
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table> GROUP BY <field>;
|
||
|
SELECT * FROM <table> GROUP BY <field> HAVING <condition>;
|
||
|
SELECT DISTINCT <field> FROM <table>; -- mostra elementi senza riperizioni
|
||
|
```
|
||
|
|
||
|
### Ricerca caratteri in valori
|
||
|
|
||
|
`%` 0+ caratteri
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table> WHERE <field> LIKE '<char>%'; -- seleziona elemnti in <field> inizianti per <char>
|
||
|
SELECT * FROM <table> WHERE <field> LIKE '%<char>'; -- seleziona elemnti in <field> terminanti per <char>
|
||
|
SELECT * FROM <table> WHERE <field> LIKE '%<char>%'; -- seleziona elemnti in <field> contenenti <char>
|
||
|
SELECT * FROM <table> WHERE <field> NOT LIKE '%<char>%'; -- seleziona elemnti in <field> non contenenti <char>
|
||
|
```
|
||
|
|
||
|
### Selection from multiple tables
|
||
|
|
||
|
```sql
|
||
|
SELECT a.<field>, b.<field> FROM <table> AS a, <table> AS b
|
||
|
WHERE a.<field> ...;
|
||
|
```
|
||
|
|
||
|
## Funzioni
|
||
|
|
||
|
```sql
|
||
|
SELECT COUNT(*) FROM <field>; -- conta numero elemneti nel campo
|
||
|
SELECT MIN(*) FROM <table>; -- restituisce il valore minimo
|
||
|
SELECT MAX(*) FROM <table>; -- restituisce valore massimo
|
||
|
SELECT AVG(*) FROM <table>; -- media valori del campo
|
||
|
ALL (SELECT ...)
|
||
|
ANY (SELECT ...)
|
||
|
```
|
||
|
|
||
|
## Query Annidate
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table> WHERE EXISTS (SELECT * FROM <table>) -- selected field existing in subquery
|
||
|
SELECT * FROM <table> WHERE NOT EXISTS (SELECT * FROM <table>) -- selected field not existing in subquery
|
||
|
```
|
||
|
|
||
|
## New table from data
|
||
|
|
||
|
Create new table with necessary fields:
|
||
|
|
||
|
```sql
|
||
|
CREATE TABLE <table> (
|
||
|
(<field_name> <field_type> <option>,
|
||
|
...);
|
||
|
)
|
||
|
```
|
||
|
|
||
|
Fill fields with data from table:
|
||
|
|
||
|
```sql
|
||
|
INSERT INTO <table>
|
||
|
SELECT <fields> FROM <TABLE> WHERE <condition>;
|
||
|
```
|
||
|
|
||
|
## Join
|
||
|
|
||
|
Permette di legare due tabelle correlando i dati, le tabelle devono avere almeno un campo in comune.
|
||
|
Primary key deve comparire in altra tabella come foreign key.
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table1> JOIN <table2> ON <table1>.<field> = <table2>.<field>; -- seleziono tutti gli elementi che hanno una relarione tra le due tabelle
|
||
|
SELECT * FROM <table1> LEFT JOIN <table2> ON <condition>; -- seleziona tutti gli elementi di table1 e i eventuali elementi richiamati dal join
|
||
|
SELECT * FROM <table1> RIGHT JOIN <tabl2> ON <condition> -- -- seleziona tutti gli elementi di table2 e i eventuali elementi richiamati dal join
|
||
|
```
|
||
|
|
||
|
[Inner Join, Left Join, Right Join, Full Outer Join](https://www.diffen.com/difference/Inner_Join_vs_Outer_Join)
|
||
|
|
||
|
## Multiple Join
|
||
|
|
||
|
```sql
|
||
|
SELECT * FROM <table1>
|
||
|
JOIN <table2> ON <table1>.<field> = <table2>.<field>
|
||
|
JOIN <table3> ON <table2>.<field> = <table3>.<field>;
|
||
|
```
|
||
|
|
||
|
[char, nchar, varchar, nvarchar](https://stackoverflow.com/questions/176514/what-is-the-difference-between-char-nchar-varchar-and-nvarchar-in-sql-server)
|
||
|
|
||
|
***
|
||
|
|
||
|
## T-SQL (MSSQL Server)
|
||
|
|
||
|
### T-SQL Insert From table
|
||
|
|
||
|
```sql
|
||
|
USE [<db_name>]
|
||
|
|
||
|
SET IDENTITY_INSERT [<destination_table>] ON
|
||
|
|
||
|
INSERT INTO <table> (field_1, ...)
|
||
|
|
||
|
SELECT (field_1, ...) FROM <source_table>
|
||
|
|
||
|
SET IDENTITY_INSERT [<destination_table>] OFF
|
||
|
```
|
||
|
|
||
|
### T-SQL Parametric Query
|
||
|
|
||
|
```sql
|
||
|
-- variable declaration
|
||
|
DECLARE @var_name <type>
|
||
|
|
||
|
-- init variable (input parameter)
|
||
|
SET @var_name = <value>
|
||
|
|
||
|
-- use in query (memorize data)
|
||
|
SELECT @var_name = COUNT(*) -- query won't show results in the "table view" sice param is used in SELECT
|
||
|
FROM <table> ...
|
||
|
|
||
|
-- display message (query won't show results in the "table view")
|
||
|
PRINT 'Text: ' + @var_name
|
||
|
PRINT 'Text: ' + CONVERT(type, @var_name) -- convert data before printing
|
||
|
GO
|
||
|
```
|
||
|
|
||
|
### T-SQL View
|
||
|
|
||
|
A view represents a virtual table. Join multiple tables in a view and use the view to present the data as if the data were coming from a single table.
|
||
|
|
||
|
```sql
|
||
|
CREATE VIEW <name> AS
|
||
|
SELECT * FROM <table> ...
|
||
|
```
|
||
|
|
||
|
### T-SQL Stored Procedure
|
||
|
|
||
|
[Stored Procedure How-To](https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/create-a-stored-procedure "Create a Stored Procedure - Microsoft Docs")
|
||
|
[T-SQL Stored Procedure](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql)
|
||
|
|
||
|
Stored Procedure Definition:
|
||
|
|
||
|
```sql
|
||
|
CREATE PROCEDURE <Procedure_Name>
|
||
|
-- Add the parameters for the stored procedure here
|
||
|
<@Param1> <Datatype_For_Param1> = <Default_Value_For_Param1>,
|
||
|
<@Param2> <Datatype_For_Param2>
|
||
|
AS
|
||
|
BEGIN
|
||
|
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
|
||
|
SET NOCOUNT ON; -- dont return number of selected rows
|
||
|
|
||
|
-- Insert statements for procedure here
|
||
|
SELECT ...
|
||
|
END
|
||
|
GO
|
||
|
```
|
||
|
|
||
|
Stored Procedure call in query:
|
||
|
|
||
|
```sql
|
||
|
USE <database>
|
||
|
GO
|
||
|
|
||
|
-- Stored Procedure call
|
||
|
EXECUTE <Procedure_Name>
|
||
|
-- or
|
||
|
EXEC <Procedure_Name>
|
||
|
```
|