Microsoft SQL Server – Cheatsheet Windows / SSMS
Podstawowe polecenia dla Microsoft SQL Server działającego w systemie Windows. Polecenia SQL można wykonywać między innymi w SQL Server Management Studio (SSMS) oraz za pomocą narzędzia sqlcmd.
Logowanie do SQL Server – uwierzytelnianie Windows
sqlcmd -S localhost -E
Parametr -E oznacza użycie aktualnie zalogowanego konta Windows.
Logowanie do SQL Server – login SQL
sqlcmd -S localhost -U sa -P Haslo
Logowanie do konkretnej instancji SQL Server
sqlcmd -S localhost\SQLEXPRESS -E
Sprawdzenie wersji SQL Server
SELECT @@VERSION;
GO
Wyświetlenie nazwy serwera
SELECT @@SERVERNAME;
GO
Wyświetlenie wszystkich baz danych
SELECT name
FROM sys.databases;
GO
Tworzenie bazy danych
CREATE DATABASE Firma;
GO
Przełączenie na bazę danych
USE Firma;
GO
Sprawdzenie aktualnie używanej bazy danych
SELECT DB_NAME();
GO
Usuwanie bazy danych
DROP DATABASE Firma;
GO
Wyświetlenie tabel w bazie danych
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
GO
Wyświetlenie samych nazw tabel
SELECT name
FROM sys.tables;
GO
Tworzenie tabeli
CREATE TABLE pracownicy
(
id_os INT IDENTITY(1,1) PRIMARY KEY,
imie NVARCHAR(50),
nazwisko NVARCHAR(50),
plec CHAR(1),
miasto NVARCHAR(50),
data_urodzenia DATE,
wydzial INT,
data_zatrudnienia DATE,
data_zwolnienia DATE
);
GO
IDENTITY(1,1) jest odpowiednikiem AUTO_INCREMENT znanego z MySQL. Pierwsza wartość oznacza numer początkowy, a druga wartość określa, o ile zwiększany jest kolejny identyfikator.
Wyświetlenie struktury tabeli
EXEC sp_help 'pracownicy';
GO
Wyświetlenie kolumn tabeli
SELECT
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'pracownicy';
GO
Usuwanie tabeli
DROP TABLE pracownicy;
GO
Dodawanie kolumny do tabeli
ALTER TABLE pracownicy
ADD email NVARCHAR(100);
GO
Usuwanie kolumny z tabeli
ALTER TABLE pracownicy
DROP COLUMN email;
GO
Wprowadzanie danych do tabeli
INSERT INTO pracownicy
(
imie,
nazwisko,
plec,
miasto,
data_urodzenia,
wydzial,
data_zatrudnienia
)
VALUES
(
N'Jan',
N'Kowalski',
'M',
N'Wrocław',
'1995-05-10',
1,
'2026-01-10'
);
GO
Przed tekstem zawierającym polskie znaki można stosować N, np. N'Wrocław', szczególnie gdy kolumna ma typ NVARCHAR.
Dodawanie wielu rekordów jednocześnie
INSERT INTO pracownicy (imie, nazwisko, miasto)
VALUES
(N'Jan', N'Kowalski', N'Wrocław'),
(N'Anna', N'Nowak', N'Warszawa'),
(N'Piotr', N'Wiśniewski', N'Poznań');
GO
Pobieranie wszystkich danych z tabeli
SELECT *
FROM pracownicy;
GO
Pobieranie wybranych kolumn
SELECT imie, nazwisko, miasto
FROM pracownicy;
GO
Filtrowanie danych – WHERE
SELECT *
FROM pracownicy
WHERE miasto = N'Wrocław';
GO
Filtrowanie po kilku warunkach
SELECT *
FROM pracownicy
WHERE miasto = N'Wrocław'
AND plec = 'M';
GO
Warunek OR
SELECT *
FROM pracownicy
WHERE miasto = N'Wrocław'
OR miasto = N'Warszawa';
GO
Wyszukiwanie tekstu – LIKE
SELECT *
FROM pracownicy
WHERE nazwisko LIKE N'Kow%';
GO
Powyższe polecenie znajdzie między innymi nazwiska Kowalski, Kowalczyk oraz Kowal.
Sortowanie danych
SELECT *
FROM pracownicy
ORDER BY nazwisko ASC;
GO
ASC – rosnąco, DESC – malejąco.
Pobieranie pierwszych rekordów – TOP
SELECT TOP 10 *
FROM pracownicy;
GO
Usuwanie duplikatów z wyniku – DISTINCT
SELECT DISTINCT miasto
FROM pracownicy;
GO
Modyfikowanie danych
UPDATE pracownicy
SET miasto = N'Warszawa'
WHERE id_os = 3;
GO
Modyfikowanie kilku kolumn
UPDATE pracownicy
SET
miasto = N'Wrocław',
wydzial = 2
WHERE id_os = 3;
GO
Usuwanie rekordu
DELETE FROM pracownicy
WHERE id_os = 3;
GO
Usuwanie wszystkich rekordów
DELETE FROM pracownicy;
GO
Szybkie wyczyszczenie tabeli
TRUNCATE TABLE pracownicy;
GO
TRUNCATE TABLE usuwa wszystkie rekordy i resetuje licznik kolumny IDENTITY.
Liczba rekordów
SELECT COUNT(*) AS liczba_pracownikow
FROM pracownicy;
GO
MIN, MAX i AVG
SELECT MIN(wydzial) AS najmniejszy_wydzial
FROM pracownicy;
SELECT MAX(wydzial) AS najwiekszy_wydzial
FROM pracownicy;
SELECT AVG(CAST(wydzial AS DECIMAL(10,2))) AS srednia
FROM pracownicy;
GO
Grupowanie danych – GROUP BY
SELECT miasto, COUNT(*) AS liczba
FROM pracownicy
GROUP BY miasto;
GO
Filtrowanie grup – HAVING
SELECT miasto, COUNT(*) AS liczba
FROM pracownicy
GROUP BY miasto
HAVING COUNT(*) > 2;
GO
Tworzenie drugiej tabeli
CREATE TABLE wydzialy
(
id_wydzialu INT IDENTITY(1,1) PRIMARY KEY,
nazwa NVARCHAR(100) NOT NULL
);
GO
Klucz obcy – FOREIGN KEY
ALTER TABLE pracownicy
ADD CONSTRAINT FK_pracownicy_wydzialy
FOREIGN KEY (wydzial)
REFERENCES wydzialy(id_wydzialu);
GO
Łączenie tabel – INNER JOIN
SELECT
p.imie,
p.nazwisko,
w.nazwa AS wydzial
FROM pracownicy p
INNER JOIN wydzialy w
ON p.wydzial = w.id_wydzialu;
GO
LEFT JOIN
SELECT
p.imie,
p.nazwisko,
w.nazwa AS wydzial
FROM pracownicy p
LEFT JOIN wydzialy w
ON p.wydzial = w.id_wydzialu;
GO
Tworzenie loginu SQL Server
USE master;
GO
CREATE LOGIN chris
WITH PASSWORD = 'BardzoMocneHaslo123!';
GO
Tworzenie użytkownika w bazie danych
USE Firma;
GO
CREATE USER chris
FOR LOGIN chris;
GO
W SQL Server LOGIN daje możliwość zalogowania się do instancji SQL Server, natomiast USER daje dostęp do konkretnej bazy danych.
Nadanie użytkownikowi prawa odczytu danych
ALTER ROLE db_datareader
ADD MEMBER chris;
GO
Nadanie prawa zapisu danych
ALTER ROLE db_datawriter
ADD MEMBER chris;
GO