codestory

Die Anleitung zum JasperReport für den Anfänger mit SQL Server

  1. Die Vorstellung
  2. Das Tool zur Arbeit mit SQL Server
  3. Die Datenbank zum Lernen SQL (LearningSQL)
  4. Các câu lệnh truy vấn (Query)
  5. Các câu lệnh trèn dữ liệu (Insert)
  6. Câu lệnh cập nhập (Update)
  7. Câu lệnh xóa dữ liệu (Delete)
  8. SQL Functions
  9. SQL Join
  10. Câu truy vấn con (Subquery)
  11. Die Programmierung von SQL Server Transact-SQL

1. Die Vorstellung

Das Dokument leitet dem Anfänger an, SQL zu lernen. Das Dokument basiert auf ...:
  • SQL Server (2008 - 2020)
Die Inhalt fasst um:
  • Die Sprache SQL
  • Die Grammatik SQL (die grundlegende Grammatik, Standard für allen Datenbank)
  • Die eigene Grammatik SQL von SQLServer.
Mehr sehen:
  • SQL Tutorial for Beginners with MySQL
  • SQL Tutorial for Beginners with Oracle

2. Das Tool zur Arbeit mit SQL Server

Hier benutze ich SQLServer Management Studio- Das ist ein eingebautes Tool nach der Installation von SQLServer. Sie können die Installationsanleitung von SQLServer in ...mehr sehen:

3. Die Datenbank zum Lernen SQL (LearningSQL)

Das Dokument benutzt die Datenbank LearningSQL (die Version von SQLServer). Sie brauchen die Datenbank erstellen um hilfreich für das Lernen zu sein. (Es kostet Sie nur weniger als 5 Minuten um es zu erstellen).

Script bildet die Datenbank. Die Struktur des Datenbank kann in... gesehen werden:

4. Các câu lệnh truy vấn (Query)

SQL Select
Das Statement Select ist das grundlegendste Statement in SQL. Es wird benutzt um die Daten in Tabellen abzufragen.
  • PRODUCT_TYPE: Die Daten Tabelle von der Produktstypen (Service type of bank).
Das ist das Statement Datenabfragen in die Tabelle PRODUCT_TYPE
-- Query entire column of Product_Type table.

Select * From Product_Type;


-- The above statement and the following statement are equivalent.
-- Pty is alias (a alias of Product_Type table).


Select Pty.* From Product_Type Pty;

-- Query some columns.

Select Pty.Product_Type_Cd
     ,Pty.Name
From   Product_Type Pty;
Das Ergebnis vom Abfragen:
Die Daten in die Tabelle EMPLOYEE abfragen:
-- Query 4 columns on the Employee table
-- Using Emp as alias for Employee

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
Das Ergebnis vom Abfragen:
Alias für die Spalte erstellen:
-- Using Convert(Varchar, <intvalue>) to convert int to Varchar (Function of SQL Server)
-- Using + operation to  concatenate two strings together.
-- We have a new column, use 'as' to define column name for this column.

Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Maybe not need 'as' in the definition Alias column
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- New column
From   Employee Emp;
Das Ergebnis vom Abfragen:
SQL Distinct
Das Statement distinct wird mit Select benutzt, um die Daten zu wählen (select) und die wiederholenden Daten auszulassen. Die Syntax ist:
Select distinct <column1>, <column2>  ....
Das Beispiel sehen:
-- Query Product table.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Query Product_Type in Product table.
Select Pro.Product_Type_Cd from Product Pro;

-- Distinct need to use to remove the duplicates.
Select Distinct Pro.Product_Type_Cd from Product Pro;
Das Ergebnis vom Laufen der Statement oben:
SQL Where
Where ist das Statement für die Begrenzung der Suchenbereich. Z.B Sie möchten die Dienstleistungsprodukten mit dem Typ "Privat- und Geschäftsdarlehen" suchen.
  • Product_Type_Cd = 'LOAN'.
Sie sollen in die Tabelle PRODUCT , in die Stellen von Product_Type_Cd= 'LOAN' abfragen.
-- Querying the Product table to find the type of products:
-- "Individual and Business Loans".
-- Corresponding column: Product_Type_Cd = 'LOAN'.

