Transact-SQL-Grundlagen. Grundlagen der T-SQL-Programmierung

SQL (Structured Query Language) – Dies ist eine universelle Computersprache, die zum Erstellen, Ändern und Modifizieren von Daten verwendet wird relationale Datenbanken danikh (mova strukturierte Anfragen).

SQL sieht auf diese Weise wie eine informationslogische Sprache aus, aber nicht meine Programmierung, aber gleichzeitig vermittelt SQL die Möglichkeit seiner prozeduralen Erweiterungen, mit der Verbesserung einer solchen Sprache als Ganzes kann sie als Programmiersprache angesehen werden.

In dieser Stunde wurden die folgenden SQL-Spezifikationen erweitert:

Datenbank und SQL-Spezifikation
Datenbanktyp SQL-Spezifikation
Microsoft-SQL Transact-SQL
Microsoft Jet/Zugriff JetSQL
MySQL SQL/PSM (SQL/persistent gespeichertes Modul)
Orakel PL/SQL (Prozedurale Sprache/SQL)
IBM DB2 SQL PL (Prozedurale SQL-Sprache)
InterBase/Firebird PSQL (prozedurales SQL)

Dieser Artikel befasst sich mit der Transact-SQL-Spezifikation, wie sie von Microsoft SQL Servern übernommen wird. Die Oskіlki-Basis in unserem spezifischen SQL ist dieselbe, mehr Befehle und Szenarien lassen sich leicht auf andere SQL-Typen übertragen.

Termin

Transact-SQL ist die prozedurale SQL-Erweiterung von Microsoft. SQL-Buchstabenerweiterungen wie diese zufällige Fähigkeiten Yak:

  • Schlüsseloperatoren,
  • lokale und globale Veränderungen,
  • anders zusätzliche Funktionen für die Verarbeitung von Zeilen, Daten, Mathematik usw.,
  • Microsoft Windows-Authentifizierungsunterstützung

Mova Transact-SQL ist der Schlüssel zum Wiki SQL Server. Alle Programme, die mit einer Instanz von SQL Server interagieren, führen unabhängig von ihrer Implementierung und Kernschnittstelle Transact-SQL-Anweisungen auf dem Server aus.

Datenbank bestätigt

Um den theoretischen Stoff zu beherrschen, muss Yoga natürlich in die Praxis umgesetzt werden. Für die Praxis können wir eine Datenbank erstellen, die für einen kleinen Wert einprägsam ist.

Um eine Datenbank zu erstellen und mit її-Werten zu speichern, ist es außerdem erforderlich, die Konsole zum Ausführen von Befehlen und zum Herunterladen des SQL-Servers und zum Protokollieren des Angriffsskripts zu öffnen:

Datenbankerstellung USE master CREATE DATABASE TestDatabase GO -- Tabellenerstellung USE TestDatabase CREATE TABLE Users (UserID int PRIMARY KEY, UserName nvarchar(40), UserSurname nvarchar(40), DepartmentID int, PositionID int) CREATE , DepartmentName nvarchar(40)) CREATE TABLE Positions (PositionID int PRIMARY KEY, PositionName nvarchar(40), BaseSalary money) CREATE TABLE (CustomerID int PRIMARY KEY, CustomerName nvarchar(40), CustomerAddress n PRIMARY KEY, CustomerID int, UserID int, Text) GO – Tabelle füllen USE TestDatabase INSERT Users VALUES (1, "Ivan", "Petrov", 1, 1) INSERT Users VALUES (2, "Ivan", "Sidorov", 1, 2) INSERT Users VALUES (3, "Petr", "Ivanov " , 1, 2) Benutzer WERTE EINFÜGEN (4, "Nikolay", "Petrov", 1, 3) Benutzer WERTE EINFÜGEN (5, "Nikolay", "Ivanov", 2, 1) Benutzer WERTE EINFÜGEN (6, "Sergey " , "Sidorov", 2, 3) Benutzer WERTE EINFÜGEN (7, "Andrey", "Bukin", 2, 2) Benutzer WERTE EINFÜGEN (8, "Viktor", "Rybakov", 4, 1) Abteilungen WERTE EINFÜGEN ( 1 , "Produktion") INSERT Departments VALUES (2, "Distribution") INSERT Departments VALUES (3, "Purchasing") ", 1000) INSERT Positions VALUES (2, "Senior analyst", 650) INSERT VALUES (1, "Alex Company ", "606443, Russland, Bor, Lenina Str., 15") WERTE EINFÜGEN (2, "Potrovka", "115516, Moskau, Promyshlennaja Str., 1") WERTE EINFÜGEN (1, 1, 1, "Sonderteile " ) GEHEN

Notiz. Für Microsoft SQL Server 2000 ist es mit Query Analyzer verknüpft. Checken Sie für Microsoft SQL Server 2005 SQL Server Management Studio ein.

Als Ergebnis des Skripts auf dem SQL-Server wird die TestDatabase-Datenbank mit fünf Coristuvach-Tabellen erstellt: Benutzer, Abteilungen, Positionen, lokale Kunden, lokale Bestellungen.

Benutzer
Benutzer-ID Nutzername BenutzerNachname Abteilungs-ID Positions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
3 Peter Iwanow 1 3
4 Nikolaus Petrow 1 3
5 Nikolaus Iwanow 2 1
6 Sergej Sidorow 2 3
7 Andrej Bükin 2 3
8 Sieger Rybakow 4 1
Positionen
Positions-ID Positionsname Grundgehalt
1 Manager 1000
2 leitender Analytiker 650
3 Analytiker 400
Lokale Bestellungen
Auftragsnummer Kundennummer Benutzer-ID Beschreibung
1 1 1 Sonderteile
Abteilungen
Abteilungs-ID Abteilungsname
1 Produktion
2 Verteilung
3 Einkauf
Lokale Kunden
Kundennummer Kundenname Kundenadresse
1 Firma Alex 606443, Russland, Bor, Lenina Str., 15
2 Potrowka 115516, Moskau, Promyshlennaya Str., 1

Syntaxelemente

Skriptanweisungen

Skriptdirektiven – das sind spezifische Befehle, die in MS SQL häufiger vorkommen. Qi-Befehle helfen dem Server, die Regeln für die Arbeit mit einem Skript und Transaktionen festzulegen. Typische Vertreter: GO - signalisiert dem SQL-Server das Ende des Skripts, EXEC (oder EXECUTE) - symbolisiert eine Prozedur oder eine Skalarfunktion.

Kommentare

Kommentare werden zur Erstellung von Erläuterungen zu Skriptblöcken sowie zur zeitlichen Begrenzung von Befehlen bei Anpassungen des Skripts gezogen. Kommentare sind sowohl zeilenartig als auch blockartig:

  • -- - ein Zeilenkommentar enthält mehr als eine Zeile, vor der zwei Minuszeichen stehen.
  • /* */ - Blockkommentar schließt den gesamten Befehlsblock aus, Anweisungen für die angegebene Konstruktion.

tipi danih

Lernen Sie wie beim Programmieren von Sprachen SQL verschiedene Typen Daten zum Speichern der Änderung:

  • Zahlen - zum Speichern von Zahlenwerten (int, tinyint, smallint, bigint, numeric, decimal, money, smallmoney, float, real).
  • Date - um das Datum dieser Stunde zu speichern (datetime, smalldatetime).
  • Zeichen zum Speichern von Zeichendaten (char, nchar, varchar, nvarchar).
  • Dviykovі - zum Speichern von Binärdaten (binär, varbinary, bit).
  • Mehr Volumes - Datentypen zum Speichern großartiger Binärdaten (Text, Ntext, Bild).
  • Spezial - Indikatoren (Cursor), 16-Byte-Hexadezimalzahl, als Gewinn für GUID (uniqueidentifier), Zeilenänderungsstempel (Zeitstempel), Zeilenversion (Zeilenversion), Tabellen (Tabelle).

Notiz. Für die Auswahl russischer Symbole (nicht ASCII-Codierung) Datentypen werden mit dem Präfix „n“ (nchar, nvarchar, ntext) geschrieben, als ob sie Zeichen in zwei Bytes kodieren würden. Andernfalls werden für Unicode-Arbeiten Datentypen ab "n" verwendet.

Notiz. Für die Daten des Lebenswechsels werden Datentypen ab dem Präfix „var“ typisiert. Datentypen ohne das Präfix „var“ können im Speicherbereich festgeschrieben, teilweise mit Leerzeichen oder Nullen aufgefüllt sein.

Identifikatoren

Identifikator - ce spezielle Charaktere, yakі vykoristovuyutsya zі zmіnnimi für іdentifіkatsіїїїї їkh typ abo grupuvannya slіv u zminnu. Arten von Identifikatoren:

  • @ - Kennung der lokalen Änderung (koristuvach).
  • @@ - Kennung der globalen Änderung (eingeführt).
  • # - Bezeichner der lokalen Tabelle der Prozedur.
  • ## - Kennung der globalen Tabelle der Prozedur.
  • - Identifikator der Gruppierung der Wörter in der Änderung.

Änderungen

Änderungen werden in Skripten vorgenommen, um Timchas' Tribut zu retten. Sob pratsyuvati zі zminnoyu, її es ist notwendig zu denunzieren, bevor die Stimme in der Transaktion zdіysnen werden kann, genauso wie das Team siegreich ist, wie die siegreiche Tsyu zminna. Andernfalls scheint es, dass sich die Transaktion nach Abschluss der Transaktion nach GO ändert.

Geänderte Einstellungen können mit dem DECLARE-Befehl geändert werden, geänderte Einstellungen können entweder mit dem SET-Befehl oder mit dem SELECT-Befehl gesetzt werden:

USE TestDatabase -- Anonyme Änderungen . Geändertes @EmpName als Ergebnis einer SELECT @EmpName AS GO-Abfrage sehen

Notiz. Für jeden Hintern gibt es eine Gruppierung von Wörtern bei einer Änderung - das Design wird als eine Änderung akzeptiert, da die Wörter am quadratischen Bogen platziert sind.

Betreiber

Operatoren - tse spezielle Mannschaften, werden verwendet, um einfache Operationen bei Änderungen durchzuführen:

  • Arithmetische Operatoren: "*" - multiplizieren, "/" - dividieren, "%" - modulus subdivide, "+" - addieren, "-" - addieren, "()" - Bogen.
  • Übereinstimmungsoperatoren: "=" - eins, ">" - mehr, "<" - меньше, ">=" - mehr als eins, "<=" меньше или равно, "<>"- nicht gut.
  • Ordnungsoperatoren: "+" - Zeilen schließen.
  • Logische Operatoren: "AND" - eins, "OR" - entweder, "NOT" - nicht.

Systemfunktionen

Die Transact-SQL-Spezifikation erweitert die Standard-SQL-Funktionen um die folgenden Funktionen:

  • Aggregierte Funktionen – Funktionen, die mit Sammlungen arbeiten, haben denselben Wert. Typische Vertreter: AVG - Durchschnittswert der Spalte, SUM - Summe der Spalte, MAX - Maximalwert der Spalte, COUNT - Anzahl der Elemente in der Spalte.
  • Skalarfunktionen sind Funktionen, die einen Wert rotieren, mit Skalardaten arbeiten oder ohne Eingabedaten eingeben. Typische Vertreter: DATEDIFF – Differenz zwischen Daten, ABS – Modul der Zahl, DB_NAME – Name der Datenbank, USER_NAME – Name des Flusslinienschreibers, LEFT – Teil der Datenzeile.
  • Funktionen-Spezifizierer-Funktionen, wie vikoristovuyutsya, als ob andere Daten erzwungen würden. Typische Vertreter: OPENXML - Indikator für den Datenbaum zum Betrachten von XML-Strukturen, OPENQUERY - Indikator für den Datenbaum zum Betrachten einer anderen Anfrage.

Notiz. Die vollständige Liste der Funktionen finden Sie in den SQL Server-Verbindungen.

Notiz. Vor skalaren Funktionen können Sie globale Änderungen einfügen, die im Text des Skripts mit dem Underdog "@@" bezeichnet werden.

USE TestDatabase – Wiktor-Aggregationsfunktion für das durchschnittliche Babygehalt SELECT AVG (BaseSalary) AS FROM Positions GO – Wiktor-Skalarfunktion zum Abrufen des Datenbanknamens (30) SET @MyUser = USER_NAME() SELECT „The current user“ database username ist: "+ @MyUser GO -- Variantenaufruffunktion zum Abrufen von Daten von einem anderen Server SELECT * FROM OPENQUERY(OracleSvr, "SELECT name, id FROM owner.titles") GO

Virazi

Viraz ist eine Kombination aus Symbolen und Operatoren, da es bei der Eingabe einen Skalarwert annimmt und bei der Ausgabe einen anderen Wert angibt oder einen Skalarwert annimmt. Transact-SQL hat 3 Typen: DDL, DCL und DML.

  • DDL (Data Definition Language) - Hacks für die Erstellung von Objekten in der Datenbank. Die Hauptvertreter dieser Klasse sind: CREATE - Erzeugen von Objekten, ALTER - Ändern von Objekten, DROP - Entfernen von Objekten.
  • DCL (Data Control Language) - Anerkennung der Anerkennung von Rechten an Datenbankobjekten. Die wichtigsten Vertreter dieser Klasse: GRANT – für das Objekt zugelassen, DENY – für das Objekt eingezäunt, REVOKE – für das Objekt zugelassen.
  • DML - Datenmanipulationssprache Die Hauptvertreter dieser Klasse sind: SELECT - Auswahl von Daten, INSERT - Einfügen von Daten, UPDATE - Änderung von Daten, DELETE - Ansicht von Daten.

USE TestDatabase – DDL-Tag CREATE TABLE TempUsers (UserID int, UserName nvarchar(40), DepartmentID int) GO – DCL-Tag GRANT SELECT ON Users TO public GO – DML-Tag SELECT UserID, UserName + „ “ + UserSurname AS F GO -- DDL DROP TABLE TempUsers GO-Wiki

Skriptsteuerung

Transact-SQL verfügt über spezielle Befehle, die es Ihnen ermöglichen, das Skript in einem Stream zu hacken und es direkt mit der benötigten Logik zu durchlaufen.

  • Ein Gruppierungsblock ist eine Struktur, die Viren zu einem logischen Block (BEGIN ... END) zusammenfasst.
  • Geistesblockade - eine Struktur, um die Vision des singenden Geistes zu pervertieren (IF ... ELSE).
  • Schleifenblock - eine Struktur, die die Wiederholung eines logischen Blocks organisiert (WHILE ... BREAK ... CONTINUE).
  • Übergang - ein Befehl zum Umschalten des Skriptflusses auf das angegebene Label (GOTO).
  • Zatrimka - ein Team, das das Szenario zatrimka vikonannya (WAITFOR)
  • Pardon Weekly – ein Befehl, der eine Begnadigung für ein Skript generiert (RAISERROR)

Dynamisches Design von Viren

Nachdem Sie die Grundlagen von Transact-SQL verstanden und einfache Anwendungen geübt haben, können Sie mit Faltstrukturen fortfahren. Rufen Sie die Datenbanken auf und erstellen Sie sie für zusätzliche Szenarien (Skripte) - wenn der visuelle Editor für Tiere einfach ist, aber wenn Sie ohne nedolikiv keine große Datenbank erstellen, werden Sie sie nicht speichern. Sobald Sie den Kolben der Statistiken erraten haben, wurde die letzte Datenbank erstellt und für ein weiteres Szenario aufgefüllt. Szenario - nur ein oder mehrere Viren, kombiniert in einem logischen Block, um die Arbeit des Administrators zu automatisieren.

Klangszenarien sind als universelles Zasib für Standardskripte geschrieben, daher enthalten sie dynamisch gestaltete Logik - Fragen und Einfügen von Befehlen zum Ändern und nicht spezifische Namen von Objekten, wodurch Sie die Parameter des Skripts schnell ändern können.

USE master -- Dynamische Daten setzen DECLARE @dbname varchar(30), @tablename varchar(30), @column varchar(30) SET @dbname = "TestDatabase" SET @tablename = "Positions" SET @column = "BaseSalary" - - Variante dynamischer Daten EXECUTE ("USE" + @dbname + "SELECT AVG(" + @column + ") AS FROM " + @tablename) GO

Datensammlung

Bei SQL-Moves wird die Auswahl der Daten aus der Tabelle mit Hilfe des SELECT-Befehls angegeben:

WÄHLEN<названия колонок или *>AUS<название таблицы>

Hinter dem Schloss hat der SELECT-Befehl den Parameter ALL, der weggelassen werden kann. Wenn Sie den Parameter DISTINCT im Befehl angeben, werden als Ergebnis nur eindeutige (nicht wiederholbare) Datensätze aus der Auswahl verwendet.

Um die Namen von Objekten in Befehlen an den SQL-Server zu ändern, wird der AS-Befehl geändert. Vicoristannya tsієї-Befehle helfen, die lange Zeit der Reihe zu beschleunigen, und nehmen so das Ergebnis von den Handy-Augen.

Wählen Sie alle Datensätze aus der Tabelle „Lokale Kunden“ aus. SELECT * FROM – Wählen Sie eindeutige Datensätze der Spalte „UserName“ aus der Tabelle „Users“ aus. SELECT DISTINCT UserName FROM Users

Nutzername
Andrej
Iwan
Nikolaus
Peter
Sergej
Sieger

Die Filterung der Daten erfolgt mit Hilfe des WHERE-Befehls, in diesem Fall sind die next-Operatoren und dieser Befehl gleich: =,<, >, <=, >=, <>, LIKE, NOT LIKE, AND, OR, NOT, BETWEEN, NOT BETWEEN, IN, NOT IN, NULL, IST NICHT NULL. In wilder Optik sieht der SELECT-Befehl aus dem Filter so aus:

WÄHLEN<названия колонок или *>AUS<название таблицы>WO<условие>

In einer Reihe von Ausrichtungen ist es erlaubt, Symbole und Substitutionen zu vicorieren:

  • % - sei es eine Reihe von Symbolen;
  • _ – ein Zeichen;
  • - ob es ein Symbol, Hinweise an den Schläfen gibt;
  • [^] - ein Symbol sein, nicht in den Armen.
-- Wählen Sie alle Datensätze aus der Benutzertabelle aus, in denen DepartmentID = 1 ist. SELECT * FROM Users WHERE DepartmentID = 1
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
3 Peter Iwanow 1 2
4 Nikolaus Petrow 1 3
-- Wählen Sie alle Datensätze aus der Benutzertabelle aus, die den Buchstaben A in ihrem Namen haben. SELECT * FROM Users WHERE UserName LIKE "%a%"
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
4 Nikolaus Petrow 1 3
5 Nikolaus Iwanow 2 1
7 Andrej Bükin 2 2
-- Wählen Sie alle Datensätze aus der Benutzertabelle aus, die einen Nicht-V-Buchstaben im Namen ihres Freundes haben SELECT * FROM Users WHERE UserName LIKE "_[^v]%"

Durch Filtern können Sie ein Getränk auswählen, sodass Sie aus mehreren Getränken ein Getränk zusammenstellen können:

Wählen Sie die Datensätze der Spalte PositionID aus der Tabelle Positionen, de BaseSalary< 600 SELECT PositionID FROM Positions WHERE BaseSalary < 600 -- Выбрать все записи из таблицы Users, у кого имя Ivan или Andrey SELECT * FROM Users WHERE UserName IN ("Ivan", "Andrey")

Um die Daten in der Auswahl zu sortieren, wird der Befehl ORDER BY verwendet, und überprüfen Sie dann, dass dieser Befehl keine Daten vom Typ text, ntext und image sortiert. Standardmäßig wird nach der Größe sortiert, daher kann der ASC-Parameter bei diesem Typ weggelassen werden:

WÄHLEN<названия колонок или *>AUS<название таблицы>WO<условие>SORTIEREN NACH<названия колонок>

Um die Anzahl der Zeilen im Ergebnis zu erhöhen, gewinnt der TOP-Befehl:

OBEN AUSWÄHLEN [Anzahl Zeilen]<названия колонок или *>AUS<название таблицы>WO<условие>SORTIEREN NACH<названия колонок>

