데이터베이스 9

[queryDsl] Q-type Class 는 도대체 왜 만드는건가?

Q-type class QueryDSL 설정을 성공하면 @Entity가 붙은 클래스를 찾아 자동생성된다. 예를 들어 @Entity가붙은 Member.kt 클래스가 있다면 QMember.kt 파일이 자동생성된다. repositoryImpl에서 쿼리를 날릴때 메소드 기반으로 쿼리를 작성할 때 우리가 만든 도메인 클래스 구조를 설명해주는 메타데이터역할을 하며 쿼리의 조건을 설정할 때 사용하려고 만드는것이였다. 작성글 삭제하는 쿼리이다. @Entity가붙은 Member.kt 클래스가 있다면 QMember.kt 파일이 자동생성되면서 알아서 객체 이름만 맞춰준다면 쿼리를 코드처럼 편하게 짤 수 있다. override fun deleteBoard(userId: Long, board_id: Long): Boolean ..

SQL 예제를 통한 LEFT JOIN에 대해 알아보기

틱택토 게임 프로젝트 기능 중 사용자 정보와 승패전적을 함께 업데이트해야하는 페이지가 있다. 이 때 나는 게임회원정보를 담고있는 테이블과 승패전적을 담고있는 테이블의 PK를 조인하여 아래와 같이 내 정보에서 내 아이디와 승패 전적을 띄우는데 성공하였다. 여기서 예제를 알아보기 전에 Join에 대해 알아보자 JOIN이란? 검색하고 싶은 컬럼이 다른 테이블에 있을 경우 사용하며 여러개의 테이블을 하나의 테이블인 것처럼 활용하는 것이다. 보통 Primary key 혹은 Foreign key로 두 테이블 연결하여 사용한다. left outer join, left join 왼쪽 테이블 기준으로 join한다. 기준 테이블의 결과 + 기준 테이블의 중복값을 보여준다. //LEFT OUTER JOIN SELECT A...

MySQL / MariaDB 페이지네이션 쿼리 작성하는 법

이번에 틱택토게임을 진행하면서 게임방목록을 만들 때 위와 같은 화면과 같이 페이징 처리를 해야해서 페이징 쿼리를 진행하였다. 먼저 페이징 쿼리에 필요한 값에 대해 알아보자 Limit 한 페이지에 출력할 데이터의 양 offset Limit*(페이지 번호-1) 페이징 쿼리는 보통 이 구문을 이용하면된다. SELECT * FROM 테이블명 LIMIT #{limit} OFFSET #{offset} 내가 페이징할 때 날린 쿼리는 SELECT * FROM game_kde order by seq desc limit 10 offset #{offset};

TIL 37일차 SQL 데이터베이스 #NULL의 개념과 Not NULL의미

Primary Key를 나타내는 위 사진의 체크박스에 체크를 할 때 DataType 열에 NN이라는 체크박스 보이시나요? NN이라고 써진 부분의 체크박스도 자동으로 같이 체크가 되어있습니다. 왜 체크가 되어있을까요? 그 전에 NN은 무슨 뜻일까요?! NN은 NOT NULL의 줄임말입니다! 즉 NULL이 아니다라는 뜻!! 흠 근데 NULL은 도대체 뭔데...? NULL은 데이터베이스에서 굉장히 중요한 개념이니까! 기억하면서 보기! NULL은 특정 컬럼에서 값이 존재하지 않을 때 값이 존재하지 않는 그 상태를 나타내기 위해서 사용되는 키워드입니다! 멤버테이블을 확인해보면 NULL, 즉 어떤 값이 없음을 나타내고 있는걸 볼 수있어요! 더 정확히 말하면 키 속성의 값이 없다는 뜻! 근데 여기 조심해야할 것 ! ..

TIL 36일차 SQL 데이터베이스 #key