Select * From Product Pro Where Pro.Product_Type_Cd = 'LOAN';
Das Ergebnis vom Abfragen:
Ein anderes Beispiel bennutzt where und die beigefügten Bedingungen.
SQL And Or
And und Or sind 2 Operator in where:
Zum Beispiel Sie möchten die Liste der Arbeitnehmer, deren Name mit 'S' beginnen und zur Operationsabteilung gehören
-- Query the employee whose first name starts with S.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name Like 'S%';

-- Query the employee whose first name starts with S.
-- and work in Operation department.  Dept_Id  = 1.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name Like 'S%'
And    Emp.Dept_Id = 1;
Das Ergebnis des Laufen der Abfragen
Zum Beispiel:
-- Find the employees whose first name starts with S or P.
-- and work in Operation department.  Dept_Id  = 1.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  (Emp.First_Name Like 'S%' Or Emp.First_Name Like 'P%')
And    Emp.Dept_Id = 1;
Das Ergebnis vom Abfragen
SQL IN
Das Statement IN in where wird in die Situation der Suchen nach einer Wert in einer bestimmten Menge.
-- This command searches the employee named
-- Susan or  Paula or Helen.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name In ('Susan'
                        ,'Paula'
                        ,'Helen');
Das Ergebnis vom Laufen des Statement:
SQL Between
-- Find employees, with Emp_Id between 5 and 10.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Start_Date
From   Employee Emp
Where  (Emp.Emp_Id Between 5 And 10);

-- The statement above is equivalent to:
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
From   Employee Emp
Where  Emp.Emp_Id >= 5
And    Emp.Emp_Id <= 10;
Query Results:
Das Statement BETWEEN wird auch für die Begrenzung der Zeit benutzt. Z.B Die Arbeitnehmer suchen, die in den Zeitraum von ... zu arbeiten beginnen:
  • 03-05-2002 ==> 09-08-2002 (dd-MM-yyyy)
-- This statement helps find employees who have begun working for a period of time
-- specify it in where statement.
-- For example,  03-05-2002 ==> 09-08-2002  (Format: dd-MM-yyyy)
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
     , -- Convert(Varchar, <Date>, 105) Function convert Date to varchar Varchar with DD-MM-YYYY format
      -- This is function of SQL Server (It may not exist in other DB).
      Convert(Varchar, Emp.Start_Date
             ,105) Start_Date_Vn
From   Employee Emp
Where
-- Convert(Datetime, <Varchar>, 105)  Function convert text with DD-MM-YYYY format to Datetime
-- (This is function of  SQLServer, (It may not exist in other DB))
( --
 Emp.Start_Date Between Convert(Datetime, '03-05-2002'
                               ,105) And
 Convert(Datetime,'09-08-2002'
        ,105) --
);
Query Result:
SQL Wildcard
Es gibt 2 besondere Zeichen in SQL:
  1. Das Zeichen %
  2. Das Zeichen _
Die Bedeutung:
  • % bezeichnet 0, 1 oder viele irgenden Zeichen.
  • _ bezeichnet ein bestimmtes Zeichen.
Diese 2 Zeichen werden oft in die Bedingung LIKE.
-- Find Customers whose FED_ID is formatted:
-- The initial part is random, following by -, then two any characters, then -, and the last part is any.
-- Use two dashes (_) for illustrating two characters.
-- (Each dash (_) is a unique character).


Select Cus.Cust_Id
     ,Cus.Fed_Id
     ,Cus.Address
From   Customer Cus
where cus.fed_id like '%-__-%';
Query Results:
SQL Like
Sie haben an dieses Statement in die Beispiele oben gewöhnt.
SQL Order By
Das query von Daten zeigt eine Menge der Ergebnisse, aber sie arrangiert nicht so wie gewünscht. Benutzen Sie Order by um die zurückgegebenen Ergebnisse zu gliedern.
-- Syntax:

SELECT "column_name"
FROM "table_name"
[WHERE "condition"]
ORDER BY "column_name1" [ASC, DESC], "column_name2" [ASC, DESC];

