Apache Derby - posiadanie klauzuli
Klauzula HAVING umożliwia określenie warunków filtrujących wyniki grup, które pojawiają się w wynikach.
Klauzula WHERE umieszcza warunki w wybranych kolumnach, podczas gdy klauzula HAVING umieszcza warunki w grupach utworzonych klauzulą GROUP BY.
Składnia
Poniżej znajduje się składnia klauzuli HAVING -
ij> SELECT column1, column2 . . . from table_name GROUP BY column having
condition;
Przykład
Załóżmy, że mamy w bazie danych tabelę o nazwie Pracownicy z 13 rekordami, jak pokazano poniżej -
ID |NAME |SALARY |LOCATION
------------------------------------------------------------------
1 |Amit |30000 |Hyderabad
2 |Rahul |39000 |Lucknow
3 |Kalyan |40000 |Vishakhapatnam
4 |Renuka |50000 |Hyderabad
5 |Archana |15000 |Vishakhapatnam
6 |Krishna |40000 |Hyderabad
7 |Trupthi |45000 |Vishakhapatnam
8 |Raghav |12000 |Lucknow
9 |Radha |50000 |Delhi
10 |Anirudh |15000 |Mumbai
11 |Tara |45000 |Kochin
12 |Sucharita |44000 |Kochin
13 |Rizwan |20000 |Lucknow
Poniższe zapytanie wyświetla maksymalne pensje pracowników w lokalizacji zatrudniającej co najmniej 3 pracowników -
ij> SELECT Location, MAX(Salary) from Employees GROUP BY Location having
count(Location)>=3;
To generuje następujące dane wyjściowe -
LOCATION |2
------------------------------------------------------------
Hyderabad |50000
Lucknow |39000
Vishakhapatnam |45000
3 rows selected
Sortowanie danych za pomocą programu JDBC
W tej sekcji opisano, jak używać klauzuli posiadającej klauzulę w bazie danych Apache Derby za pomocą aplikacji JDBC.
Jeśli chcesz zażądać serwera sieciowego Derby za pomocą klienta sieciowego, upewnij się, że serwer jest uruchomiony i działa. Nazwa klasy sterownika klienta sieci to org.apache.derby.jdbc.ClientDriver, a adres URL to jdbc: derby: // localhost: 1527 /DATABASE_NAME;create = true; user =USER_NAME;passw ord =PASSWORD"
Postępuj zgodnie z instrukcjami podanymi poniżej, aby posortować rekordy tabeli w Apache Derby
Krok 1: Zarejestruj sterownik
Aby komunikować się z bazą danych, należy przede wszystkim zarejestrować sterownik. PlikforName() metoda klasy Classakceptuje wartość String reprezentującą nazwę klasy i ładuje ją do pamięci, która automatycznie ją rejestruje. Zarejestruj sterownik za pomocą tej metody.
Krok 2: Uzyskaj połączenie
Ogólnie rzecz biorąc, pierwszym krokiem, jaki robimy, aby komunikować się z bazą danych, jest połączenie się z nią. PlikConnectionklasa reprezentuje fizyczne połączenie z serwerem bazy danych. Możesz utworzyć obiekt połączenia, wywołującgetConnection() metoda DriverManagerklasa. Utwórz połączenie za pomocą tej metody.
Krok 3: Utwórz obiekt instrukcji
Musisz utworzyć plik Statement lub PreparedStatement or, CallableStatementobiekty do wysyłania instrukcji SQL do bazy danych. Możesz je utworzyć za pomocą metodcreateStatement(), prepareStatement() and, prepareCall()odpowiednio. Utwórz jeden z tych obiektów przy użyciu odpowiedniej metody.
Krok 4: Wykonaj zapytanie
Po utworzeniu instrukcji musisz ją wykonać. PlikStatement klasa zapewnia różne metody wykonywania zapytania, takie jak execute()metoda, aby wykonać instrukcję, która zwraca więcej niż jeden zestaw wyników. PlikexecuteUpdate()metoda wykonuje zapytania, takie jak INSERT, UPDATE, DELETE. PlikexecuteQuery()metoda zwraca dane. Użyj jednej z tych metod i wykonaj instrukcję utworzoną wcześniej.
Przykład
Poniższy przykład JDBC pokazuje, jak używać klauzuli Group By i wykonywać operacje CURD na tabeli w Apache Derby za pomocą programu JDBC. Tutaj łączymy się z bazą danych o nazwie sampleDB (utworzymy, jeśli nie istnieje) za pomocą wbudowanego sterownika.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
public class HavingClauseExample {
public static void main(String args[]) throws Exception {
//Registering the driver
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
//Getting the Connection object
String URL = "jdbc:derby:sampleDB;create=true";
Connection conn = DriverManager.getConnection(URL);
//Creating the Statement object
Statement stmt = conn.createStatement();
//Creating a table and populating it
stmt.execute("CREATE TABLE EmployeesData( "
+ "Id INT NOT NULL GENERATED ALWAYS AS IDENTITY, "
+ "Name VARCHAR(255), "
+ "Salary INT NOT NULL, "
+ "Location VARCHAR(255), "
+ "PRIMARY KEY (Id))");
stmt.execute("INSERT INTO EmployeesData(Name, Salary, Location) "
+ "VALUES ('Amit', 30000, 'Hyderabad'), "
+ "('Rahul', 39000, 'Lucknow'), "
+ "('Renuka', 50000, 'Hyderabad'), "
+ "('Archana', 15000, 'Vishakhapatnam'), "
+ "('Kalyan', 40000, 'Hyderabad'), "
+ "('Trupthi', 45000, 'Vishakhapatnam'), "
+ "('Raghav', 12000, 'Lucknow'), "
+ "('Suchatra', 33000, 'Vishakhapatnam'), "
+ "('Rizwan', 20000, 'Lucknow')");
//Executing the query
String query = "SELECT Location, MAX(Salary) "
+ "from EmployeesData GROUP BY Location having "
+ "count(Location)>=3";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(" ");
}
}
}
Wynik
Wykonując powyższy program, otrzymasz następujące dane wyjściowe -
Hyderabad
50000
Lucknow
39000
Vishakhapatnam
45000