Apache Derby-having 절
HAVING 절을 사용하면 결과에 나타나는 그룹 결과를 필터링하는 조건을 지정할 수 있습니다.
WHERE 절은 선택한 열에 조건을 배치하는 반면 HAVING 절은 GROUP BY 절에 의해 생성 된 그룹에 조건을 배치합니다.
통사론
다음은 HAVING 절의 구문입니다-
ij> SELECT column1, column2 . . . from table_name GROUP BY column having
condition;
예
아래와 같이 13 개의 레코드가있는 데이터베이스에 Employees라는 테이블이 있다고 가정합니다.
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
다음 쿼리는 직원이 3 명 이상인 위치에있는 직원의 최대 급여를 표시합니다.
ij> SELECT Location, MAX(Salary) from Employees GROUP BY Location having
count(Location)>=3;
이것은 다음과 같은 출력을 생성합니다-
LOCATION |2
------------------------------------------------------------
Hyderabad |50000
Lucknow |39000
Vishakhapatnam |45000
3 rows selected
JDBC 프로그램을 사용하여 데이터 정렬
이 섹션에서는 JDBC 애플리케이션을 사용하여 Apache Derby 데이터베이스에서 Have a 절을 사용하는 방법을 설명합니다.
네트워크 클라이언트를 사용하여 Derby 네트워크 서버를 요청하려면 서버가 실행 중인지 확인하십시오. 네트워크 클라이언트 드라이버의 클래스 이름은 org.apache.derby.jdbc.ClientDriver이고 URL은 jdbc : derby : // localhost : 1527 /입니다.DATABASE_NAME;create = true; user =USER_NAME;passw ord =PASSWORD"
Apache Derby에서 테이블의 레코드를 정렬하려면 아래 단계를 따르십시오.
1 단계 : 드라이버 등록
데이터베이스와 통신하려면 먼저 드라이버를 등록해야합니다. 그만큼forName() 수업 방법 Class클래스 이름을 나타내는 String 값을 받아들이고 자동으로 등록하는 메모리에로드합니다. 이 방법을 사용하여 드라이버를 등록하십시오.
2 단계 : 연결하기
일반적으로 데이터베이스와 통신하기 위해 수행하는 첫 번째 단계는 데이터베이스와 연결하는 것입니다. 그만큼Connection클래스는 데이터베이스 서버와의 물리적 연결을 나타냅니다. 다음을 호출하여 연결 개체를 만들 수 있습니다.getConnection() 의 방법 DriverManager수업. 이 방법을 사용하여 연결을 만듭니다.
3 단계 : 문 개체 만들기
당신은 Statement 또는 PreparedStatement or, CallableStatement데이터베이스에 SQL 문을 보내는 개체. 방법을 사용하여 만들 수 있습니다.createStatement(), prepareStatement() and, prepareCall()각기. 적절한 방법을 사용하여 이러한 개체 중 하나를 만듭니다.
4 단계 : 쿼리 실행
문을 만든 후에는 실행해야합니다. 그만큼Statement 클래스는 다음과 같은 쿼리를 실행하는 다양한 방법을 제공합니다. execute()둘 이상의 결과 집합을 반환하는 문을 실행하는 메서드입니다. 그만큼executeUpdate()메소드는 INSERT, UPDATE, DELETE와 같은 쿼리를 실행합니다. 그만큼executeQuery()메서드는 데이터를 반환합니다. 이 방법 중 하나를 사용하고 이전에 만든 문을 실행합니다.
예
다음 JDBC 예제는 JDBC 프로그램을 사용하여 Apache Derby의 테이블에서 Group By 절을 사용하고 CURD 작업을 수행하는 방법을 보여줍니다. 여기서는 임베디드 드라이버를 사용하여 sampleDB (존재하지 않는 경우 생성)라는 데이터베이스에 연결합니다.
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(" ");
}
}
}
산출
위의 프로그램을 실행하면 다음과 같은 출력이 나타납니다.
Hyderabad
50000
Lucknow
39000
Vishakhapatnam
45000