In der Mitte der Anfrage ist es möglich, die Berechnung des weggenommenen Tributs durchzuführen. Für welche Aggregationsfunktionen werden verwendet:

  • AVG(Spalte) – Durchschnittswert der Spalte;
  • COUNT(Spalte) – Anzahl der Nicht-NULL-Elemente in der Spalte;
  • COUNT(*) – Anzahl der Artikel in der Anfrage;
  • MAX(Spalte) – Maximalwert in der Spalte;
  • MIN(Spalte) – Mindestwert in der Spalte;
  • SUM(Spalte) – die Summe der Werte für die Spalte.

Wenden Sie eine Vielzahl von ORDER-, TOP-Befehlen und Aggregationsfunktionen an:

Wählen Sie die ersten 3 eindeutigen Datensätze der Spalte „Benutzername“ aus der Tabelle „Benutzer“ sortiert nach Benutzername aus Positionen) )

Daten gruppieren

Mit SQL können Sie Daten hinter denselben Feldern in einer Tabelle gruppieren. Um Daten nach bestimmten Parametern zu gruppieren, muss für die SQL-Abfrage der Befehl GROUP BY geschrieben werden, für welchen Spaltennamen, für welche Gruppierung durchgeführt werden soll. Die im GROUP BY-Befehl angegebenen Spalten müssen im SELECT-Befehl vorhanden sein, und der SELECT-Befehl ist auch für das Ersetzen der Aggregationsfunktion verantwortlich, da sie vor dem Gruppieren von Daten hängen bleibt.

Finden Sie die Anzahl der Praktiker in der Hautgruppe (Gruppen von Praktikern nach - ID der Art und sortieren Sie die Anzahl der Datensätze in der Hautgruppe) SELECT DepartmentID, COUNT(UserID) AS "Anzahl der Benutzer"

Abteilungs-IDAnzahl der Nutzer
1 4
2 3
4 1

Um die Zeilen bei der Anfrage nach Gruppen zu filtern, wird ein spezielles HAVING-Team eingesetzt, um den Mind-Filter zu spezifizieren. Die Spalten, hinter denen gefiltert wird, müssen im GROUP BY-Team vorhanden sein. Der HAVING-Befehl kann auch ohne GROUP BY verwendet werden, in diesem Fall funktioniert er nicht wie vor dem WHERE-Befehl, aber er ermöglicht Ihnen auch, nur die Aggregationsfunktion im Sinne des Filterns zu blockieren.

Finden Sie die Anzahl der Praktiker in der ersten Gruppe (Gruppieren Sie Praktizierende nach - Identifikator von viddiliv, analysieren Sie die Anzahl der Datensätze in der Skin-Gruppe - schließen Sie in das Ergebnis weniger als viddіl mit dem Identifikator rіvnim 1 ein) SELECTBY DepartmentUserID DepartmentID, COUNT users AV DepartmentID, COUNT " 1 -- Знайти кількість працівників з певною посадою у кожному відділі -- (згрупувати працівників за ідентифікатором посад та відділів та -- порахувати кількість записів у кожній групі), а також порахувати -- кількість працівників у кожному відділі та загальну кількість працівників SELECT DepartmentID, PositionID, COUNT(UserID) AS „Anzahl der Benutzer“ FROM Users GROUP BY DepartmentID, PositionID WITH ROLLUP

Abteilungs-IDPositions-IDAnzahl der Nutzer
1 1 1
1 2 2
1 3 1
1 NULL 4
2 1 1
2 2 1
2 3 1
2 NULL 3
4 1 1
4 NULL 1
NULL NULL 8

Der Gruppierungsbefehl kann auch mit dem WITH CUBE-Operator ergänzt werden, der alle Kombinationen gruppierter Spalten weiter bildet: Wenn es N Spalten gibt, dann gibt es 2^N Kombinationen.

Знайти кількість працівників з певною посадою в кожному відділі - (згрупувати працівників за ідентифікатором посад та відділів і - порахувати кількість записів у кожній групі), а також порахувати - кількість працівників за кожною посадою, по кожному відділу та - загальну кількість працівників SELECT DepartmentID, PositionID , COUNT(UserID) AS "Anzahl der Benutzer" FROM Users GROUP BY DepartmentID, PositionID WITH CUBE

Abteilungs-IDPositions-IDAnzahl der Nutzer
1 1 1
1 2 2
1 3 1
1 NULL 4
2 1 1
2 2 1
2 3 1
2 NULL 3
4 1 1
4 NULL 1
NULL NULL 8
NULL 1 3
NULL 2 3
NULL 3 2

Mit der Aggregationsfunktion GROUPING können Sie bestimmen, ob ein Datensatz durch die Befehle ROLLUP und CUBE hinzugefügt oder aus dem Datenfeld entfernt wird.

Ermitteln Sie die Anzahl der Praktiker in der Hautgruppe (Gruppen der Praktiker nach - Identifikator der Variablen und bestimmen Sie die Anzahl der Datensätze in der Hautgruppe) - und bestimmen Sie auch die zusätzlichen Zeilen, die nicht im Datengerel SELECTUUPERING (UsersID of DepartmentID , COUNT(userID of DepartmentID), COUNT(userID of DepartmentID, COUNT(userID of DepartmentID) DepartmentID) AS „Added row“ FROM Users GROUP BY DepartmentID WITH ROLLUP

Abteilungs-IDAnzahl der NutzerZeile hinzugefügt
1 4 0
2 3 0
4 1 0
NULL 8 1

Mit einem weiteren Gruppierungsbefehl, COMPUTE, können Sie Daten gruppieren und in verschiedenen Tabellen anzeigen. Das heißt, der GROUP BY-Befehl mit den ROLLUP- und CUBE-Operatoren fügt Gruppendaten zur Tabelle zusätzlicher Zeilen mit einem Stern hinzu, und der COMPUTE-Befehl für Gruppendaten, erweitert die Tabelle in eine Reihe von Untertabellen und bildet auch eine Untertabelle mit Sternen . Der COMPUTE-Befehl kann in zwei Modi überschrieben werden:

  • wie einfach ist die Aggregationsfunktion, um das Ergebnis rund um den Tisch anzuzeigen;
  • mit dem BY-Parameter als Gruppierungsbefehl, der die Tabelle in eine Sprotten-Untertabelle erweitert

Der COMPUTE-Befehl mit dem BY-Parameter kann mehr oder weniger mit dem ORDER BY-Befehl kombiniert werden, und die Sortierspalten sind die gleichen wie die Gruppierungsspalten.

Geben Sie eine Tabelle mit Firmenkonten ein und prüfen Sie deren Anzahl SELECT * FROM Users COMPUTE COUNT(UserID)

Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
3 Peter Iwanow 1 2
4 Nikolaus Petrow 1 3
5 Nikolaus Iwanow 2 1
6 Sergej Sidorow 2 3
7 Andrej Bükin 2 2
8 Sieger Rybakow 4 1
cnt
8
-- Finden Sie die Anzahl der Praktizierenden in einer Hautgruppe (Gruppieren Sie Praktizierende nach -- ID der Art und sortieren Sie die Anzahl der Aufzeichnungen in einer Hautgruppe) WÄHLEN SIE * FROM Benutzer
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
3 Peter Iwanow 1 2
4 Nikolaus Petrow 1 3
cnt
4
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
5 Nikolaus Iwanow 2 1
6 Sergej Sidorow 2 3
7 Andrej Bükin 2 2
cnt
3
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
8 Sieger Rybakow 4 1
cnt
1

Z'ednannya-Tisch

Die wichtigsten und notwendigen Abfragen in SQL - ce-Abfragen für die Tabellen, wenn die Auswahl in Höhe der Anzahl der dzherel erforderlich ist. Also, fragen Sie nach dem Falten beim Schreiben, aber auch beim Schreiben sehen Scherben oft das bereits im Programm vorbereitete Ergebnis, das nicht mehr ausreicht, um es auf dem Bildschirm anzuzeigen.

Sie können Tabellen in SQL auf zwei Arten verknüpfen: vertikal und horizontal.

Vertikal durch den UNION-Befehl erstellt, wie zum Beispiel die erste Tabelle, fügen Sie eine weitere Tabelle hinzu. Bei einer solchen Kombination kann die Anzahl der Spalten der Tabelle, die kombiniert werden, gleich sein, und die Spalten selbst haben die gleichen Namen und Datentypen. Wenn Sie dieselben Zeilen hinzufügen, die in beiden Tabellen erscheinen, sehen Sie, dass der ALL-Parameter nicht im Befehl angegeben ist.

Kennen Sie alle Korrespondenten mit dem Namen Ivan und geben Sie das Ergebnis zurück – das Ergebnis der Abfrage „Finde alle Korrespondenten mit dem Namen Petrov“ – doppelte Einträge ermöglichen SELECT * FROM Users WHERE UserName = „Ivan“

Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
4 Nikolaus Petrow 1 3
-- Alle Korrespondenten mit dem Namen Ivan finden und Ergebnis zurückgeben von -- Ergebnis der Abfrage "Alle Korrespondenten mit dem Namen Petrov finden" -- doppelte Datensätze speichern SELECT * FROM Users WHERE UserName = "Ivan" UNION ALL SELECT * FROM Users WHERE UserSurname = " Petrov"
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-ID
1 Iwan Petrow 1 1
2 Iwan Sidorow 1 2
1 Iwan Petrow 1 1
4 Nikolaus Petrow 1 3

Horizontal z'ednannya zdіysnyuєtsya shlyah zcheplennya kіlkoh Tische hinter den Schlüsselsäulen. Auf die einfachste horizontale Verknüpfung folgt die Hilfe des INNER JOIN-Befehls, wie zchіplyuє tables, wobei die Zeilen des Schlüsselfelds wie zustrіchaєtsya in beiden Tabellen ausgewählt werden.

WÄHLEN<названия колонок или *>AUS<таблица_1>INNER JOIN table_2 ON table_1.key_field = table_2.key_field

Um die Verknüpfung aller Felder der linken Tabelle sowie der Datensätze in der rechten Tabelle unabhängig voneinander auszuwählen, muss der Befehl LEFT JOIN ausgewählt werden. Dieser Befehl gibt die unterste Tabelle zurück, wobei alle Zeilen aus der linken Tabelle ausgewählt werden, und die Daten in der rechten Tabelle, die täglich sind, werden mit NULL-Werten gefüllt.

WÄHLEN<названия колонок или *>AUS<таблица_1>LEFT JOIN table_2 ON table_1.key_field = table_2.key_field

Der RIGHT JOIN-Befehl ist ähnlich wie der vordere, der einzige Unterschied besteht darin, dass er sich in der unteren Tabelle befindet und alle Zeilen aus der rechten Tabelle auswählt, und die täglichen Daten der linken Tabelle mit NULL-Werten gefüllt sind.

WÄHLEN<названия колонок или *>AUS<таблица_1>RIGHT JOIN table_2 ON table_1.key_field = table_2.key_field

Der FULL JOIN-Befehl hat sein eigenes Join-Recht, sodass er keine Tabellen verknüpft, Zeilen aus beiden Tabellen auswählt und tägliche Daten auf NULL-Werte zurückgibt.

WÄHLEN<названия колонок или *>AUS<таблица_1>FULL JOIN table_2 ON table_1.key_field = table_2.key_field

Der Rest der Tabelle wird selten vom CROSS JOIN-Befehl geschlagen. Dieser Befehl generiert Tabellen ohne die Wahl des Schlüsselfelds, und das Ergebnis ist die gleiche Kombination verschiedener Zeilen von Ausgabetabellen.

WÄHLEN<названия колонок или *>AUS<таблица_1>CROSS JOIN-Tabelle_2

Das Verbinden ist nicht auf mehr als zwei Tabellen beschränkt, es können auch einige JOIN-Befehle erforderlich sein, was für die Bildung des endgültigen zvіtіv bequemer ist. Unten ist ein Beispiel für alle Befehle aus der Tabelle.

SELECT * FROM Users INNER JOIN Departments ON Users.DepartmentID = Departments.DepartmentID

Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-IDAbteilungs-IDAbteilungsname
1 Iwan Petrow 1 1 1 Produktion
2 Iwan Sidorow 1 2 1 Produktion
3 Peter Iwanow 1 2 1 Produktion
4 Nikolaus Petrow 1 3 1 Produktion
5 Nikolaus Iwanow 2 1 2 Verteilung
6 Sergej Sidorow 2 3 2 Verteilung
7 Andrej Bükin 2 2 2 Verteilung
SELECT * FROM Users LEFT JOIN Departments ON Users.DepartmentID = Departments.DepartmentID
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-IDAbteilungs-IDAbteilungsname
1 Iwan Petrow 1 1 1 Produktion
2 Iwan Sidorow 1 2 1 Produktion
3 Peter Iwanow 1 2 1 Produktion
4 Nikolaus Petrow 1 3 1 Produktion
5 Nikolaus Iwanow 2 1 2 Verteilung
6 Sergej Sidorow 2 3 2 Verteilung
7 Andrej Bükin 2 2 2 Verteilung
8 Sieger Rybakow 4 1 NULL NULL
SELECT * FROM Users RIGHT JOIN Departments ON Users.DepartmentID = Departments.DepartmentID
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-IDAbteilungs-IDAbteilungsname
1 Iwan Petrow 1 1 1 Produktion
2 Iwan Sidorow 1 2 1 Produktion
3 Peter Iwanow 1 2 1 Produktion
4 Nikolaus Petrow 1 3 1 Produktion
5 Nikolaus Iwanow 2 1 2 Verteilung
6 Sergej Sidorow 2 3 2 Verteilung
7 Andrej Bükin 2 2 2 Verteilung
NULL NULL NULL NULL NULL 3 Einkauf
SELECT * FROM Users FULL JOIN Departments ON Users.DepartmentID = Departments.DepartmentID
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-IDAbteilungs-IDAbteilungsname
1 Iwan Petrow 1 1 1 Produktion
2 Iwan Sidorow 1 2 1 Produktion
3 Peter Iwanow 1 2 1 Produktion
4 Nikolaus Petrow 1 3 1 Produktion
5 Nikolaus Iwanow 2 1 2 Verteilung
6 Sergej Sidorow 2 3 2 Verteilung
7 Andrej Bükin 2 2 2 Verteilung
NULL NULL NULL NULL NULL 3 Einkauf
8 Sieger Rybakow 4 1 NULL NULL
AUSWÄHLEN * VON Benutzern CROSS JOIN Abteilungen
Benutzer-IDNutzernameBenutzerNachnameAbteilungs-IDPositions-IDAbteilungs-IDAbteilungsname
1 Iwan Petrow 1 1 1 Produktion
2 Iwan Sidorow 1 2 1 Produktion
3 Peter Iwanow 1 2 1 Produktion
4 Nikolaus Petrow 1 3 1 Produktion
5 Nikolaus Iwanow 2 1 1 Produktion
6 Sergej Sidorow 2 3 1 Produktion
7 Andrej Bükin 2 2 1 Produktion
8 Sieger Rybakow 4 1 1 Produktion
1 Iwan Petrow 1 1 2 Verteilung
2 Iwan Sidorow 1 2 2 Verteilung
3 Peter Iwanow 1 2 2 Verteilung
4 Nikolaus Petrow 1 3 2 Verteilung
5 Nikolaus Iwanow 2 1 2 Verteilung
6 Sergej Sidorow 2 3 2 Verteilung
7 Andrej Bükin 2 2 2 Verteilung
8 Sieger Rybakow 4 1 2 Verteilung
1 Iwan Petrow 1 1 3 Einkauf
2 Iwan Sidorow 1 2 3 Einkauf
3 Peter Iwanow 1 2 3 Einkauf
4 Nikolaus Petrow 1 3 3 Einkauf
5 Nikolaus Iwanow 2 1 3 Einkauf
6 Sergej Sidorow 2 3 3 Einkauf
7 Andrej Bükin 2 2 3 Einkauf
8 Sieger Rybakow 4 1 3 Einkauf
SELECT dpt.DepartmentName AS „Abteilung“, usr.UserName + „ “ + usr.UserSurname AS „Benutzername“, pos.PositionName AS „Position“ FROM Users AS usr LEFT JOIN Departments AS dpt ON usr.DepartmentID = dpt.DepartmentID LEFT JOIN Positions AS pos ON usr.PositionID = pos.PositionID ORDER BY dpt.DepartmentID, pos.PositionID
AbteilungNutzernamePosition
NULL Viktor Rybakow Manager
Produktion Iwan Petrow Manager
Produktion Iwan Sidorow leitender Analytiker
Produktion Petr Iwanow leitender Analytiker
Produktion Nikolai Petrow Analytiker
Verteilung Nikolai Iwanow Manager
Verteilung Andrej Bukin leitender Analytiker
Verteilung Sergej Sidorow Analytiker

Änderung von Daten

Lassen Sie uns zunächst über die Befehle zum Ändern von Daten sprechen. Es ist notwendig, die Besonderheiten des Transact-SQL-Dialekts zu erläutern. Wie Sie schon am Namen erkennen können, basiert der gesamte Mechanismus auf Transaktionen, also auf der Abfolge von Operationen, die zu einem logischen Modul zusammengefasst werden, das in die Datensammlung eingespeist wird, die Daten oder die Struktur der Tabelle ändert . Für eine Stunde werden alle Transaktionen im Datenskript blockiert, wodurch die Inkonsistenz von Daten für eine Stunde auf dem Haufen der Arbeit mit der Tabelle und dem fertigen Skript verborgen werden kann.

Pro Transact-SQL-Transaktion wird eine BEGIN TRANSACTION ... COMMIT TRANSACTION-Struktur übergeben. Tsyu-Struktur vikoristovuvat neobov'yazkovo, aber dann sind alle Befehle an das Szenario irreversibel, sodass es unmöglich ist, nach vorne zu arbeiten. Die Struktur des Transaktionsblocks ist dieselbe:

BEGIN TRANSACTION [meine Transaktion] [Vorgang] COMMIT TRANSACTION [meine Transaktion] oder ROLLBACK TRANSACTION [meine Transaktion]

Unten ist der Hintern des siegreichen Blocks:

Neues Gehalt für alle Arbeiter festlegen BEGIN TRANSACTION TR1 UPDATE Positions SET BaseSalary = 25000000000000000 IF @@ERROR<>0 BEGIN RAISERROR("Fehler, Transaktion nicht abgeschlossen!",16,-1) ROLLBACK TRANSACTION TR1 END ELSE COMMIT TRANSACTION TR1

Um Daten in eine SQL-Server-Tabelle einzufügen, wird der Befehl INSERT INTO verwendet:

INSERT INTO [Tabellenname] (Spalten) VALUES ([Spaltenwerte])

Ein weiterer Teil des Befehls ist nicht obov'yazkovoy für MS SQL Server 2003, aber MS JET SQL ohne ein Wort wird Pardon-Syntax sehen. Das Einfügen sollte zeilenweise erfolgen, damit alle Spalten der Tabellen und die Werte im Raum angezeigt werden, da es notwendig ist, sie in sie einzugeben. Wenn eine Spalte einen Wert hinter einem Schluss haben kann oder einen leeren Wert zulässt, dann kann diese Spalte im Einfügebefehl weggelassen werden. Mit dem Befehl INSERT INTO können Sie auch das Einfügen von Daten für die Reihenfolge der Spalten angeben, aber gleichzeitig ist es notwendig, die Reihenfolge der Spalten anzugeben.

Fügen Sie in der Benutzertabelle eine Zeile mit UserID = 9, UserName = "Nikolay", - UserSurname = "Gryzlov", DepartmentID = 4, PositionID = 2 ein. INSERT INTO Users VALUES (9, "Nikolay", "Gryzlov", 4 , 2 ) -- Fügen Sie in der Benutzertabelle eine Zeile mit den Daten UserID = 10, UserName = "Nikolay", -- UserSurname = "Kozin", DepartmentID - Werbewert, PositionID - nicht angegeben ein. INSERT Users VALUES (10, "Nikolay", "Kozin", DEFAULT, NULL) -- Fügen Sie in der Users-Tabelle eine Zeile mit den Daten UserName = "Angrey", UserSurname = "Medvedev", -- UserID = 11, andere Werte ein ​​für INSERT INTO Users (UserName, UserSurname, UserID) VALUES ("Angrey", "Medvedev", 11)

Um die Werte der Tabelle table zu ändern, wird der UPDATE-Befehl verwendet:

UPDATE [Tabellenname] SET [Spaltenname]=[Spaltenwert] WHERE [um]

Aktualisieren (Ändern) des Wertes der Tabelle kann wahnsinnig durchgeführt werden, mit einem Verstand oder einer Auswahl von Daten aus einer anderen Tabelle.

Stellen Sie das Gehalt von 2000 Einheiten für alle Posads ein. UPDATE Positions SET BaseSalary = 2000 – Posads mit der ID 1 legen das Gehalt auf 2500 Einheiten fest. UPDATE Positions SET BaseSalary = 2500 WHERE PositionID = 1 -- Posad mit ID 2 ändert das Gehalt um 30 %. UPDATE Positions SET BaseSalary = BaseSalary * 0.7 WHERE PositionID = 2 -- Setzen Sie alle Posads auf ein gesundes Gehalt (30.000 hinzufügen pro Anzahl von -- Listen von Mitarbeitern in der Organisation) UPDATE Positions SET BaseSalary = 30000 / (SELECT COUNT(UserID) FROM Benutzer)

Die Ansicht der Daten wird mit dem DELETE-Befehl eingestellt:

DELETE FROM [Tabellenname] WO [umova]

Vydalennya danikh ruft an, um nach einem Kriterium zu suchen. Da das Entfernen von Daten keine sichere Operation ist, erstellen Sie vor einem solchen Befehl am besten eine Testauswahl mit dem Befehl SELECT, da Sie das Ergebnis dieser Daten gesehen haben, werden sie gelöscht. So viel Sie brauchen, können Sie SELECT mutig durch DELETE ersetzen und Daten löschen.

Checklistenansicht mit Kennung 10 - Im Upgrade-Modus wird empfohlen, den SELECT-Befehl zu verwenden, - um zu wissen, ob die Daten gelöscht werden: - SELECT UserID FROM Users WHERE UserID = 10 Users FROM Users INNER JOIN Departments ON Users.DepartmentID = Departments .DepartmentID WHERE Departments.DepartmentName = "Produktion" – Ansichten aller Eingaben DELETE FROM Users

Notiz! Am Hintern zum Filtern von Daten befindet sich eine feste Tabelle. Wenn Sie im Befehl mehrere Tabellen neu anordnen möchten, werden die Daten nur aus den Tabellen gelöscht, wie nach dem Wort DELETE angegeben.

Der beste Befehl zum Löschen von Tabellen ist TRUNCATE TABLE.

TRUNCATE TABLE [Tabellenname]

Ein Beispiel für eine Ansicht aller Daten:

Löschen Sie die Benutzertabelle TRUNCATE TABLE Users

Transact-SQL ermöglicht das Schreiben von Zeittabellen, sodass Tabellen im Speicher des Servers für eine Stunde erstellt werden, um mit der Datenbank zu arbeiten. Timchasov-Tische können be-yak im'ya bemuttern, aber das Binden von Kropf mit dem Symbol # beginnen.

Erstellen Sie eine Stundentabelle #TempTable, kopieren und einfügen - UserName Spalten der Tabelle Users SELECT UserName INTO #TempTable FROM Users - Wählen Sie alle Datensätze der Stundentabelle #TempTable SELECT *

Prozeduren und Funktionen speichern

Die Prozeduren und Funktionen werden durch eine Reihe von SQL-Operatoren gespeichert, die auf dem Server gespeichert werden können. Wenn das Skript auf dem Server gespeichert wird, müssen die Clients nicht dieselben Okre-Operatoren erneut setzen, der Gestank kann auf die gespeicherte Prozedur zurückgreifen. Situationen, in denen die Verfahren vermieden werden sollen, sind besonders kompliziert:

  • Zahlreiche Client-Programme sind in verschiedenen Sprachen geschrieben oder arbeiten auf verschiedenen Plattformen, führen aber auch die gleichen Operationen mit Datenbanken durch.
  • Bezpeka spielt eine Hauptrolle. Sparverfahren sind für alle Standardoperationen erfolgreich, die die Sicherheit der Mitte gewährleisten, und Verfahren garantieren eine ordnungsgemäße Registrierung der Hautoperation. Bei dieser Art der Installation nehmen die Programme und Treiber keinen direkten Zugriff auf die Datenbanktabellen und können nur bestimmte Prozeduren auswählen, die gespeichert werden.
  • Es ist notwendig, den Datenverkehr zwischen dem Client und dem Server zu reduzieren. Die zwischen dem Server und dem Client übertragenen Informationen werden schrittweise reduziert und die Belastung des Datenbankserversystems wird erhöht, so dass in diesem Fall auf der Serverseite mehr Arbeit von der Datenverarbeitung geleistet wird.

Ein Beispiel für eine Reihe von Verfahren, wofür gesorgt wird, und Funktionen, wofür gesorgt wird:

Gehaltsaktualisierungsfunktion CREATE PROCEDURE usp_UpdateSalary AS UPDATE Positions SET BaseSalary = 2000 GO -- Gehaltsaktualisierungsfunktion erstellt CREATE FUNCTION usf_GetName (@UserID int) RETURNS varchar(255) + " " + UserSurname FROM Users WHERE UserID = @UserID) -- EXEC Salary TestDatabase.dbo.usp_UpdateSalary aktualisieren -- Mitarbeiternamen mit ID 2 ändern SELECT TestDatabase.dbo.usf_GetName(2)

