<기획자의 SQL> 저자 - 인사이트
데이터 엔지니어 및 분석가 현업 재직 경험 보유 (SSG.COM, 크몽, 놀이의발견)
SQL 출강 경험 다수 (다수의 기업 및 개인 대상)
강의
수강평
- [개념반]배워서 바로 쓰는 SQL 쿼리
- [문풀반]작정하고 풀어보는 SQL 쿼리 50제 (상)
- [개념반]배워서 바로 쓰는 SQL 쿼리
- [입문반]서버와 인터넷 그리고 데이터 이야기
게시글
질문&답변
디스코드 서버 만료? 참가 권한 없다네요
안녕하세요!기존 초대 링크가 만료되어 당황하셨겠어요. 내용 제보해주셔서 감사합니다.아래 링크를 통해 디스코드 커뮤니티에 참여가능하신지 확인부탁드려요.링크:https://discord.gg/Vk7RRVQg 감사합니다 🙏
- 0
- 1
- 21
질문&답변
리밋 입력 시 에러
안녕하세요 tori061211님답변이 늦어 죄송합니다. 실습 환경인 w3school 내에서 일부 쿼리 기능이 막힌 것으로 보이는데요, LIMIT도 그 중 하나인 것 같아요. 수강생 분들을 위한 개별 실습공간을 따로 만들었습니다. LIMIT도 정상 동작하는 것으로 확인해서 아래의 url을 통해 접속하셔서 실습 진행해주시면 될 것 같습니다. 링크:https://easysqls.w3spaces.com/감사합니다.
- 0
- 2
- 455
질문&답변
쿼리 작성시 작은 따옴표와 큰 따옴표
안녕하세요! 아래에 인프런 인턴이 답변을 이미 작성해줬네요..?!아래에 나온 내용을 참고해주시면 될 것 같은데요, 작은 따옴표와 큰 따옴표 둘 다 문자열(String)을 표현하기 위해 동일하게 사용된다고 봐주시면 돼요. 따라서 둘 다 동일하게 사용하실 수 있는데요 가독성을 위해서는 일관성 있게 사용해주시는게 좋습니다. 다만 일부 DB에 따라서 사용 가능한 따옴표 종류가 지정되어있는 경우도 있기 때문에 데이터베이스에 따라 사용가능한 따옴표를 파악하고 사용해주시면 됩니다. :)
- 0
- 2
- 4.8K
질문&답변
SQLD 자격증 관련 질문
안녕하세요 :) SQLD 시험에 나오는 SQL을 해석하는 유형의 문제나 기본적인 SQL 이론을 이해하는 데에도 쿼리지식이 기반이 되는 것은 맞지만, 본 강의는 SQL 활용에 초점을 두고 있기 때문에 DB관련한 이론과 지식 내용이 포함되어있는 SQLD 시험 대비를 위해서는 추가로 해당 시험에 나오는 유형들을 준비하셔야 할 것으로 보입니다. 이외에 질문 있으시면 편하게 알려주세요. 감사합니다.
- 0
- 1
- 363
질문&답변
PK 컬럼에 대한 DISTINCT 적용
안녕하세요 reinsaz님 질문주셨는데 오래 기다려주셔서 감사합니다. 위의 PK를 대상으로 count를 하는 부분에 대해서 질문을 주셨는데요, 이 부분에 대해서는 단일 테이블이 아닌 상황을 생각하고 말씀드린 것으로 봐주시면 좋을 것 같아요. 강의 내에서 설명이 부족했던 것 같아 부연 설명을 남깁니다. 말씀대로 단일 테이블 내의 PK는 중복되지 않고 null을 허용하지 않기 때문에 테이블 내의 무결성이 확보되었다면 PK의 수 = 전체 row의 수인 것이 맞습니다. 그렇기 때문에 count(*)를 하거나 count(distinct PK)를 하거나 동일한 결과를 보실 수 있을거에요. 실무에서 지표를 추출할 때에는 1:N관계 등의 여러 테이블과 JOIN을 수행하게 되면서 원천 데이터가 PK를 포함하여 중복이 생기는 상황이 발생하는데요, 이 때에 count(distinct PK)를 통해 이러한 중복을 제거하고 추출하고자 하는 지표의 원래 의미에 가장 부합하는 PK 컬럼을 중복없이 카운트해주어야 한다는 의미로 받아들여주시면 좋겠습니다. 추가로 COUNT(DISTINCT PK)COUNT(PK)COUNT(*)각각의 의미에 대해서 질문을 남겨주셨었는데요,count(*)의 경우에는 대상 테이블이 되는 테이블의 모든 행 수를 반환하게 됩니다.count는 각 행에 주어진 인풋값이 할당된 횟수를 보여주는 것이기 때문에 count(1)도 동일하 결과를 보여줍니다.count(PK)도 위와 동일하게 PK라는 컬럼의 모든 카운트 값을 반환해주지만, null값의 경우에는 카운트를 하지 않으며 중복은 제거하지 않습니다.count(distinct PK)의 경우에는 위의 count(PK)와 동일하지만 중복값을 제외하고 카운트해줍니다.이외에 해결되지 않은 부분 있으면 질문 또 남겨주세요.감사합니다.
- 0
- 1
- 536
질문&답변
질문드립니다.
안녕하세요 :)실습환경에서의 like 연산자의 경우에는 대소문자를 구문하지 않는 case insensitive한 조건이 디폴트 값으로 설정 되어있습니다. 실습에 참고 부탁드립니다.저희 실습환경은 모의환경이다 보니 실제 디비환경과는 다를 수 있는데요, 만약 대소문자 구분이 되는 case sensitive한 조건을 설정하고 싶으신 경우 사용하시는 디비에 따라 지원하는 함수가 있는지, 혹은 case sensitive하게 바꿔주는 Syntax가 있는지 등을 확인하시어 적용해주시거나 원래 컬럼값을 대소문자 변경해주는 함수등을 통해 적절히 정제하여 사용해주시면 될 것 같습니다.
- 0
- 1
- 283
질문&답변
질문드리겠습니다.
안녕하세요 :) 혹시 실행 환경을 여쭤볼 수 있을까요?제가 강의한 환경은 크롬 브라우져를 통해 해당 사이트 접속해서 진행했었는데간혹가다 다른 브라우져의 경우 쿼리 해석 조건이 달라지는 경우를 종종 확인하곤 합니다. 실행환경 알려주시면 좀 더 빠른 확인 가능할 것 같습니다. + 소문자로도 크롬 브라우져 상에는 정상실행이 확인돼요. (사진)
- 0
- 1
- 294
질문&답변
질문드리겠습니다.
안녕하세요 :)질문 감사합니다. in에 해당하는 and 조건의 다중 조건 필터링을 질문 주신 것으로 이해했는데요, 잠시 생각해보면 and 조건을 여러개 사용해야 하는 경우는 의미가 없다는 것을 알 수 있습니다. or의 경우는 둘 중 하나라도 참인 경우를 반환하기에 다중 조건이 가능한데요, 한 개의 컬럼에 대한 and 조건은 사실상 의미가 없어집니다. 여러 개의 컬럼이 아닌 한 개의 컬럼 내의 값은 1개 값만 가지고 있기 때문에 A 와 B를 모두 만족하는 값이 없기 때문이에요.
- 0
- 1
- 333
질문&답변
질문드리겠습니다.
안녕하세요 :)질문 감사합니다. 1968-12 년도는 employees 테이블의 가장 첫줄에 등장하는 사원의 생일값이에요. (사진)그루핑을 하지 않고 집계연산을 사용할 경우, DB에 따라 집계연산 사용을 막거나 가장 처음 값을 출력해주곤 합니다. (그루핑과 보통 같이 사용하는 것이 일반적인 용법이에요) 그루핑이 어떻게 작동하는지 살펴보면 이해에 도움이 되는데요, GROUP BY를 사용할 경우 해당 절에 설정해준 값을 기준으로 컴퓨터가 여러개의 주머니를 만들기 위해 해당 컬럼을 처음부터 끝까지 탐색하게 됩니다. 하지만 GROUP BY를 설정하지 않은 경우 birthdate 컬럼의 맨 처음에 등장한 값을 반환하는 것이죠. 그래서 이 경우는 해당 1968-12 값은 대표 기준값이 아닌 단순히 컴퓨터가 맨 처음 값을 반환한 값으로 봐주시면 됩니다.
- 0
- 1
- 282
질문&답변
count(distinct) 구문 오류 질문드립니다.
안녕하세요 지은님, 시간써서 질문 남겨주셔서 감사합니다.ORDER BY가 작동하지 않는 것과 LIMIT이 작동하지 않는 두 가지로 질문 주신 것으로 이해하고 답변을 남길게요. 1.ORDER BY가 작동하지 않는 원인은, ORDER BY절 내에서는 count.. 등의 함수를 사용할 수가 없기 때문입니다. 아래 방법을 단계별로 따라 주시면 좋을 것 같은데요,--> count(distinct CustomerID) 뒤에 as cnt 등으로 원하는 별칭을 설정해주신 뒤--> ORDER BY cnt 로 다시 정렬 수행--> (혹은) ORDER BY 2 와 같이 컬럼 순서에 해당하는 값을 설정하여 정렬(사진)(사진)아마 GROUP BY에서 count 함수를 작성해도 작동이 되는 것을 보셨거나, 컬럼명과 동일한 개념으로 그대로 count(distinct CustomerID)를 작성해주셨을 수 있을 것 같은데요, ORDER BY절에서는 함수명, 혹은 as를 통해 별칭으로 설정해준 명칭, 컬럼의 인덱스(순서)를 통해서만 컬럼 정렬이 가능합니다. 그리고 그 원인은 컴퓨터가 SQL을 실행하는 순서와 연관이 있습니다. 아래를 참고해주시면 이해에 도움이 될 것 같아요. SELECT … ⑤ FROM … ① WHERE … ② GROUP BY … ③ HAVING … ④ ORDER BY … ⑥위와 같이 SELECT 절은 FROM > WHERE > GROUP BY를 거치며 로우 데이터를 모으고 필터링하고 그루핑해서 연산을 할 준비를 하게 됩니다. 그리고 그 이후에 SELECT이 실행되면서 저희가 작성해주었던 count() 등의 함수들이 실행되고 계산값이 나오게 됩니다. 저희 예시에서는 GROUP BY를 국가별로 지정을 해주었으니 여기서는 국가별 회원수 카운팅이 이 지점에서 이루어집니다.ORDER BY가 실행되는 순서는 바로 이 다음인데요, 이미 SELECT절이 실행되면서 컴퓨터의 자원을 써서 다 계산해둔 상태이기 때문에 컴퓨터는 이미 나온 결과값을 정렬하는 작업만을 할 수 있도록 SQL상 설계가 되어있습니다.count(distinct CustomerID)를 ORDER BY에 넣어줄 경우 만약 이게 실행이 가능하다면 이미 SELECT절에서 계산한 값들을 단지 정렬을 위해서 컴퓨터가 다시 계산을 해줘야 합니다. 중복 연산이 발생하게 되는 것이죠. 이런 연산 낭비를 방지하기 위해서 ORDER BY에서는 위와 같이 컬럼명/별칭/인덱스만 사용할 수 있도록 되어있습니다. 이 셋 중 하나를 넣어주시면 잘 작동할거에요. 2혹시 싶어 LIMIT의 경우에는 방금 테스트를 해보았는데 일단은 실습환경 사이트에서는 작동을 하는 것으로 보입니다.(사진) LIMIT을 작성해주신 순서나, 사이트 환경이 다른 것일까 싶은데요, LIMIT이 작동하지 않는다고 말씀주신 해당 쿼리를 공유해주실 수 있을까요?쿼리 공유주시면 확인해보도록 하겠습니다 :) 감사합니다.
- 0
- 1
- 656