TIL DQL & JOIN

코딩요정·2022년 6월 10일
0

DQL(Data Query Language)

  • 데이터베이스 서버에게 데이터를 달라고 요청하는것!
  • 실제로 현업에서 시니어 아니면 이걸 가장 많이 사용한다고함 (그러니 빼지말고 알아둘것)
  • 실제로 프론트/백엔드 간의 소통을 위한 API를 구현할 때, 데이터베이스에 저장된 데이터를 쿼리해서 가져온 데이터를 응답으로 보내주는 경우가 많다고함.

SELECT

  • 테이블에 저장된 데이터를 조회하기 위한 핵심 쿼리문
  • 테이블에 저장된 데이터 전체를 부르고싶을때는 SELECT * FROM 테이블이름; 을사용하면된다
  • 테이블에 저장된 특정 칼럼값들만 조회하고싶을때도 있다. 그럴때는 방금전에 쓴 DDL, DML 섹션에서 썻듯이 SELECT 칼럼값1,칼럼값2 FROM 테이블이름; 이런식으로 원하는 칼럼값들만 부를수도있다.

WHERE + LIKE 조건문

  • WHERE문은 전에 봤기 때문에 건너뛰기로하고 LIKE로 바로들어가자!
  • LIKE문을 사용하면 문자열에 대해 검색하기가 수월해짐.
  • 예를들어서 어떤 문자열을 포함하는 데이터값, 어떤 문자열로 시작하는, 어떤 문자열로 끝나는 데이터를 찾고싶을때 LIKE문을 사용하면 좋다.
SELECT 칼럼1,칼럼2  FROM 테이블이름 WHERE 칼럼값1 LIKE 'hello%';
// 칼럼값1의 값이 hello 로 시작하면 그 해당하는 칼럼1,칼럼2의 데이터를 불러온다.

JOIN

  • 이거쓸라고 여태까지 앞에 쓴거는 깐거나 다름없다. 가장 중요하고 어려움. 정신똑바로차리자
  • JOIN은 두개의 테이블을 결합한 데이터를 불러올때 사용한다.
  • 두개의 테이블을 연결할때 교집합, 즉 연결성이 있는 칼럼을 사용해야한다.
  • 어떻게 두개의 테이블을 연결??
    - FOREIGN KEY를 사용하면된다.

justgram 예시로 생각해보자

일단 DESC users;와 DESC postings를 확인해서 연결되는 부분이 있는지를 확인!

  • user_id가 1대 N 관계로 연결되어있는것을 확인할수있다.(하나의 유저가 여러개의 포스팅을 올릴수있기때문에.)
SELECT users.nickname, users.profile_image,postings.user_id, postings.contents
FROM users
JOIN postings
ON users.id = postings.user_id; 
  • users 테이블에서는 nickname, profile_image 칼럼을, postings 테이블에서는 contents와 user_id 칼럼을 보고싶어하는 경우.
  • FROM 과 JOIN의 순서는 딱히 상관없지만 그냥 참조를 어디다 하는지를 의미한다.
  • ON 뒤에는 교집합, 즉 연결성이 있는부분을 적어준다. 이 부분이 users테이블과 postings 테이블을 이어주는 역할을 한다고 볼수있다.

결과값:

원하는 데이터들을 잘 불러온것을 볼수있다.

JOIN+ WHERE + LIKE

SELECT users.nickname, users.profile_image,postings.user_id, postings.contents
FROM users
JOIN postings
ON users.id = postings.user_id
WHERE users.nickname LIKE '%Kim%' OR postings.contents LIKE '%db%'; 
  • 불러오는건 위에 쓴 JOIN문과 똑같이 불러왔지만 조건을 추가해주었다.
  • 조건: users.nickname이 Kim을 포함하거나 postings.contents가 db를 포함하는경우
  • 이렇게 조건을 써주면 내가 원하는 조건에 맞춰서 데이터를 불러올수있다.

결과값:

깜짝문제!

1번 users의 이름과, 1번 users의 profile_image, 1번 user가 남긴 posting, 해당 posting에 포함된 댓글, 그리고 포함된 posting_images까지 불러오고자 한다면 어떤 SQL를 작성해야할까요?

SELECT users.nickname, users.profile_image, postings.contents, comments.comment,posting_images.image_url
FROM users
JOIN postings ON postings.user_id = users.id
JOIN comments ON comments.posting_id = postings.id
JOIN posting_images ON posting_images.posting_id = postings.id
profile
용사님 힘을내세요~!

0개의 댓글