Auch hier bieten die Abläufe und Funktionen, um die man sich kümmert, einen Vorteil:

  • Produktivität;
  • Zagalna-Logik für alle Zapitіv;
  • Verkehrsänderung;
  • Sicherheit - Der Zugang zum Coristuvachev erfolgt nicht zum Tisch, sondern zum Verfahren.

Produktivität

Um die Produktivität zu steigern, sollten Sie als schwedischer Trinker die folgenden Regeln für das Stapeln von Getränkereihen beachten:

  • Unicode NOT - Befehle für die Liste werden am Ende der Schritte ausgewählt, die den Datenverkehr zum Server erhöhen.
  • Unicate LIKE - dieser Operator ist ein Matching-Operator für mehrere Matching-Muster, ein niedrigerer Operator ist =, um die Anzahl der notwendigen Filterschritte zu reduzieren.
  • Zastosovuvaty exakte Vorlagen pokuku - zastosuvannya symbolіv pіdstanovki zbіlshuє Stunde vykonannya zaputu, oskіlki für revіrki vsіh vіkh Variante_v_іnіnіv_іnіїіі Installation nіbnіbnі zusätzliche Serverressourcen.
  • Unique ORDER - Der Sortierbefehl ermöglicht es Ihnen, die Zeilen in der Tabelle hintereinander zu sortieren, was das Ergebnis beeinträchtigt.

Witali Bochkarov

Die T-SQL-Sprache wird für die Verwaltung von Datensätzen erkannt. Aus Schuldgründen gibt es keine charakteristischen Merkmale traditioneller Sprachen, die für die Programmierung von Add-Ons notwendig sind. Da Sie sich schon seit langem mit der Erstellung von Add-Ons beschäftigen, wehren Sie sich also lautstark gegen die Idee, in T-SQL und anderen Sprachen wie VB, C# und Java zu programmieren.

T-SQL-Pakete

Eine T-SQL-Anweisung wird als Anforderung bezeichnet, und ein Satz davon wird als Paket bezeichnet. Die gesamte Folge von Paketanweisungen wird durch den Server von Client-Programmen als eine einzelne Einheit ersetzt.

SQL Server betrachtet das gesamte Paket, als würde es alleine arbeiten. Das Vorhandensein einer Begnadigung, wenn auch nur in einer Anweisung, würde dazu führen, dass das ganze Paket nicht abgeschlossen werden kann. Zu dieser Stunde ändert die grammatikalische Analyse nicht die Namen von Objekten und Schemata, aber das Schema selbst kann durch den Vorgang des Eintippens von Anweisungen geändert werden.

Überdenken des Pakets

Die SQL-Skriptdatei und das Query Analyzer-Fenster können einige Pakete enthalten. Manchmal fügen alle Pakete die Schlüsselwörter der Terminatoren hinzu. Für zamovchuvannyam tsim das Schlüsselwort є GO, und es kann Buti hintereinander vereinen. Alle anderen Symbole (Navit-Kommentare) neutralisieren den Paketverteiler.

Die Paketverteilung ist eigentlich eine Funktion von Management Studio, kein Server. Sie können es auf der Seite des Dialogfelds Abfrageausführung des Programms ändern, aber ich empfehle es nicht (Freunden).

DDL-Anweisungen

Einige DDL-Mov-T-SQL-Anweisungen, z. B. Create Procedure, sind die ersten Anweisungen im Paket. Selbst die alten Szenarien, die unpersönliche Objekte erstellen, erfordern oft eine Menge Neupakete. SQL Server oskіlki okremo analysiert die Syntax hinter den Paketen, eine solche Präsenz von unpersönlichen Verteilern hilft, Begnadigungen zu lokalisieren.

Umschalten zwischen Datenbanken

Im Arbeitsmodus wird die Datenbank immer in der Symbolleiste angezeigt und kann irgendwann geändert werden. Für Programmcode wird die Thread-Basis durch das Schlüsselwort USE definiert. Das Schlüsselwort im Paket gibt an, auf welcher Datenbank der Roboter basiert, ausgehend vom Flusspunkt:

Gewinnpakete

Das Paket kann auf dekilkom-Weise verwendet werden.

Dem SQL-Skript im Allgemeinen (damit alle Pakete, die vor dem neuen eingegeben werden) kann ein Pfad zu der Datei folgen. sql im SQL-Editor des Management Studios und Drücken der Tasten (entweder durch Drücken der Schaltfläche! Ausführen in der Symbolleiste oder durch Auswahl des Menüpunkts Abfrage 1 ^Ausführen im Menü). (Ich habe mein Windows-Betriebssystem so eingerichtet, dass beim Klicken auf die Datei .SQL automatisch der gesamte Abfrageanalysator gestartet wird.)

Der SQL-Editor in Management Studio kann auch als SQL-Anweisung verwendet werden. Für wen ist es notwendig, eine Taste zu sehen und zu drücken (Klicken Sie entweder auf die Schaltfläche Ausführen in der Symbolleiste oder wählen Sie im Menü den Eintrag Abfrage 1 ^Ausführen).

Zur Unterstützung von ADO oder ODBC kann das Programmpaket T-SQL verwendet werden.

Informationen zu T-SQL-Skripts Sie können auch nach dem zusätzlichen SQLCmd-Befehlszeilendienstprogramm suchen, um den Dateinamen zu übergeben. SQL-Yak-Parameter.

Das Dienstprogramm SQLCmd kann einige wenige Parameter haben und kann leicht an praktische Anforderungen angepasst werden.

Zusätzliche Informationen zum SQLCmd-Dienstprogramm div. in Zweigstelle 6, die dem Management Studio gewidmet ist.

Information

Vikonannya-Verfahren, die durchgeführt werden

Für das SQL-Paket wird die gespeicherte Prozedur nach der Hilfe des Schlüsselworts exec aufgerufen. Wer sollte die niedrigen Regeln befolgen? Oskіlki razrivi ryadkіv für SQL Server macht keinen Sinn, der Befehl exec bedeutet das Ende der vorherigen Anweisungen.

Befindet sich die auszuwählende Prozedur in der ersten Zeile des Pakets (ansonsten handelt es sich um eine einzelne Anweisung), dann ist die Angabe des Schlüsselworts exes in der neuen Sprache nicht zwingend erforderlich. Gleichzeitig führt das Einfügen dieses Schlüsselworts nicht zu einer Begnadigung, und davor hilft es, Probleme für die Zukunft zu lösen, da der Text des Pakets geändert wird.

Die nächsten beiden ausgewählten Wikis der Systemprozedur demonstrieren die alternativen exec-Befehle im Paket:

EXEC sp_help;

Bei wem wir geteilt haben, haben wir uns nur den exec-Befehl auf dem Paket angesehen. Ich werde Informationen über den Ersteller des Schlüsselworts yeshes im Abschnitt „Dynamic SQL“ berichten.

Formatierung in T-SQL

Durch Strecken des Buchtextes wurde der Programmcode formatiert, um die Genauigkeit zu verringern; An wen haben wir die Schlüsselmomente der Formatierung geteilt.

Vollständige Anweisungen

Der ANSI-SQL-Standard erfordert die Verwendung von Punkt-zu-Koma in den Skinanweisungen. Zur gleichen Stunde, bei der Programmierung auf dem T-SQL-Mov, ist der Punkt, mit dem nicht obov'yazkova. Wer sollte die Kilkom-Regeln befolgen?

Platzieren Sie kein її nach der try end-Anweisung.

Posten Sie nicht її, nachdem Sie darüber nachgedacht haben, ob.

Platzieren Sie das obov'yazkovo її nach den Heat-Table-Versen des CTE.

Für den kürzesten Durchlauf des Programmcodes empfiehlt es sich dennoch, die Flecken mit einem Klumpen zu schlagen. In zukünftigen Versionen von SQL Server kann es komplexer werden, was fortgeschrittenere Arbeit sein kann.

Prodovzhennya rowkіv

Anweisungen T-SQL kann von Natur aus leistungsfähig sein. Deyakі zapitami verbleibende rasdіlu s chislennym ob'ednannymi und pіdzapitami besetzen die ganze Seite. Es ist besonders angemessen, dass T-SQL Leerzeichen an diesem Ende der Zeile ignoriert. Tse bedeutet, dass die aktuelle Anweisung in der Offensivreihe ausgeführt werden kann, ohne dass ein spezielles Symbol erforderlich ist. Diese Macht ermöglicht es der bedeutenden Welt, das Lesen des Programmcodes zu verschieben.

In anderen Implementierungen von SQL, wie z. B. Access, erfordert die Vervollständigung der Anweisung das Vorhandensein eines Flecks mit einem Klumpen. SQL Server lässt einige Variationen zu, kümmert sich jedoch nicht um die Sprache.

Kommentare

Die T-SQL-Sprache kann in einem Kommentarpaket in zwei Stilen verwendet werden: ANCI und move C. Der erste beginnt mit zwei Bindestrichen und endet am Ende der Zeile:

- Kommentar zum ANSI-Stil

Außerdem können Kommentare im ANSI-Stil wie eine Reihe von Anweisungen eingefügt werden:

Select FirstName, LastName - Spalten FROM Personen, die ausgewählt werden - Ausgabetabelle

Wo Nachname Wie 'Hal%'; - in Reihen aufgereiht

Der SQL-Editor kann Kommentare zu allen angezeigten Zeilen einfrieren und anzeigen. Wählen Sie dazu den Menübefehl Bearbeiten^Erweitert^Auskommentieren ( oder ) oder Bearbeiten ^ Erweitert 1 ^ Kommentare entfernen ( oder ).

