
안녕하세요
또 새로운 한주가 시작됐네요 !! 😇
내일까지는 파이썬 문법 세션이구요
모레부터는 데이터 전처리+시각화에 대해 배웁니다 !!
그렇기 때문에 내일까진 파이썬 복습만 주구장창할 예정입니다 😊
🖌️ 55번 문제 - 조건에 맞는 사용자 정보 조회하기
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회해주세요.
이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
바라는게 되게 많으시네
중고 거래 게시판 정보를 담은 USED_GOODS_BOARD
중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_USER
테이블이 두 개인데요
먼저 회원 id와 작성자id로 두 개 테이블 조인 시켜주세요 !
SELECT U.USER_ID,
U.NICKNAME,
CONCAT(U.CITY,' ', U.STREET_ADDRESS1,' ',U.STREET_ADDRESS2) AS '전체주소',
>> 시, 도로명주소, 상세주소 모두 합산 / 따옴표+띄어쓰기 이용해서 문자 간격 적용
CONCAT(SUBSTR(U.TLNO,1,3), '-', SUBSTR(U.TLNO,4,4), '-', SUBSTR(U.TLNO,8)) AS '전화번호'
>> 전화번호 하이픈 삽입 후 전화번호 형식 생성
FROM USED_GOODS_BOARD B JOIN USED_GOODS_USER U ON B.WRITER_ID=U.USER_ID
GROUP BY U.USER_ID
HAVING count(U.USER_ID) >= 3 >> 게시물 3개이상 작성한 회원 조회
ORDER BY 1 DESC 회원id 기준 내림차순

저도 정말 오랜만에 concat을 써봤는데요 ㅋㅋㅋㅋㅋ
까먹을 수도 있었는데 전에 까먹을까봐 책상 앞에 포스트잇으로
concat이랑 substr 공식 써놨는데 이걸 요러케 쓰네요 ,,
그리고 주소 합산하는 과정에서 띄어쓰기 안 해주면 정답 처리를 안 해주네요 ,,
개야박
아무튼 이렇게 쓰시면 정답처리 완👍
🖌️ 58번 문제 - 취소되지 않은 진료예약 조회하기
PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회해주세요.
진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.
이번엔 테이블이 3개나 있네요 ,,
그래서 사실 오답제출을 엄청나게 했습니다 ^~^
결국 질문하기로 도움 받아서 쿼리 작성했네요 ,,,
SELECT A.APNT_NO, P.PT_NAME, A.PT_NO, A.MCDP_CD, D.DR_NAME, A.APNT_YMD
>> 메인 쿼리에서 6개 컬럼 추출
FROM (SELECT *
FROM APPOINTMENT
WHERE APNT_CNCL_YN="N"
AND MCDP_CD LIKE '%CS%') A >> 해당 테이블 별칭 A
>> 예약 취소 여부 - no
진료과 코드 - CS 추출
JOIN PATIENT P ON P.PT_NO = A.PT_NO >> 환자번호로 조인
JOIN DOCTOR D ON D.DR_ID = A.MDDR_ID >> 의사id로 조인
WHERE APNT_YMD LIKE '%2022-04-13%'
ORDER BY A.APNT_YMD >> 진료예약일시를 기준으로 오름차순

문제를 보면
테이블 3개 중에 APPOINTMENT 테이블 속 취소 되지않은 진료 내역을 찾아야되기 때문에 APPOINTMENT 테이블만 따로 서브쿼리 만들어주고
남은 테이블 2개는 각각 APPOINTMENT와 join 시켜주면 됩니다 !
한줄한줄 따져보면 정말 쉬운데
테이블 3개라 당황했네요 ㅎㅎ,,

근데 사실 데이터 자체가 그냥 4월 13일에
취소되지 않은 예약 내역은 하나 뿐입니다...
그냥 스크롤 내려서 찾으면 더 간단할 거 같은데 왜 시키세요
아무튼 정답처리 👍

< 들여쓰기의 중요성 >
예시를 보면
제가 첫번째로 작성한 코드는 if가 모두 참이기 때문에
2개 다 출력되었지만,
두번째로 작성한 코드는 첫 if문이 거짓이라
부속된 if문이 참이더라도 출력이 되지 않고
else로 출력되는 걸 알 수 있었습니다 !
두번째 코드를 보시면 들여쓰기가 돼있기 때문에
들여쓰기가 안된 elif였다면 출력될 수 있었지만
if 속 if 약간 .. 1-2문제 이런거? 부분 점수 주는 그런 문제처럼
되어있는 방식이라 아예 else가 출력됩니다 ㅎㅎ

