[SQL] 쿼리 예제

Minit88·2023년 3월 30일

SQL

목록 보기
4/4
post-thumbnail

테이블 소개


위 그림처럼 테이블이 구성되어질 때 각 조건을 충족하는 쿼리문을 작성한다.

예제

예제1

TODO: Q 3-1-1. category 테이블의 구조를 보기위한 SQL을 작성해주세요.
-> DESC category;
[그림] 위 코드 출력화면

예제2

TODO: Q 3-2-3. 어느 role에도 속하지 않는 user의 모든 컬럼 데이터를 찾기위한 SQL을 작성해주세요.

  • 어느 role에 속하지 않는 것은 user.roleId가 NULL 이라는 뜻이다.

->SELECT * FROM user WHERE user.roleId IS NULL;
으로 작성된다.

예제3

TODO: Q 3-2-2. user의 name과 email 그리고 그 user가 속한 role name(컬럼명: roleName)을 찾기 위한 SQL을 작성해주세요.
속한 role이 없더라도, user의 name과 email,role name을 모두 찾아야합니다.

  • user와 roll이 속하는 조건과 속한 role이 없더라도 표시해야하는 조건을 충족시키기 위해선 LEFT JOIN을 사용한다.

-> SELECT user.name,user.email,role.name AS roleName FROM user LEFT JOIN role ON user.roleId = role.id;

예제4

TODO: Q 3-2-5. minsanggu이 작성한 content의 title을 찾기위한 SQL을 작성해주세요.

  • minsanggu가 작성한 content title을 찾기 위해서는 content의 userId가 minsanggu에 해당하는 user id 로 만족해야한다. 이를 충족하기 위해서는 WHERE 을 사용하여 userId를 검사한다
  • minsanggu에 해당하는 userId는 1이다

-> SELECT content.title FROM content WHERE userId = 1

예제5

TODO: Q 3-2-6. minsanggu이 작성한 content의 category name을 찾기위한 SQL을 작성해주세요.

  • 해당 문제는 join table을 활용해 content.userId =1 임과 동시에 content.id = category_content.contentId 가 같이야 하고, category_content.categoryId = category.id 를 만족할 때의 category.name을 출력해야 한다.
  • 위 조건을 충족하기 위해서는 and를 사용해 where을 구현한다.

-> SELECT a.name FROM category a , content_category b, content c WHERE c.userId = 1 and c.id = b.contentId and b.categoryId = a.id;

예제6

TODO: Q 3-2-9. teawoongna가 작성한 글의 개수 (컬럼명: ContentCount)를 출력하기 위한 SQL을 작성해주세요.

  • 해당 문제는 teawoongna가 작성한 글의 개수를 구하는 문제이므로, count() 를 사용했었다.
  • teawoongna가 작성한 조건은 WHERE을 이용해 teawoongna의 id인 5에 해당하는 content 개수를 count 하여 출력했다.

-> SELECT COUNT(*) AS ContentCount FROM content c WHERE c.userId=5;

예제7

TODO: Q 3-2-10. 각 user(컬럼명: name)가 작성한 글의 개수 (컬럼명: ContentCount)를 출력하기 위한 SQL을 작성해주세요.

  • 각 user가 작성한 글의 개수를 출력하기 위해서 일단 개수에 해당하는 username을 추가로 출력해야 했다.
  • 즉, SELECT는 username,count() 로 구현해야 한다.
  • count()를 적용할 변수는 글이므로 id가 들어가게 된다.
  • 작성한 글이 없는 경우에도 0을 출력해야 하기 때문에, 해당 문제는 LEFT JOIN으로 user에 LEFT JOIN content를 진행했고, 이때 필터링은 자신이 쓴 글임을 확인하는 것이므로 content.userid = user.id로 작성했다.
  • 이때 이름으로 group by를 진행하였다.

-> SELECT user.name,COUNT(content.id) AS ContentCount FROM user LEFT JOIN content ON content.userid = user.id GROUP BY user.name;

예제8

TODO: Q 2-9. content의 데이터를 수정하기 위한 SQL을 작성해주세요. - title이 database homework인 content 데이터에서 body를 database is very easy로 수정해야합니다.

  • 데이터를 수정하기 위해서는 UPDATE를 사용했으며 없데이트할 내용은 SET을 이용했다.
  • 추가 조건을 충족시키기 위해 WHERE을 사용했다.

-> UPDATE content SET body = 'database is very easy' WHERE title = 'database homework';

예제9

TODO: Q 2-5. user 테이블에서 특정 조건을 가진 데이터를 찾기위한 SQL을 작성해주세요. - 조건 : name이 luckykim이 아니여야 합니다.

  • 조건을 충족시키기 위해 WHERE 과 NOT을 사용하였다.

-> SELECT * FROM user WHERE NOT name='luckykim';

예제10

TODO: Q 1-1. 현재 있는 데이터베이스에 존재하는 모든 테이블 정보를 보기위한 SQL을 작성해주세요.
-> SHOW tables;

profile
" To be BE "

0개의 댓글