Kommentare zum Stil des Films C beginnen mit schrägen Zeichnungen und kleinen Sternen (/*) und enden mit den gleichen Symbolen bei der Wendesequenz. Diese Art von Kommentaren ist die beste Wahl zum Kommentieren von Zeilenblöcken wie Überschriften oder großartigen Testanfragen. /*

Tabelle Insert Trigger Order Paul Nielsen

Eines der wichtigsten Highlights von Kommentaren im Stil C sind diejenigen, die ohne Kommentar geschrieben werden können.

T-SQL-Anpassung

Wenn der SQL-Editor eine Entschuldigung anzeigt, zeigt er das Zeichen und die Zeilennummer im Paket an. Nachdem Sie auf die Begnadigung geklickt haben, können Sie sofort in die obere Reihe wechseln.

Die Begnadigung zu beenden wird oft im falschen Wort gebrochen, wie es in der Mahnung angesetzt war, - alles in den Weg legen, wie die Weisung aufgeklärt wurde. In der Tat ist die Begnadigung ohne Verzögerung bis oder nach dem, was im nächsten Monat angeordnet wurde, zurückgezahlt worden - auf jeden Fall wird es genau an der nächsten Stelle angeordnet.

SQL Server spricht eine Reihe von Befehlen aus, um das Aktualisieren von Paketen zu vereinfachen. Zocrema überwältigt der Druckbefehl das Update, ohne die Ergebnismenge der Daten zu erstellen. Insbesondere schätze ich den Druckbefehl als besonders wertvoll zum Debuggen eines Pakets ein. Wenn sich der Bedarfsanalysator im Netzwerkmodus befindet, wählen Sie das nächste Paket aus:

Der resultierende Datensatz erscheint in der Tabelle und wird in einer Zeile gefaltet. Gleichzeitig zeigt die Registerkarte Nachrichten das nächste Ergebnis:

(1 Zeile (n) betroffen)

Manchmal ist es notwendig, das Programm so einzurichten, dass es die Anzahl der Objekte blockiert. Mit dem Pause-Befehl können Sie den Stapel für eine Stunde anhalten. Wenn zum Beispiel vikonannі anstößiger Yoga-Code nach einer Pause von zwei Sekunden eine weitere Zeile erscheint:

Drucken Sie 1 Kolben";

auf Verzögerung warten *00:00:02′;

Drucken 'Kіnets 1;

Ergebnis des Vikonanny-Codes:

Der entscheidende Punkt ist, dass in der Management Studio-Version von SQL New in Server 2005 die T-SQL-Engine nicht enthalten ist, die im Paket vorhanden ist

2005Visual Studio 2005

Update, ich werde es Ihnen auf der Website www erzählen. SQLServerBible. com.

Änderungen

Be-yak mov vimagaє für timchasovogo zberezhennya bedeutet in Erinnerung an den zminnykh. Änderungen in T-SQL werden nach einem zusätzlichen Deklarationsbefehl erstellt, dem ihre Änderung und ihr Typ folgen. Gewinne für verschiedene Datentypen werden genau mit denen in den Tabellen abgeglichen. Dem können Sie einen Tabellentyp und einen SQLVariant-Typ hinzufügen. Geben Sie in einem Befehl an, durch wen eine Dekilka des Wechselgeldes eingelöst werden kann.

Bedeutung für das Sperren des zur Änderung vorgesehenen Bereichs

Der Umfang der Veränderung (das ist der Begriff für das eigene Leben) erweitert sich nur für ein Streaming-Paket. Für die Sperrung der Erstellung der Änderung werden die leeren Werte von null und vor der Aufnahme der Verletzung der schuldigen Buti-Initialisierung entfernt.

Im Offensivszenario werden zwei Testwechsel erstellt, mit denen demonstriert wird, dem Bereich wird dieser Sperrwert zugewiesen. Das gesamte Skript befindet sich in einer Datei, obwohl es technisch gesehen in zwei Pakete gefaltet ist (getrennt durch den GO-Befehl). Unmittelbar nach dem Skript werden drei SELECT-Anweisungen angezeigt:

DECLARE @Test INT,

@TestTwo NVARCHAR(25);

SELECT @ Test, @ Test Zwei;

SET @TestTwo = 'Wert';

SELECT @ Test, @ Test Zwei ;

SELECT @Test als BatchTwo, @TestTwo;

(1 Zeile (n) betroffen)

1 Wert

(1 Zeile (n) betroffen)

Msg 137, Level 15, State 2, Line 2 Muss die Skalarvariable „@Test“ deklarieren.

Die erste SELECT-Anweisung rotiert zwei leere Werte. Danach, als die Änderungen initialisiert wurden, ändert der Gestank die zugewiesenen Werte. Wenn das Paket als Ergebnis des vorrückenden SELECT-Befehls abgeschlossen ist, wird Pardon #137 gemeldet.

Es können Änderungen im lokalen Zuordnungsbereich vorgenommen werden, sodass die gespeicherten Prozeduren nicht auf andere Pakete ausgedehnt werden.

Variante von Set- und Select-Befehlen

Mit den Befehlen SET und SELECT können Änderungen Werte zugewiesen werden. Der Hauptunterschied zwischen ihnen besteht darin, dass der SELECT-Befehl Informationen aus der Datenbank (wie Tabellen, Daten, Daten usw.) extrahieren und andere SELECT-Anweisungen enthalten kann, während der SET-Befehl von den Daten des Virus getrennt ist. Wie ein, damit ein anderes Team die Funktion ersetzen kann. Verwenden Sie den SET-Befehl, wenn Sie der Funktion ein variables Ergebnis oder eine Konstante zuweisen müssen und die Daten nicht einsehen müssen.

Die SELECT-Anweisung kann Werte aus mehreren Einträgen annehmen. Der Veränderung kann der Wert von Hautläsionen zugeordnet werden. Während die SELECT-Anweisung die Zeile der Zeilen verschiebt, werden die Werte der verbleibenden Zeilen geändert. Die SELECT-Anweisung kommt in 32 Zeilen, geordnet nach dem Feld der individuellen Kennung. Zur gleichen Stunde wird der Code geändert und der Name ist nicht mehr der Rest der Personen auf der Liste:

Deklarieren Sie ©TempID INT,

@TempLastName VARCHAR(25);

SET@TempID=99;

@TempID=PersonID,

@TempLastName = Nachname

BESTELLEN NACH Personen-ID;

Das Ergebnis des vikonannya-Pakets:

32 @coderest:Campbell

Beim spitzen Hintern wurde die Begnadigung verlängert. ka. Überprüfen Sie die SELECT-Anweisung nicht doppelt, um die Änderungen einzutragen, da Sie nicht glauben, dass der resultierende Datensatz mehr als eine Zeile ergeben wird. Bei einer anderen Gelegenheit werden Sie sich nur mit der verbleibenden Reihe von Tributen zufrieden geben.

Wenn die SELECT-Anweisung dieselbe Zeile nicht rotiert, ändert sie sich nicht. Die nächste Anfrage rotiert den Wert nicht, die Datensätze mit der Kennung 100 existieren nicht in der Personentabelle. Aus Gründen der Änderung von @TempIDvariable hoffen wir auf den Wert der verbleibenden wesentlichen Zeile, wenn wir die Einstellung ändern, nehmen wir den leeren Wert:

Deklarieren Sie @TempID INT,

@TempLastName VARCHAR(25);

SET@TempID=99;

SELECT @TempID = PersonenID,

@TempLastName = Nachname FROM Person WHERE PersonID = 100 ORDER BY PersonID;

SELECT @TempID, @TempLastName;

99 @code zuletzt: NULL

Umovny vіdbіr

Die nächste SELECT-Anweisung soll die WHERE-Proposition ersetzen, und die Syntax ist korrekt, obwohl sie für sie möglicherweise unverständlich aussieht:

SELECT @ change = viraz WHERE boolean-viraz;

Manchmal funktioniert die WHERE-Klausel wie eine intelligente if-Anweisung. Wenn wahr, wird der Änderungswert zugewiesen, andernfalls wird die SELECT-Anweisung überschrieben, aber der Änderungswert wird nicht geändert.

Variante der Änderungen in SQL-Abfragen

Einer meiner Favoriten der Autoritäten der T-SQL-Sprache sind diejenigen, die in Anwendungen geändert werden können, ohne dass dynamische Zeilen zusammenfallen, die im Programmcode geändert werden. Dynamic SQL setzt seine eigene Basis fort, aber Sie können die Werte auf einfachere Weise einzeln ändern - für eine Änderungshilfe.

Skrіz, de zapі kann siegreich sein, kann siegen und sich ändern. Am Stepping Butt wurde die Substitution der Änderung in der Proposition WHERE demonstriert: USE OBXKites;

DECLARE @ProductCode CHAR(10);

SET @Code = '1001';

WÄHLEN Sie Produktname AUS Produkt

WHERE Code = @ProductCode;

Das Ergebnis wird verworfen:

Basic Boxkite 21 Zoll

Änderungen bei Mehrfachzuweisungen

Änderungen mit mehreren Zuweisungen - dies ist eine feindliche Methode, mit der Sie Änderungen für zusätzliche SELECT-Anweisungen hinzufügen und subsumieren können.

Wem wird eine geringe Anzahl von Bewerbungen aus dem wirklichen Leben gezeigt. Der Einfachheit halber möchte ich jedoch die SELECT-Anweisung in der Grundform vorstellen:

@Änderung WÄHLEN = @Änderung + d. stowpet FROM(kerowan_table) als d;

Eine lederne Reihe von Keramiktischen wird der Änderung hinzugefügt und verwandelt die vertikale Linie in eine horizontale Liste.

Diese Art der Vorahnung ist oft praktisch. Mit anderen Worten, die vertikale Liste kann einfacher in eine horizontale Liste umgewandelt werden, die durch Klumpen unterteilt ist, wodurch der Untertitel um einige Zentimeter gestreckt wird. Kurze horizontale Listen werden von Menschen leicht akzeptiert und sparen außerdem Platz.

Eine Liste mit Terminen für die Outer Banks Lighthouses-Tour wird bei der Offensive Butt erstellt, die in der Head-Datenbank von Cape Hatter als Ad Ventures angezeigt wird:

@EventDates VARCHAR(1024);

SET @EventDates = '';

SELECT ©EventDates = @EventDates + CONVERT(VARCHAR(15), a.d,107) + '

FROM (Wählen Sie DateBegin als [d] aus Event join Tour

on Event.TourID = Tour.TourlD WHERE Tour. = 'Outer Banks Lighthouses') als;

SELECT Left(@EventDates, Len(@EventDates)-1)

AS „Outer Banks Lighthouses Events“;

Das Ergebnis des vikonannya-Pakets:

Outer Banks Lighthouse-Ereignisse

Das Problem bei der Nummernveränderung bei numerischen Zuweisungen besteht darin, dass die richtige Reihenfolge der denormalisierten Daten gewährleistet ist. Da diese Methode der Nicht-Dokumentation wie eine Spielerei aussieht, können Sie sich nicht mit der vollen Brillanz von SQL Server rühmen. Prote vin kann als rote Fahne zur Erinnerung an die Termine des Tages angezeigt werden (ich sehe, dass der Cursor überschrieben wird).

Leran2002 9. April 2015 um 12:31 Uhr

Lerner zum Erlernen von SQL (DDL, DML) mit dem Dialekt von MS SQL Server. Teil Barsch

  • SQL,
  • Microsoft SQL-Server
  • Lernprogramm

Über was dieser Assistent

Tsey podruchnik є shchos auf kshtalt "zum Stempel meiner Erinnerung" z mov SQL (DDL, DML), tobto. Diese Informationen, wie sie sich im Laufe der beruflichen Tätigkeit angesammelt haben, sammeln sich ständig in meinem Kopf. Tse ist für mich ein ausreichendes Minimum, was bei der Arbeit mit Datenbanken am häufigsten vorkommt. Da weitere neue SQL-Konstrukte veröffentlicht werden müssen, rufe ich in der MSDN-Bibliothek nach Hilfe und stelle sie ins Internet. Meiner Meinung nach nimmt man alles eher glatt in den Kopf, dafür braucht man nicht besonders viel. Es ist sogar noch besser, die Hauptkonstruktionen zu kennen, weil Gestank zastosovnі praktisch in so reichen relationalen Datenbanken, wie von Oracle, MySQL, Firebird. Vadminnosti beziehen sich hauptsächlich auf die Datentypen, aber sie können durch die Details modifiziert werden. Die Hauptkonstruktionen der SQL-Sprache sind nicht so reichhaltig, und bei ständiger Übung ist der Gestank schnell vergessen. Zum Beispiel zum Erstellen von Objekten (Tabelle, Index, Index usw.) reicht ein Texteditor (IDE) zum Arbeiten mit einer Datenbank aus, um mit einer Datenbank zu arbeiten, und es besteht keine Notwendigkeit, visuelle Werkzeuge zum Arbeiten mit zu verwenden ein bestimmter Datenbanktyp (MS SQL, Oracle, MySQL, Firebird, …). Praktisch ist, dass man den gesamten Text vor Augen hat und man sich nicht durch die numerischen Tabulatoren sortieren muss, um beispielsweise einen Index oder eine Börse zu erstellen. Bei Nacharbeit mit der Datenbank, Anlegen, Ändern und vor allem Neuanlegen des Objektes für weitere Skripte, erscheint es im visuellen Modus schneller, sogar tiefer. Außerdem ist es im Skriptmodus (vіdpovіdno, für die richtige Genauigkeit) einfacher, die Regeln für die Benennung von Objekten festzulegen und zu steuern (mein subjektiver Gedanke). Zuvor können die Skripte zu einem anderen Zeitpunkt manuell angepasst werden, wenn Sie wechseln, um in einer Datenbank (z. B. einer Testdatenbank) zu roamen, müssen Sie sie so auf eine andere Datenbank (produktiv) übertragen.

Mova SQL ist in einige Teile unterteilt, hier werde ich auf die 2 wichtigsten Teile eingehen:
  • DML – Datenmanipulationssprache
    • SELECT - Datenauswahl
    • EINFÜGEN - neue Daten einfügen
    • UPDATE - Datenaktualisierung
    • LÖSCHEN - Daten löschen
    • MERGE - wütender Danich
Weil Ich bin ein Praktiker, da eine solche Theorie für einen bestimmten Assistenten nicht ausreichen wird und alle Konstruktionen an praktischen Hintern erklärt werden. Bis dahin ist mir wichtig, dass Sprachprogrammierung und insbesondere SQL nur in der Praxis gemeistert werden können, indem man es selbst studiert und versteht, was man lernen muss, wenn man dieses andere Design gewinnt.

Dieser Assistent wurde nach dem Prinzip von Step by Step, tobto erstellt. es ist notwendig, yogo danach zu lesen und es dann auf die tasche zu legen. Und wenn Sie mehr über den Befehl erfahren möchten, suchen Sie im Internet nach einer bestimmten Suche, z. B. in der MSDN-Bibliothek.

Kurz vor dem Schreiben dieses Assistenten wurde die Datenbank von MS SQL Server Version 2014 abgefragt, für die Eingabe von Skripten habe ich MS SQL Server Management Studio (SSMS) abgefragt.

Kurz zu MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) ist ein Dienstprogramm für Microsoft SQL Server zum Konfigurieren, Verwalten und Verwalten von Datenbankkomponenten. Dieses Dienstprogramm ersetzt den Skripteditor (der hauptsächlich von uns verwendet wird) und das Grafikprogramm, das mit Objekten arbeitet und den Server optimiert. Das Haupttool von SQL Server Management Studio ist der Objekt-Explorer, mit dem Sie Serverobjekte überprüfen, anzeigen und auch pflegen können. Dieser Text wird oft von Wikipedia referenziert.

Um einen neuen Skript-Editor zu erstellen, klicken Sie auf die Schaltfläche Neue Abfrage:

Um die Streaming-Datenbank zu ändern, können Sie die angezeigte Liste drehen:

Um einen Songbefehl (oder eine Gruppe von Befehlen) zu gewinnen, können Sie ihn sehen und die Schaltfläche „Ausführen / Vikonati“ oder die Taste „F5“ drücken. In der Regel gibt es im Moment nur einen Befehl im Editor, ansonsten müssen Sie alle Befehle auswählen, Sie müssen nichts sehen.

Wenn Sie die Skripte ändern möchten, die insbesondere Objekte (Tabellen, Tabellen, Indizes) erstellen, ändern Sie dies über das Kontextmenü, nachdem Sie die spezifische Gruppe (z. B. Tabellen), die Tabelle selbst oder die Stovpts-Gruppe gesehen haben in dem anderen.

Alles ist gut, was wir wissen müssen, um hier auf Hintern zu zielen. Reshta für das SSMS-Dienstprogramm ist nicht sehr wichtig, um es unabhängig zu lernen.

Trochy-Theorie

Eine relationale Datenbank (RDB, sonst im Kontext nur eine Datenbank) ist eine Sammlung von Tabellen, die miteinander in Beziehung stehen. Die Datenbank ist, grob gesagt, eine Datei, für die Daten aus strukturierter Sicht gespeichert werden.

DBMS - Datenbankverwaltungssystem, tobto. tse Komplex von Tools, um mit einem bestimmten Datenbanktyp zu arbeiten (MS SQL, Oracle, MySQL, Firebird, ...).

Notiz
Weil Sagen wir im Leben auf Romanisch: „Oracle DB“, oder nennen wir einfach „Oracle“, was wirklich wie „Oracle DBMS“ aussieht, dann wird im Zusammenhang mit diesem Assistenten manchmal der Begriff DB verwendet. Aus dem Kontext heraus wäre es meiner Meinung nach vernünftig, es selbst zu tun.

Tisch Stovptsі, damit sie sich Felder oder Spalten nennen können, werden alle Wörter als Synonyme siegen, die sie sich sagen.

Die Tabelle ist das Hauptobjekt der RDB, alle Daten der RDB werden hintereinander in die Spalten der Tabelle übernommen. Zeilen, Datensätze - auch Synonyme.

Für Skin-Tabellen wie und її stovptsіv werden Namen angegeben, welche Art von Jahren vor ihnen.
Objektnamen (Tabellenname, Spaltenname, Indexname) in MS SQL dürfen maximal 128 Zeichen lang sein.

Zum Abschluss– DB ORACLE-Objektnamen dürfen maximal 30 Zeichen lang sein. Daher ist es für eine bestimmte Datenbank erforderlich, ihre eigenen Regeln zum Benennen von Objekten zu modifizieren, um in die Begrenzung für die Anzahl von Zeichen zu passen.

SQL - Sprache, mit der Sie vor dem DBMS in die Datenbank schreiben können. Für ein bestimmtes DBMS kann die Sprache SQL eine bestimmte Implementierung haben (ihren eigenen Dialekt).

DDL und DML - Teilmenge des SQL-Films:

  • Mova DDL dienen vor dem Ändern der Struktur der Datenbank, tobto. zum Erstellen/Ändern/Anzeigen von Tabellen und Verknüpfungen.
  • Mit Mova DML können Sie Daten aus Tabellen usw. bearbeiten. h її Reihen. Mit Win können Sie Daten aus den Tabellen auswählen, neue Daten in die Tabellen einfügen sowie die relevanten Daten aktualisieren und anzeigen.

Move SQL kann zwei Arten von Kommentaren haben (einzeilig und mehrzeilig):

Einzeiliger Kommentar
і

/* Bug-Ordnungskommentar */

Vlasne, alles wird für die Theorie reichen.

DDL - Datendefinitionssprache

Schauen wir uns zum Beispiel die Tabelle mit Daten zu Spivrobitnikov an, im Fall eines Programmierers, der nicht є ist:

Verschiedene Spalten der Tabellen können die folgenden Namen haben: Personalnummer, PIB, Geburtsdatum, E-Mail, Posada, Vіddіl.

Die Haut dieser Stovptsіv kann durch die Art der Daten charakterisiert werden, die im Neuen gerächt werden sollen:

  • Personalnummer - ganze Zahl
  • PIB - Reihe
  • Geburtsdatum - Datum
  • E-Mail - Zeile
  • Posada - Reihe
  • Viddil - Reihe
Stovptsya-Typ - ein Merkmal, wie man über diese spricht, Yakі danі kann dans stovpets retten.

Für den Anfang reicht es aus, sich nur solche grundlegenden Datentypen zu merken, die in MS SQL unterschieden werden:

Wert Von MS SQL bezeichnet Beschreibung
Reihe von Wechselstuben Varchar(N)
і
nvarchar(N)
Für die zusätzliche Zahl N können wir die maximal mögliche Länge der Reihe bei einer Doppelreihe angeben. Wenn Sie beispielsweise sagen möchten, dass der Wert „PIB“ maximal 30 Zeichen enthalten darf, müssen Sie den Typ nvarchar(30) angeben.
Der Unterschied zwischen varchar und nvarchar besteht darin, dass Sie mit varchar Zeilen aus dem ASCII-Format speichern können, wobei ein Zeichen 1 Byte benötigt, und nvarchar Zeilen aus dem Unicode-Format verwendet, wenn ein Zeichen 2 Bytes benötigt.
Der varchar-Typ kann nur so gewählt werden, dass Sie 100% sicher sind, dass in diesem Feld keine Unicode-Zeichen gespeichert werden müssen. Beispielsweise kann varchar verwendet werden, um die E-Mail-Adresse zu speichern, weil stinken singen mehr als ASCII-Zeichen.
Reihe fester Dozhina Zeichen (N)
і
nchar(N)
In der Zeile der veränderbaren Dozhina wird dieser Typ als gleich angesehen, dass die Zeile der Dozhina weniger als N Zeichen hat, sie wird immer von der rechten Hand zu Dozhina N mit Leerzeichen ergänzt und beim Anblick aus der Datenbank genommen , toto. es nimmt genau N Zeichen aus der Datenbank (ein Zeichen benötigt 1 Byte für char und 2 Bytes für den nchar-Typ). In der Praxis ist dieser Typ selten dafür bekannt, dass er überlastet ist, und er gewinnt normalerweise, er gewinnt dann, was noch wichtiger ist, im char(1)-Format. wenn das Feld ein Zeichen ist.
Ganze Zahl int Der dänische Typ erlaubt uns, mehr als eine ganze Zahl in stovptsi zu singen, sowohl positiv als auch negativ. Zum Abschluss (für uns jetzt nicht so wichtig) - der Zahlenbereich, der den int-Typ zulässt -2 147 483 648 bis 2 147 483 647. Nennen Sie den Haupttyp, der zum Festlegen von Bezeichnern verwendet wird.
Speech-Chi-deisne-Zahl schweben Wenn Sie Klartext sprechen, handelt es sich um Zahlen, in denen möglicherweise ein Dutzend Punkte (Koma) stehen.
Datum Datum Wenn an den Stovpts nur das Datum gespeichert werden muss, da es aus drei Lagern gesammelt wird: Zahlen, Monate und Roku. Napriklad, 15.02.2014 (Fierce 15, 2014). Bei „Annahmedatum“, „Geburtsdatum“ usw. kann der dänische Typ ausgewählt werden. in ruhigen Situationen, wenn es uns wichtig ist, den Termin festzulegen, aber wenn die Lagerzeit für uns nicht wichtig ist, können wir es lassen oder wir sehen es nicht.
Stunde Zeit Der dänische Typ kann geschlagen werden, daher ist es notwendig, mehr als eine bestimmte Stunde von den Stovpts, Tobto, zu sparen. Jahre, Khvilini, Sekunden und Millisekunden. Beispiel: 17:38:31.3231603
Zum Beispiel die berühmte "Stunde des Abflugs des Fluges".
Datum diese Stunde Terminzeit Dieser Typ ermöglicht das gleichzeitige Speichern von Datum und Stunde. Beispiel: 15.02.2014 17:38:31.323
Für den Hintern können Sie, aber das Datum ist die gleiche Stunde wie es sein sollte.
Prapor Bit Der dänische Typ wird manuell eingestellt, um den Wert der Form „Tak“ / „Hi“ zu speichern, de „Tak“ wird als 1 angenommen und „Hi“ wird als 0 angenommen.

Der Wert des Feldes selbst darf also, obwohl es nicht eingezäunt ist, nicht angegeben werden, für den Wert des Feldes wird das Schlüsselwort NULL gewählt.

Lassen Sie uns für Anwendungszwecke eine Testdatenbank namens Test erstellen.

Eine einfache Datenbank (ohne Angabe zusätzlicher Parameter) kann durch Ausführen des folgenden Befehls erstellt werden:

Test DATENBANK ERSTELLEN
Sie können die Datenbank mit dem Befehl anzeigen (wir werden Sie auch vor diesem Befehl schützen):

DROP DATABASE-Test
Um zu unserer Datenbank zu gelangen, können Sie den Befehl verwenden:

US-Test
Andernfalls wählen Sie die Testdatenbank aus der Liste im SSMS-Menübereich aus. Wenn ich mit mir arbeite, gewinne ich meistens durch die Methode, zwischen den Basen zu wechseln.

Jetzt können wir eine Tabelle in unserer Datenbank erstellen, die Beschreibungen des Vikoristen sehen aus wie Gestank, der Vikorist hat diese kyrillischen Zeichen geschrieben:

CREATE TABLE [Recorders]([Personal Number] int, [PIB] nvarchar(30), [Pop Date] date, nvarchar(30), [Posada] nvarchar(30), [Viddil] nvarchar(30))
Bei dieser Gelegenheit setzen wir die Namen zufällig an den quadratischen Bogen […].

Außerdem sollten in der Datenbank zur besseren Übersichtlichkeit alle Namen von Objekten kürzer in lateinischer Sprache gesetzt werden und nicht in den Namen der Lichtung singen. In MS SQL klingen gleichzeitig die Worte mit einem Großbuchstaben an, zum Beispiel könnten wir für das Feld „Personalnummer“ den Namen PersonalNumber setzen. Außerdem kann der Name mit Zahlen verdreht werden, z. B. PhoneNumber1.

Notiz
Bei einigen DBMS können wir das bestehende Format für den Namen „PHONE_NUMBER“ abkürzen, dieses Format wird beispielsweise häufig in der ORACLE-Datenbank verwendet. Natürlich müssen beim Festlegen des Feldnamens die im DBMS ausgewählten Schlüsselwörter nicht vermieden werden.

Aus irgendeinem Grund können Sie die Syntax mit quadratischen Bögen vergessen und die Tabelle [Spivrobitniki] einsehen:

DROP-TABELLE
Beispielsweise kann eine Tabelle mit 3 Arbeitern "Mitarbeiter" genannt werden, und її-Feldern können die folgenden Namen gegeben werden:

  • ID - Personalnummer (Kennung des Anrufers)
  • Name - PIB
  • Geburtstag - Geburtstagsdatum
  • Email
  • Position - Posada
  • Abteilung - Viddil
Der gebräuchlichste Name für das Bezeichnerfeld ist das Wort ID.

Jetzt erstellen wir unsere Tabelle:

CREATE TABLE Mitarbeiter (ID int, Name nvarchar(30), Geburtstagsdatum, E-Mail nvarchar(30), Position nvarchar(30), Abteilung nvarchar(30))
Um die Strings für die stowpci festzulegen, können Sie die Option NOT NULL verwenden.

Für die bereits grundlegende Tabelle können die Felder mit Hilfe von Offensivbefehlen neu zugewiesen werden:





























ID-Feldaktualisierung ALTER TABLE Mitarbeiter ALTER COLUMN ID int NOT NULL

Notiz
Das Hauptkonzept von SQL mov bleibt für die meisten DBMS gleich (ich kann über dieses DBMS urteilen, für das ich die Chance hatte, mich zu verbessern). Der Umfang von DDL in verschiedenen DBMSs bezieht sich hauptsächlich auf Datentypen (hier können nicht nur ihre Namen, sondern die Details ihrer Implementierung geändert werden), sodass die Besonderheiten der SQL-Implementierung leider kleine Unterschiede im Dialekt sein können. es gibt keinen Standard). Mit den Grundlagen von SQL können Sie von einem DBMS zum anderen wechseln, weil Sie müssen dann mehr über die Details der Implementierung von Befehlen im neuen DBMS erfahren. In den meisten Fällen wird es ausreichen, einfach eine Analogie zu ziehen.

