하지만 우리가 저장을 하고 수정을 하는 행위 이 외에 가장 중요한 것은
어떤 데이터를 어떻게 찾아오고 선택할 것이냐이다. 이 기능을 해주는 것이 sql에서
select 이다. 아래에서 기본적인 형태부터 보자
select * from table;
해석하자면 선택하겠다. 어디서? table에서 하겠다.
select 선택한다 * = 전체를 from 어디에서 table 명에서
그렇다면 table에서 전체를 선택하는 것은 알겠다!
우리가 원하는 것은 전체가 아니다. 원하는 정보를 때에 맞춰서 이것 저것
바꿔서 들고 오고 싶을 것이다.
java 에서는 조건을 주기 위해서 if 문을 쓴다.
sql 에서는 table 뒤에 where 조건절을 붙여 사용한다.
select * from table where id = '1';
여기서 where 뒤에는 조건이 온다. id가 1인 것 즉 ! 해석을 해보자면
찾는다 테이블에서 그런데 어디에서 찾느냐 id가 1인 것에서 찾겠다.
라고 해석이 가능하다.
그 후에 select 뒤의 값들을 전체로 두지 않고 우리가 원하는 값만 얻고싶으면
직접 명시를 해주게 되면 그 것만 받아올 수 있다.
select
*
from
user_mst um
left outer join role_dtl rd on(rd.user_id = um.user_id)
left outer join role_mst rm on(rm.role_id = rd.role_id)
해석을 하자면 그렇다. 왼쪽의 바깥에서 붙이겠다. 어디 왼쪽이냐?
즉 left outer join 의 왼쪽인 user_mst 에서 붙이겠다
role_dtl 을 붙이는데 조건은 이러하다 role_dtl의 user_id와
user_mst 의 user_id의 값이 같은 것 들끼리 붙이겠다.
밑의 조건도 그러한 개념으로 이해한다!
두개의 비교하는 테이블에 비교하는 컬럼의 값이
두 곳 모두 들고 있어야 가능하다.
Outer join은 합집합의 개념이다
LEFT OUTER JOIN은 a 와 b라는 테이블이 있을 때
a가 기준 테이블이고 b테이블이 붙여지는 테이블인 것이고
이때 a의 정보는 전부 가지고오면서 b와 a의 공통적인
부분을 a에 붙이겠다는 의미이다.
이때 a에는 있지만 공통된 부분의 b에 a와 같은 값이
없을 경우 null을 넣어서 반환된다.
a에서 b를 뺀 유일한 a값은 left outer join 후에
where 조건절에서 b의 키값이 null이면 기준으로 잡아주면 된다.
Self join
: 자기 자신의 테이블을 다시 더해주는 느낌 서브쿼리와 같이 쓰는편이다.
public class UserInsert {
public int saveUser(User user) {
int successCount = 0;
DBConnectionMgr pool = DBConnectionMgr.getInstance();
String sql = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = pool.getConnection();
sql = "insert into user_mst\n"
+ "values (0, ?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, user.getUsername());
preparedStatement.setString(2, user.getPassword());
preparedStatement.setString(3, user.getName());
preparedStatement.setString(4, user.getEmail());
successCount = preparedStatement.executeUpdate(); // insert, update, delete 명령 실행 적용된 행의 수가 리턴이된다.
} catch (Exception e) {
e.printStackTrace();
}
return successCount;
}
public static void main(String[] args) {
UserInsert userInsert = new UserInsert();
User user = User.builder()
.username("ababc")
.password("1234")
.name("ababc")
.email("ababc@gmail.com")
.build();
int successCount = userInsert.saveUser(user);
System.out.println("쿼리 실행 성공: " + successCount + "건");
}
}
데이터베이스의 상태를 변환시키는 하나의 논리적 기능을
수행하기 위한 작업 단위 또는 한꺼번에 수행되어야할 일련의
연산을 의미한다.
Commit
커밋 연산은 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때 하나의 트랜잭션이
끝났음을 알려주기 위해 사용하는 연산이다.
Rollback
하나의 트랜잭션처리가 비정상적으로 종료되어
데이터베이스의 일관성을 깨뜨렸을 때
일부 정상적으로 처리되었더라도 원자성을 구현하기 위해
모든 연산을 취소하는 연산이다.