오늘은 SQL key값에 대해 알아보도록해요 ! primary key 테이블에서 하나의 Row를 고유하게 식별할 수 있도록 해주는 column을 primary key라고 합니다! 그러면 member 테이블의 primary key가 바로 id컬럼이라는 사실! 그러면 특정 칼럼을 Primary Key로 설정하면 Primary key에 같은 값이 있는 row가 추가되는 것을 DBMS가 자동으로 막아주기 때문에 중복된 row가 생길 위험성이 사라집니다! Natural Key 실제로 어떤 개체가 갖고 있는 속성을 나타내는 컬럼이 Primary key가 됐을 때, 이를 Natural Key라고 합니다. 사람은 주민등록번호로 특정인물을 식별하죠? 우리가 읽는 여러 책들도 책 코드로 분류하여 식별하기도 합니다! 전 포..

TIL 35일차 SQL 데이터베이스 #생성된 테이블 확인하기

member 테이블을 잘 생성했다면 일단! member 테이블에 어떤 컬럼들이 있는지 알아볼까요? 어떤 테이블에 컬럼 구조를 보려면 위 사진의 왼쪽 스키마 창에서 테이블 이름에 마우스를 올렸을 때 뜨는 세 아이콘 중에서 두번 째 아이콘을 클릭하면 됩니다 ! 그럼 아래에 멤버테이블을 한번에 확인할 수 있다는 사실 ~!! 근데 mySQL 다크모드는 맥북에만 지원된다고 하네요? 조금 sad합니다...

TIL 34일차 SQL 데이터베이스 #데이터베이스 생성해보기

My SQL에서는 데이터베이스를 스키마라고도 합니다! 앞으로 우리가 접속할 MySQL 서버의 모든 데이터베이스는 앞으로 왼쪽! 스키마 영역에 보이게 될것입니다! 데이터베이스를 생성하는 SQL문에 대해 알아봅시다! CREAT DATABASE 데이터베이스를 생성하라는 뜻인데요 그 뒤에 우리가 만들고 가공할 데이터 베이스의 이름을 적어주면됩니다! 저는 DANY로 정해볼게요! DANY의 데이터베이스들 중에서 메인으로 쓸 데이터베이스라는 의미로 dany_main이라고 지었습니다 ㅎㅎ 앗! SQL문을 실행하려면 번개버튼을 클릭도 하고 새로고침을 해야 dany_main이라고 하는 데이터베이스가 잘 보이겠죠~? 너무 너무 쉽죠.....?????!!!!!!!!!!

TIL 32일차 SQL 데이터베이스 #행과 열

데이터 베이스 안에서 데이터가 저장되는 기본단위가 테이블이라고 합니다. 테이블은 표 형식으로 저장된 데이터의 집합을 의미합니다. 학번 이름 전공 성별 20204171 김다은 국제무역학과 여 20202123 이지안 산업디자인학과 남 20160932 도경석 화학공학과 남 20198443 주하영 기계공학과 여 20198732 정나위 통계학과 남 어느 한 대학교의 학생정보를 정리한 것입니다. 학생들의 학번, 이름, 성별이 잘 정리되어있죠? 여기서! 테이블에 관해 꼭 알아야하는 용어들이 있습니다! 위의 표를보면 표 한줄 한줄 이 한생 한명을 나타내는 정보라는 걸 알 수있습니다. 이렇게 어떤 개체 하나를 나타내는 단위를 로우(row)라고 합니다! 여기서 로우는 행이라는 뜻인데요~! 그러니까 위에 표는 5개의 로우가..

TIL 31일차 SQL 데이터베이스 #DBMS와 서버 - 클라이언트 구조

client(클라이언트 프로그램) 사용자가 server에 접속해서 원하는 데이터베이스 관련 작업을 할 수 있도록, SQL을 입력할 수 있는 화면 등을 제공하는 프로그램 server(서버 프로그램) client로부터 SQL 문 등을 전달받아 데이터베이스 관련 작업을 직접 처리하는 프로그램 (DBMS라고 할 때, 좁은 의미로 이 server 부분만을 가리키는 경우도 있어요!) 위 그림에서 여러 client들이 server에 접속하는 모습이 보이시죠? 대부분의 DBMS가 이런 식으로 client를 통해 server에 접속하는 구조로 되어 있습니다. 그리고 자세히 보면 server 안에 DB(데이터베이스)가 포함돼있죠? 사실 데이터베이스는 DBMS와 분리된 것이 아니고!!! 이렇게 server가 직접 저장하고 ..