Tabellenerstellung CREATE TABLE Employees(ID int, -- in ORACLE type int - entspricht number(38) Name nvarchar2(30), -- nvarchar2 in ORACLE entspricht nvarchar in MS SQL Geburtstagsdatum, E-Mail n , Position nvarchar2 (30) , Abteilung nvarchar2(30)); -- Felder ID und Name aktualisieren (hier wird ALTER COLUMN durch MODIFY(…) ersetzt) ​​ALTER TABLE Mitarbeiter MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- PK hinzufügen (wie die Konstruktion wie i in MS SQL aussieht, wird unten gezeigt) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Für ORACLE vіdminnostі vіdminnostі vіdmіnnostі vіdminnostі in der Implementierung geben Sie varchar2 ein, Yogo-Codierung fällt in id lashtuvan db, in dem Text gespeichert werden kann, z. B. bei der Codierung von UTF-8. Zunächst einmal kann die Feldlänge in ORACLE sowohl in Bytes als auch in Zeichen gesetzt werden, wozu die zusätzlichen Optionen BYTE und CHAR angegeben werden, die beispielsweise hinter der Feldlänge angegeben werden:

NAME varchar2(30 BYTE) – Feldumfang bis zu 30 Byte NAME varchar2(30 CHAR) – Feldbereich bis zu 30 Zeichen
Als Option wird es möglich sein, BYTE- oder CHAR-Sperren zu ersetzen, im Falle einer einfachen Einfügung in ORACLE-Typ varchar2(30), um sie in der Datenbank zu speichern, sodass sie manchmal in den IDE-Anpassungen festgelegt werden können. Für eine Stunde kann man sich leicht verirren, da der ORACLE-Typ in der Regel den Typ varchar2 verwendet (und hier gilt es für eine Stunde beispielsweise mit UTF-8-Codierung), werde ich explizit CHAR vorschreiben (weil es einfacher ist um die Zeile selbst in Zeichen zu benennen).

Aber in Zeiten sowie in den Tabellen bereits є Yak-Nebud-Daten, dann ist es für die erfolgreiche Eingabe von Befehlen erforderlich, dass alle Zeilen der Tabelle die ID- und Namensfelder obov'yazkovo zapovneni haben. Wir demonstrieren es am Beispiel, fügen es in die Datentabelle in die Felder ID, Position und Abteilung ein, die durch das folgende Skript generiert werden können:

INSERT Mitarbeiter(ID,Position,Abteilung) WERTE (1000,N"Direktor",N"Verwaltung"), (1001,N"Programmierer",N"IT"), (1002,N"Buchhalter",N"Buchhaltung" ), (1003,N"Senior Programmierer",N"IT")
Manchmal sieht der INSERT-Befehl auch eine Entschuldigung, weil beim Einfügen haben sie den Wert des Feldes Name nicht dem Feld Sprache zugewiesen.
Wenn wir bereits Daten in der Tabelle haben, dann war der Befehl ALTER TABLE Employees ALTER COLUMN ID int NOT NULL erfolgreich, und der Befehl ALTER TABLE Employees ALTER COLUMN Name int NOT NULL sah eine Entschuldigungsnachricht, dass das Feld Name NULL ist (nicht zugewiesen ) Wert.

Fügen Sie einen Wert für das Feld Name hinzu und erneuern Sie die Dateneingabe:


Außerdem kann die NOT NULL-Option jedes Mal geschlagen werden, wenn eine neue Tabelle erstellt wird. im Kontext des CREATE TABLE-Befehls.

Auf der Rückseite sehen wir die Tabelle für die Hilfe des Befehls:

DROP TABLE Mitarbeiter
Lassen Sie uns nun eine Tabelle mit den obligatorischen Spalten ID und Name erstellen:

CREATE TABLE Mitarbeiter(ID int NOT NULL, Name nvarchar(30) NOT NULL, Geburtstagsdatum, E-Mail nvarchar(30), Position nvarchar(30), Abteilung nvarchar(30))
Es ist auch möglich, NULL nach dem Namen zu schreiben, was bedeutet, dass in den neuen NULL-Werten (nicht angegeben) gültig sind, aber diese Arbeit ist nicht obov'yazkovo, daher wird das Merkmal zum Verständnis angegeben.

Da es notwendig ist, die notwendigen stovpets neobov'yazkovym für zapovnennia zu machen, ist die folgende Befehlssyntax siegreich:

ALTER TABLE Mitarbeiter ALTER COLUMN Name nvarchar(30) NULL
Abo ist einfach:

ALTER TABLE Mitarbeiter ALTER COLUMN Name nvarchar(30)
Mit diesem Befehl können wir auch den Feldtyp in einen niedrigeren Summentyp ändern oder den zweiten ändern. Erweitern Sie beispielsweise das Feld Name auf 50 Zeichen:

ALTER TABLE Mitarbeiter ALTER COLUMN Name nvarchar(50)

Primärschlüssel

Wenn die Tabellen kombiniert werden, ist es wichtig, dass es ein kleines eindeutiges stovpets oder eine Kombination von stovptsiv gibt, die für die Skin-Zeile eindeutig ist - für gegebene eindeutige Werte können Sie den Datensatz eindeutig identifizieren. Dieser Wert wird Primärschlüssel der Tabelle genannt. Für unsere Tabelle Mitarbeiter kann solchen eindeutigen Werten eine ID zugeordnet werden (die als „vorläufige Personalnummer des Mitarbeiters“ verwendet werden kann – in unserem Fall ist der Wert für den Hautspezialisten eindeutig und kann nicht wiederholt werden).

Mit dem zusätzlichen Befehl können Sie den ersten Schlüssel zu der bereits vorhandenen Tabelle erstellen:

ALTER TABLE Mitarbeiter ADD CONSTRAINT PK_Employees PRIMARY KEY(ID)
De "PK_Employees" tse іm'ya obmezhennya, scho vydpovidaє für den ersten Schlüssel. Ertönen Sie den Namen des Primärschlüssels, das Präfix „PK_“ wird nach einem beliebigen Tabellennamen ausgewählt.

Da der erste Schlüssel aus Dekilkoh-Feldern gebildet wird, müssen diese Felder in den Bögen neu gerendert werden, durch die:

ALTER TABLE Tabellenname ADD CONSTRAINT Austauschname PRIMARY KEY(field1,field2,…)
Varto weist darauf hin, dass in MS SQL die Felder aufgrund des Merkmals NOT NULL vor dem Primärschlüssel enthalten sein müssen.

Außerdem kann der erste Schlüssel ohne Verzögerung beim Erstellen der Tabelle, tobto, zugewiesen werden. im Kontext des CREATE TABLE-Befehls. Sehen wir uns die Tabelle an:

DROP TABLE Mitarbeiter
Und dann erstellen wir її, vikoristovuyuuchi offensive Syntax:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30) NOT NULL, Virtual Hour, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY aller Felder, als Mitarbeiter)
Nach dem Anlegen der Daten in der Datentabelle:

INSERT Mitarbeiter(ID,Position,Abteilung,Name) WERTE (1000,N"Direktor",N"Verwaltung",N"Iwanow I.I."), (1001,N"Programmierer",N"IT",N" Petrov P.P." ), (1002,N"Buchhalter",N"Buchhaltung",N"Sidoriv S.S."), (1003,N"Senior Programmer",N"IT",N"Andreev A.A.")
Da der erste Schlüssel einer Tabelle kleiner als der Wert einer Spalte ist, können Sie die folgende Syntax verdrehen:

