문제 상황총 4개의 테이블과 관련 있는 데이터를 뽑아야 하는 상황이다.JPA만을 이용해서 14건의 쿼리가 나가던 것을 MyBatis로 직접 JOIN 쿼리를 작성해서 2건으로 줄였다. 문제 원인 Blog main 화면에 게시글(post) 정보를 나타내야 하는데, 여러 가지 이유로 post_tag와 tag 엔티티를 나눠놨고, member 테이블의 데이터를 하나의 DTO에 담아야 하는 상황이다. DB 설계에 문제가 있을 수도 있고, 비즈니스 요구사항과 정규화를 위해 어쩔 수 없는 것일 수도 있다.이 프로젝트 설계할 당시에는 관련 지식이 거의 없었고, 감으로 설계했다...MongoDB 도입처음엔 쿼리가 너무 많이 나가서, 해당 DTO 조회만을 위한 데이터를 테이블로 빼서 MongoDB Document로 저장..
조인 (Join) 조인(join)은 하나의 쿼리로 두 개 이상의 테이블을 묶어서 불러오는 것을 말한다. Join은 크게 inner, left, right, outer join으로 나뉜다. INNER JOIN 두 개의 테이블 간의 교집합을 나타낸다. A 테이블과 B 테이블에서 조건을 만족하는 row만 조회한다. SELECT * FROM TableA A INNER JOIN TableB B ON A.key = B.key LEFT OUTER JOIN 왼쪽 테이블 A를 기준으로 오른쪽 테이블 B의 일치하는 부분의 레코드와 함께 출력된다. 만약 테이블 B에 일치하는 항목이 없으면 해당 값은 null로 출력된다. A 테이블의 데이터가 모두 출력되지만, 조건에 만족하는 경우 B 테이블의 데이터도 출력되고, 조건에 만족..
SELECT FROM SQL에서 데이터를 조회할 때는 기본적으로 SELECT A FROM B를 사용한다. SQL의 특징 중 하나는 사용하는 구문이 영어 그 자체와 비슷하다는 점이다. SELECT(선택한다) A를 , FROM B (B로부터)라고 해석하면 어느 정도 말이 된다. SELECT CustomerName FROM Customers; 위의 코드는 " 선택한다, CustomerName을, 어디로부터? , Customers 테이블로부터. "라고 해석할 수 있다. 이렇게 간단하면 좋겠지만, 이외에도 WHERE, AS, DISTINCT 등 여러 가지 키워드를 덧붙여서 조금 더 조건에 맞는 데이터를 조회하기 위한 방법들이 있다. 조건을 더하기위해 WHERE을 사용한다. SELECT... FROM... WHER..
table 생성 기본 구조 (attribute명) (DataType) (constraints1) (constraints2) create table member( id bigint primary key, name varchar(20) not null, login_id varchar(20) not null, password varchar(100) not null ); table 삭제 drop table (table_name); 1. PRIMARY KEY 설정 primary key는 table의 tuple을 식별하기 위해 사용한다. 하나 이상의 attribute로 구성되어 있으며, 중복된 값, Null 값을 가질수 없다. primary key 선언 attribute 하나일 때 create table membe..
SQL 데이터타입 SQL에서 사용되는 데이터타입을 알아보자. 대부분 숫자와 문자열을 사용하니까 잘 알아두자. 숫자 1) 정수 INT TINYINT : 1 byte SMALLINT : 2 byte MEDIUMINT : 3 byte INT(INTEGER) : 4 byte BIGINT : 8 byte 2) 실수 (부동 소수점) FLOAT / DOUBLE 고정소수점 방식에 비해 정확하지 않다. FLOAT : 4 byte DOUBLE : 8 byte 3) 실수(고정 소수점) DECIMAL / NUMERIC 실수를 정확하게 저장할 때 사용 (ex) DECIMAL(5,2) : ( -999.99 ~ 999.99 ) DECIMAL / NUMERIC : 변수 문자열 1) 고정 크기 문자열 CHAR(n) CHAR(n) 0