게시글
질문&답변
2021.11.17
제어문 연습문제 질문
안녕하세요 상열님 첫번째 while문과 두번째 while문의 결과가 다른 것은 조건 조건을 주는 부분에서 헷갈리셨던 거 같아요. a = 10 b = "*" * a print(b) # b값은 "*" * a가 되면서, 값이 **********인 것을 확인. while 0 11: a = a - 1 # a값은 -1 만큼 줄어들고 있음 print(a) # 반복문에서 무엇이 문제 인지 모를 때, 헷갈리는 변수를 중간에 출력하는 것을 추천 print(b) # b 값에 대한 변화가 없기 때문에 **********는 a가 0이 될 때 까지 출력. 결과: 9 ********** 8 ********** 7 ********** 6 ********** 5 ********** 4 ********** 3 ********** 2 ********** 1 ********** 0 ********** ---------------------- while 0 11: a = a - 1 print(a) # a의 값의 변화 살펴보기 b = "*" * a # b와 관련 된 식을 추가했기 때문에 a 값 만큼 ark 모양을 만들 수 있음. print(b) 결과: 9 ********* 8 ******** 7 ******* 6 ****** 5 ***** 4 **** 3 *** 2 ** 1 * 0 즉, b값 변화 식은 아래 조건문에 있었기 때문에 해당 ark가 나왔습니다. 위에서 설명드렸지만, 반복문에서 무엇이 문제인지 모를 때는 해당 변수를 출력해보는 것을 추천드려요 while문을 잘 작성해주셨는데 조건문 관련 변수가 두개(a, b)였기 때문에 더 헷갈리셨던 거 같아요. 이번 기회에 조건문을 작성할 때, 변수를 하나로 작성하는 법을 연습하면 좋을 거 같아요~ a = 10 while a > 0: print("*" * i) a -= 1
- 0
- 2
- 337
질문&답변
2020.08.05
LEFT JOIN할 때 왜 JOIN한 아이디도 NULL이 나오나요?
안녕하세요 희경님~ 강의 중 Customers와 Orders를 LEFT JOIN을 응용하셔서 실습하셨네요~ 일단, 희경님의 질문해주신 LEFT JOIN한 CustomerID가 NULL이 나오는 것은 SQL 사이트의 오류인 것 같습니다. Customers 테이블을 기준으로 LEFT JOIN을 한 것이기 때문에 Customer 테이블 컬럼인 CustomerID에 NULL 나오지 않는 것이 맞습니다~ 혹시 몰라서 CustromerID에 NULL값을 확인했지만 없었습니다~ SQL 코드 1. (사진) SQL 코드 2. (사진) 희경님께서 이해하신 LEFT JOIN 개념이 맞습니다~ 희경님 덕분에 저도 싸이트의 오류를 찾았네요~ 이번 기회에 희경님도 LEFT JOIN 잘 이해하셨으면 좋겠습니다. 감사합니다~
- 1
- 2
- 247
질문&답변
2020.08.04
왜 Inner join인지 모르겠습니다.
안녕하세요~ 수민님ㅎㅎ join 관련해서 질문해주셨는데요~ 질문에 대한 답을 하기 전에 employee와 department 테이블을 예시로 들면서 알려드릴게요~ 두 테이블의 공통 된 컬럼은 part 컬럼인 것을 보실 수 있어요~ employee num name part 1 tony 영업 2 hun 홍보 3 jin 교육 4 young null 5 su null department part floor 영업 7 홍보 5 교육 9 이 두 테이블로 inner join을 한다면, 각 테이블에 공통으로 들어간 값을 가져옵니다. 보통 inner join을 교집합이라고 이해하시면 됩니다~ SELECT * FROM employee INNER JOIN depratment ON employee.prat = department.part; inner join 결과는 공통 된 컬럼이 있는 테이블만 출력 됩니다. num name part part floor 1 tony 영업 영업 7 2 hun 홍보 홍보 5 3 jin 교육 교육 9 (사진) out join은 inner join과 다르게 어떤 테이블을 기준으로 데이블을 출력하느냐에 따라 left join, right join, full outer join으로 분류 됩니다. left join은 왼쪽 테이블을 기준으로 join을 합니다. 조인 조건에 부합하는 데이터가 오른쪽에 있으면 select 하고, 없다면 null 값을 채워넣습니다. SELECT * FROM employee LEFT JOIN department ON employee.part = department.part 결과 테이블을 보면 employee 테이블을 기준으로 join 한 것을 알 수 있습니다. employee.name의 young과 su는 department.part 내용이 없기 때문에 null값이 처리 됐습니다. num name part part floor 1 tony 영업 영업 7 2 hun 홍보 홍보 5 3 jin 교육 교육 9 4 young null null null 5 su null null null (사진) right join은 left join과 반대이기 때문에 오른쪽을 기준으로 합쳐집니다. SELECT * FROM employee RIHGT JOIN department ON employee.part = department.part 결과 테이블이 department을 기준으로 합쳐진 것을 알 수 있습니다. num name part part floor 1 tony 영업 영업 7 2 hun 홍보 홍보 5 3 jin 교육 교육 9 (사진) 많이 기다리셨을 거 같아요~ 수민님께서 질문해주신 질문에 답을 드리겠습니다~ 수민님께서 질문 내용을 한번 정리해봤는데 질문에 대한 내용이 맞지 않을 경우 댓글 달아주세요~ 1. inner join과 left join의 데이터 결과 차이는 NaN인 것 같습니다. NaN이 필요한 때, left join을 사용해도 될까요?? 2. JOIN 문제 풀이 때, inner join을 사용한 이유는 무엇인가요? left join을 쓰면 왜 오답처리 되는지? 3. 수민님 코드 중 inner join 대신 left join으로 작성해서 NULL 값이 추가되었는데 필요없는 데이터인지? NULL 값의 의미. 4. JOIN 할 때, 테이블의 기준. 1번. 네~ 테이블 컬럼과 상황에 따라 다르겠지만, NaN값이 필요하시다면 left/right join을 사용하시면 됩니다~ 하지만, inner join과 left join의 데이터 결과 값 차이가 NaN이라고 이해하시면 안돼요ㅠ inner join에서는 공통 된 값이 나오고, left join은 left 테이블을 기준으로 join 하기 때문에 right 테이블이 NaN값이 나오게 됩니다. NaN값 뿐 만 아니라 left에 있는 값들도 출력 되기 때문에 결과값은 달라집니다. 2번. 문제를 잘 읽어보시면, 공통 된 컬럼 값만 가져오도록 제시했습니다. 공통된 값을 가져오기 위해서는 inner join (교집합)을 사용해야합니다. left join을 사용했을 경우, 공통 된 테이블이 나오지 않기 때문입니다. 3번. null은 아직 정의 되지 않은 값, 미확인 된 값 입니다. 0과 문자 공백이랑 다른 의미이며 값 자체가 존재하지 않다라는 의미를 가지고 있습니다. 4번. 테이블 예시로 테이블의 기준을 어떻게 잡는지 이해하셨을 것 같아요~ 하지만 시각적인 자료가 있으면 더 도움이 될 거 같아 링크 첨부했으니 참고해주세요~ https://sql-joins.leopard.in.ua/ https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
- 1
- 2
- 1.2K
질문&답변
2020.08.04
AS 사용의 위치가 헷갈립니다
안녕하세요 이정님ㅎㅎ AS(별칭)에 관해서 질문해주셨네요~ AS는 질의문(절)의 끝에서 사용합니다. [대상/질의문] AS [별칭명] leetcode의 1179번의 예시를 통해 설명드리자면, SUM(CASE WHEN month = 'jan' THEN Revenue ELSE NULL END) AS Jan_Revenue SUM(CASE WHEN month = 'jan' THEN Revenue ELSE NULL END)의 긴 문구를 AS 를 통해 "Jan_Revenue" 로 간단하게 정리했습니다~ 이와 같이 AS(별칭)은 질의문이 복잡해짐에 따라 명칭이 길어지는 것을 깔끔하게 처리합니다. 또한, AS는 생략 가능해서 아래와 같이 코드를 작성하실 수 있습니다~ 하지만 AS 키워드를 사용하는 것이 깔끔하여 포함시키는 것을 권장해드립니다~ [대상] [별칭명] SUM(CASE WHEN month = 'jan' THEN Revenue ELSE NULL END) Jan_Revenue AS에 대한 궁금증이 잘 해결되셨기를 바라며 질문 감사합니다 :)
- 1
- 1
- 161
질문&답변
2020.08.01
코드 에러 이유를 못찾겠어요
안녕하세요~ Jenna Yeo님~ SQL 오류에 질문 주셔서 답변드립니다ㅎㅎ SQL문을 살펴보니까 맨 마지막에 ;(세미 콜론)을 안넣어주셔서 오류가 작성한 것 같습니다~ 세미콜론은 한 코드가 끝났다는 의미로 사용되기 때문에 (언어 마다 다르지만) 꼭 필요합니다~ ;(세미콜론)을 추가해주시고 코드를 실행해보시면 아래와 같은 결과가 나올 것 같습니다~ 감사합니다ㅎㅎ (사진)
- 4
- 2
- 260
질문&답변
2020.08.01
LIKE '%a%'
안녕하세요 S Jung님, like %에 대해서 궁금하셨군요~ 네 맞습니다~ 만약, '%a%'를 사용하셨다면, 데이터 끝과 데이터 시작 상관없이 a가 포함된 apple(a로 시작하는 단어), bag(a가 포함된 단어), ha(a로 끝나는 단어) 가 검색됩니다~ 감사합니다ㅎㅎ
- 3
- 2
- 204