User Tools

Site Tools


Sidebar


Menu



notatki:informatyka:bazy_danych

Bazy danych

Linki

Podstawy

  1. Data Definition Language (DDL): CREATE, ALTER, DROP - tworzenie baz itp - budowanie struktury danych
  2. Data Manipulation Language (DML): SELECT, INSERT, UPDATE i DELETE - dodawanie, aktualizacja i wyszukiwanie rekordów - operacje na danych
  3. Data Control Language (DCL): - bezpieczeństwo danych

DDL

  • CREATE DATABASE nazwa - tworzy bazę danych
  • DROP DATABASE nazwa - usuwa bazę danych
  • CREATE TABLE tabela ([kolID] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY,[kol1] [nvarchar] (64) NOT NULL, [kol2] [int] NULL REFERENCES [tabela1] ([kolumna_w_tabela_1]))
    - tworzy tabelę z kolumnami kolID, kol1 oraz kol2 przy czym kolID jest kluczem podstawowym (PRIMARY KEY), dodatkowo pola rekordów nie mogą być puste (NOT NULL), IDENTITY (x, y) - oznacza zacznij numerację klucza od x co y, REFERENCES [tabela1] ([kolumna_w_tabela_1]) oznacza że pole będzie musiało być zgodne z polem kolumna_w_tabela_1 pochodzącym z tabela1 - przydatne przy realizacji relacji
  • ALTER - wstawienie obiektu do istniejącego systemu

DML

Podstawy

SELECT * FROM Baza.Tabela - wybiera dane z tabeli Tabela UPDATE Baza.Tabela SET Pole1 = Nowa_wartość1, Pole2 = Nowa_Wartość2 WHERE (Pole = Stara_wartość) - aktualizacja rekordu INSERT INTO Baza.Tabela (Pole1, Pole2) VALUES (Wartość1, Wartość2) - wstawianie nowych wartości do tabeli DELETE FROM Baza.Tabela WHERE (Pole = Wartość) - usuwanie danych z tabeli

różne filtry
  • SELECT Pole1, Pole2, Pole3 FROM Baza.Tabela WHERE (Pole1 > Param1) AND (Pole2 = Param2) OR (Pole3 = Param3) - wybiera z bazy tylko rekordy spełniające określone kryteria
  • SELECT Pole1, Pole2, Pole3 FROM Baza.Tabela WHERE (Pole1 LIKE 'char%') AND (Pole2 LIKE 'char2%') - wybranie rekordów które zaczynają się od “char” i “char2”

Symbole specjalne:

  • % Zero lub więcej znaków:
  • _ Pojedynczy znak
  • [] nZnak z podanego zakresu
  • [^] Znak który nie należy do podanego zakresu
Relacje
  • SELECT Tabela1.Pole1, Tabela2.Pole1 FROM Tabela1 INNER JOIN Tabela2 ON Tabela1.Pole2 = Tabela2.Pole2 - Relacja wewnętrzna (INNER JOIN) - łączy gdy przypadki występują w obydwu tabelach.
  • LEFT OUTER JOIN - Zawiera wszystkie wiersze z pierwszej tabeli i pasujące wiersze z rekordy z drugiej tabeli
  • RIGHT OUTER JOIN - Zawiera wszystkie wiersze z drugiej tabeli i pasujące rekordy z pierwszej tabeli
  • FULL OUTER JOIN - Zawiera wszystkie nie pasujące i pasujące wiersze z obydwóch tabel
funkcje agregujące
  • AVG(nazwa_kolumny)- Zwraca wartość średnią
  • COUNT(*) - Zwraca liczbę wybranych wierszy
  • COUNT(nazwa_kolumny) - Zwraca liczbe wierszy w zbiorze
  • MAX(column_name) - Zwraca największą wartość w zbiorze
  • MIN(column_name) - Zwraca najmniejszą wartość w zbiorze
  • SUM(column_name) - Zwraca sumę kolumn ze zbioru wierszy
  • SELECT COUNT(*) AS Kolumna FROM Baza.Tabela - zwraca liczbę elementów w tabeli, a wynik wyświetla jako tabelę o kolumnie Kolumna
  • SELECT TOP 10 COUNT(Kolumna), Kolumna FROM Baza.Tabela GROUP BY Kolumna ORDER BY nr DESC HAVING COUNT(Kolumna) > war - zwraca pierwszych 10 wyników licząc ilość przypadków z kolumny kolumna i wyświetlając nazwy unikatowych rekordów z tej kolumny, grupowanie odbywa się po wartościach z kolumny kolumna i jest sortowane malejąco wg. wartości zawartych w kolumnie o numerze nr dodatkowo wynik działania zapytania jest następnie filtrowany aby znaleźć te przypadki które spełniają dodatkowy warunek zdefiniowany po HAVING

Dodatkowe klauzule to EXISTS występująca po WHERE określająca że jeśli istnieje to …

Funkcje MS SQL

  • DATEDIFF(typ_czasu, data_początkowa, data_końcowa) - oblicza różnicę czasu pomiedzy dwoma okresami, a wynik zapisuje w jednostkach zdefiniowanych przez parametr typ_czasu: dni (dd), miesiące(MM), lata (yyyy)

DCL

  • CREATE LOGIN nazwa WITH PASSWORD = haslo, DEFAULT_DATABASE = Nazwa_Bazy - tworzenie nowego loginu użytkownika
  • USE Nazwa_Bazy GO CREATE USER nazwa FOR LOGIN nazwa WITH DEFAULT_SCHEMA = dbo

Ms SQL

Kilka uwag o Ms SQL

Nie czuję się ekspertem w dziedzinie baz danych ale uważam że kilka rzeczy w Ms SQL jest dziwne:

  • Identyczne zapytanie zdefiniowane jako procedura składowana i jako widok wykonuje się 2x szybciej jako widok !!! - konkrety: wyniki zapytania jako widowk 13s, jako procedura składowana 21s
  • Nawiasy po klauzuli WHERE. Jeśli zmienimy położenie nawiasów czas zapytania ulegnie radykalnej zmianie: Przykład:

SELECT * FROM T WHERE 1))

będzie wykonane dużo szybciej niż identyczne zapytanie bez nawiasów wokół AND dotyczących tej samej zmiennej

SELECT * FROM T WHERE ((Id = 1) AND (D > _p_) AND (D <= _k_))
  • Zapytanie z klauzulą IN wewnątrz WHERE również będzie wolniej wykonane niż podobne zapytanie zrobione na OR
SELECT * FROM T WHERE (Id IN (1 2 3))

Powyższe zapytanie lepiej jest zastąpić zapytaniem

SELECT * FROM T WHERE ((Id = 1)  OR (Id = 2) OR (Id = 3))

Reasumując mam wrażenie że rozwiązania w Ms SQL są delikatnie mówiąc dziwne a zastosowany parser powinien pewne rzeczy sam optymalizować jak chociażby opisany problem operatorów AND

1)
Id = 1) AND ((D > _p_) AND (D ⇐ _k_
  • Printable version
  • Tell by mail
  • Export to OpenOffice
  • Export to PDF
  • Export to csv
  • Export to Timeline
  • Add page to book
  • Tools:
notatki/informatyka/bazy_danych.txt · Last modified: 2019/03/21 13:06 (external edit)