benutze Nordwind
/ *
T-SQL (Transactional – Structure Query Language) ist eine Kombination aus drei Sprachstrukturen.
- DDL: Data Definition Language
— CREATE <Objekttyp> <Objektname> (Builder)
— ALTER <Objekttyp> <Objektname> (Änderungen)
— DROP <ObjectType> <ObName> (Löscht)
- DML: Data Manipulation Language
— INSERT (Registrierungsanhänge)
— UPDATE (Vorhandenen Datensatz aktualisieren)
— LÖSCHEN (löscht vorhandenen Datensatz)
— SELECT (Gibt Datensätze gemäß den angegebenen Kriterien zurück.)
* /
– EINFÜGEN
– INSERT in <TableName> (<ColumnName, <ColumnName2>, <ColumnName>)
Werte (<Wert1>, <Wert2>, <Wert>)
INSERT in Produkte (ProductName, UnitPrice, UnitsInStock, Discontinued)
Werte (‚Dry Beans‘, 5,1000,0)
– UPDATE <Tabellenname> SET <CollonName1> = <Deger1>,
– <ColumnName2> = <Value2>,
– <ColumnName3> = <Deger3>
– WO <Kriterium>
UPDATE Produkte SET ProductName = ‚Frische Bohnen‘
WO ProductID = 78
– LÖSCHEN VON <Tabellenname> WO <Kriter>
DELETE FROM Products WHERE ProductID = 78
INSERT in Produkte (ProductName, UnitPrice, UnitsInStock, Discontinued)
Werte (‚Dry Beans‘, 5,1000,0)
– SELECT <ColumnName1>, <ColumnName2> FROM <TableName> WHERE <Kriterien IF IF>
– SELECT * FROM <Tabellenname> WHERE <Kriterien IF IF> (Gibt alle Spalten zurück ..)
SELECT * FROM Mitarbeiter
SELECT Vorname, Nachname von Mitarbeitern
– SELECT <Tabellenname>. <Spaltenname1>, FROM <Tabellenname>. <Spaltenname2> WHERE <Kriterium, falls vorhanden>
– Lang.
SELECT Products.ProductName, Products.UnitPrice FROM Products
WO UnitPrice> 100
– Produkte größer als 100 $ ..
– Name, Preis und Lagerinformationen von Produkten mit einem UnitsInStock-Wert unter 10.
SELECT Products.ProductName, Products.UnitPrice, Products.UnitsInStock FROM Products
WO UnitsInStock <10
/ *
- Entscheiden Sie, mit welchen Tabellen Sie arbeiten möchten.
- Entscheiden Sie, welche Spalte (n) Sie in dieser Tabelle (n) sehen möchten.
- Notieren Sie gegebenenfalls Ihre Kriterien.
* /
– Firmenname, Vertretername, Adresse, Stadt, Länderinformationen der Kunden in Brasilien
Wählen Sie Firmenname, Kontaktname, Adresse, Stadt, Land von Kunden
wobei Land = ‚Brasilien‘
– Kunden nicht in Brasilien
Wählen Sie Firmenname, Kontaktname, Adresse, Stadt, Land von Kunden
wo Land! = ‚Brasilien‘
– Meine Kunden in London oder Paris:
SELECT Kunden-ID, Firmenname, Adresse, Stadt VON Kunden
WO Stadt = ‚London‘ ODER Stadt = ‚Paris‘
– Kunden, die beide Eigentümer von HEM DE ContactTitle mit Wohnsitz in Mexiko sind D.F .:
SELECT CustomerID, CompanyName, ContactTitle, City FROM Kunden
WHERE City = ‚México D.F.‘ AND ContactTitle = ‚Eigentümer‘
– Namen und Preise meiner Produkte beginnend mit C.
SELECT ProductName, UnitPrice FROM Products
WO Produktname WIE ‚C%‘
– Nicht verkaufte Produktliste
– (Hinweis: Es wird eingestellt = 1)
SELECT ProductName, UnitPrice FROM Products
WO eingestellt = 1
– Mitarbeiter, deren Vorname (Vorname) mit dem Buchstaben ‚A‘ (Mitarbeiter) beginnt; Wenn wir Name, Nachname und Geburtsdatum sehen möchten:
SELECT Vorname, Nachname, Geburtsdatum von Mitarbeitern
WO Vorname wie ‚A%‘
– Firmennamen meiner Kunden mit dem Namen „RESTAURANT“:
SELECT Firmenname VON Kunden
WO Firmenname WIE ‚% RESTAURANT%‘
– Namen und Preise aller Produkte von 50 bis 100 US-Dollar
SELECT ProductName, UnitPrice FROM Products
WO UnitPrice ZWISCHEN 50 UND 100
– Bestellungen (Orders), OrderID (OrderID) und OrderDate (OrderDate) zwischen dem 1. Juli 1996 und dem 31. Dezember 1996
SELECT OrderID, OrderDate FROM Orders
WO Bestelldatum ZWISCHEN ’01 / 07/1996 ‚UND ’31 / 12/1996‘
– Kunden, deren Land YA Spanien, entweder Frankreich oder Deutschland ist
SELECT Firmenname, Land FROM Kunden
WO Land = ‚Spanien‘ ODER Land = ‚Frankreich‘ ODER Land = ‚Deutschland‘
– Wenn wir ODER zu viel verwendet haben, können wir wie folgt schreiben.
SELECT Firmenname, Land FROM Kunden
WO Land IN („Spanien“, „Frankreich“, „Deutschland“)
– Negativ (NICHT IN)
SELECT Firmenname, Land FROM Kunden
WO Land NICHT IN (‚Spanien‘, ‚Frankreich‘, ‚Deutschland‘)
– Kunden, die ihre Faxnummer nicht kennen
SELECT CustomerID, CompanyName, Fax FROM Kunden
wobei Fax null ist
– ResultSet Sorting:
Ich sortiere meine Kunden nach Ländern:
SELECT Firmenname, Land FROM Kunden
BESTELLUNG NACH LAND ASC
– asc: Aufstieg (klein bis groß)
– desc: Abstammung (groß bis klein)
– Wir möchten meine Produkte vom teuersten zum billigsten sortieren, daher möchten wir den Produktnamen und den Preis:
SELECT ProductName, UnitPrice FROM Products
BESTELLUNG NACH UnitPrice DESC
– Lassen Sie meine Produkte von den teuersten bis zu den billigsten rangieren, aber zeigen Sie ihren Bestand von klein bis groß, also wollen wir den Produktnamen und den Preis:
SELECT ProductName, UnitPrice, UnitsInStock FROM Products
–WO können wir ProductName in LIKE ‚C%‘ schreiben.
ORDER BY UnitPrice DESC, UnitsInStock ASC
– AGGREGATE FUNCTIONS (Funktionen, die Werte zurückgeben. Wie viele Spalten in der Tabelle enthalten sind.)
SELECT COUNT (*) FROM Kunden
– Ich habe 91 Kunden ..
SELECT CategoryID, CategoryName FROM Categories
SELECT ProductName, CategoryID FROM Products
– Wie viele Produkte sind in Kategorie 1 ..?
SELECT COUNT (*) FROM Products
WHERE CategoryID = 1
–COUNT (<ColumnName>): Gibt zurück, wie oft die angegebene Spalte in ResultSet übergeben wurde.
– Wie viele verschiedene Länder exportiere ich ..?
SELECT COUNT (UNTERSCHIEDLICHES Land) VON Kunden
– UNTERSCHIEDLICH – Keine Wiederholung geben. 3 Mal anzeigen, wenn Deutschland 3 Mal passt.
– Welches sind diese Länder ..?
SELECT DISTINCT Country FROM Kunden
– DISTINCT: ResultSet (Warnung: ResultSet befindet sich auf dem RAM) filtert NUR Daten, indem EINER der sich wiederholenden Daten verwendet wird.
– Datenfilterung: TOP x
WÄHLEN SIE TOP 3 Firmenname VON Kunden
– Wenn ich die 5 teuersten Produkte sage
SELECT TOP 5 ProductName, UnitPrice FROM Products
BESTELLUNG NACH UnitPrice Desc
– Die Anzahl der Bestellungen meines Kunden mit ALFKI CustomerID ..?
– (Aufträge)
SELECT COUNT (*) FROM Orders
WHERE CustomerID = ‚ALFKI‘
– Um die Spalte zu benennen:
SELECT COUNT (*) AS Total Order FROM Orders
WHERE CustomerID = ‚ALFKI‘
SUM (<ColumnName>): Gibt die Summe der angegebenen Spalte in der Ergebnismenge zurück. Es kann nur in numerischen Spalten verwendet werden.
Gesamtkosten meiner Produkte:
SELECT SUM (UnitPrice) TotalPrice FROM Products
– Wie viel Umsatz hat mein Unternehmen bisher gemacht?
– Quelle: Tabelle mit Bestelldetails
–1-Rabatt (Wir ziehen Rabatte ab.
SELECT SUM (UnitPrice * Quantity * (1-Discount)) Gesamtumsatz FROM [Bestelldetails]
–AVG (<ColumnName>): Gibt den Durchschnitt der in ResultSet angegebenen Spalte zurück:
– Mein durchschnittlicher Produktpreis:
SELECT AVG (UnitPrice) Durchschnitt von Produkten
SELECT Vorname + “ + Nachname als AdSoyad FROM Employees
– MAX und MIN
SELECT MAX (UnitPrice) FROM Products
SELECT MIN (UnitPrice) FROM Products
– Der Name des teuersten Produkts
SELECT ProductName FROM Products
WHERE UnitPrice = (SELECT MAX (UnitPrice) FROM Products)
– Mindestzahlungsauftrag (Quelle: Bestelldetails)
SELECT MIN (UnitPrice * Quantity) FROM [Bestelldetails]
Die Basis bekommen:
KRAFT AUSWÄHLEN (3.2)
SELECT SQRT (81)
SELECT LEN (‚TRIAL‘)
– Der am längsten genannte Kunde (Anzahl der Buchstaben) unter meinen Kunden
WÄHLEN SIE MAX (LEN (Firmenname)) VON Kunden
SELECT GETDATE ()
JAHR AUSWÄHLEN (GETDATE ())
SELECT DAY (GETDATE ())
MONAT AUSWÄHLEN (GETDATE ())
– Name, Nachname und Alter meiner Mitarbeiter
SELECT Vorname, Nachname, JAHR (GETDATE ()) – JAHR (Geburtsdatum) als Yas FROM Employees
Foto von Mitarbeitern auswählen
– GROUP BY (Gruppierung)
– Wie viele Stücke wurden von welchem Produkt gekauft?
SELECT ProductID, SUM (Menge) FROM [Bestelldetails]
GRUPPE NACH ProductID
– Wenn Sie die Aggregatfunktion und eine normale Spalte in einer Abfrage verwenden; In dieser Abfrage muss es GROUP BY sein. Die mit GROUP BY zu verbindende Spalte sind alle Spalten mit Ausnahme der Aggregatfunktion.
SELECT ProductID, SUM (Menge) als Gesamtmenge FROM [Bestelldetails]
GRUPPE NACH ProductID
BESTELLUNG NACH Gesamtmenge DESC
– Wie viel habe ich insgesamt in welcher Reihenfolge verdient?
– Quellentabelle: Bestelldetails
– Gewünschte Spalten: OrderID und Profit (Stück * Preis)
– Ich habe SUMME: Ich muss GROUP BY verwenden.
SELECT OrderID, SUM (Menge * UnitPrice) FROM [Bestelldetails]
GROUP BY OrderID
– In welcher Kategorie gibt es insgesamt wie viele Produkte?
SELECT CategoryID, COUNT (ProductID) FROM Products
GRUPPE NACH CategoryID
– GROUP BY wird nicht verwendet, da MAX und MIN einen einzelnen Wert zurückgeben ..!
SELECT CategoryID, COUNT (ProductID) als Number FROM Products
GRUPPE NACH CategoryID
BESTELLUNG NACH Menge
– HABEN:
– Über 1000 verkaufte Artikel:
SELECT ProductID, SUM (Menge) als SatisPiece FROM [Bestelldetails]
GRUPPE NACH ProductID
SUMME (Menge)> 1000
– Wenn die Kriterien, die Sie auf eine Ergebnismenge anwenden, mit einer Spalte in der Tabelle verknüpft sind; Sie verwenden WO. Wenn Sie jedoch ein Kriterium auf einen berechneten Wert in RAM anwenden möchten, wird HAVING verwendet.
– SUB-QUERY (Unterabfragen sind verschachtelte Abfragen)
– Name und Preis meiner Produkte mit einem unterdurchschnittlichen Preis:
– 1. Eine Abfrage, um welche von durchschnittlich zu finden:
SELECT AVG (UnitPrice) FROM Products
- Das Wahlrecht, das dieses Ergebnis als Kriterium verwendet:
SELECT ProductName, UnitPrice FROM Products
WO UnitPrice <(SELECT AVG (UnitPrice) FROM Products)
SELECT COUNT (*) FROM Kunden
SELECT COUNT (DISTINCT CustomerID) FROM Orders
– Welche meiner Kunden haben noch nie gehört ..? (89 von 91 bestmöglichen Kunden.)
Richtige Sie Firmenname, Adresse, Stadt, Land von Kunden
WO CustomerID NICHT IN (SELECT DISTINCT CustomerID FROM Orders)
Beispiel soll sterben aus Mythos dem folgens werden ohne Illusion, dass das Unterwahlrecht nur nach dem WHERE-Kriterium verwendet wird:
SELECT c.CategoryName + ‚(‚ + CAST ((SELECT COUNT (ProductID) FROM Products)
WHERE CategoryID = c.CategoryID) als NVARCHAR (5)) + ‚)‘ FROM Categories als c
– INNER JOIN
– Der Abfragetyp, die Ergebnismenge nur aus Datensätzen, die Wahrnehmung in Beziehung stehen (MATCH (von PRIMARY KEY mit FOREIGN KEY)):
SELECT Products.ProductName, Categories.CategoryName FROM Products
INNER JOIN Kategorien
ON Products.CategoryID = Categories.CategoryID
– Welches Produkt gehört zu welcher Kategorie?
INSERT in Categories (CategoryName, Description)
Werte (‚Desserts‘, ‚Milchdesserts‘)
SELECT * FROM Categories
– Welcher Lieferant (Suppliers.CompanyName) liefert welches Produkt (Products.ProductName) ..?
SELECT sp.CompanyName, p.ProductName FROM Lieferanten als sp
INNER JOIN Produkte als p
ON sp.SupplierID = p.SupplierID
– p.ProductName = Products.ProductName (Wir haben gekürzt ..)
– Welche Bestellung (Orders.OrderID) wurde mit welcher Reederei (Shippers.CompanyName) versendet, als (Orders.OrderDate) gesendet wurde ..?
SELECT Orders.OrderID, Shippers.CompanyName, Orders.OrderDate FROM Shippers
INNER JOIN Bestellungen
ON Shippers.ShipperID = Orders.ShipVia
– 25.11.2009. Mittwoch
– Welche Bestellung gibt welchen Kunden?
SELECT Customers.CompanyName, Orders.OrderID, Orders.OrderDate FROM Customers
INNER JOIN Bestellungen
– PRIMARY KEY – AUSLÄNDISCHER SCHLÜSSEL
ON Customers.CustomerID = Orders.CustomerID
– Welcher Mitarbeiter hat GESAMT wie viele Bestellungen erhalten?
– Mitarbeiter, Bestellungen
SELECT Vorname, Nachname, COUNT (OrderID) FROM Orders
INNER JOIN Mitarbeiter
ON Orders.EmployeeID = Employees.EmployeeID
GRUPPE NACH Vorname, Nachname
– Wir haben GROUP BY für die Verwendung von COUNT verwendet.
– Wer hat die meisten Bestellungen angenommen?
SELECT Vorname, Nachname, COUNT (OrderID) AS TotalOrderNumber FROM Orders
INNER JOIN Mitarbeiter
ON Orders.EmployeeID = Employees.EmployeeID
GRUPPE NACH Vorname, Nachname
BESTELLUNG NACH TotalOrderNumber DESC
– MEHRFACHE TABELLENBEZIEHUNGEN
– Welcher Reihenfolge
– Welcher Mitarbeiter,
– Welchen Kunden haben Sie gegeben ..?
SELECT Orders.OrderID, Employees.FirstName, Employees.LastName, Customers.CompanyName FROM Employees
INNER JOIN Bestellungen
ON Employees.EmployeeID = Orders.EmployeeID
INNER JOIN Kunden
ON Customers.CustomerID = Orders.CustomerID
— Welches Produkt
– In welcher Kategorie ist das?
– Wer liefert dieses Produkt ..?
SELECT Products.ProductName, Categories.CategoryName, Suppliers.CompanyName FROM Products
INNER JOIN Lieferanten
ON Products.SupplierID = Suppliers.SupplierID
INNER JOIN Kategorien
ON Products.CategoryID = Categories.CategoryID
– Welcher Reihenfolge
– welcher Kunde gab,
– Welcher Mitarbeiter hat genommen,
— welches Datum,
– von welcher Kurierfirma
– wie viele wurden von welchem Produkt gekauft,
– zu welchem Preis
– Welche Kategorie ist das Produkt?
– Welcher Lieferant hat dieses Produkt bereitgestellt?
WÄHLEN
Orders.OrderID,
Customers.CompanyName,
Employees.FirstName + “ + Employees.LastName as Calisan,
Orders.OrderDate,
Shippers.CompanyName als Fracht,
Produkte.Produktdurchschnitt,
[Bestelldetails] .Menge, [Bestelldetails] .UnitPrice * (1- [Bestelldetails] .Discount) als RabattKategorien.Kategorie Durchschnitt,
Suppliers.CompanyName als Lieferant
VON Mitarbeitern
INNER JOIN Bestellungen
ON Orders.EmployeeID = Employees.EmployeeID
INNER JOIN Kunden
ON Customers.CustomerID = Orders.CustomerID
INNER JOIN Versender
ON Shippers.ShipperID = Orders.ShipVia
INNER JOIN [Bestelldetails]
ON Orders.OrderID = [Bestelldetails] .OrderID
INNER JOIN Produkte
ON Products.ProductID = [Bestelldetails] .ProductID
INNER JOIN Kategorien
ON Categories.CategoryID = Products.CategoryID
INNER JOIN Lieferanten
ON Suppliers.SupplierID = Products.SupplierID
– OUTER JOIN
SELECT * FROM Categories
INSERT in Categories (CategoryName, Description) -Werte
(‚Desserts‘, ‚Hede Hödö‘)
– Kategorien ohne Produkte
SELECT Categories.CategoryName, Products.ProductName FROM Products
RIGHT JOIN Kategorien
ON Products.CategoryID = Categories.CategoryID
WHERE ProductName ist null
– Ich habe 91 Kunden. Nur 89 bestellten es. Finde 2 Personen, die nicht bestellt haben:
SELECT Firmenname, Adresse, OrderID FROM Kunden
LEFT JOIN Bestellungen
ON Customers.CustomerID = Orders.CustomerID
WHERE OrderID ist null
– Das Wort LINKS oder RECHTS bedeutet, wo das Wort „Verbinden“ geschrieben steht.
– LINKS, um alle Datensätze der Tabelle links neben dem Wort JOIN aufzurufen.
– Ich benutze das Wort RECHTS, um nach rechts zu bringen.
– Wir haben es wie folgt gefunden.
– Welche meiner Kunden haben noch nie bestellt ..? (89 von 91 bestellten Kunden.)
– Wählen Sie Firmenname, Adresse, Stadt, Land von Kunden
– WO CustomerID NICHT IN (SELECT DISTINCT CustomerID FROM Orders)
– WELCHE MITARBEITER HABEN ORDENTLICHE GESAMTBESTELLUNG?
– Es gibt zwei verschiedene (unabhängige) Abfragen.
STATISTIKZEIT EINSTELLEN
SELECT EmployeeID, Vorname, Nachname,
(SELECT COUNT (orderID) FROM Orders WHERE EmployeeID = x.EmployeeID)
VON Mitarbeitern als x
– UNION (Kombiniert 2 verschiedene Ergebnismengen.)
– Kombiniert zwei oder mehr Tabellen.
Regel: Die Spalten in den beiden Ergebnismengen müssen dieselbe Nummer bzw. denselben Typ haben. (int-string steht nicht auf dem Kopf ..)
SELECT Firmenname, Adresse, Stadt, Land, ‚Kunde‘ VON Kunden
UNION
SELECT Firmenname, Adresse, Stadt, Land, ‚Lieferant‘ VON Lieferanten
BESTELLUNG NACH Land
– 01.12.2009.
STATISTIKZEIT EINSTELLEN
SELECT Products.ProductName, Products.UnitPrice, Categories.CategoryName, Categories.Description FROM Products
CROSS JOIN Kategorien
– CROSS JOIN Ermöglicht das Anzeigen aller zugehörigen Tabellen (LEFT JOIN, RIGHT JOIN, INNER JOIN, OUTER JOIN). Es hilft uns nur zu berechnen, wie lange die Abfrage in Bezug auf die Zeit gedauert hat.
PRÜFEN und STANDARD Einschränkungen
Verwenden Sie Normalisierung
ALTER TABLE Produkte
ADD CONSTRAINT DF_AktifMi
STANDARD 1 für AktifMi
– DF_Discontinued – für Discontinued wäre für Produkte gewesen …
– PRÜFEN
ALTER TABLE Produkte
ADD CONSTRAINT CK_Price
PRÜFEN (Preis> -1)
– Wir können keinen negativen Wert mehr in die Produkttabelle eingeben.
– INDEX —
benutze Nordwind
GEHEN
SELECT ProductName, UnitPrice FROM Products
WO ProductID = 1
SELECT * FROM Kunden
WO Land = ‚Deutschland‘
– Mein Kunde in Deutschland
– Welche Spalte soll ich indizieren? Wenn wir das Land hier indizieren, wird „Deutschland“ nur in den Ländern gesucht.
CREATE Nonclustered INDEX ix_Ulke
ON Kunden (Land)
– Abfragen werden nach Leerzeichen verlangsamt. Es kann erforderlich sein, den Index in 3-6 Monaten Wartung zu löschen.
– DBCC INDEXDEFRAG
DROP INDEX und erstellen Sie einen neuen INDEX
SELECT * FROM Northwind.dbo.Products
– FQN: VOLLSTÄNDIG QUALIFIZIERTER NAME: LANGER EINDRUCK (Objektname, der alle Objekte vom Server zum Spaltennamen mit Punkt kombiniert):
Beispiel: <Servername>. <Datenbankname>. <Sema-Name>. <Tabellenname>. <Spaltenname>
– Mit FQN Master kann ich meine anderen verbundenen (oder definierten) Server abfragen.
– Wir können IP-Nummer anstelle des Servernamens schreiben …
CREATE VIEW ProductsGoreSuppliers
WIE
SELECT Produktname, Firmenname, Adresse, Stadt, Land FROM Produkte
INNER JOIN Lieferanten
VORDERSEITE
products.supplierıd = vendor.supplierıd
– Vor dem Erstellen einer Ansicht muss überprüft werden, ob die Abfrage funktioniert oder nicht.
SELECT * FROM ProductsGoreSuppliers
– Daher können wir das WHERE-Kriterium verwenden, da es sich um eine Tabelle handelt.
WO Firmenname WIE ‚E%‘
Bestellung nach Land
SELECT * FROM tumOrderDetails
WHERE OrderID = 10248
BESTELLEN NACH Produktname
– In welchen Fällen kann INSERT nicht angezeigt werden:
– 1. Wenn View INNER JOIN enthält (Es gibt eine hintere Tabelle, er weiß nicht, welche er tun soll)
– Wenn alle Spalten in der Ergebnismenge, die als Ergebnis von 2 auftreten, nicht leer übergeben werden können
- Wenn eine Ansicht mit der Option OPTION PRÜFEN aufgetreten ist
CREATE VIEW Deutsch
WIE
WÄHLEN SIE Kunden-ID, Firmenname, Adresse, Stadt, Land VON Kunden
WO Land = ‚Deutschland‘
– Es enthält kein INNER JOIN, es gibt ein Nicht-Null-Feld, dann passt es zur Ansicht. (erfüllte die ersten beiden Bedingungen)
MIT CHECK-OPTION
– Überprüfen Sie den Datensatz während des Einfügens und akzeptieren Sie ihn, wenn er passt.
SELECT * FROM GermanMusti
INSERT in GermanMustiers (Kunden-ID, Firmenname, Adresse, Stadt, Land)
Werte
(„ACTHU“, „ACHTUNG Co.“, „Hede“, „Berlin“, „Deutschland“)
– Hier können wir einfügen, ob wir Sommer in der Türkei hatten. Weil wir das Wo-Kriterium als Deutschland genommen haben. Wenn wir nicht festlegen würden, wo das Kriterium ist, wäre OPTION NICHT PRÜFEN erforderlich.
– WITH CHECK OPTION: Wenn die neuen eingehenden Daten den Ansichtsregeln entsprechen sollen, wenn eine INSERT- oder UPDATE-Abfrage für ein Ansichtsobjekt ausgeführt wird; Wir können die Option CHECK OPTION verwenden.
– Wenn wir verschlüsseln wollen; Wir verwenden mit Verschlüsselung. Nach der Verschlüsselung sehen wir es nicht einmal.
CREATE VIEW ProductInformation
mit Verschlüsselung
WIE
SELECT ProductName, UnitPrice FROM Products
– EINSPRITZUNG
SELECT * FROM Users WHERE Benutzername = “ AND Passwort = “
– Normalerweise ist die Passwortlogik wie oben .. so wird das Passwort unten gebrochen ..
SELECT * FROM Mitarbeiter WHERE Vorname = “ ODER ‚A‘ = ‚A‘ UND Nachname = “ ODER ‚A‘ = ‚A‘
‚oder‘ A ‚=‘ A.
– SCHEMABINDING
– SCRIPT und BATCH
– Variablen
DECLARE @Day int
– Wenn ich den Wert der Variablen gebe:
SET @ Number = 5
Drucken (@Sa a)
DECLARE @CalisaninName nvarchar (20)
– Wenn der Wert der Variablen durch eine Abfrage kommt:
SELECT @ CalisaninName = Vorname VON Mitarbeitern
WHERE EmployeeID = 1
Drucken (war @calisanina)
DECLARE @x int
SET @ x = 8
Drucken (‚Nummer =‘ +
CAST (@x als nchar (2))
)
– Nehmen Sie x konvertieren in 2 Zeichen nchar.
DECLARE @x int
SET @ x = 8
Drucken (‚Nummer =‘ +
CONVERT (nch (2) @ x)
)
– Holen Sie sich x bis 2 Zeichen nchar. (Genau das gleiche wie oben)
– Wie erhalte ich die SON ORDERID-Informationen, sobald ich eine Bestellung aufgebe?
SELECT TOP 1 OrderID FROM Orders
BESTELLUNG NACH OrderID DESC
– Wenn ich es Variable werfen will;
DECLARE @ID int
SELECT TOP 1 @ ID = OrderID FROM Orders
BESTELLUNG NACH OrderID DESC
Drucken (@ID)
INSERT in Bestellungen (CustomerID, EmployeeID, OrderDate, ShipVia)
Werte (‚ALFKI‘, ‚1‘, GETDATE (), 1)
SELECT @@ IDENTITY
– Globale Variable @@
– Jeder Benutzer kann KEINE globale SQL-Variable definieren
INSERT in Bestellungen (CustomerID, EmployeeID, OrderDate, ShipVia)
Werte (‚ALFKI‘, ‚1‘, GETDATE (), 1)
SELECT @@ IDENTITY
Wählen Sie SCOPE_IDENTITY ()
– WANN / FALL:
SELECT Firmenname, Region =
CASA
WENN Region = ‚BC‘ DANN ‚Washington‘
WENN Region = ‚SP‘ DANN ‚Pennsylvania‘
WENN Region = ‚ODER‘ DANN ‚Orlando‘
ENDE
VON Kunden
WHERE Region ist nicht null
SELECT ProductName, Discontinued =
CASA
WENN eingestellt = ‚0‘ DANN ‚Verkauf gestoppt‘
WENN eingestellt = ‚1‘ DANN ‚Verkauf geht weiter‘
ENDE
VON Produkten
– VERSUCHEN – FANGEN –
BEGINNEN SIE VERSUCHEN
SELECT 1/0
END TRY
FANG ANFANGEN
SELECT ERROR_Message ()
END CATCH
– GESPEICHERTE PROZEDUR —
Kategorie PROC ERSTELLEN
WIE
SELECT * FROM Categories
kategoriget ist
PROC IDyeGoreUrun ERSTELLEN
@id int
WIE
SELECT ProductName, UnitPrice, UnitsInStock FROM Products
WHERE ProductID = @ id
IDyeGoreUrun 77
– Es bringt die Informationen des Produkts mit ID 77.
– Normalerweise arbeiten wir beim Hinzufügen eines Produkts wie folgt.
INSERT IN Categories (CategoryName, Description)
Werte (@CategoryName, @ Description)
– Lassen Sie uns gespeicherte Prozedur machen ..
CREATE PROC CategoryAdd
@CategoryName nvarchar (15),
@Beschreibung ntext
WIE
INSERT IN Categories (CategoryName, Description)
Werte (@CategoryName, @ Description)
KategorieAdd ‚Bakery Products‘, ‚Turkish Style Bakery Pastry Donut‘
– AUSGEZEICHNETE HAUSARBEIT: Schokolade für alle, die …
– Verfahren, um herauszufinden, wie viel insgesamt (im Preis) der Kunde eingekauft hat, dessen ID angegeben wurde
SELECT SUM ([Bestelldetails] .UnitPrice * Menge * (1-Rabatt))
VON [Bestelldetails]
INNER JOIN Bestellungen
ON Orders.OrderID = [Bestelldetails] .OrderID
INNER JOIN Kunden
ON Customers.CustomerID = Orders.CustomerID
WHERE Customers.CustomerID = ‚ALFKI‘
— Lassen Sie uns zuerst überprüfen, ob dieser Ort funktioniert und
– Lassen Sie uns Prozedur erstellen
PROC erstellen CustomerAlis-Daten
@ID char (5)
WIE
SELECT SUM ([Bestelldetails] .UnitPrice * Menge * (1-Rabatt))
VON [Bestelldetails]
INNER JOIN Bestellungen
ON Orders.OrderID = [Bestelldetails] .OrderID
INNER JOIN Kunden
ON Customers.CustomerID = Orders.CustomerID
WHERE Customers.CustomerID = ‚ALFKI‘
CustomerAlis Data ‚OCEAN‘
SELECT CustomerID von Kunden
– Es ist möglich zu diversifizieren …
PROC erstellen CustomerAlis-Daten
@ID char (5)
WIE
SELECT SUM ([Bestelldetails] .UnitPrice * Menge * (1-Rabatt)) AS Total
VON [Bestelldetails]
INNER JOIN Bestellungen
ON Orders.OrderID = [Bestelldetails] .OrderID
INNER JOIN Kunden
ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerID, CompanyName
BESTELLUNG NACH Total DESC
CustomerAlisData2 ‚SCHNELL‘
SELECT CustomerID von Kunden
– Bestellungen in zwei Datumsbereichen:
SELECT OrderID, OrderDate, ShipAddress FROM Orders
WO Bestelldatum ZWISCHEN ’31 / 12/1996 ‚UND ’15 / 07/1997‘
– Lassen Sie uns eine Prozedur erstellen ..
CREATE PROC HistoryDateOrder
@ Date1 smalldatetime,
@ History2 smalldatetime
WIE
SELECT OrderID, OrderDate, ShipAddress FROM Orders
WO Bestelldatum ZWISCHEN @ Datum1 UND @ Datum2
Bestellung nach Datum ’01 / 01/1997 ‚, ’06 / 06/1997‘
– Umsatz nach Jahr
PROC ERSTELLEN YilaGoreCiro
@ Yil int
WIE
SELECT SUM (Menge * Einheitspreis * (1-Rabatt)) AUS [Bestelldetails]
INNER JOIN Bestellungen
ON Orders.OrderID = [Bestelldetails] .OrderID
WO JAHR (Orders.OrderDate)=@Yil
YilaGoreCiro 1997
– Welcher Kunde hat den letzten Ausweis?
– Der Mitarbeiter, dessen Ausweis angegeben wurde, der das Produkt am meisten verkauft hat ..?
– Wie lange arbeiten wir schon mit dem Kunden zusammen, dessen ID angegeben wurde?
– Die 5 meistverkauften Produkte in der Kategorie ID angegeben ..?
– Welche Produkte hat der Lieferant, dessen ID mir gegeben wurde ..?
PROC erstellen Welches Produkt
@ID char (5)
WIE
SELECT TOP 1 Kunden.Firmenname, Produkte.Produktname, [Bestelldetails]. Menge, Bestellungen.Bestelldatum von Kunden
INNER JOIN Bestellungen
ON Customers.CustomerID = Orders.CustomerID
INNER JOIN [Bestelldetails]
ON Orders.OrderID = [Bestelldetails] .OrderID
JOIN-Produkte
ON [Bestelldetails] .ProductID = Products.ProductID
ORDER BY Orders.OrderDate DESC
Welches Produkt ist ‚QUICK‘
– Wir haben uns die verwandten in der Tabelle angesehen.
– Flash Disk Felder ..
WÄHLEN AUS
– 1. Bestellungen nur mit diesem Produkt:
CREATE PROC hat dies erhalten
@productID int
WIE
SELECT TOP 5 ProductName, SUM (Menge) als Summe FROM Products
INNER JOIN [Bestelldetails]
ON Products.ProductID = [Bestelldetails] .ProductID
WO
[Bestelldetails] .OrderIDVON
(
SELECT OrderID FROM [Bestelldetails]
WO ProductID = @ productID
)
UND [Bestelldetails] .ProductID! = @ ProductID
GRUPPE NACH Produktname
BESTELLUNG NACH total DESC
Sie haben dies in diesem 9 erhalten
—– FUNKTIONEN —–
– BERECHNEN SIE DIE MwSt. ALLER PREISE IN DER PRODUKTTABELLE
– VERFAHREN
– Wenn wir sagen „BERECHNEN SIE DIE Mehrwertsteuer JEDES WERTES“, SIND FUNKTIONEN .. Ohne an einem Tisch festzuhalten ..
CREATE FUNCTION VATCalculator
(
@ Para Geld
)
RÜCKGABE Geld
WIE
START
DEKLARE @Deger Geld
SET @ Value = @ Money * 1.18
RETURN @Deger
ENDE
SELECT ProductName, UnitPrice, dbo.KDVCalculator (UnitPrice) AS VAT Inclusive
– Die Funktion arbeitet immer nach dem Schema
VON Produkten
– Quadrieren wir die Nummer eines als Parameter eingegebenen int.
Holen Sie sich CREATE FUNCTION Frame
(
@ Day int
)
RÜCKGABE int
WIE
START
DECLARE @Sonuc int
SET @ Result = @Say * @Say
RETURN @ Ergebnis
ENDE
SELECT dbo.Square (9)
– ODER
Lassen Sie uns das Quadrat CREATE FUNCTION erstellen
(
@x int
)
RÜCKGABE int
WIE
START
RETURN @ x * @ x
ENDE
SELECT dbo.SquareAlloy (9)
– A. AKYILDIRIM
OBER WÄHLEN (‚türkay‘)
UNTER AUSWÄHLEN (‚ABDULLAH‘)
SELECT LEN (‚Dilara‘)
SUBSTRING AUSWÄHLEN (‚Wise Man‘, 1.5)
FUNKTION ERSTELLEN ParafOuptor
(
@Ad nvarchar (50),
@Soyad nvarchar (50)
)
RÜCKGABE nvarchar (100)
WIE
START
DECLARE @donenDeger nvarchar (100)
SELECT @donenDeger = UPPER (SUBSTRING (@ Ad, 1,1)) + ‚.‘ +
OBER (SUBSTRING (@ Nachname, 1.1)) +
UNTER (SUBSTRING (@ name, 2, LAN (@Soyad)))
RETURN @donenDeger
ENDE
SELECT dbo.Paraf Creator (‚Ali‘, ‚Akyıldırım‘)
SELECT TitleOfCourtesy + “ + dbo.ParafRuider (Vorname, Nachname)
VON Mitarbeitern
– ES GIBT ZWEI FUNKTIONSTYPEN; IN-LINE-FUNKTION und MULTI-LINE-FUNKTION.
WIE ES BEDEUTET, GIBT ES NUR EINE LINIE IN DER IN-LINE-FUNKTION. In diesem Fall müssen Sie BEGIN / END STRUCTURE nicht verwenden. ABER MULTI-LINE (SEHR GEFÜTTERT) MUSS MIT EINER FUNKTION BEGINNEN UND MIT ENDE ENDEN.
FUNKTION ERSTELLEN ResultSetOlustur
()
RÜCKGABETABELLE
WIE
RETURN SELECT Firmenname, Land VON Kunden
SELECT * FROM dbo.ResultSetOlustur ()
– TRANSAKTION
BEGINNEN SIE VERSUCHEN
END TRY
FANG ANFANGEN
END CATCH
– FORMEN SIE DIESES ..
BEGINNEN SIE VERSUCHEN
Beginnen Sie mit Tran
– Die Abfrage zum Einfügen, Aktualisieren oder Löschen kann in der Transaktion verwendet werden
tran begehen
END TRY
FANG ANFANGEN
END CATCH
– Schritt für Schritt Mal sehen, wie es geschrieben steht ..
BEGINNEN SIE VERSUCHEN
Beginnen Sie mit Tran T1
– Die Abfrage zum Einfügen, Aktualisieren oder Löschen kann in der Transaktion verwendet werden
Beginnen Sie mit Tran T2
– Noch eine Abfrage (T1 wird zuerst ausgeführt, dann T2)
tran begehen
tran begehen
END TRY
FANG ANFANGEN
– Wenn ein Fehler auftritt, machen Sie die gesamte Transaktion rückgängig:
ROLLBACK TRAN T1
END CATCH
BEGINNEN SIE VERSUCHEN
BEGIN TRAN CategoryAdd
in Kategorien einfügen (CategoryName, Description)
Werte (‚Schuhe‘, ‚Winter / Sommer Männer / Frauen‘)
Beginnen Sie mit Tran UrunSil
AUS Produkten LÖSCHEN, WO ProductID = 1
tran begehen
Tran begehen
END TRY
FANG ANFANGEN
ROLLBACK TRAN CategoryAdd
END CATCH
– Für die Datensicherheit, wenn die auszuführende Abfragelogik fortlaufend sein muss:
– (Beispiel: Zuerst Bestellung hinzufügen, dann zu Bestelldetails gehen, Menge hinzufügen und dann Lagerbestand aus der Produkttabelle löschen)
– Verwenden Sie unbedingt den Transaktionsblock!
– * DIPNOT: Die bequemste Umgebung für die Verwendung des Transaktionsblocks sind gespeicherte Prozeduren.
— TRIGGER (Trigger nach Abfrage INSERT, UPDATE, DELETE) —
– BEI BESTELLUNG SCHREIBEN WIR TRIGGER, DIE NICHT AUF LAGER FALLEN.
CREATE TRIGGER tr_AutomaticStock
EIN [Bestelldetails]
für INSERT
– ARBEITEN MIT EINFÜGUNGSANFRAGE, AUSGELÖST MIT EINFÜGENANFRAGE
WIE
– Zweck: Wenn Sie die Bestelldetailtabelle eingeben, suchen Sie die Bestandsinformationen des betreffenden Produkts aus der Produkttabelle und reduzieren Sie sie um die Stückzahl.
DECLARE @UrunID int
– Wir haben eine Variable definiert
DECLARE @Adet int
– Wir sollten eine Variable namens Menge haben, da dies die Anzahl nach Menge reduzieren würde
– Jeder Tabelle sind zwei temporäre Tabellen zugeordnet. Auf diese Tabellen kann außerhalb von Trigger nicht zugegriffen werden. Sie werden als eingefügt und gelöscht bezeichnet.
– INSERTED; Die Zeile, die nach der INSERT-Abfrage auftritt, wird zuerst in der temporären Tabelle INSERTED gespeichert.
– GELÖSCHT; Die zu löschende Zeile wird vor dem Löschen in der temporären Tabelle DELETED gespeichert.
SELECT @ UrunID = ProductID, @ Qty = Quantity
VON INSERTED
UPDATE-Produkte SET UnitsInStock = UnitsInStock- @ Adet
WHERE ProductID = @ UrunID
– Nachdem der Trigger erstellt wurde, wird er automatisch aktualisiert, wenn ich die folgenden Abfragen mache.
INSERT in [Bestelldetails] (Bestell-ID, Produkt-ID, Menge)
Werte (10323, 1, 2)
SELECT ProductName, UnitsInStock FROM Products
WO ProductID = 1
Bedarf: Wenn Sie versuchen, das Produkt aus der Produkttabelle zu löschen, machen Sie die Spalte Auslauf dieses Produkts 1 (dh Nicht löschen, aktualisieren):
CREATE TRIGGER tr_SatisiStop
ON Produkte
STATT löschen
– Lassen Sie den Trigger arbeiten, ohne dass das Löschen ausgeführt werden kann
WIE
– Alle STATT OFs sind in BEGIN – END geschrieben …
– Ich werde Discontinued 1 des Produkts erstellen, das ich löschen möchte:
START
DECLARE @UrunID int
SELECT @ UrunID = ProductID FROM gelöscht
UPDATE Produkte SET Auslauf = 1
WHERE ProductID = @ UrunID
ENDE
SELECT * FROM Products WHERE ProductID = 1
AUS Produkten LÖSCHEN, WO ProductID = 1
– STATT TRIGGER arbeiten STATT der Triggerabfrage. Das einzige Unterscheidungsmerkmal ist, dass es zwischen BEGIN END-Zeilen geschrieben wird.
— PROBENDATENBANK – FÜR TRIGGER —
TABELLE ERSTELLEN Studenten
(
StudentNo int,
Name nvarchar (50),
Nachname nvarchar (50),
LessonNote tinyint
)
GEHEN
– GO: WEITER ZUM NÄCHSTEN SCHRITT
– TABELLE ÜBERNACHT ERSTELLEN
– ((
– Student No int,
– Ad nvarchar (50),
– Soyd nvarchar (50),
LektionNot tinyint
-)
–GEHEN
– TABELLE ERSTELLEN Verbleibende
– ((
– Student No int,
– Ad nvarchar (50),
– Soyd nvarchar (50),
LektionNot tinyint
-)
—- Wenn die Kursnote weniger als 50 beträgt, speichern Sie sie für die übrigen, wenn sie mehr als 50 beträgt, speichern Sie sie für die Passanten. Lassen Sie ihn entscheiden.
– TRIGGER ERSTELLEN tr_KararVer
– ON Studenten
– FÜR EINFÜGEN
–Fragen
–DECLARE @No int
– ERKLÄREN SIE @Ad nvarchar (50)
– ERKLÄREN SIE @Soyad nvarchar (50)
–DECLARE @DersNotu tinyint
–SELECT @ No = StudentNo, @ Name = Name, @ Nachname = Nachname, @ CourseNote = CourseNote
– VON EINFÜGEN
—- INSERTED Temporäre Tabelle hat nur 1 Zeile.
–IF @ CourseNote <50
– INSERT in verbleibende Werte (@ No, @ Name, @ Nachname, @ LessonNote)
–ELS zu
– INSERT in Gecenler-Werte (@ No, @ Name, @ Nachname, @ LessonNote)
– In Schülerwerte einfügen (1, ‚Mustafa‘, ‚Happy‘, 80)
–SELECT * FROM Students
–SELECT * FROM Late
– INSERT in Ogrenciler-Werte (1, ‚Türkay‘, ‚Ürkmez‘, 40)
–SELECT * FROM Students
–SELECT * FROM Verbleibende
– SICHERHEIT und LEISTUNG ..
– DBCC-BEFEHLE
DBCC ShowContig (‚Kunden‘)
– Es ist ein netter Befehl, der die Leistungsdetails der in der Datenbank verwendeten Tabellen enthält.
— 08.12.2009.
– Sicherungscode
– ALTER DATABASE Northwind
– SET RECOVERY FULL
– Wenn mein Backup oft dasselbe ist, kann ich es in SQL speichern. Es ist nicht notwendig. Es ist einfach zu bedienen.
– Systemverfahren (sp)
– SQL kann beim Erstellen eines Backups keinen Ordner erstellen. Erstellen Sie daher einen Ordner mit dem Namen Backup in C und sichern Sie dann.
sp_addumpdevice ‚DISK‘, MyDevice, ‚C: \ Backup \ NWFull.bak‘
SELECT * FROM sys.backup_devices
SICHERUNGSDATENBANK Northwind TO MyDevice
– Wenn es kein Backup ohne Gerät gibt;
SICHERUNGSDATENBANK Northwind TO DISK = ‚C: \ Backup \ NWManuel.bak‘
– Es ist notwendig, die Sicherung regelmäßig durchzuführen. Nun, wenn ich den Unterschied sichern möchte, sollte ich Differencial Backup verwenden, anstatt das Backup am Dienstag am Montag erneut zu erstellen.
INSERT in Northwind.dbo.Products (ProductName, UnitPrice)
Werte (‚Eis‘, 5)
BACKUP-DATENBANK Northwind TO DISK = ‚C: \ Backup \ NWDark.bak‘
MIT UNTERSCHIEDLICHEM
– Warum sollte das Transaktionsprotokoll bereinigt werden? INSERT-, UPDATE- und DELETE-Abfragen
und wenn sie ausgeführt werden, welche Abfrage funktioniert wann und wie
Es wird in der Datenbankdatei mit der Erweiterung .ldf gespeichert. Wir stellen diese Fragen
Jedes Mal, wenn wir es ausführen, wird es in die Protokolldatei verarbeitet. Nach einer Weile
Da Protokolldateien eine übermäßige Schwellung aufweisen, werden diese Abfragen durchgeführt
Geschwindigkeit wird abnehmen. Um diese Geschwindigkeit wieder zu erhöhen, müssen Sie nur LOG BACKUP kaufen.
– Sichern wir die LOG-Datei.
UPDATE Northwind.dbo.Products SET UnitPrice = 10
WO ProductID = 81
SICHERUNGSPROTOKOLL Northwind TO DISK = ‚C: \ Backup \ LogFile.bak‘
– Jede gute Sache hat ein Ende: 😉
TROPFEN-DATENBANK Nordwind
Aber einige Dinge können rückgängig gemacht werden:
DATENBANK WIEDERHERSTELLEN Northwind FROM DISK = ‚C: \ Backup \ NWFull.bak‘ WITH NORECOVERY
DATENBANK WIEDERHERSTELLEN Northwind FROM DISK = ‚C: \ Backup \ NWDark.bak‘ WITH NORECOVERY
WIEDERHERSTELLEN DES LOGS Northwind FROM DISK = ‚C: \ Backup \ LogFile.bak‘ MIT WIEDERHERSTELLUNG
– MIT NORECOVERY und MIT RECOVERY Unterschied;
– Es gibt eine bestimmte Reihenfolge der Sicherung. Wir werden sie alle auf einmal ausführen, aber warten, bis die vollständigen und differenziellen mit dem neuesten LOG wiederhergestellt sind.