-- Note:
-- ASC: ascending (default)
-- DESC: descending order..
Zum Beispiel:
-- Arrange Product_Type_Cd in ascending order
-- Next, arrange Name in ascending order, too.

Select Pro.Product_Cd
     ,Pro.Product_Type_Cd
     ,Pro.Name
From   Product Pro
Order  By Pro.Product_Type_Cd Asc
        ,Pro.Name            Asc;
       
       

-- In Order BY, ASC is defaulted.
-- Thus, it is unnecessary to write ASC.

Select Pro.Product_Cd
     ,Pro.Product_Type_Cd
     ,Pro.Name
From   Product Pro
Order  By Pro.Product_Type_Cd
        ,Pro.Name;

-- Arrange Product_Type_Cd in descending order
-- Next, arrange Name in ascending order
Select Pro.Product_Cd
     ,Pro.Product_Type_Cd
     ,Pro.Name
From   Product Pro
Order  By Pro.Product_Type_Cd Desc
        ,Pro.Name            Asc;
Query Results:
Order By steht immer hinter where.
-- Find the employees whose first name starts with S.
-- Sort descending by start date of work.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
From   Employee Emp
Where  Emp.First_Name Like 'S%'
Order  By Emp.Start_Date Desc;
Query Results:
OR:
-- Apply the order of column to Order by clause.
-- First_Name is the second column in Select clause.
-- Be able to use Order by 2 in lieu of Order by First_Name.

Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Start_Date
From   Employee Emp
Order  By 2 Desc;
SQL Group By
Zuerst brauchen wir verstehen, was die aggregierte Funktionen (Aggregate Functions) sind:
  • Sum: Die Funktion gibt die Summe von allen Werten zurück
  • Avg: Die Funktionn gibt die Durchschnitt der Werten zurück
  • Count: Die Funktion gibt die Anzahl der Stücke
  • Min: Die Funktion findet die minimale Wert
  • Max: Die Funktion findet die maximale Wert
Das sind die einigen üblichen aggregierten Funktionen (Aggregate). Sie können an das Statement Group by teilnehmen
-- Query Account table.

Select Acc.Account_Id
     ,Acc.Product_Cd
     ,Acc.Avail_Balance
     ,Acc.Pending_Balance
From   Account Acc;
Die Frage ist: Sie möchten die Total des Geld ins Konto kennen,das jedem verschiedenen Dienstleistungstyp (Product_Cd) entspricht. Das heißt, Sie sollen in Product_Cd gruppieren.
Select Acc.Product_Cd
     ,Count(Acc.Product_Cd) As Count_Acc
     ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
     ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance
From   Account Acc
Group  By Acc.Product_Cd;
Results:
Deshalb haben Sie eine Bewertung:
  • Es gibt 4 Kontos, die an die Dienstleistung "Spareinlagen" (SAV) mit dem Betrag von 1855.76 teilnehmen und jedes Konto hat einen durchschnittlichen Betrag von 463.94.
  • ...
SQL Having
Der Satz HAVING erlaubt Sie bei der Bestimmung der Bedingungen, die filtern, welche Gruppe in die letzten Ergebnisse auftreten.

Der Satz WHERE setzen die Bedingungen für die gewählten Spalten, inzwischen setzt der Klause HAVING die Bedingungen für die Gruppen, die durch den Klause GROUP BY erstellt werden.
Angenommen, Sie möchten die Dienstleistungstypen (Product_Cd) in die Tabelle Account gruppieren und nur die Typen zeigen, die mehr als ( > 3) Teilnehmer haben.
Select Acc.Product_Cd
     ,Count(Acc.Product_Cd) As Count_Acc
     ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance 
     ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance 
From   Account Acc
Group  By Acc.Product_Cd
Having Count(Acc.Product_Cd) > 3;
Query Results:
Der Unterschied von Where & Having
Sie brauchen Where und Having in einem Statement unterscheiden.
  • Where ist ein Statement für den Datenfilter vor der Gruppierung (Group)
  • Having ist ein Statement für den Datenfilter nach der Gruppierung (Group)