CREATE TABLE Employees(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - kann als Merkmal des Feldes Name nvarchar(30) NOT NULL, Geburtstagsdatum, E-Mail nvarchar(30), Position nvarchar(30), Abteilungsnr
Sie können und müssen den echten Namen des Unternehmens nicht festlegen, in diesem Fall wird Ihnen ein Systemname zugewiesen (z. B. PK__Employee__3214EC278DA42077):

CREATE TABLE Mitarbeiter(ID int NOT NULL, Name nvarchar(30) NOT NULL, Geburtstagsdatum, E-Mail nvarchar(30), Position nvarchar(30), Abteilung nvarchar(30), PRIMARY KEY(ID))
Abo:

CREATE TABLE Employees(ID int NOT NULL PRIMARY KEY, Name nvarchar(30) NOT NULL, Geburtstagsdatum, E-Mail nvarchar(30), Position nvarchar(30), Abteilung nvarchar(30))
Ale, ich empfehle bi für post_ynih-Tabellen zavzhdya explizit gesetzt im'ya obmezhennya, tk. um sie explizit einzustellen und zu verstehen, wird es einfacher sein, mit ihm zu manipulieren, zum Beispiel können Sie Folgendes ausarbeiten:

ALTER TABLE Mitarbeiter DROP CONSTRAINT PK_Employees
Aber eine so kurze Syntax, ohne der Grenze Namen zuzuweisen, zastosovuvat manuell die Stunde der Erstellung des Zeitplans der Datenbank (die Zeit des Zeitplans basiert auf # chi ##), sobald die Übereinstimmung erfolgt gesehen werden.

Wahrscheinlich

Wir sahen uns gleich die Fortschaltkommandos an:
  • TABELLE ERSTELLEN table_name (Wiederauftauchen von Feldern dieses Typs, Abgrenzung) – dienen, bis eine neue Tabelle in der Streaming-Datenbank erstellt wird;
  • DROP-TABELLE table_name – dient als entfernte Tabelle aus einer Streaming-Datenbank;
  • TABELLE ÄNDERN Tabellenname SPALTE ÄNDERN im'ya_stovptsya ... – dienen dazu, den Typ des stovptsya zu aktualisieren oder seine Einstellung zu ändern (z. B. um das Merkmal NULL oder NOT NULL zu setzen);
  • TABELLE ÄNDERN Tabellenname EINSCHRÄNKUNG HINZUFÜGEN im'ya_obezhennya PRIMÄRSCHLÜSSEL(field1, field2,…) – Hinzufügen des Primärschlüssels zur bereits bestehenden Tabelle;
  • TABELLE ÄNDERN Tabellenname DROP-EINSCHRÄNKUNG exchange_name - Remote-Austausch von Tabellen.

Trochs über Timchas-Tische

Virizka von MSDN. MS SQL Server hat zwei Arten von Zeittabellen: lokal (#) und global (##). Lokale Zeitpläne sind für ihre Ersteller weniger sichtbar, bis die Sitzung mit einer Instanz von SQL Server abgeschlossen ist, genau wie der Gestank der Erstellung in der Vergangenheit. Lokale Uhrtabellen werden automatisch sichtbar, wenn die Uhr in der Instanz von SQL Server eingeschaltet wird. Die globalen Uhrentabellen können von allen Uhren gesehen werden, unabhängig davon, ob sie nach der Erstellung dieser Tabellen erstellt werden und sichtbar sind, wenn alle Uhren, wie sie auf den Tabellen erscheinen, in der Instanz von SQL Server enthalten sind.

Timing-Tabellen werden in der tempdb-Systemdatenbank erstellt, das heißt. Wenn Sie sie erstellen, ohne von der Hauptdatenbank gesehen zu werden, sind sie in einer anderen Stundentabelle identisch mit den Primärtabellen, sie können mit Hilfe des DROP TABLE-Befehls gesehen werden. Meistens sind lokale (#) Takttabellen siegreich.

Um einen Zeitplan zu erstellen, können Sie den Befehl CREATE TABLE verwenden:

CREATE TABLE #Temp(ID int, Name nvarchar(30))
Da die Zeittabelle in MS SQL der Primärtabelle ähnlich ist, kann sie auch vom DROP TABLE-Befehl selbst gesehen werden:

DROP-TABELLE #Temp

So kann die Stundentabelle selbst (wie die Originaltabelle) erstellt und sofort mit Daten geladen werden, rotiert durch die siegreiche Syntax SELECT ... INTO:

SELECT ID,Name IN #Temp FROM Employees

Notiz
In verschiedenen DBMSs kann die Implementierung von Fahrplänen unterschiedlich sein. Beispielsweise soll im ORACLE- und Firebird-DBMS die Struktur der timchasovyh-Tabellen später durch den Befehl CREATE GLOBAL TEMPORARY TABLE aus den angegebenen Datenerfassungsspezifikationen zugewiesen werden, und es war bereits erforderlich, die Mitte der Haupttabellen und zu überprüfen Arbeiten Sie damit als ansehnlicher Tisch.

Normalisierung der Datenbank - Aufteilung in Untertabellen (Dokumente) und Zuordnung von Links

Unsere Streaming-Tabelle Mitarbeiter reicht möglicherweise nicht für diejenigen aus, die in den Feldern Position und Abteilung des Coristuvach beliebigen Text eingeben können, dem ich im ersten Teil des Jahres mit Begnadigung drohen werde, damit der Wein eines Spіvrobіtnik als eingegeben werden kann а vіddіl nur "ІТ", und für einen anderen Spіvrobіtnik geben Sie beispielsweise "IT-viddil" beim dritten "IT" ein. Als Ergebnis war es unvernünftig, dass die Mutter auf dem Uvazi Koristuvach, Tobto war. Was hat das Spіvrobіtniki von den Praktizierenden desselben Vіddіlu gegeben, was Koristuvach selbst beschrieb und tse 3 verschiedene Vіddіlu? Außerdem können wir unserer Meinung nach die Daten für einen solchen Namen nicht richtig gruppieren, de, es ist möglich, es ist notwendig, die Anzahl der Spivrobitniks bei der Analyse der Hautkrankheit anzuzeigen.

Ein weiterer nedolіk polygaє y obsyazі zberіgannya tsієї informatsії її її dubluvannyam, tobto. für ein Hautsymbol ist die Angabe des Namens der Person erforderlich, der in der Datenbank für die Auswahl des Hautsymbols für den Namen der Person verwendet wird.

Das dritte Problem ist die Faltbarkeit der Aktualisierung dieser Felder, als ob beispielsweise der Name einer Anlage geändert würde, da der Name „Programmierer“ in „Junger Programmierer“ geändert werden muss. An diesem Punkt können wir Änderungen an der Skin-Zeile der Tabelle in derselben Posada dorovnyu «Programist» vornehmen.

Um diese Mängel zu vermeiden und zastosovuєtsya so genannte Normalisierung der Datenbank - Aufteilung in Untertabellen, Tabellen dovidniki. Es ist nicht obov'yazkovo, in nicht dreifachen Theorien und Wendungen zu liegen, was sich normale Formen vorzustellen, es reicht aus, das Wesen der Normalisierung zu verstehen.

Lassen Sie uns 2 Tabellen „Werk“ und „Viddili“ erstellen, die erste heißt Positionen und die andere Abteilungen:

CREATE TABLE Positionen(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY ) NOT NULL)
Hochachtungsvoll haben wir hier eine neue IDENTITY-Option eingeführt, sozusagen über diejenigen, die in der ID-Spalte angegeben sind, werden automatisch nummeriert, beginnend mit 1, also mit 1. Beim Hinzufügen neuer Datensätze werden diesen nacheinander die Werte 1, 2, 3 usw. zugewiesen. Solche Felder werden als autoinkrementell bezeichnet. Einer Tabelle können mehr als ein IDENTITY-Feld zugeordnet sein, und in der Regel ist es nicht erforderlich, eine Sprache zu haben, ein solches Feld ist der Primärschlüssel für diese Tabelle.

Notiz
In verschiedenen DBMS kann die Implementierung der Bewässerung von einer Privatperson für sich selbst funktionieren. In MySQL ist beispielsweise ein solches Feld der zusätzlichen Option AUTO_INCREMENT zugeordnet. In ORACLE und Firebird konnte bisher diese Funktionalität mit Hilfe einer Vielzahl von Sequenzen (SEQUENCE) emuliert werden. Soweit ich weiß, hat ORACLE die Option GENERATED AS IDENTITY sofort hinzugefügt.

Erinnern wir uns automatisch an die Tabellen, basierend auf den Streaming-Datensätzen in den Feldern Position und Abteilung der Tabelle Employees:

Das Namensfeld der Positionstabelle wird mit eindeutigen Werten aus dem Positionsfeld der Tabelle geladen.
Dasselbe ist für die Abteilungstabelle möglich:

INSERT Departments(Name) SELECT DISTINCT Department FROM Employees WHERE Department IS NOT NULL
Wenn wir uns die Tabellen Positionen und Abteilungen ansehen, können wir die Werte auch nummerieren, indem wir den Wert in das ID-Feld eingeben:

AUSWÄHLEN * AUS Positionen

AUSWÄHLEN * AUS Abteilungen

Die Daten der Tabellen spielen jetzt die Rolle von dovіdnikov für den Siedlungsleiter und viddіlіv. Jetzt fragen wir nach der Kennung der Landung und vіddіlіv. Wir erstellen neue Felder in der Employees-Tabelle, um diese Kennungen zu sammeln:

Fügen Sie ein Feld für die Werks-ID hinzu ALTER TABLE Employees ADD PositionID int -- fügen Sie ein Feld für die Werks-ID hinzu ALTER TABLE Employees ADD DepartmentID int
Die Art der möglichen Bewässerung ist die Schuld beider selbst, wie bei den Dovidniks, in diesem tse int.

Es ist auch möglich, der Tabelle in der Tabelle mit einem Befehl eine Bewässerungsmenge hinzuzufügen, nachdem die Felder wiederbelebt wurden, durch die:

ALTER TABLE Mitarbeiter ADD PositionID int, DepartmentID int
Jetzt schreiben wir den Wert (möglicher Austausch - FOREIGN KEY) für diese Felder auf, damit es nicht möglich ist, in die angegebenen Felder den Wert, den täglichen Durchschnittswert der ID, die in den Feldern steht, zu schreiben.

ALTER TABLE Mitarbeiter ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positionen(ID)
Ich habe das gleiche Zrobimo für ein anderes Feld:

ALTER TABLE Mitarbeiter ADD CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID)
Jetzt ist es möglich, ab dem angegebenen Datum einen zusätzlichen ID-Wert für dieses Feld einzugeben. Anscheinend, wenn Sie einen neuen Rekord oder das Pflanzen gewinnen wollen, liegt es in unserer Verantwortung, dem endgültigen Datum einen neuen Rekord hinzuzufügen. Weil Pflanze, dass Unkraut jetzt in einem einzigen Beispiel in dovіdniki gespeichert wird. Um den Namen zu ändern, reicht es aus, її tіlki in dovidnik zu ändern.

Іm'ya possilnogo obezhennya, Anruf, є speicherbar, es wird aus dem Präfix "FK_" gefaltet, dann gehen Sie ім'я tablesі і nach dem Zeichen des Zeichens іde ім'ya Felder, Yak fragen Sie nach der Kennung des Tisch-Dodnik .

IDDIFICATOR (ID) nennt das Innere der Ventile, Yake Vicoristov wird Tilki für Zv'yazkiv in Yak Zariga sein, in Bilshosti Vipadkiv, es gibt keine Reise zur Post, Vinosa, Vinics, Din Aufzeichnungen vom Arzt.

ALTER TABLE tbl ADD CONSTRAINT IM_ID FOREIGN KEY(Feld1, Feld2,…) REFERENCES table_address(Feld1, Feld2,…)
In diesem Fall ist in der Tabelle „table_domain“ der erste Repräsentationsschlüssel eine Kombination von Aufkleberfeldern (field1, field2, ...).

Okay, jetzt aktualisieren wir die Felder PositionID und DepartmentID mit den ID-Werten aus den Dokumenten. Laden Sie diese DML mit dem UPDATE-Befehl hoch:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Employees e
Wir staunen über das, was passiert ist, fragte Vykonavshi:

AUSWÄHLEN * VON Mitarbeitern

Das war's, die Felder PositionID und DepartmentID gefüllt mit unterschiedlichen Posads und anderen Identifikatoren sind jetzt in den Feldern Position und Abteilung in der Tabelle Employees nicht verfügbar, Sie können diese Felder sehen:

ALTER TABLE Mitarbeiter DROP COLUMN Position,Abteilung
Jetzt sieht unsere Tabelle so aus:

AUSWÄHLEN * VON Mitarbeitern

AUSWEIS Name Geburtstag Email Positions-ID Abteilungs-ID
1000 Iwanow II. NULL NULL 2 1
1001 Petrow P.P. NULL NULL 3 3
1002 Sidorow S.S. NULL NULL 1 2
1003 Andreev A.A. NULL NULL 4 3

Tobto. Als Ergebnis haben wir überweltliche Informationen gesammelt. Setzen Sie nun nach den Zahlen diese Variable, Sie können sie eindeutig benennen, Vicorist-Werte in den Tabellen-Dodniks:

SELECT e.ID,e.Name,p.Name PositionName,d.Name DepartmentName FROM Mitarbeiter e LEFT JOIN Abteilungen d ON d.ID=e.DepartmentID LEFT JOIN Positionen p ON p.ID=e.PositionID

Im Objektinspektor können wir alle Objekte aufnehmen, die für diese Tabelle erstellt wurden. Mit diesen Objekten können Sie verschiedene Manipulationen vornehmen, z. B. Objekte umbenennen und entfernen.

Es muss auch angegeben werden, dass der Tisch für sich selbst angefordert werden kann, tobto. kann rekursiv erzwungen werden. Für den Hintern fügen wir unserer Tabelle mit Spivrobitniks ein weiteres Feld ManagerID hinzu, da es auf den Spivrobitnik hinweist, dem dieser Spivrobitnik zugeordnet ist. Wir erstellen ein Feld:

ALTER TABLE Mitarbeiter ADD ManagerID int
Dieses Feld hat einen gültigen Wert von NULL, das Feld wird leer sein, da beispielsweise keine Supernumeratoren über dem Leerzeichen stehen.

Lassen Sie uns nun einen FOREIGN KEY in der Employees-Tabelle erstellen:

ALTER TABLE Mitarbeiter ADD CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Mitarbeiter(ID)
Lassen Sie uns nun ein Diagramm erstellen und staunen, wie wir die Verbindungen zwischen unseren Tabellen betrachten:

Durch meine Schuld kommt das Bild (die Tabelle Mitarbeiter ist mit den Tabellen Positionen und Abteilungen verknüpft und arbeitet auch an sich selbst):

Wir möchten sagen, dass die Schlüssel, die Sie senden, zusätzliche Optionen ON DELETE CASCADE und ON UPDATE CASCADE enthalten können, wie Sie darüber sprechen, wie Sie sich verhalten, wenn Sie einen Datensatz sehen oder aktualisieren, wie Sie ihn an die Add-on-Tabelle senden. Wenn diese Optionen nicht angegeben sind, können wir die ID in der Datumstabelle dieses Datensatzes nicht ändern, an den eine von der anderen Tabelle gesendet wird, sodass wir einen solchen Datensatz nicht aus dem Datum selbst sehen können, bis wir alle Zeilen sehen können die sich auf den gesamten Datensatz beziehen Nun, es ist neu in diesen Zeilen, um mehr Bedeutung hinzuzufügen.

Lassen Sie uns für das Beispiel die Tabelle aus den zugewiesenen ON DELETE CASCADE-Optionen für FK_Employees_DepartmentID neu erstellen:

DROP TABLE Mitarbeiter CREATE TABLE Mitarbeiter (ID int NOT NULL, Name nvarchar(30), Geburtstagsdatum, E-Mail nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARYKE ) REFERENCES Departments(ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positionen(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) )VALUES (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P.", "19831203",3,3,1003), (1002 ,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417",4,3,1000)
Wir haben gesehen, dass dies mit ID 3 aus der Abteilungstabelle durchgeführt wurde:

LÖSCHEN Abteilungen WO ID=3
Wenn Sie sich die Daten in der Tabelle "Mitarbeiter" ansehen:

AUSWÄHLEN * VON Mitarbeitern

AUSWEIS Name Geburtstag Email Positions-ID Abteilungs-ID Manager-ID
1000 Iwanow II. 1955-02-19 NULL 2 1 NULL
1002 Sidorow S.S. 1976-06-07 NULL 1 2 1000

Wie bei Bachimo ist es angesichts der 3. Tabelle der Mitarbeiter einfach so passiert.

Die Option ON UPDATE CASCADE verhält sich genauso, jedoch nur, wenn der Wert der ID aktualisiert wird. Wenn wir beispielsweise die ID des Werks in der Posad-Checkliste ändern, wird in diesem Fall die DepartmentID der Employees-Tabelle mit dem neuen ID-Wert aktualisiert, wie wir ihn in der Checkliste festgelegt haben. Ale, in diesem vipadka tse demonstrieren, nicht zu sehen, weil die ID-Spalte in der Departments-Tabelle sollte die IDENTITY-Option haben, damit wir die folgende Anfrage nicht angreifen können (ändern Sie die ID des Eintrags 3 in 30):

UPDATE Departments SET ID=30 WHERE ID=3
Golovne zrozumit die Essenz von Tsikh 2 Optionen ON DELETE CASCADE und ON UPDATE CASCADE. Ich zastosovuyu tsі optsії sogar selten und ich empfehle, gut nachzudenken, wie man in ein machbares obezhennya, tk, kommt. mit einem unbekannten Datensatz aus der Tabelle des Berichts kann dies zu großen Problemen führen und eine Lantzugsche Reaktion hervorrufen.

Notiz 3:

Berechtigt zum Hinzufügen/Ändern des IDENTITY-Werts SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- verhindert das Hinzufügen/Ändern des IDENTITY-Werts SET
Lassen Sie uns die Employees-Tabelle mit Hilfe des TRUNCATE TABLE-Befehls noch einmal aufräumen:

TRUNCATE TABLE Mitarbeiter
Ich wiederhole es noch einmal in diesen Daten und greife auf den vorderen INSERT-Befehl zurück:

INSERT Mitarbeiter (ID, Name, Geburtstag, Positions-ID, Abteilungs-ID, Manager-ID) WERTE (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidoriv S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

Wahrscheinlich

Im Moment sind uns noch ein paar weitere DDL-Befehle bekannt geworden:
  • Hinzufügen von IDENTITY zum Feld – ermöglicht das automatische Auffüllen des Felds (Feldname) für die Tabelle;
  • TABELLE ÄNDERN Tabellenname HINZUFÜGEN change_fields_with_characteristics – ermöglicht das Hinzufügen neuer Felder zur Tabelle;
  • TABELLE ÄNDERN Tabellenname DROP-SÄULE list_of_fields - ermöglicht es Ihnen, Felder aus Tabellen zu sehen;
  • TABELLE ÄNDERN Tabellenname EINSCHRÄNKUNG HINZUFÜGEN im'ya_obezhennya UNBEKANNTER SCHLÜSSEL(Felder) VERWEISE doc_table(fields) – ermöglicht es Ihnen, einen Link zwischen einer Tabelle und einer Doc-Tabelle zuzuweisen.

Andere Börsen – EINZIGARTIG, STANDARD, PRÜFEN

Mit Hilfe der EINZIGARTIGEN Bewässerung können Sie angeben, welchen Wert die Hautlinie in einem bestimmten Feld oder in einer Reihe von Bewässerungen einzigartig haben kann. Im Fall der Employees-Tabelle können Sie auch eine Grenze für das E-Mail-Feld setzen. E-Mail-Werte nur vorab merken, als wären sie noch nicht vergeben:

UPDATE Mitarbeiter SET Email=" [E-Mail geschützt]"WHERE ID=1000 UPDATE Mitarbeiter SET Email=" [E-Mail geschützt]" WHERE ID=1001 UPDATE Mitarbeiter SET Email=" [E-Mail geschützt]"WHERE ID=1002 UPDATE Mitarbeiter SET Email=" [E-Mail geschützt] WO ID=1003
Und jetzt können Sie das Feld der Obmezhennia-Einzigartigkeit anlegen:

ALTER TABLE Mitarbeiter ADD CONSTRAINT UQ_Employees_Email UNIQUE(E-Mail)
Jetzt kann der Korrespondent nicht dieselbe E-Mail mit einer Reihe von Spivrobitniks eingeben.

Der Austausch der Eindeutigkeit wird so genannt - zunächst gab das Präfix „UQ_“ den Namen der Tabelle und nach dem Zeichen der Unterteilung den Namen des Felds an, als ob der angegebene Austausch überlagert wäre.

Es scheint, dass die Kombination von Bewässerungen in den Reihen der Reihen in den Tabellen einzigartig ist, aber es ist möglich, sie einzulösen, durch wen:

ALTER TABLE Tabellenname ADD CONSTRAINT Austauschname UNIQUE(field1,field2,…)
Als zusätzliche Hilfe beim Hinzufügen zum DEFAULT-Boxfeld können wir den Wert für die Sperre so einstellen, dass er in der Dropdown-Liste angezeigt wird, sodass das Feld beim Einfügen eines neuen Datensatzes nicht erneut in der Liste der Felder der aufgeführt wird INSERT-Befehl. Sie können den gleichen Austausch ohne Zwischenhändler beim Zusammenklappen der Tische installieren.

Fügen wir ein neues Feld "Date to Received" zur Employees-Tabelle hinzu und nennen es HireDate. Nehmen wir an, dass der Wert zum Sperren dieses Felds das aktuelle Datum ist:

ALTER TABLE Mitarbeiter ADD HireDate Datum NOT NULL DEFAULT SYSDATETIME()
Wenn das HireDate bereits vorhanden ist, können Sie die folgende Syntax optimieren:

ALTER TABLE Mitarbeiter ADD DEFAULT SYSDATETIME() FOR HireDate
Hier habe ich den Namen der Obezhennya nicht eingegeben, weil in vipadku DEFAULT hatte ich eine Idee, dass es nicht so kritisch ist. Aber wenn Sie freundlich arbeiten, müssen Sie sich wohl nicht anstellen und nach einem normalen Namen fragen. Kämpfe so:

ALTER TABLE Mitarbeiter ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Wenn es vorher keine Anzeichen dafür gab, wird beim Hinzufügen zum Skin-Datensatz ein genaueres Datum in das Feld HireDate eingefügt.

Beim Hinzufügen eines neuen Eintrags wird automatisch auch das aktuelle Datum eingefügt, das können wir aber nicht explizit setzen. nicht in der Liste der stovptsіv angezeigt. Es wird auf der Bewerbung angezeigt, ohne Angabe des HireDate-Felds in der Übersetzung, der Wert, der hinzugefügt wird:

INSERT Mitarbeiter(ID,Name,E-Mail)VALUES(1004,N"Sergeev S.S."," [E-Mail geschützt]")
Lass uns nachsehen, was passiert ist:

AUSWÄHLEN * VON Mitarbeitern

AUSWEIS Name Geburtstag Email Positions-ID Abteilungs-ID Manager-ID Anstellungsdatum
1000 Iwanow II. 1955-02-19 [E-Mail geschützt] 2 1 NULL 2015-04-08
1001 Petrow P.P. 1983-12-03 [E-Mail geschützt] 3 4 1003 2015-04-08
1002 Sidorow S.S. 1976-06-07 [E-Mail geschützt] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [E-Mail geschützt] 4 3 1000 2015-04-08
1004 Sergejew S.S. NULL [E-Mail geschützt] NULL NULL NULL 2015-04-08

Die CHECK-Konvertierung wird in diesem Fall überprüft, wenn es notwendig ist, den in das Feld einzufügenden Wert zu ändern. Zum Beispiel setzen wir einen Austausch in das Personalnummernfeld, wie mi є іdidentifier svrobіtnik (ID). Nehmen wir zur Hilfe eines solchen Austauschs an, dass die Personalnummern und schuldigen Mütter von 1000 bis 1999 reichen:

ALTER TABLE Mitarbeiter ADD CONSTRAINT CK_Employees_ID CHECK(ID ZWISCHEN 1000 UND 1999)
Der Austausch wird so von selbst aufgerufen, erstens gibt es ein Präfix "CK_", dann benennen wir die Tabelle und den Namen des Feldes, dem Yak wird die Grenze auferlegt.

Lassen Sie uns versuchen, einen inakzeptablen Eintrag zur erneuten Überprüfung einzufügen, was der Austausch funktioniert (wir bitten um Entschuldigung):

INSERT Employees(ID,Email) VALUES(2000," [E-Mail geschützt]")
Und jetzt ändern wir den eingefügten Wert um 1500 und ändern den einzufügenden Datensatz:

INSERT Mitarbeiter(ID,E-Mail) WERTE(1500," [E-Mail geschützt]")
Sie können einen UNIQUE- und CHECK-Austausch auch ohne Angabe eines Namens erstellen:

ALTER TABLE Mitarbeiter ADD UNIQUE (E-Mail) ALTER TABLE Mitarbeiter ADD CHECK (ID ZWISCHEN 1000 UND 1999)
Aber es ist immer noch eine gute Übung und es ist besser, es vor eine klare Sicht zu stellen, weil damit wir später herausfinden können, was wichtiger sein wird, wird es notwendig sein, das Objekt zu zeigen und zu staunen, wofür wir antworten werden.

Mit einem guten Namen lassen sich viele Informationen über die Börse ohne Zwischenhändler an diesem Namen erkennen.

I, anscheinend können alle Börsen auf einmal erstellt werden, wenn die Tabellen kombiniert werden, aber es ist immer noch nicht möglich. Sehen wir uns die Tabelle an:

DROP TABLE Mitarbeiter
І Es ist möglich, її z usіma mit den erstellten Börsen mit einem Befehl CREATE TABLE neu zu erstellen:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME(), -- for DEFAULT i z(ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positionen(ID), CONSTRAINT UQ_Employees_Email UNIQUE (E-Mail), CONSTRAINT CK_Employees_ID CHECK (ID ZWISCHEN 1000 UND 1999)

INSERT Mitarbeiter (ID,Name,Geburtstag,E-Mail,PositionID,Abteilungs-ID)WERTE (1000,N"Ivanov I.I."","19550219"," [E-Mail geschützt]",2,1), (1001,N"Petrow P.P.","19831203"," [E-Mail geschützt]",3,3), (1002,N"Sidorov S.S.","19760607"," [E-Mail geschützt]",1,2), (1003,N"Andreev A.A.","19820417"," [E-Mail geschützt]",4,3)

Trochs über Indizes, die erstellt werden, wenn die Grenzen von PRIMARY KEY und UNIQUE kombiniert werden

Wie Sie auf dem Screenshot sehen können, wurden bei der Kombination der Grenzen PRIMARY KEY und UNIQUE automatisch Indizes mit denselben Namen (PK_Employees und UQ_Employees_Email) erstellt. Zum Sperren wird der Index für den Primärschlüssel als CLUSTERED erstellt und der Index als NONCLUSTERED aufgelöst. Varto sagt, dass das Verständnis des Clustered-Index nicht im US-DBMS liegt. Die Tabelle kann mehr als einen gruppierten (CLUSTERED) Index haben. CLUSTERED - bedeutet, dass die Datensätze der Tabelle nach diesem Index sortiert werden, sodass Sie sagen können, dass dieser Index direkten Zugriff auf alle Tabellendaten haben kann. Der Kopfindex der Tabelle. Wie soll ich sagen, rauer, Preisindex, an den Tisch schrauben. Cluster-Index - das ist eine noch schwierigere Aufgabe, die bei der Optimierung des Trinkens helfen kann. Denken Sie vorerst daran. Wenn wir sagen wollen, dass der Clustered-Victorist-Index nicht im Primärschlüssel ist, sondern für einen anderen Index, dann geben Sie die Option NONCLUSTERED an, wenn die Primärschlüssel mit dem Schuldigen kombiniert werden:

ALTER TABLE Tabellenname ADD CONSTRAINT Austauschname PRIMARY KEY NONCLUSTERED(field1,field2,…)
Beispielsweise ist der Austauschindex PK_Employees nicht geclustert, und der Austauschindex UQ_Employees_Email ist geclustert. Wir haben vor uns die folgende Obezhennya gesehen:

ALTER TABLE Mitarbeiter DROP CONSTRAINT PK_Employees ALTER TABLE Mitarbeiter DROP CONSTRAINT UQ_Employees_Email
Und jetzt erstellen wir sie mit den Optionen CLUSTERED und NONCLUSTERED:

ALTER TABLE Mitarbeiter ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Mitarbeiter ADD CONSTRAINT UQ_Employees_Email UNIQUE CLUSTERED (E-Mail)
Nachdem wir nun die Auswahl aus den Employees-Tabellen ausgewählt haben, sehen wir, dass die Datensätze hinter dem gruppierten Index UQ_Employees_Email sortiert wurden:

AUSWÄHLEN * VON Mitarbeitern

AUSWEIS Name Geburtstag Email Positions-ID Abteilungs-ID Anstellungsdatum
1003 Andreev A.A. 1982-04-17 [E-Mail geschützt] 4 3 2015-04-08
1000 Iwanow II. 1955-02-19 [E-Mail geschützt] 2 1 2015-04-08
1001 Petrow P.P. 1983-12-03 [E-Mail geschützt] 3 3 2015-04-08
1002 Sidorow S.S. 1976-06-07 [E-Mail geschützt] 1 2 2015-04-08

Wenn der gruppierte Index davor ein PK_Employees-Index war, wurden die Standarddatensätze nach dem ID-Feld sortiert.

Aber in diesem Fall ist es mehr als ein Hintern, der die Essenz des Cluster-Index zeigt, denn vor allem vor der Employees-Tabelle werden Sie aufgefordert, das ID-Feld einzugeben und in einigen Fällen kann es sein, dass Sie selbst als doc fungieren.

Für dovіdnikіv rufen Sie dotsіlno auf, Schob-Cluster-Index der Eingabeaufforderungen durch den Primärschlüssel, tk. Bei Anfragen fragen wir oft nach der Kennung des Treibers für otrimanna, zum Beispiel Benennung (Pflanze, Viddilu). Hier raten wir zu dem, was ich zuvor geschrieben habe, dass der Cluster-Index direkten Zugriff auf Zeilentabellen haben kann, und die Sterne sind klar, dass wir den Wert jeder Tabelle ohne zusätzliche Daten nehmen können.

Der Clustering-Index stagniert wahrscheinlich vor dem Gießen, was die häufigste Wahl ist.

Inodes in Tabellen erstellen einen Schlüssel durch ein Ersatz-Primärschlüsselfeld, die y-Achse dieser Spalte wird verwendet, um den Wert der CLUSTERED-Indexoption für den Ersatz-Primärschlüssel zu ändern und die Option NONCLUSTERED anzugeben, wenn der Ersatz-Primärschlüssel sortiert wird.

Wahrscheinlich

An dieser Stelle haben wir die üblichen Arten des Austauschs kennengelernt, am einfachsten werden sie durch einen Befehl wie „ALTER TABLE im'ya_table_ADD CONSTRAINT im'ya_obrazhennia...“ erstellt:
  • PRIMÄRSCHLÜSSEL- Primärschlüssel;
  • UNBEKANNTER SCHLÜSSEL- Nalashtuvannya zv'yazkіv ich kontrolliere die Daten von tіl_snostі;
  • EINZIGARTIG- ermöglicht es Ihnen, Einzigartigkeit zu schaffen;
  • ÜBERPRÜFEN- ermöglicht Ihnen, die Richtigkeit der Dateneingabe zu korrigieren;
  • STANDARD- ermöglicht Ihnen, den Wert für die Sperre festzulegen;
  • Beachten Sie auch, dass alle Einrichtungen durch einen siegreichen Befehl gesehen werden können. TABELLE ÄNDERN Tabellenname DROP-EINSCHRÄNKUNG im'ya_obezhennya".
Also sind wir oft auf diese Indizes gestoßen und haben die Konzepte von Cluster ( GRUPPELT) und Nicht-Cluster ( NICHT EINGESCHLOSSEN) Index.

Erstellung unabhängiger Indizes

Unter Autarkie arbeiten sie hier an den Indizes, da diese für den Austausch von PRIMARY KEY und UNIQUE angelegt sind.

Indizes auf dem Feld oder den Feldern können mit einem anstößigen Befehl erstellt werden:

CREATE INDEX IDX_Employees_Name ON Mitarbeiter(Name)
Auch hier können Sie die Optionen CLUSTERED, NONCLUSTERED, UNIQUE angeben, und Sie können auch die direkte Sortierung des Skin-umschlossenen Feldes ASC (durch Sperren) oder DESC angeben:

EINZIGARTIGEN NICHT EINGESCHLOSSENEN INDEX ERSTELLEN UQ_Employees_EmailDesc ON Mitarbeiter (E-Mail DESC)
Unter der Stunde der Erstellung eines nicht gruppierten Index kann die Option NONCLUSTERED zugelassen werden, weil funktioniert nicht auf uvazі für umovchannyam, hier wird einfach nicht gezeigt, um die Position der Optionen CLUSTERED und NONCLUSTERED im Befehl anzugeben.

Sie können den Index mit dem offensiven Befehl anzeigen:

DROP INDEX IDX_Employees_Name ON Mitarbeiter
Einfache Indizes können wie ein Index im Kontext des CREATE TABLE-Befehls erstellt werden.

Zum Beispiel kann ich die Tabelle noch einmal sehen:

DROP TABLE Mitarbeiter
І es ist auflösbar її mit der Erstellung von Austauschen und Indizes mit einem CREATE TABLE-Befehl:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDATE DEFAULT ), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID ), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positionen(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Mitarbeiter(ID), CONSTRAINT UQ_Employees_Email UNIQUE(Email), CONSTRAINT CK_Employees_ID CHECK(ID BETWEEN 1000 AND 1999_DXName), ))
Nasamkіnets wird in die Tabelle unserer spіvrobіtnikіv eingefügt:

INSERT Mitarbeiter (ID,Name,Geburtstag,E-Mail,PositionID,AbteilungsID,ManagerID)WERTE (1000,N"Ivanov I.I."","19550219"," [E-Mail geschützt]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [E-Mail geschützt]",3,3,1003), (1002,N"Sidoriv S.S.","19760607"," [E-Mail geschützt]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [E-Mail geschützt]",4,3,1000)
Zusätzliche varto geben an, dass Sie vor dem Nicht-Cluster-Index den Wert nach dem zusätzlichen Eintrag von їх in INCLUDE einschließen können. Tobto. In diesem Fall soll der INCLUDE-Index ein gruppierter Index sein, aber jetzt ist es nicht der Index der Anhänge an die Tabelle, sondern die erforderlichen Werte werden an den Index angehängt. Offensichtlich können solche Indizes auch die Produktivität des Trinkens pro Auswahl (SELECT) erhöhen, da alle Felder im Index aufgelistet sind und Sie die Tabelle im Index möglicherweise nicht nachschlagen müssen. Ale ce trägt natürlich zum Index bei, weil Die Werte der übertragenen Felder werden im Index dupliziert.

Virizka von MSDN. Allgemeine Befehlssyntax zum Sortieren von Indizes

ERSTELLE [EINZIGARTIG] [CLUSTERED | NICHT EINGESCHLOSSEN] INDEX Indexname EIN (Spalte [ ASC | DESC ] [ ,...n ]) [ INCLUDE (Spaltenname [ ,...n ]) ]

Wahrscheinlich

Indizes können die Sicherheit der Datenauswahl (SELECT) ändern, aber Indizes können die Sicherheit von Datenänderungstabellen ändern, weil Nach einer Skin-Modifikation des Systems müssen alle Indizes für eine bestimmte Tabelle erneut erstellt werden.

Bazhano im Hauttyp kennt die optimale Lösung, die goldene Mitte, die Effizienz des Vibrierens und die Modifikation dieser Felsbrocken auf dem flachen Fluss. Die Strategie zum Erstellen von Indizes und deren Menge kann von verschiedenen Faktoren abhängen, beispielsweise werden die Daten in den Tabellen häufig geändert.

Visnovok shodo DDL

Wie Sie sehen können, ist die DDL-Sprache nicht so kohärent, wie es auf den ersten Blick sein könnte. Hier konnte ich praktisch alle Hauptkonstruktionen zeigen, die mit allen drei Tischen arbeiten.

Golovne - verstehen Sie die Essenz und die Reshta-Praxis.

Viel Glück bei der Bewältigung des Reiches des wunderbaren Films unter dem Namen SQL.

SQL ist die Abkürzung für die Structured Query Language. SQL basiert auf relationaler Algebra und wurde speziell für die Anbindung an relationale Datenbanken entwickelt.

SQL є, persh für alles, informative und logische Mine, anerkannt für die Beschreibung von Spardaten, deren Analyse und Änderung. SQL ist nicht meine Programmierung. Auf einmal über diese spezifischen Implementierungen des Films, Ton, gehören verschiedene prozedurale Erweiterungen.

Mova SQL є sukupnіstyu operatorіv, yakі kann in Chotiri-Gruppen unterteilt werden:

  • DDL (Data Definition Language) - Datendefinitionsoperatoren
  • DML (Data Manipulation Language) - Datenmanipulationsoperatoren
  • DCL (Data Control Language) - Operatoren für den Zugriff auf Daten
  • TCL (Transaction Control Language) - Transaktionsverwaltungsoperatoren

SQL ist von mir standardisiert. Standard-SQL wird vom ANSI-Normenkomitee (American National Standards Institute) verwaltet, anscheinend ANSI-SQL genannt.

Viele DBMS-Entwickler haben die SQL-Fähigkeiten erweitert, indem sie den Anweisungen zusätzliche Operatoren hinzugefügt haben. Zur Umsetzung zusätzlicher Funktionen oder zur Vereinfachung der Umsetzung einfacher Operationen sind zahlreiche Erweiterungen notwendig. Ich möchte oft mehr korisnі stinken, tsі razshirennya pri'yazanі zu sevnoї DBMS ist selten podtremuyuyutsya mehr nizh ein rozrobnik. Alle großen DBMSs und Navit Ti, als ob sie expandieren könnten, unterstützen ANSI SQL (eine größere und kleinere Welt). Okremі-Implementierungen, um die Eigennamen zu tragen (PL-SQL, Transact-SQL usw.). Transact-SQL (T-SQL) ist Microsofts Implementierung von SQL Movie, wie es bekannt ist, geheim, und SQL Server.

Fragen Sie nach einer Auswahl von Daten (SELECT-Anweisung)

SELECT ist die häufigste SQL-Anweisung. Vі Zuweisungen der Auswahl von Informationen aus der Tabelle. Um dem SELECT-Operator zu helfen, nehmen Sie Daten aus den Tabellen, Sie müssen mindestens zwei Wörter angeben - was Sie auswählen möchten und die Sterne.

Ausgewählte okremih stoptsiv

WÄHLEN

VON Produkt

Beim schwebenden Operator wird die SELECT-Anweisung ausgewählt, um eine Spalte unter dem Namen Beschreibung aus der Produkttabelle auszuwählen. Im'ya stovptsya, shokaєtsya, zazuєєєєєДєєєєєєєєі ініні ініні das Schlüsselwort SELECT, und das Schlüsselwort 'FROM' zeigt auf der Tabelle, s für die die Daten ausgewählt wurden.

Führen Sie die folgenden Schritte aus, um diesen Test in Management Studio durchzuführen:

Auswahl der Anzahl von stovptsiv

Für die Auswahl aus der Tabelle der Anzahl der Einträge wird dieselbe SELECT-Anweisung ausgewählt. Vіdminnіst polagaє darin ist es nach dem Schlüsselwort SELECT notwendig, durch wen die Anzahl der Namen der Stovptsіv anzugeben.

SELECT, auf Lager

VON Produkt

Auswahl aller Artikel

Es ist möglich, eine Auswahl der wichtigsten Einträge auszuwählen (eine Zahl pro Zahl), mit Hilfe des SELECT-Operators können Sie alle Einträge anfordern, ohne dass sich eine davon überschneidet. Für welche Ersetzung der Namen des stovptsiv wird das Gruppensymbol "zirochka" (*) eingefügt. Tse rauben auf diese Weise.

WÄHLEN *

VON Produkt

Daten sortieren

Als Ergebnis der Auswahl werden die Daten in der Reihenfolge angezeigt, in der der Gestank in den Tabellen steht. Zur genauen Sortierung der Ausgewählten wird zusätzlich zur SELECT-Anweisung die Proposition ORDER BY verwendet. In diesen Vorschlägen wird es durch den Namen eines oder mehrerer stovptsiv angegeben, für die es notwendig ist, die Ergebnisse zu sortieren. Schau dir den nächsten Hintern an.

VON Produkt

BESTELLEN SIE ÜBER InStock

Daher ist es identisch mit dem vorherigen, mit einem Hinweis auf die Proposition ORDER BY, da es das DBMS anweist, die Daten entsprechend dem Wachstum des Werts der InStock-Spalte zu sortieren.

Sortieren nach kіlkom stovptsami

Um nach der Anzahl der Spalten zu sortieren, geben Sie einfach ihre Namen durch wen ein. Für den anstößigen Code werden drei Wörter ausgewählt, und das Ergebnis wird nach zweien sortiert - zuerst nach der Nummer und dann nach dem Namen.

WÄHLEN Sie IdProd, , InStock

VON Produkt

BESTELLUNG DURCH InStock,

Es ist wichtig zu verstehen, dass beim Sortieren nach Anzahl der Spalten die Sortierreihenfolge mit den Werten in der Zeile identisch ist. Mit anderen Worten, beim Lagerbestand werden die Produkte nur so lange nach der Beschreibungsspalte sortiert, wie es Zeilen mit denselben InStock-Werten gibt. Wenn der Wert der Spalte InStock nicht übereinstimmt, werden die Werte der Spalte Beschreibung nicht sortiert.

Direkte Sortierung einchecken

Der ORDER BY-Vorschlag kann auch in absteigender Reihenfolge sortiert werden. Dafür müssen Sie das Schlüsselwort DESC angeben. Im offensiven Hintern sind die Produkte nach Menge sortiert, in der unteren Reihenfolge, plus nach dem Namen des Produkts.

WÄHLEN Sie IdProd, , InStock

VON Produkt

BESTELLEN NACH InStock DESC

Das Schlüsselwort DESC wird nur bis zum Anfang verwendet, nachdem es angegeben wurde. Für den Vorderschaft wurde das Schlüsselwort DESC für den Lagerbestand angegeben, nicht für die Beschreibung. In dieser Reihenfolge wird die Spalte „InStock“ in der Reihenfolge der Änderung sortiert und die Spalte „Description“ in aufsteigender Reihenfolge (als Standardwert übernommen).

Transact-SQL(wie es heißt T-SQL) Datenbank ( Datenbank) prozedurale Sprachprogrammierung, die Monopol sein sollte Microsoft und siegreich ein SQL Server.

Die prozedurale Sprache bula wurde entwickelt, um die Möglichkeiten zu erweitern SQL mit der Möglichkeit einer guten Integration mit SQL. Einige Funktionen hinzugefügt, wie lokale Änderungen und Verarbeitung von Zeilen/Daten. Funktionen zur Sprachförderung Turing-vollständig (**).

Der Gestank wird auch verwendet, um Verfahren zum Speichern aufzuschreiben: Ein Codefragment, das sich auf dem Server befindet, verwaltet faltbare Geschäftsregeln, die bei reinen satzbasierten Operationen einfach oder unmöglich zu verwalten sind.

A Turing abgeschlossen System bedeutet ein System, in dem ein Programm geschrieben werden kann, das eine Antwort findet (allerdings ohne Garantien bezüglich Laufzeit oder Speicher).

2- Blick auf Transact-SQL

T-SQL organisiert nach Befehlsblöcken, kann ein Befehlsblock in einen anderen Befehlsblock verschachtelt werden, ein Befehlsblock, der von beginnt START und enden mit ENDE Im Block gibt es viele Befehle, und im Kreml gibt es Befehle, einzeln, mit einem Punkt (;).

Blockstruktur:

BEGIN – Variablen deklarieren – T-SQL-Anweisungen END;

3- Beginnen Sie mit SQL Server Management Studio

In diesem Artikel zeige ich Ihnen die Programmierung SQL Server, auf einem visuellen Instrument SQL Server Management Studio.

Diese Abbildung SQL Server Management Studio Wenn offen. Є deakі Hintern Datenbank wenn du neu installierst SQL Server.

Oder Sie können erstellen LearningSQL , eine kleine Datenbank SQL Server An Webseite .

Klicken Sie mit der rechten Maustaste Datenbank, wählen "Neue Abfrage" schob vіdkriti vіkno für tsgogo Datenbank.

Bist du bereit zu programmieren Datenbank H SQL Server.

Ein einfacher Block von Befehlen ist unten gezeigt, überprüfen Sie die Summe von 2 Zahlen:

Begin -- Eine Variable deklarieren Declare @v_Result Int; -- Deklarieren einer Variablen mit einem Wert von 50 Declare @v_a Int = 50; -- Eine Variable mit dem Wert 100 deklarieren Declare @v_b Int = 100; -- Konsole ausdrucken (für Entwickler). -- Verwendung von Cast zum Konvertieren von Int in String -- Verwendung von +-Operator zum Verketten von 2 Strings Print "v_a= " + Cast(@v_a as varchar(15)); -- Konsole ausdrucken Print "v_b=" + Cast(@v_b as varchar(15)); -- Summenmenge @v_Result = @v_a + @v_b; -- Konsole ausdrucken Print "v_Result=" + Cast(@v_Result as varchar(15)); Ende;

Klicken Sie auf das Zeichen, um den Befehlsblock auszuführen, und staunen Sie über das Ergebnis SQL Server Management Studio :

4- Grundlegende Transact-SQL-Befehle

4.1- If-elsif-else-Befehl

Syntax:

WENN DANN Arbeit 1; ENDE WENN;

BEGIN – Deklariert eine Variable DECLARE @v_Option integer; DECLARE @v_Action varchar(30); SET @v_Option = 2; IF @v_Option = 1 SET @v_Action = "Ausführen"; ELSE IF @v_Option = 2 BEGIN PRINT "Im Block else if @v_Option = 2"; SET @v_Action = "Sicherung"; ENDE; ELSE IF @v_Option = 3 SET @v_Action = "Stop"; ELSE SET @v_Action = "Ungültig"; - Protokollierung PRINT "@v_Action=" + @v_Action; ENDE;

Das Ergebnis des Starts des Kolbens:

4.2- WHILE-Schleife

Am Kreislauf WÄHREND Du kannst gewinnen BRECHEN um die Schleife zu verlassen.
Siegesteam WEITERMACHEN um Befehle im Block zu überspringen WÄHREND und niedriger, um einen neuen Zyklus zu erstellen.

< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time loop execute, x increases by 1. SET @x = @x + 1; -- Every time loop execute, x decreases by 2. SET @y = @y - 2; PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); END; -- Write log PRINT "x,y = " + CAST(@x AS varchar(10)) + ", " + CAST(@y AS varchar(10)); END;

Das Ergebnis des Starts des Kolbens:

BEGIN - 2 Variablen x und y deklarieren DECLARE @x integer = 0; DECLARE @y ganze Zahl = 10; -- Step DECLARE @step integer = 0; -- Während @x< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time the loop execute, x increases by 1 SET @x = @x + 1; -- Every time the loop execute, y decreases by 1 SET @y = @y - 2; PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); -- If @x >2 dann verlasse die Schleife -- (Obwohl die Bedingungen in WHILE immer noch wahr sind). WENN @x > 2 BRUCH; ENDE; -- Protokoll schreiben PRINT "x,y = "+ CAST(@x AS varchar(10)) + "," + CAST(@y AS varchar(10)); ENDE;

Das Ergebnis des Starts des Kolbens:

Team WEITERMACHEN ermöglicht es Ihnen, die Befehle zu überspringen, die niedriger sind (in der Schleife), um eine neue Schleife zu beginnen.

BEGIN - Deklarieren von 2 Variablen x und y. DECLARE @x integer = 0; DECLARE @y ganze Zahl = 10; -- Step DECLARE @step integer = 0; -- Während @x< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time the loop execute, x increases by 1 SET @x = @x + 1; -- Every time the loop execute, x decreases by 2 SET @y = @y - 2; -- If @x < 3 , then skip the statements below -- And continue new step IF @x < 3 CONTINUE; -- If @x < 3 the statements below "CONTINUE" will not be run. PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); END; -- Write log PRINT "x,y = " + CAST(@x AS varchar(10)) + ", " + CAST(@y AS varchar(10)); END;

