목록프로그래밍/SQL (13)
Seung's Learning Record
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6aAWS/btsGRghaxFg/VOfRY7eUblLzEiPWHqHKZ0/img.png)
목차 관계형 데이터베이스 (RDBMS) 개념 관계형 데이터베이스는 데이터를 테이블 형식으로 저장하고 관리하는 데이터베이스 시스템이며, SQL 언어로 데이터를 조작할 수 있다. 관계형 데이터베이스는 크게 프로덕션 데이터베이스와 데이터 웨어하우스로 종류를 나눠볼 수 있다. 프로덕션 데이터베이스 프로덕션 데이터베이스는 주로 실시간 트랜잭션 처리(OLTP, Online Transaction Processing)를 위해 설계된 데이터베이스이다. 이 데이터베이스는 업무 처리, 주문 처리, 고객 관리 등의 다양한 업무 프로세스를 지원하기 위해 사용되기 때문에 처리 속도에 집중된 데이터베이스이다. MySQL, PostgreSQL, Oracle 등 백엔드 개발자들이 다루는 데이터베이스가 이에 속한다. 해당 데이터베이스는..
관계형 데이터베이스(RDB) 는 데이터를 행과 열로 이루어진 테이블의 형태로 구성하고, 테이블 간의 관계를 정의하는 데이터베이스이다. 이번 시간에는 간단한 수강신청 예시를 통해 관계형 데이터베이스에서 각각의 용어들이 어떤 의미를 가지고 있는지 알아보자. 테이블(table) 테이블이란 데이터베이스에서 행과 열로 구성되어 있는 데이터의 집합을 의미한다. 학생 정보를 저장하는 테이블 student와 강의 정보를 저장하는 class 테이블이 있다고 하자. student Student_Id name Class_Id 1 철수 A 2 영희 B 3 훈이 A class Class_Id Class_name A 수학 B 영어 열(colum) 관계형 데이터베이스에서 열(column)은 테이블에 존재하는 필드(field)를 나..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vMUtS/btsFegaLKqC/UvagvxGHknpenOyMtDkqM1/img.png)
소요시간 : 19분 사용한 풀이법 : SET, 서브쿼리, GROUP BY 풀이 과정 1. 0-23시까지 모든 시간을 표시하기 위한 @hour 변수 선언 2. -1로 초기값을 준 뒤, +1을 해가며 hour이 23이 될 때 까지 진행 3. 서브쿼리에선 datetime의 시각이 hour와 동일한 경우에 그룹화 하여 카운트를 진행 작성 코드 set @hour := -1; select (@hour := @hour+1) as HOUR, ifnull((select count(animal_id) from animal_outs where hour(datetime) = @hour group by hour),0) as COUNT from animal_outs where @hour < 23 order by 1 작성 코드 처..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/1bXpI/btsE92khQld/cHUfoQY0tyvTf0JOgWuWb1/img.png)
SELECT A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS, ROUND(AVG(B.REVIEW_SCORE),2) AS SCORE FROM REST_INFO A JOIN REST_REVIEW B ON A.REST_ID = B.REST_ID WHERE A.ADDRESS LIKE "서울%" GROUP BY B.REST_ID ORDER BY SCORE DESC, A.FAVORITES DESC 소요시간 : 14분 사용한 풀이법 : JOIN, GROUP BY 풀이 과정 1. 두 테이블을 REST_ID를 통해 JOIN 2. 식당 주소가 서울로 시작하는 곳을 조건으로 거르기 3. 같은 식당끼리 그룹화 4. 해당 식당의 점수들을 평균내기 5. ROUND()함수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rv84j/btsFcPYb86p/EiRnGEjHhv82koUdEPGkNK/img.png)
소요시간 : 13분 사용한 풀이법 : INNER JOIN 풀이 과정 1. 주문 정보 테이블에 주 성분 테이블을 Inner join 2. 각각의 테이블에서 문제가 요구한 조건은 WHERE 절을 통해 충족 작성 코드 SELECT FIRST_HALF.FLAVOR FROM FIRST_HALF JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR WHERE FIRST_HALF.TOTAL_ORDER > 3000 AND ICECREAM_INFO.INGREDIENT_TYPE LIKE 'fruit%'; 피드백 JOIN을 쓰면 되는걸 알면서도 SELECT 섹션에 있는 문제니까 join 안써도 되겠지!하고 오기부리다가 결국 JOIN 썼다. 오기는 똑똑한 사람만 부려..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cnUaDl/btsE94vvUKD/quxyepDchZ2qZ4D5qCH64k/img.png)
소요시간 : 9분 문제 유형 : SELECT, UNION ALL 풀이 과정 1. 각각의 테이블에서 원하는 데이터를 선택 2. UNION ALL 을 통해 중복을 유지하면서 통합 3. 기준에 맞게끔 정렬 작성 코드 SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE WHERE SALES_DATE LIKE '2022-03-__' UNION ALL SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT FROM OFFLINE_SALE WHERE SALES_DATE LIKE..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZ2GWf/btsFb6seA5h/KHiU5fy2goSpqB7hBYqD3K/img.png)
소요시간 : 7분 문제 유형 : SELECT 풀이 과정 1. WHERE 조건을 통해서 3월생 찾기 1.1 SQL 날짜 함수 이용 1.2 LIKE 이용 작성 코드 SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d") AS DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER = 'W'AND TLNO IS NOT NULL AND # MONTH(DATE_OF_BIRTH)= 3//날짜 함수를 이용하는 방법 # DATE_OF_BIRTH LIKE '%-03-%'//LIKE의 % 이용하는 방법 DATE_OF_BIRTH LIKE'____-03-__'//LIKE의 _ 이용하는 방법 ORDER BY MEMBE..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DNw4I/btsE6BHgKxy/s39XBKAvbGoVSVj3ddUg20/img.png)
소요시간 : 8분 문제 유형 : SELECT, GROUP BY 풀이 과정 1. USER_ID와 PRODUCT_ID로 그룹화 2. 동일한 요소들끼리 묶이게 됨 3. HAVING을 통해 USER_ID든 PRODUCT_ID든 그 수가 2 이상인 것들을 탐색 작성 코드 SELECT USER_ID,PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID,PRODUCT_ID HAVING COUNT(PRODUCT_ID)>1 ORDER BY USER_ID ASC, PRODUCT_ID DESC; 피드백 GROUP BY의 실행이 정확히 어떤 식으로 이루어지는지 잘 몰라서 집계함수를 써야되는 것을 알고있음에도 불구하고 좀 헤맸음. 다른것들은 몰라도 중요한 구문들은 확실이 이해하고 암기해야함을 또 다시..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beBUa9/btsE2CfFBzl/qIcN3MPIiapTfUd4tx0rb0/img.png)
소요시간 : 6분 문제 유형 : SELECT 작성 코드 SELECT PT_NAME, PT_NO, GEND_CD, AGE, ifnull(TLNO,'NONE') TLNO FROM PATIENT WHERE AGE
JOIN을 통해 두 개 이상의 테이블을 연결해서 원하는 결과를 만들어 낼 수 있다. 이 때 테이블의 조인을 위해서는 기본키와 외래키가 연결되어야 하며, 이를 일대다 관계라고 한다. JOIN의 종류에는 아래와 같은 것들이 있다. INNER JOIN(내부 조인) : 두 테이블에서 공통된 값을 가지는 행들을 반환 OUTER JOIN(외부 조인) : 두 테이블에서 공통된 값을 가지지 않는 행들도 반환 LEFT OUTER JOIN : 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 왼쪽 테이블과 공통된 값을 가지는 행들을 반환 RIGHT OUTER JOIN : 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 오른쪽 테이블과 공통된 값을 가지는 행들을 반환 FULL OUTER JOIN : 두 테이블에서 모든 값을 반환 CRO..