Repository navigation
Expand file tree
/
Copy path04_SQL_DML-commands.sql
More file actions
141 lines (108 loc) · 3.72 KB
/
Copy path04_SQL_DML-commands.sql
File metadata and controls
141 lines (108 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
INSERT syntax:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES
(value1, value2, value3, ...),
(value1, value2, value3, ...)
NOTE: jesli nie wybierzemy konkretnych kolumn to sql bedzie to rozumial to tak ze chcemy dodac dane do
wszystkich kolumn
NOTE: ilosc kolumn i values ma byc taka sama
*/
USE MyDatabase
SELECT *
FROM dbo.customers
INSERT INTO dbo.customers (id, first_name, country, score)
VALUES
(6, 'Anna', 'USA', NULL),
(7, 'Sam', NULL, 100)
-- dodaje nowe wiersze do tabeli customers, zgodnie z tym co zapisalismy
INSERT INTO dbo.customers (id, first_name, country, score)
VALUES
(8, 'USA', 'MAX', NULL)
/*jesli uzywamy odpowiednich datatypes to baza danych pozwoli nam je wpisac nawet jesli nie maja
sensu w kontekscie naszej pracy */
DELETE FROM dbo.customers -- usuwamy z customers
WHERE id = 8; -- tam gdzie id jest = 8; NOTE: jesli nie damy WHERE to cala tabela stanie sie pusta!!
INSERT INTO dbo.customers (id, first_name)
VALUES
(8,'Andreas'),
(9, 'Sarah')
/*NOTE: kolumny nie zawarte w poleceniu INSERT domyslnie beda uznawane jako NULL'e (o ile nie instnieje
default albo constraint).*/
/*task: Copy data from 'customers' table into 'persons */
CREATE TABLE dbo.persons
(
id INT NOT NULL,
person_name VARCHAR(50) NOT NULL,
birth_date DATE,
phone VARCHAR(15) NOT NULL
CONSTRAINT pk_persons PRIMARY KEY (id)
)
/*uzywamy Selecta ponizej do dodania danych do innej tabeli
(wynik zapytania SELECT doda sie do innej tableli) */
INSERT INTO persons (id, person_name, birth_date, phone)
SELECT
id,
first_name, --kolumny moga miec inne nazwy poniewaz baze danych obchodzi w typ przypadku jedynie typ danych
NULL, --dajemy wartosc NULL bo nie mamy daty urodzenia w customers i MOZE byc NULL
'Unknown' --wartosc statyczna (deafaultowa) bo w customers nie mamy numeru telefonu a NIE moze byc NULL
FROM dbo.customers
SELECT*
FROM dbo.persons
-----------------------------------------------------------------------------------------------------------------------
/*
UPTADE syntax:
UPTADE table_name
SET
column1 = value1,
column2 = value2
WHERE <condition>
NOTE: zawsze uzywa sie WHERE aby uniknac aktualizowania WSZYSTKICH wierszy!
*/
/*task: Change the score of customer with ID 6 to 0 */
UPDATE dbo.customers
SET score = 0
WHERE id = 6 --pamietamy o where condition!
SELECT*
FROM dbo.customers
WHERE id = 6
-- BEST PRACTICE: sprawdz przed wykonaniem za pomoca selecta ktore wiersze zostana zmienione!
/*task: Change the score of customer with ID 10 to 0 and update the country to 'UK'*/
INSERT INTO dbo.customers (id, first_name, country, score)
VALUES (10, 'Maciek', 'POLAND', 345)
UPDATE dbo.customers
SET
score = 10,
country = 'UK'
WHERE id = 10
SELECT*
FROM dbo.customers
WHERE id = 10 -- sprawdzenie przed wykonaniem UPDATE
/*task: Update all customers with a NULL score by setting their score to 0 */
UPDATE dbo.customers
SET score = 0
WHERE score IS NULL -- tam gdzie cos jest NULL'em
SELECT*
FROM dbo.customers
WHERE score IS NULL
---------------------------------------------------------------------------------------------------------------
/*
DELETE syntax:
DELETE FROM table_name
WHERE <condition>
NOTE: tak jak z update zawsze dajemy where condition bo usuniemy WSZYSTKIE wiersze !!
*/
/*task: Delete all customers with an ID greater than 5 */
DELETE FROM dbo.customers
WHERE id > 5
SELECT*
FROM dbo.customers
WHERE id > 5
/*task: Delete all data from the persons table */
-- mozna uzyc: DELETE FROM dbo.persons ale nie jest to najlepsza praktyka
TRUNCATE TABLE dbo.persons
/* pomija to duzo procesow pod spodem i jest szybsze, delete moze byc dla mniejszych tabel
ale dla wiekszych TRUNCATE bedzie lepsze */
SELECT*
FROM dbo.persons
-- NOTE: tabela dalej instnieje po tych komendach ale jest pusta