5- Fügen Sie der Anfrage vor der Änderung Daten hinzu

Sie können den Wert der Anfrage ändern. Staunen Sie über Illustrationen Hintern:

Assign_Value_Example

BEGIN - Deklarieren einer Variablen @v_Emp_ID DECLARE @v_Emp_ID integer = 1; DECLARE @v_First_Name varchar(30); DECLARE @v_Last_Name varchar(30); DECLARE @v_Dept_ID ganze Zahl; -- Variablen Werte zuweisen SELECT @v_First_Name = emp.First_Name, @v_Last_Name = emp.Last_Name, @v_Dept_Id = emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_ID = @v_Emp_Id; -- Werte ausdrucken PRINT " @v_First_Name = " + @v_First_Name; DRUCKEN " @v_Nachname = " + @v_Nachname; PRINT "@v_Dept_Id = " + CAST(@v_Dept_ID AS varchar(15)); ENDE;

Das Ergebnis des Starts des Kolbens:

6- Siehe insbesondere Daten in T-SQL

6.1- Daten anzeigen TABELLE (Implizite Ansicht)

T-SQL Ich erlaube Ihnen, Änderungen mit dem Erscheinen von Daten zu äußern TISCH.

Syntax:

Definieren Sie eine Variable vom Typ TABLE. -- HINWEIS: Konsultationen können auch Gegenstand weiterer Konsultationen sein (siehe Beispiel). Deklarieren Sie @v_variable_name TABLE(Column1 DataType1, Column2 DataType2);