Falls Sie die allgemeinen Informationen einer Bank-Filiale (die Tabelle BRANCH) haben möchten. Sie können where benutzen um die Daten vor der Gruppierung (group) zu filtern.
Select Acc.Product_Cd
     ,Count(Acc.Product_Cd) As Count_Acc
     ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
     ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance
From   Account Acc

-- Using WHERE to filter data before group
Where  Acc.Open_Branch_Id = 1
Group  By Acc.Product_Cd
-- Using HAVING to filter data after group
Having Count(Acc.Product_Cd) > 1;
Query Results:

5. Các câu lệnh trèn dữ liệu (Insert)

SQL Insert Into
Die Syntax:
-- Syntax of Insert Into:

INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...);
Zum Beispiel: Sie fügen eine Kundentransaktion in die Tabelle ACC_TRANSACTION ein:
-- Insert a record in Acc_Transaction table
-- numeric value is automatically generated for Txn_ID.
-- Current_Timestamp is function of SQL Server, return system datetime
-- Current_Timestamp : System datetime

Insert Into Acc_Transaction
  (Amount
  ,Funds_Avail_Date
  ,Txn_Date
  ,Txn_Type_Cd
  ,Account_Id
  ,Execution_Branch_Id
  ,Teller_Emp_Id)
Values
  (100 -- Amount
  ,Current_Timestamp -- Funds_Avail_Date
  ,Current_Timestamp -- Txn_Date
  ,'CDT' -- Txn_Type_Cd
  ,2 -- Account_Id
  ,Null -- Execution_Branch_Id
  ,Null -- Teller_Emp_Id
   );
SQL Insert Into Select
Sie können den Statement Select benutzen um die Daten für die Einfügung anzubieten. Mit dem Statement Insert Into ... Select.
-- Syntax of INSERT INTO .. SELECT

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2";
Zum Beispiel:
-- Insert multi record in Acc_Transaction table
-- Use Select statement to provide data.
-- numeric value is automatically generated for Txn_ID.

Insert Into Acc_Transaction
( Txn_Date
,Account_Id
,Txn_Type_Cd
,Amount
,Funds_Avail_Date)
Select Acc.Open_Date -- Txn_Date
      ,Acc.Account_Id -- Account_Id
      ,'CDT' -- Txn_Type_Cd
      ,200 -- Amount
      ,Acc.Open_Date -- Funds_Avail_Date
From   Account Acc
Where  Acc.Product_Cd = 'CD';

6. Câu lệnh cập nhập (Update)

-- Syntax of Update:

UPDATE "table_name"
SET "column_1" = "new value 1", "column_2"= "new value 2"
WHERE "condition";
Zum Beispiel: Sie möchten den Betrag ins Konto des Kunden mit CUST_ID = 1 um 2% erhöhen.
Das Statement Update:
-- Update, increase the amount of money in customers' account with CUST_ID = 1 by 2%.

Update Account
Set    Avail_Balance   = Avail_Balance + 2 * Avail_Balance / 100
     ,Pending_Balance = Pending_Balance + 2 * Pending_Balance / 100
Where  Cust_Id = 1;
Wiederabfragen nach dem Update.

7. Câu lệnh xóa dữ liệu (Delete)

Die Syntax erlöscht die Daten in die Tabelle.
-- Delete two records in the Acc_Transaction table

DELETE FROM "table_name"
WHERE "condition";
-- Delete two records in the Acc_Transaction table

Delete From Acc_Transaction
Where Txn_Id In (25
                   ,26);

8. SQL Functions

SQL Count
Count() ist eine Funktion, die die Anzahl der Linie in den Satz Query. Oft wird es mit Group by benutzt.
-- Count the number of rows in the Account table

Select Count(Acc.Account_Id) As Count_Acc From Account Acc;
Die Anzahl der Kontos, die die Transaktion mit der Bank haben, zählen (die Tabelle Acc_Transaction)
-- Count the number of accounts having transaction with the bank

