Apache Tajo - SQL-Abfragen
In diesem Kapitel werden die folgenden wichtigen Abfragen erläutert.
- Predicates
- Explain
- Join
Lassen Sie uns fortfahren und die Abfragen durchführen.
Prädikate
Prädikat ist ein Ausdruck, der verwendet wird, um wahre / falsche Werte und UNBEKANNT auszuwerten. Prädikate werden in der Suchbedingung von WHERE-Klauseln und HAVING-Klauseln und anderen Konstrukten verwendet, für die ein Boolescher Wert erforderlich ist.
IN Prädikat
Legt fest, ob der Wert des zu testenden Ausdrucks mit einem Wert in der Unterabfrage oder in der Liste übereinstimmt. Unterabfrage ist eine gewöhnliche SELECT-Anweisung mit einer Ergebnismenge aus einer Spalte und einer oder mehreren Zeilen. Diese Spalte oder alle Ausdrücke in der Liste müssen denselben Datentyp wie der zu testende Ausdruck haben.
Syntax
IN::=
<expression to test> [NOT] IN (<subquery>)
| (<expression1>,...)
Query
select id,name,address from mytable where id in(2,3,4);
Result
Die obige Abfrage generiert das folgende Ergebnis.
id, name, address
-------------------------------
2, Amit, 12 old street
3, Bob, 10 cross street
4, David, 15 express avenue
Die Abfrage gibt Datensätze von zurück mytable für die Schüler ID 2,3 und 4.
Query
select id,name,address from mytable where id not in(2,3,4);
Result
Die obige Abfrage generiert das folgende Ergebnis.
id, name, address
-------------------------------
1, Adam, 23 new street
5, Esha, 20 garden street
6, Ganga, 25 north street
7, Jack, 2 park street
8, Leena, 24 south street
9, Mary, 5 west street
10, Peter, 16 park avenue
Die obige Abfrage gibt Datensätze von zurück mytable wo Studenten nicht in 2,3 und 4 ist.
Wie Prädikat
Das LIKE-Prädikat vergleicht die im ersten Ausdruck zur Berechnung des Zeichenfolgenwerts angegebene Zeichenfolge, die als zu testender Wert bezeichnet wird, mit dem Muster, das im zweiten Ausdruck zur Berechnung des Zeichenfolgenwerts definiert ist.
Das Muster kann eine beliebige Kombination von Platzhaltern enthalten, z.
Unterstreichen Sie das Symbol (_), das anstelle eines einzelnen Zeichens im zu testenden Wert verwendet werden kann.
Prozentzeichen (%), das eine beliebige Zeichenfolge mit null oder mehr Zeichen im zu testenden Wert ersetzt.
Syntax
LIKE::=
<expression for calculating the string value>
[NOT] LIKE
<expression for calculating the string value>
[ESCAPE <symbol>]
Query
select * from mytable where name like ‘A%';
Result
Die obige Abfrage generiert das folgende Ergebnis.
id, name, address, age, mark
-------------------------------
1, Adam, 23 new street, 12, 90
2, Amit, 12 old street, 13, 95
Die Abfrage gibt Datensätze aus der mytable der Schüler zurück, deren Namen mit 'A' beginnen.
Query
select * from mytable where name like ‘_a%';
Result
Die obige Abfrage generiert das folgende Ergebnis.
id, name, address, age, mark
——————————————————————————————————————-
4, David, 15 express avenue, 12, 85
6, Ganga, 25 north street, 12, 55
7, Jack, 2 park street, 12, 60
9, Mary, 5 west street, 12, 75
Die Abfrage gibt Datensätze von zurück mytable von jenen Schülern, deren Namen mit 'a' als zweitem Zeichen beginnen.
Verwenden des NULL-Werts in Suchbedingungen
Lassen Sie uns nun verstehen, wie der NULL-Wert in den Suchbedingungen verwendet wird.
Syntax
Predicate
IS [NOT] NULL
Query
select name from mytable where name is not null;
Result
Die obige Abfrage generiert das folgende Ergebnis.
name
-------------------------------
Adam
Amit
Bob
David
Esha
Ganga
Jack
Leena
Mary
Peter
(10 rows, 0.076 sec, 163 B selected)
Hier ist das Ergebnis wahr, sodass alle Namen aus der Tabelle zurückgegeben werden.
Query
Lassen Sie uns nun die Abfrage mit der Bedingung NULL überprüfen.
default> select name from mytable where name is null;
Result
Die obige Abfrage generiert das folgende Ergebnis.
name
-------------------------------
(0 rows, 0.068 sec, 0 B selected)
Erklären
Explainwird verwendet, um einen Abfrageausführungsplan zu erhalten. Es zeigt eine logische und globale Planausführung einer Anweisung.
Logische Planabfrage
explain select * from mytable;
explain
-------------------------------
=> target list: default.mytable.id (INT4), default.mytable.name (TEXT),
default.mytable.address (TEXT), default.mytable.age (INT4), default.mytable.mark (INT4)
=> out schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=> in schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
Result
Die obige Abfrage generiert das folgende Ergebnis.
Das Abfrageergebnis zeigt ein logisches Planformat für die angegebene Tabelle. Der logische Plan gibt die folgenden drei Ergebnisse zurück:
- Zielliste
- Out Schema
- Im Schema
Globale Planabfrage
explain global select * from mytable;
explain
-------------------------------
-------------------------------------------------------------------------------
Execution Block Graph (TERMINAL - eb_0000000000000_0000_000002)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000002
|-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
1: eb_0000000000000_0000_000001
2: eb_0000000000000_0000_000002
-------------------------------------------------------------------------------
=======================================================
Block Id: eb_0000000000000_0000_000001 [ROOT]
=======================================================
SCAN(0) on default.mytable
=> target list: default.mytable.id (INT4), default.mytable.name (TEXT),
default.mytable.address (TEXT), default.mytable.age (INT4), default.mytable.mark (INT4)
=> out schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT),default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=> in schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=======================================================
Block Id: eb_0000000000000_0000_000002 [TERMINAL]
=======================================================
(24 rows, 0.065 sec, 0 B selected)
Result
Die obige Abfrage generiert das folgende Ergebnis.
Hier zeigt der globale Plan die Ausführungsblock-ID, die Ausführungsreihenfolge und ihre Informationen.
Tritt bei
SQL-Joins werden verwendet, um Zeilen aus zwei oder mehr Tabellen zu kombinieren. Im Folgenden sind die verschiedenen Arten von SQL-Joins aufgeführt:
- Innere Verbindung
- {LINKS | RECHTS | FULL} OUTER JOIN
- Cross Join
- Selbst beitreten
- Natürliche Verbindung
Betrachten Sie die folgenden zwei Tabellen, um Verknüpfungsvorgänge auszuführen.
Tabelle 1 - Kunden
Ich würde | Name | Adresse | Alter |
---|---|---|---|
1 | Kunde 1 | 23 Alte Straße | 21 |
2 | Kunde 2 | 12 New Street | 23 |
3 | Kunde 3 | 10 Express Avenue | 22 |
4 | Kunde 4 | 15 Express Avenue | 22 |
5 | Kunde 5 | 20 Garden Street | 33 |
6 | Kunde 6 | 21 North Street | 25 |
Tabelle 2 - Kundenbestellung
Ich würde | Auftragsnummer | Emp Id |
---|---|---|
1 | 1 | 101 |
2 | 2 | 102 |
3 | 3 | 103 |
4 | 4 | 104 |
5 | 5 | 105 |
Lassen Sie uns nun fortfahren und die SQL-Verknüpfungsoperationen für die beiden oben genannten Tabellen ausführen.
Inner Join
Der innere Join wählt alle Zeilen aus beiden Tabellen aus, wenn zwischen den Spalten in beiden Tabellen eine Übereinstimmung besteht.
Syntax
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
Query
default> select c.age,c1.empid from customers c inner join customer_order c1 on c.id = c1.id;
Result
Die obige Abfrage generiert das folgende Ergebnis.
age, empid
-------------------------------
21, 101
23, 102
22, 103
22, 104
33, 105
Die Abfrage entspricht fünf Zeilen aus beiden Tabellen. Daher wird das Alter der übereinstimmenden Zeilen aus der ersten Tabelle zurückgegeben.
Linke äußere Verbindung
Ein linker äußerer Join behält alle Zeilen der "linken" Tabelle bei, unabhängig davon, ob es eine Zeile gibt, die mit der "rechten" Tabelle übereinstimmt oder nicht.
Query
select c.name,c1.empid from customers c left outer join customer_order c1 on c.id = c1.id;
Result
Die obige Abfrage generiert das folgende Ergebnis.
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
customer6,
Hier gibt der linke äußere Join Namensspaltenzeilen aus der Kundentabelle (links) und Empid-Spaltenübereinstimmungszeilen aus der Tabelle customer_order (rechts) zurück.
Right Outer Join
Ein rechter äußerer Join behält alle Zeilen der "rechten" Tabelle bei, unabhängig davon, ob es eine Zeile gibt, die mit der "linken" Tabelle übereinstimmt.
Query
select c.name,c1.empid from customers c right outer join customer_order c1 on c.id = c1.id;
Result
Die obige Abfrage generiert das folgende Ergebnis.
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
Hier gibt der Right Outer Join die Empid-Zeilen aus der Tabelle customer_order (rechts) und die mit der Namensspalte übereinstimmenden Zeilen aus der Kundentabelle zurück.
Volle äußere Verbindung
Der vollständige äußere Join behält alle Zeilen sowohl aus der linken als auch aus der rechten Tabelle bei.
Query
select * from customers c full outer join customer_order c1 on c.id = c1.id;
Result
Die obige Abfrage generiert das folgende Ergebnis.
Die Abfrage gibt alle übereinstimmenden und nicht übereinstimmenden Zeilen sowohl aus den Kunden- als auch aus den Kundenbestelltabellen zurück.
Cross Join
Dies gibt das kartesische Produkt der Datensätze aus den zwei oder mehr verknüpften Tabellen zurück.
Syntax
SELECT * FROM table1 CROSS JOIN table2;
Query
select orderid,name,address from customers,customer_order;
Result
Die obige Abfrage generiert das folgende Ergebnis.
Die obige Abfrage gibt das kartesische Produkt der Tabelle zurück.
Natürliche Verbindung
Ein Natural Join verwendet keinen Vergleichsoperator. Es verkettet nicht wie ein kartesisches Produkt. Wir können eine natürliche Verknüpfung nur durchführen, wenn zwischen den beiden Beziehungen mindestens ein gemeinsames Attribut vorhanden ist.
Syntax
SELECT * FROM table1 NATURAL JOIN table2;
Query
select * from customers natural join customer_order;
Result
Die obige Abfrage generiert das folgende Ergebnis.
Hier gibt es eine gemeinsame Spalten-ID, die zwischen zwei Tabellen vorhanden ist. Unter Verwendung dieser gemeinsamen Spalte wird dieNatural Join verbindet beide Tabellen.
Selbst beitreten
Der SQL SELF JOIN wird verwendet, um eine Tabelle mit sich selbst zu verbinden, als wäre die Tabelle zwei Tabellen, wobei mindestens eine Tabelle in der SQL-Anweisung vorübergehend umbenannt wird.
Syntax
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_filed = b.common_field
Query
default> select c.id,c1.name from customers c, customers c1 where c.id = c1.id;
Result
Die obige Abfrage generiert das folgende Ergebnis.
id, name
-------------------------------
1, customer1
2, customer2
3, customer3
4, customer4
5, customer5
6, customer6
Die Abfrage verknüpft eine Kundentabelle mit sich selbst.