Apache Derby - Avere clausola
La clausola HAVING consente di specificare le condizioni che filtrano i risultati del gruppo visualizzati nei risultati.
La clausola WHERE pone condizioni sulle colonne selezionate, mentre la clausola HAVING pone condizioni sui gruppi creati dalla clausola GROUP BY.
Sintassi
Di seguito è riportata la sintassi della clausola HAVING:
ij> SELECT column1, column2 . . . from table_name GROUP BY column having
condition;
Esempio
Supponiamo di avere una tabella denominata Dipendenti nel database con i 13 record come mostrato di seguito:
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
La query seguente mostra gli stipendi massimi dei dipendenti nella posizione che hanno almeno 3 dipendenti:
ij> SELECT Location, MAX(Salary) from Employees GROUP BY Location having
count(Location)>=3;
Questo genera il seguente output:
LOCATION |2
------------------------------------------------------------
Hyderabad |50000
Lucknow |39000
Vishakhapatnam |45000
3 rows selected
Ordinamento dei dati utilizzando il programma JDBC
Questa sezione spiega come utilizzare la clausola Avere una clausola nel database Apache Derby utilizzando l'applicazione JDBC.
Se desideri richiedere il server di rete Derby utilizzando il client di rete, assicurati che il server sia attivo e funzionante. Il nome della classe per il driver del client di rete è org.apache.derby.jdbc.ClientDriver e l'URL è jdbc: derby: // localhost: 1527 /DATABASE_NAME;creare = vero; utente =USER_NAME;passw ord =PASSWORD"
Seguire i passaggi indicati di seguito per ordinare i record di una tabella in Apache Derby
Passaggio 1: registra il driver
Per comunicare con il database, prima di tutto, è necessario registrare il conducente. IlforName() metodo della classe Classaccetta un valore String che rappresenta il nome di una classe e lo carica nella memoria, che lo registra automaticamente. Registrare il driver utilizzando questo metodo.
Passaggio 2: ottieni la connessione
In generale, il primo passo che facciamo per comunicare con il database è connetterci con esso. IlConnectionclass rappresenta la connessione fisica con un server di database. È possibile creare un oggetto connessione richiamando il filegetConnection() metodo del DriverManagerclasse. Crea una connessione usando questo metodo.
Passaggio 3: creare un oggetto istruzione
Devi creare un file Statement o PreparedStatement or, CallableStatementoggetti per inviare istruzioni SQL al database. Puoi crearli usando i metodicreateStatement(), prepareStatement() and, prepareCall()rispettivamente. Crea uno di questi oggetti utilizzando il metodo appropriato.
Passaggio 4: eseguire la query
Dopo aver creato un'istruzione, è necessario eseguirla. IlStatement class fornisce vari metodi per eseguire una query come il execute()metodo per eseguire un'istruzione che restituisce più di un set di risultati. IlexecuteUpdate()metodo esegue query come INSERT, UPDATE, DELETE. IlexecuteQuery()il metodo restituisce i dati. Utilizzare uno di questi metodi ed eseguire l'istruzione creata in precedenza.
Esempio
L'esempio JDBC seguente mostra come utilizzare la clausola Group By ed eseguire operazioni CURD su una tabella in Apache Derby utilizzando il programma JDBC. Qui, ci stiamo connettendo a un database denominato sampleDB (creerà se non esiste) utilizzando il driver incorporato.
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(" ");
}
}
}
Produzione
Eseguendo il programma sopra, otterrai il seguente output:
Hyderabad
50000
Lucknow
39000
Vishakhapatnam
45000