Zuordnung des Parameters zum Typ TABLE. Deklarieren Sie @v_Table TABLE (Vorname Varchar(30), Nachname Varchar(30), Dept_ID Integer, Salary Float); -- Helfer können auch Helfer annehmen: Declare @v_table TABLE (Product_ID Integer IDENTITY(1,1) PRIMARY KEY, Product_Name DataType2 NOT NULL Default ("Unknown"), Price Money CHECK (Price< 10.0));

Beispiel: Daten bis zur Änderung einfügen TISCH.

Sie können auch aktualisieren aktualisieren in klarer Sicht TISCH:

Löschen in klarer Sicht TISCH:

Anfrage siehe Änderungsdaten TISCH:

BEGIN DECLARE @v_Emp_ID integer = 1; -- Deklarieren Sie eine Variable vom Typ TABLE. DECLARE @v_Table TABLE (First_Name varchar(30), Last_Name varchar(30), Dept_Id integer, Salary float DEFAULT 1000); -- Variante INSERT INTO-Anweisung zum Einfügen von Daten in @v_Table. INSERT INTO @v_Table (Vorname, Nachname, Abteilungs-ID) SELECT emp.First_Name, emp.Last_Name, emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_ID< 4; -- Update @v_Table UPDATE @v_Table SET Salary = Salary + 100 WHERE First_name = "Susan"; -- Query @v_Table. SELECT * FROM @v_Table; END;

Das Ergebnis des Starts des Kolbens:

6.2- Datenansicht TABELLE (Explizite Ansicht)

T-SQL Ich erlaube dir, die Veränderung von vidi zu äußern TISCH auf indirektem Wege. Der Name der Änderung beginnt mit # .

BEGIN – Link zum Artikel SELECT INTO, bevor Daten in #v_My_Table eingefügt werden. SELECT emp.First_Name, emp.Last_Name, emp.Dept_Id, 1000 Salary INTO #v_My_Table FROM Employee Emp WHERE Emp.Emp_ID< 4; -- Update #v_My_Table UPDATE #v_My_Table SET Salary = Salary + 100 WHERE First_name = "Susan"; -- Query #v_My_Table. SELECT * FROM #v_My_Table; END;

Das Ergebnis des Starts des Kolbens:

7- Cursor

7.1- Was ist ein Cursor?

Mauszeiger ce Strukturierungstyp der Änderung, der es Ihnen ermöglicht, Daten in Aufkleberzeilen zu verarbeiten. Anzahl der Zeilen, die in die Reihenfolge der Anforderung fallen sollen. Beim Prozess der Verarbeitung und Manipulation Mauszeiger durch die lederne Datenreihe. Diese Datenzeile wird durch den Cursor angezeigt. Durch Ändern des Cursors können Sie auf alle Datenzeilen zugreifen.

7.2- Sprechen Sie den Cursor

Syntax

ISO-Syntax DECLARE Cursorname [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR ( READ ONLY | UPDATE [ OF Spaltenname [ ,...n ] ] ) ] ] [ ] -- Erweiterte Transact-SQL-Syntax DECLARE Cursorname CURSOR [ LOCAL | GLOBAL] [FORWARD_ONLY | BLÄTTERN] [STATISCH | SCHLÜSSELSATZ | DYNAMISCH | FAST_FORWARD] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement [ FOR UPDATE [ OF Spaltenname [ ,...n ] ] ] [;]

7.3- Stock mit Cursor

USE learningsql; BEGIN -- -- Eine Variable deklarieren: DECLARE @v_Emp_ID integer; DECLARE @v_First_Name varchar(50); DECLARE @v_Last_Name varchar(50); DECLARE @v_Count Integer; -- Deklarieren Sie einen CURSOR. DECLARE My_Cursor CURSOR FOR SELECT Emp.EMP_ID, Emp.FIRST_NAME, Emp.LAST_NAME FROM Employee Emp WHERE Emp.EMP_ID< 3; -- Open Cursor OPEN My_Cursor; -- Move the cursor to the first record. -- And assign column values to variables. FETCH NEXT FROM My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; -- The FETCH statement was successful. (@@FETCH_STATUS = 0) WHILE @@FETCH_STATUS = 0 BEGIN PRINT "First Name = "+ @v_First_Name+" / Last Name = "+ @v_Last_Name; -- Move to the next record. -- And assign column values to the variables FETCH NEXT FROM My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; END -- Close Cursor. CLOSE My_Cursor; DEALLOCATE My_Cursor; END;

Das Ergebnis des Starts des Kolbens:

7.4- Der Streichholzkolben zum Cursor

USE learningsql; BEGIN -- -- Eine Variable deklarieren: DECLARE @v_Emp_ID integer; DECLARE @v_First_Name varchar(50); DECLARE @v_Last_Name varchar(50); -- Eine Cursor-Variable deklarieren. DECLARE @My_Cursor CURSOR; -- Select-Anweisung für CURSOR-Variable setzen. Setzen Sie @My_Cursor = CURSOR FOR SELECT Emp.EMP_ID, Emp.FIRST_NAME, Emp.LAST_NAME FROM Employee Emp WHERE Emp.EMP_ID< 3; -- Open Cursor OPEN @My_Cursor; -- Move the cursor to the first line. -- And assign column values to the variables. FETCH NEXT FROM @My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; -- The FETCH statement was successful. (@@FETCH_STATUS = 0) WHILE @@FETCH_STATUS = 0 BEGIN PRINT "First Name = "+ @v_First_Name+" / Last Name = "+ @v_Last_Name; -- Move to the next record. -- And assign column values to the variables. FETCH NEXT FROM @My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; END -- Close Cursor. CLOSE @My_Cursor; DEALLOCATE @My_Cursor; END;

Die Ergebnisse führen das Beispiel aus:

8- Ausschalten

Beim Programmieren T-SQL Sie haben möglicherweise eine Entschuldigung für Ihren Code, z. B. eine Entschuldigung, wenn Sie ihn auf 0 setzen. Wenn Sie andernfalls eine Entschuldigung einfügen, wenn Sie einen Datensatz einfügen, duplizieren Sie den Wert mit dem Primärschlüssel, ... Sie brauchen um diese Situation zu korrigieren.

Bewundern Sie einen einfachen Hintern, wie man eine Begnadigung korrigiert, wenn sie um 0 fallen gelassen wurde.

TryCatch_Example

USE learningsql; BEGIN -- -- Deklarieren Sie eine Variable: DECLARE @v_a float = 20; ERKLÄRE @v_b Float = 0; DECLARE @v_c Float; DECLARE @v_Error_Number ganze Zahl; -- Schreiben Sie BEGIN TRY .. END TRY für Chatter-Fehler. -- So erhalten Sie Begnadigungen für diesen Block -- Sie springen zum Block BEGIN CATCH .. END CATCH. BEGIN TRY --- PRINT "@v_a=" + CAST(@v_a AS varchar(15)); PRINT " @v_b = " + CAST(@v_b AS varchar(15)); -- Dividiere durch 0 Fehler wegen Yoga. SET @v_c = @v_a / @v_b; -- Unterhalb dieser Zeile wird nicht ausgeführt. -- Programmsprung zum Block BEGIN CATCH .. END CATCH PRINT "@v_c=" + CAST(@v_c AS varchar(15)); END TRY -- BEGIN CATCH .. END CATCH direkt hinter BEGIN TRY .. END TRY platziert . BEGIN CATCH - Fehlernummer. SET @v_Error_Number = FEHLER_NUMMER(); -- Fehlernummer ausdrucken: PRINT "Error Number: " + CAST(@v_Error_Number AS varchar(15)); -- Fehlermeldung: PRINT "Fehlermeldung: " + ERROR_MESSAGE(); -- Vorderer Fehler: PRINT "Error Severity: " + CAST(ERROR_SEVERITY() AS varchar(15)); -- Fehlerstatus: PRINT "Fehlerstatus: " + CAST(ERROR_STATE() AS varchar(15)); - Zeilennummer: PRINT "Fehlerzeile: " + CAST(ERROR_LINE() AS varchar(15)); -- Name der Prozedur (oder Funktion oder Trigger). PRINT "Fehlerprozedur: " + ERROR_PROCEDURE(); ENDE FANGEN; ENDE;

Ergebnis

Informationen zur Entschuldigung:

Funktion Beschreibung
FEHLERNUMMER() Schalten Sie die Begnadigung Nummer.
FEHLERMELDUNG() Lassen Sie mich Ihnen von der Begnadigung erzählen. Benachrichtigungen enthalten den von den Parametern angegebenen Wert, z. B. das Datum, den Namen des Objekts oder die Stunde.
ERROR_SEVERITY() Wenden Sie den Riven der Ernsthaftigkeit der Begnadigung ab.
ERROR_STATE() Schalten Sie den Begnadigungsstatus um.
ERROR_LINE() Verwandle die Zeilennummer in den Begnadigungscode
ERROR_PROCEDURE() Namen drehen gespeicherte Prozedur oder Abzug, de wurde Verzeihung

9- Funktion

Yak Verfahren(Verfahren), Funktion(Funktion) - Befehle T-SQL, um die Hauptrolle zu ändern In der Ansicht des Vorgangs rotiert die Funktion den Wert entsprechend der Wochenstunde.
Die Funktion selbst kann gespeichert werden Datenbank beim Anblick Vorgang speichern.

Ordnersyntax Funktion(Funktionen).

Funktionsname: -- Argument: -- Modus: INPUT, OUTPUT, Standard-INPUT -- Datentyp: CREATE FUNCTION ([ @argument1 datatype1 , @argument2 datatype2 , ... ]) RETURNS datatype AS BEGIN -- Variablen deklarieren -- Statements -- Rückgabewert END;

Funktion mit Parametern CREATE FUNCTION Sum_Ab(a Integer, b Integer) RETURNS Integer AS Write return a + b; Ende; -- Funktion ohne Parameter CREATE FUNCTION Get_Current_Datetime() RETURNS Date AS Begin return CURRENT_TIMESTAMP; Ende;

Drop-Funktion:

Drop-Funktion DROP-FUNKTION ; -- Für Hintern: DROP FUNCTION My_Function;

Hinternfaltfunktionen:

Hintern deiner ersten Hand Funktion(Funktionen) h SQL Server:

  1. Erstellen Sie eine Funktion
  2. Kompilierfunktion
  3. Funktionsstart

Speichern Sie die Funktion - Sobald sie implementiert ist, ändern Sie sie in der Reihenfolge, erstellen Sie sie für das Neue. WENN OBJECT_ID(N"dbo.My_Sum", N"FN") NICHT NULL IST DROP FUNCTION My_Sum; GO CREATE FUNCTION My_Sum (@p_a float, @p_b float) RETURNS float AS BEGIN -- Variablentyp von Float deklarieren DECLARE @v_C float; -- Wert für v_C zuweisen SET @V_C = @p_A + @p_B; -- Rückgabewert. ZURÜCK @v_C; ENDE;

Klicken Sie auf das Zeichen, um die Funktion abzuschließen.

Die Funktion, wie Sie sie erstellt haben, ist eine einfache Funktion, die einen Skalarwert dreht. Sie können darüber reden, wie es weitergeht SQL Server Management Studio:

Sie können gegen die Funktion protestieren, indem Sie mit der rechten Maustaste drücken, wählen Sie:

  • Skriptfunktion als -> SELECT to -> New Query Editor Window

Aktivieren Sie das Testfeld, Sie können den Parameterwert ändern:

Ändern Sie den Parameterwert und klicken Sie auf den Start.

Funktionen können das Schicksal des Teams übernehmen WÄHLEN.

SELECT acc.account_id, acc.cust_id, acc.avail_balance, acc.pending_balance, dbo.MY_SUM(acc.avail_balance, acc.pending_balance) balance FROM account acc;

Das Ergebnis der SQL-Abfrage:

10- Verfahren

Befehlsgruppe T-SQL, die in der Prozedur (Prozedur) gewählt werden können, damit Sie die Möglichkeit der Vikonnanny, der Vereidigung, der Sicherheit, der Datensicherheit und der Brillanz der Entwicklung erhöhen können.

Prozeduren können gespeichert werden Datenbank Yak-Objekt y Datenbank bereit für den Wiederbesuch. Das Verfahren nennt sich Ansteckung Vorgang speichern. Schob Vikonati Vorgang speichern, unmittelbar nach dem Speichern Vorgang speichern, Gestank werden in kompiliert p-code das kann von der vikonnanny gefördert werden.

Prozeduren rotieren Werte nicht direkt als Funktionen ( Funktion). Ale, vielleicht Mutter 0 oder mehr Parameter zu verlassen.

Syntax für Schließvorgang:

Prozedurname: -- Argument: -- Modus: Eingabetyp: INPUT oder OUTPUT, Standard ist INPUT -- Datentyp: -- Hinweis: Optionale Parameter können in einem () oder unnötig eingegeben werden. VERFAHREN ERSTELLEN [ Argument1 Datentyp1 , Argument2 Datentyp2 , ... ] AS BEGIN -- Variablen deklarieren. - Anweisungen .. ENDE; -- ODER: VERFAHREN ERSTELLEN ([ argument1 datatype1 , argument2 datatype2 , ... ]) AS BEGIN - Variablen deklarieren. - Anweisungen .. ENDE;

Prozess ohne Parameter. CREATE-Prozedur Do_Something AS Begin - Deklarieren Sie hier Variablen. Deklarieren Sie @v_a Integer; -- Tun Sie hier etwas -- .... Ende; -- Prozedur mit Parametern -- 1 Eingabeparameter und 2 Eingabeparameter CREATE Prozedur Do_Something (@p_Param1 Varchar(20), @v_Param2 Varchar(50) OUTPUT) AS Begin -- Variablen deklarieren Declare @v_a Integer; - Tun Sie etwas hier. -- ...Ende;

Drop-Verfahren:

Drop-Verfahren: Drop-Verfahren

Kroki für das Vikonannya-Verfahren:

Ein Beispiel für einen Faltvorgang:

Get_Employee_Infos

Löschen Sie die Prozedur Get_Employee_Infos, falls sie bereits vorhanden ist. -- (Um die Neuerstellung zu ermöglichen) WENN OBJECT_ID(N"dbo.Get_Employee_Infos", N"P") NICHT NULL IST DROP PROCEDURE Get_Employee_Infos; GO – Prozedur mit Eingabeparameter: p_Emp_Id – Und Ausgabe: v_First_Name, v_Last_Name, v_Dept_Id. CREATE PROCEDURE Get_Employee_Infos (@p_Emp_Id integer , @v_First_Name varchar(50) OUTPUT , @v_Last_Name varchar(50) OUTPUT , @v_Dept_Id integer OUTPUT) – Verwenden Sie Cast, um Integer in String (Varchar) umzuwandeln. -- Verwenden Sie den +-Operator, um zwei Zeichenfolgen zu verketten. PRINT "Parameter @p_Emp_Id = " + CAST(@p_Emp_ID AS varchar(15)); -- -- Daten wie Tabelle abfragen und Variablen Werte zuweisen. -- SELECT @v_First_Name = Emp.First_Name, @v_Last_Name = Emp.Last_Name, @v_Dept_Id = Emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_Id = @p_Emp_Id; -- -- Log (Für Entwickler). - PRINT "Datensatz gefunden!"; DRUCKEN " @v_Vorname = " + @v_Vorname; DRUCKEN " @v_Nachname = " + @v_Nachname; PRINT "@v_Dept_Id=" + CAST(@v_Dept_Id AS varchar(15)); ENDE;

  • Markieren Sie a Speicherpunkt im Geschäft: Transaktionsname_des_Speicherpunkts speichern
  • @@transcount Variabel: Zugewiesene Transaktionsnummer zum Gewinnen (nicht mit Rollback oder Commit abgeschlossen) in der Streaming-Sitzung.
    1. Team Rollback tran + tên_của_savepoint helfen, die Transaktion auf die endgültige Position zurückzusetzen Speicherpunkt(ohne Wirkung abgeschlossener Transaktionen), Sperrungen (Sperren) werden entsperrt (unlock), wenn die Manipulation beendet ist Zurückrollen singende Elemente.
    2. Wenn eine explizite Transaktion aufgedeckt wird, muss neu verhandelt werden, dass sie verwirkt werden kann ( Zurückrollen) oder fixiert bei einer expliziten Ansicht ( begehen), obwohl nicht, Transaktion weiterhin Ressourcen ausleihen und ausleihen, die anderen helfen Transaktionen.
    3. Team Zurückrollen helfen, nur Transaktionen in der Datenbank zu erkennen ( Einfügung, löschen, aktualisieren). Andere Befehle, zB Attach, liegen nicht im Befehl Zurückrollen.

    Transaktion_Beispiel1

    BEGIN -- Welches Konto hat Konten ACCOUNT_ID = 1, 2 existiert tatsächlich in DB -- Tatsächlich können Sie Anweisungen schreiben, um vor Beginn der Transaktion zu prüfen -- -- Konto A (Bereits Garantien existieren in DB) DECLARE @Account_Id_A inte 1; -- Konto B (in der Datenbank existieren bereits Garantien) DECLARE @Account_Id_B integer = 2; -- Betrag DECLARE @Amount Float = 10; -- Bank DECLARE @Execute_Branch_Id integer = 1; - Transaktionsanzahl ausschreiben. -- Gültig, zu dieser Stunde gibt es keine Transaktion und PRINT "@@TranCount = " + CAST(@@Trancount AS varchar(5)); PRINT "Transaktion beginnen"; -- Transaktion beginnen BEGIN TRAN; - Fehler beim Trapping. VERSUCHEN BEGINNEN -- -- Subtrahieren Sie $10 von Konto A UPDATE Konto SET AVAIL_BALANCE = AVAIL_BALANCE - @Amount WHERE Account_Id = @Account_Id_A; -- -- Transaktionsinformationen in die Acc_Transaction-Tabelle einfügen. INSERT INTO ACC_TRANSACTION (TXN_DATE, FUNDS_AVAIL_DATE, TXN_TYPE_CD, ACCOUNT_ID, AMOUNT, EXECUTION_BRANCH_ID) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, "CDT", @Account_Id_A -- -- $10 zu Konto B hinzufügen. UPDATE Account SET @AVAIL_BALANCE = AVAIL_mount_BALANCE + Konto_BALANCE; Konto_BALANCE -- -- Fügen Sie Transaktionsinformationen in die Acc_Transaction-Tabelle ein. INSERT INTO ACC_TRANSACTION (TXN_DATE, FUNDS_AVAIL_DATE, TXN_TYPE_CD, ACCOUNT_ID, AMOUNT, EXECUTION_BRANCH_ID) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, "CDT", @Account_Id_B; -- Commit-Transaktion, IF @@ Trancount > 0 PRINT "Commit Transaction"; COMMIT TRAN; END TRY -- Wenn Sie wissen, dass der Pardons-Catch-Block ausgeführt wird. BEGIN CATCH PRINT "Error:" + ERROR_MESSAGE(); PRINT "Error -> Rollback Transaction"; IF @@ Trancount > 0 ROLLBACK TRAN;ENDE CATCH;ENDE;

    Das Ergebnis des Starts des Kolbens:

    12-Trigger

    Der Artikel über Trigger wurde hinzugefügt, Sie können sich die Anleitung zur Hilfe ansehen:

    • TODO-Link!