Select Count(distinct txn.Account_id) as Distinct_Acc From Acc_Transaction txn;
Group by
Ein Kunde kann viele Kontos öffnen. Jedes Konto entspricht einer Bankprodukt (Dienstleistung).
Sie möchten die Kunden (CUST_ID) und ihre Kontos aufzählen
-- Count the number of accounts opened for each customer....

Select Acc.Cust_Id
     ,Count(Acc.Account_Id) As Count_Acc
From   Account Acc
Group  By Acc.Cust_Id;
SQL Sum
Sum() ist die Funktion , die die Summe einer numerischen Spalte zurückgibt.
-- Syntax:

SELECT SUM("column_name")
FROM "table_name";
Zum Beispiel:
-- Find the sum of the money in customers' accounts with CUST_ID = = 1
Select Sum(Acc.Avail_Balance)  As Sum_Avail_Balance
From Account Acc Where Acc.Cust_Id = 1;


-- Use Group by.
-- Find the sum of the money in accounts owned by each customer.
Select Acc.Cust_Id
    ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
From   Account Acc
Group  By Acc.Cust_Id;
SQL AVG
Die Funktion AVG() gibt die Durchschnitt der numerischen Spalte zurück.
-- Syntax:

SELECT AVG("column_name")
FROM "table_name";
Example
-- Find the average of money equivalent to each type of deposit.

Select Avg(Acc.Avail_Balance)  As Avg_Avail_Balance
From   Account Acc
Where  Acc.Product_Cd = 'SAV';



-- Use Group by.
-- A customer can own one or more account.
-- Find the average of money in each account owned by each customer
-- (In the bank with Branch_ID = 1)
Select Acc.Cust_Id
    ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance
From   Account Acc
Where  Acc.Open_Branch_Id = 1
Group  By Acc.Cust_Id;
SQL MIN
Min ist die Funktion, die die minimale Wert in die numerische Spalte findet.
-- Syntax:

SELECT MIN ("column_name")
FROM "table_name";
Example:
-- Find the minimum amount of deposit.
Select Min(Acc.Avail_Balance) As Min_Avail_Balance
From   Account Acc
Where  Acc.Product_Cd = 'SAV';



-- Use Group by.
-- A customer can own one or more account.
-- Accounts can be opened in different branches.
-- Find the amount in the account, minimum for each branch

Select Acc.Open_Branch_Id
     ,Min(Acc.Avail_Balance) As Min_Avail_Balance
From   Account Acc
Group  By Acc.Open_Branch_Id;
SQL MAX
MAX() ist die Funktion, die die maximale Wert in einer numerischen Spalte findet. Die Benutzung ist so gleich wie MIN, Sie können die Beispiele in MIN referieren.
-- Syntax:

SELECT MAX("column_name")
FROM "table_name";

9. SQL Join

Zum Beispiel: Sie sehen die Information einer Arbeitnehmer in die Tabelle EMPLOYEE. Sie können den Arbeitnehmer finden wenn Sie ID der Abteilung des Arbeitnehmer kennen. Aber das ist eine bedeutungslos. Um den Name der Abteilung zu kennen, müssen Sie in die Tabelle DEPARTMENT nachschlagen. Die Verbindung von 2 Tabelle zur Schaffung der vollen Information wird JOIN genannt.
Es gibt 4 Maßnahmen zum Join 2 Tabelle :
  • INNER JOIN (JOIN)
  • LEFT OUTER JOIN (LEFT JOIN)
  • RIGHT OUTER JOIN (RIGHT JOIN)
  • FULL OUTER JOIN (OUTER JOIN)
  • CROSS JOIN
INNER JOIN (or JOIN)
Das Schlüsselwort INNER JOIN wählt alle Linie vom 2 Tabelle solange es gibt die Datenzusammenpassung zwischen die Spalten in 2 Tabelle .
Die Syntax:
-- Syntax:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;


-- INNER JOIN can replaced by JOIN
-- Same Meaning, and result.

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
Example:
-- INNER JOIN 2 table: EMPLOYEE and DEPARTMENT.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
     ,Dep.Name Dept_Name