보이는 거처럼 들여쓰기를 하지 않는다면
조건 3개 모두 다 독립된 조건으로 구분되기 때문에
두번째 코드만 출력되는 걸 알 수 있네요 ㅎㅎ

< 논리연산자 and >
다중 조건문 예시를 보면
저는 x가 0보다 크고 짝수인지 홀수인지 판단할 조건을 줬는데요
이 코드에선 제가 and를 썼기 때문에
조건 2개 모두 충족해야 출력이 됩니다 !
위에 있는 건 짝수임이 분명하기에 짝수라 출력되구요
아래는 홀수임이 분명하기에 홀수로 출력됐답니다 !!

< 논리연산자 or >
여기서는 제가 or로 써줬기 때문에
다중 조건 중 하나라도 맞을 시에 출력이 되는데요
x가 0보다 큰 건 맞지만, 짝수는 아니에요 !!
원래 and를 썼으면 출력이 안됐겠지만 제가 or로 썼기 때문에
0보다 크다는 조건이 맞아 출력이 된 거랍니다

< 논리연산자 not >
not은 말그대로 아니라는 뜻을 지닙니다
위에선 제가 조건을 하나만 해줬는데
2로 나눴을 때 나머지가 0 이라는 조건에
'아니다' 라는 not을 써줬기 때문에
17을 2로 나눴을 때 나머지가 1로 나오기 때문에 위는 조건이 부합하지 않지만 !!
제가 not을 쓰고 조건에 부합해졌기 때문에
출력이 잘 됐답니다 ㅎㅎ

그리고 반복문 !!
range()함수는 연속된 정수를 만드는데 사용되는 내장 함수- 이 함수는 시작값(start), 끝값(stop), 그리고 증가값(step)이 내재
그렇기 때문에
저는 range함수를 불러서 숫자를 0부터 10까지 부르거나
0부터 50까지 불러주고 10씩 숫자를 건너 띈다?! 약간 요런 느낌
그리고 마지막에 출력할 때 변수명과 함께 end='띄어쓰기 칸'
이렇게 써주면 따옴표 안에 띄어쓰기를 한만큼 출력 시에 숫자 간격이 생깁니다 ㅎㅎ

< 딕셔너리 순회하기 >
이번엔 딕셔너리를 반복문으로 불러올 수 있는데요 !
기존 딕셔너리를 출력하면 가로로 펼쳐졌지만
반복문을 사용해주면 세로로 펼쳐집니다
그리고 마지막 print 해줄 때
키 밸류 사이에 따옴표를 넣고 그 안에 : 이나 - 을 써주면
그대로 그 사이에 구분이 돼서 더 가독성도 좋습니다 ㅎㅎ

< 조건문과 반복문을 이용한 특정문자 제거하기 >
tect(변수명1)="kim kang min" >> 변수에 김강민이라는 문자 담겨있음
result="" >> 새로운 빈 변수를 만들어줬음(아직 아무 값도 없음)
for ming(변수명2) in tect: >> 새로운 변수 안에 변수명1 값 넣기
if ming != "k":
>> 값을 넣지만 그 안에 k와 같지 않은 것만 넣어라
result+= ming
>> 아까 만든 빈 변수에 변수명2에 들어간 값을 그대로 넣어라
print(result) >>
쓴 코드를 이렇게 풀어서 써봤어요 !!
그리고
result += ming이라는 코드는
result = result+ming
이랍니다 !
한마디로 조건문이 모두 끝났으면 닫아주는 형식, 값을 완벽히 담아주는 형식으로
가독성 좋게 +=라고 표기를 했을 뿐
빈 변수 안에 값을 넣어준 거랍니다 !!
그렇기 때문에 사진에 화살표를 따라가보면
첫 번째 코드는 hello world에 o이 빠졌구요
두 번째 코드 kim kang min에선 k가 빠진 걸 알 수 있습니다 ㅎㅎ
오늘은 파이썬을 집중적으로 복습해봤는데요 ㅎㅎ
내일까지 파이팅입니다 !
🏃♀️💨💨💨