SQL 59

SQL 라이브 세션 2회차

- LIMIT 2,5  : 위에서 2번째빼고 5개 데이터 조회- 와일드 카드 bl% : bl, black, blue 등 bl로 시작하는 모든 단어 조회- 와일드 카드 h_t : hit, hot 등 h t 가 포함되어 있고, 가운데 1글자 포함된 단어 조회- 우선순위를 다 외울 수 없으니  괄호를 잘 활용!- 코드 설명 할 때는 -,# 이용 : 연습할 때 잘 활용해보기COUNT(*)와 COUNT(컬럼명)의 차이- COUNT(*): NULL 포함 모든 데이터를 카운팅합니다. # 행수를 카운트하는 것이기 때문          -> WHERE조건 이용해 NULL 제거 필요- COUNT(컬럼명): 해당 컬럼에서 NULL을 제외한 값이 있는 데이터만 카운팅합니다.서브 쿼리 조건- SELECT문으로만 작성 가능- 반..

SQL/개념 2024.12.23

SQL 라이브 세션 1회차

SQL(Structured Query Language) : 구조화된 질문 언어DML : SELECT 문법만 잘 알아도 데이터 분석에 문제 없음데이터 : 모든 정보 구조화 데이터 : 테이블 형태로 저장, 행과 열로 구성반구조화 데이터 : 완전한 테이블 형태는 아님 (ex. JSON 파일 - 파이썬에서의 딕셔너리와 유사함)비구조화 데이터 : 형식x, 분석이나 저장이 어려움 (ex. 이미지, 동영상) 데이터베이스 : 데이터 저장소MYSQL : 모든 운영체제 실행 가능Oracle : SQLD 자격증 문제 출제 오라클로 진행SQL 텍스트코딩 순서와 실행순서- SELECT절에서 선언한 별명 HAVING절에서 사용 가능 - WHERE(조건이 매 행마다 실행)가 실행된 다음에 HAVING(GROUP BY 후에 실행되는..

SQL/개념 2024.12.23

SQL | 달리기반 Lv4. 단골 고객님 찾기

1. 고객별로 주문 건수와 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요.     - 출력 결과에는 고객 이름, 주문 건수, 총 주문 금액이 포함되어야 합니다. 단, 주문을 한 적이 없는 고객도 결과에 포함되어야 합니다.내 답 : # 1. 고객별로 그룹화 group by customerid# 2. 주문건수 count(*)# 3. 총 주문금액 sum(TotalAmount)# 4 두 테이블 조# 5. 주문한 적 없는 고객도 결과에 포함되어야 SELECT c.CustomerName, COUNT(o.OrderID) OrderCount, COALESCE(SUM(o.TotalAmount),0) TotalSpent FROM Customers c LEFT JOIN ORDERS o ON c..

SQL/문제 2024.12.23

SQL | 달리기반 Lv4. 가장 높은 월급을 받는 직원은?

1. 각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.- Name, Department, Salary- Max(Salary), GROUP BY Department, Name - Top_Earner- Max(Salary), GROUP BY Department - Top_Salary- ORDER BY Department DESC LIMIT - Top_Salary, Top_Earner내 답 : SELECT Name, Department, Salary, Top_Earner, Top_SalaryFROM Employees(SELECT Name Top_Earner, ..

SQL/문제 2024.12.22

SQL | 달리기반 Lv3. 이용자의 포인트 조회하기

- users 테이블에는 있지만 point_users에는 없는 user는 포인트가 없으므로 0 으로 처리- 포인트 기준으로 내림차순 정렬내 답 : SELECT u.user_id, u.email, COALESCE(p.point, 0) point #null일 때 대체값 지정FROM users u LEFT JOIN point_users p ON u.user_id = p.user_idORDER BY p.point DESC ;정답 : SELECT u.user_id, u.email, COALESCE(p.point,0) as pointFROM users uleft JOIN point_users p ON u.user_id = p.user_idorder by p.poin..

SQL/문제 2024.12.22

SQL | 달리기반 Lv2. 날짜별 획득포인트 조회하기

내 답 : SELECT DATE(created_at) created_at, # 날짜 형식 데이터에서 날짜 부분만 추출 ROUND(AVG(point)) average_points # 반올림FROM point_usersGROUP BY DATE(created_at) ;정답 : SELECT DATE(p.created_at) AS created_at, ROUND(AVG(p.point)) AS average_pointsFROM point_users pGROUP BY DATE(p.created_at);- "," 신경쓰기... 이놈때문에 몇 분을 날렸는지..- 데이터랑 결과값이랑 이름이 같을 경우 미리 테이블에 별명을 지어주자!   : 이놈때문에 헷갈려서 몇몇분 날려먹음..

SQL/문제 2024.12.22

SQL | 달리기반 Lv1. 데이터 속 김서방 찾기

내 답 : SELECT COUNT(1) name_cntFROM usersWHERE name LIKE '김%' ;정답 : SELECT count(distinct(user_id)) as name_cntFROM userswhere substr(name,1,1) = '김' ;COUNT(1)=COUNT(*) (NULL 포함)COUNT(칼럼) : NULL 제외DISTINCT : 중복 제거중복되지 않겠거니 라는 안일한 생각..이번에는 결과가 같았지만 데이터 하나 하나 다 확인할 생각 없잖수중복제거도 항시 생각하기SUBSTR도 생각

SQL/문제 2024.12.22

SQL | 걷기반 마지막

다음과 같은 상품(products) 테이블과 주문(orders) 테이블이 있습니다.44. 모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!SELECT o.id "주문 ID", p.name "상품 이름"FROM orders o LEFT JOIN products p ON o.product_id=p.id ;45. 총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!SELECT p.id, SUM(p.price * o.quantity) "총 매출"FROM orders o LEFT JOIN products p ON o.product_id=p.idORDER BY "총 매출" DESCLIMIT 1 ..

SQL/문제 2024.12.22

SQL | 걷기반 10. 이제 테이블이 2개입니다.

다음과 같은 직원(employees) 테이블과 부서(departments) 테이블이 있습니다.38. 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!SELECT COUNT(1) FROM departments ;39. 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!SELECT e.name "직원 이름", d.name "부서 이름"FROM employees e LEFT JOIN departments d ON e.department_id=d.id ;40. '기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!SELECT e.name "직원 이름", d.name "부서 이름"FROM employees e LEFT JOIN department..

SQL/문제 2024.12.22

SQL | 걷기반 9. 아프면 안됩니다! 항상 건강 챙기세요!

의사가 있으면 당연히 의사에게 진료받는 환자가 있겠죠? 아래와 같은 patients(환자) 테이블이 있습니다.34. patients 테이블에서 각 성별(gender)에 따른 환자 수를 계산하는 쿼리를 작성해주세요!SELECT gender, COUNT(1)FROM patientsGROUP BY gender ;35. patients 테이블에서 현재 나이가 40세 이상인 환자들의 수를 계산하는 쿼리를 작성해주세요!SELECT birth_date, COUNT(1)FROM patientsWHERE YEAR(CURDATE())-YEAR(birth_date)>=40 ;36. patients 테이블에서 마지막 방문 날짜(last_visit_date)가 1년 이상 된 환자들을 선택하는 쿼리를 작성해..

SQL/문제 2024.12.22