From   Employee Emp
Inner  Join Department Dep
On     Emp.Dept_Id = Dep.Dept_Id
Order  By Emp.Emp_Id;
Die eigene Syntax von SQLServer:
-- Other SQL Server syntax to join two tables:

Select Emp.Emp_Id
   ,Emp.First_Name
   ,Emp.Last_Name
   ,Emp.Dept_Id
   ,Dep.Name Dept_Name
From   Employee   Emp
   ,Department Dep
Where  Emp.Dept_Id = Dep.Dept_Id
Order  By Emp.Emp_Id;
LEFT OUTER JOIN (or LEFT JOIN)
Das Sschlüsselwort LEFT OUTER JOIN gibt alle Linien (rows) von der linken Tabelle (table1), mit der in die rechten Tabelle (table2) entsprechenden Linie zurück. Die Daten NULL in die Tabelle 2 akzeptieren wenn es keine Zusammenpassung gibt.
Die folgende Illustration sehen:
Zum Beispiel:
-- Customer LEFT OUTER JOIN Officer
-- LEFT OUTER JOIN Can be replaced by LEFT JOIN (meaning, and the result is the same)

Select Cus.Cust_Id
     ,Cus.Fed_Id
     ,Cus.State
     ,Ofc.Cust_Id As Ofc_Cust_Id
     ,Ofc.Officer_Id
     ,Ofc.Start_Date
     ,Ofc.Title
From   Customer Cus  -- Table1
Left   Outer Join Officer Ofc  -- Table2
On     Cus.Cust_Id = Ofc.Cust_Id;
Das Ergebnis:
RIGHT OUTER JOIN (or RIGHT JOIN)
RIGHT OUTER JOIN ist ziemlich gleich wie LEFT OUTER JOIN:
FULL OUTER JOIN (or OUTER JOIN)
FULL OUTER JOIN ist die Komibination zwischen LEFT OUTER JOIN und RIGHT OUTER JOIN
-- Syntax:  (FULL OUTER JOIN)
-- Or: FULL JOIN

SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;

10. Câu truy vấn con (Subquery)

Im SQLServer ist subquery eine Abfrage innerhalb einer Abfrage. Sie können die Subabfragen in Ihrem Statement SQL erstellen. Die Subabfragen können in dem Klausel WHERE, FROM, oder SELECT liegen.
Subquery in the Where clause
Sehr oft werden die subquery in dem Klausel WHERE gefunden. Die Subabfragen werden die eingenisteten Subabfragen genannt .
Select Acc.Account_Id
     ,Acc.Open_Date
     ,Acc.Product_Cd
     ,Acc.Avail_Balance
From   Account Acc
Where  Acc.Cust_Id In
      (Select Cus.Cust_Id From Customer Cus Where Cus.Cust_Type_Cd = 'B')
Subquery in the From clause
Ein Abfragen kann im Klausel FROM auch gefunden. Sie werden inline views genannt.
Select Cus.Cust_Id
     ,Cus.Address
     ,Cus.Fed_Id
     ,Acc2.Sum_Avail_Balance
From   Customer Cus
     , -- Define a inline view.
      (Select Acc.Cust_Id
             ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
       From   Account Acc
       Group  By Acc.Cust_Id) Acc2
Where  Cus.Cust_Id = Acc2.Cust_Id;
Subquery in the Select clause
Ein subquery kann in den Klausel SELECT gefunden werden.
Select Cus.Cust_Id
     ,Cus.Address
     ,Cus.Fed_Id
     ,(Select Sum(Acc.Avail_Balance)
       From   Account Acc
       Where  Acc.Cust_Id = Cus.Cust_Id) As Sum_Avail_Balance
From   Customer Cus;
Der Trick bei der Stellung eines Unterabfragen (subquery) im Klausel select besteht darin, dass subquery die einzige Wert zurückgeben muss. Das ist der Grund, warum eine Aggregatefunktion wie die Funktion SUM, COUNT, MIN, oder MAX in subquery oft benutzt wird.

11. Die Programmierung von SQL Server Transact-SQL

Sie können die Programmierungssprache Transact-SQL mit SQL Server bei ... referieren:
No ADS