SQL 76

[TIL] SQL 베이직 - 3회차

1. UNION 여러 개의 SELECT 문의 결과를 하나의 테이블로 연결하여 보고 싶을 때 사용한다. UNION을 사용할 때는 두 SELECT문의 열과 개수, 순서, 형식이 모두 동일해야 한다. 중복을 제거하고 하나로 표기하고 싶다면 UNION만 사용하고 중복을 제거하지 않고 모두 표기하고 싶다면 UNION ALL로 표기한다.# union/union all 기본구조select name, goods_nm, pay_date # 컬럼 순서가 같고, 그 형식이 같아야 함 from 테이블명1union (all) #수직결합 명시select name, goods_nm, pay_date # 컬럼 순서가 같고, 그 형식이 같아야 함 from 테이블명 2 ; 2. DB 정규화 정규화는 데이터베이스의 데이터 정합성을 위해..

[TIL] SQL 챌린지 - 4회차

1. 날짜형 자료 기본 협정시계시(Universal Time Coordinated)는 1972년에 공표된 국제적인 표준 시를 말한다. 한국은 UTC+9시간에 속하므로 기준시보다 9시간 빠르다.함수설명CURDATE현재 서버 날짜CURTIME현재 서버 시간NOW현재 서버 날짜 및 시DATETIMEYYYY-MM-DD HH:MMTIMEHH:MM:SSDATEYYYY-MM-DDYEARYYYY or YYTIMESTAMPYYYY-MM_DD HH:MM구분DATETIMETIMESTAMP용도시간대를 임의로 설정REALTIME 저장이 필요할 때(라이브 서비스)시간대그대로 저장서버의 시간대로 저장범위1000-01-01 ~ 9999-12-311970-01-01 00:00:00 ~ 2038-01-19 03:14:07자동 업데이트X..

[TIL] SQL 챌린지 - 3회차

1. 자료형- Python의 기본자료형 문자열, 숫자형, 리스트, 딕셔너리, 튜플- SQL의 기본자료형 문자열, 숫자형, 날짜 2. 숫자 자료형- 비트와 바이트 - 정수형 정수형 자료형은 AUTO_INCREMENT 제약조건을 이용하여 ID를 생성하는데 유용하다.구분범위저장크기특징 TINYINT Signed: -128 ~ 127Unsigned: 0 ~ 2551byte매우 작은 정수 값을 저장하며 메모리 사용 최소화 SMALLINT Signed: -32,768 ~ 32,767Unsigned: 0 ~ 65,5352bytes작은 정수 값 MEDIUMINT Signed: - 800만 ~ 800만Unsigned: 0 ~ 1600만3bytes중간 크기 정수 값 INT Signed: 약 - 20억 ~ 20억*Unsig..

[TIL] SQL 챌린지 - 2회차

1. KEY- 관계형 데이터베이스 KEY 1) 식별자: 데이터베이스 설계 단계에서 사용하는 용어로 각 행을 고유하게 식별할 수 있는 모든 속성 혹은 속성 조합을 나타냄 2) 기본키: 각 행을 고유하게 식별하는 데 사용되는 선택된 식별자로 테이블 간의 관계(JOIN)를 기술하기 위해 사용구분설명특징 기본 키(Primary Key) 각 행을 고유하게 식별하게 사용되는 하나 이상의 컬럼한 테이블에는 하나의 키만 존재NULL 값을 가질 수 없음각 행에 고유한 값 외래 키(Foreign Key) 한 테이블의 컬럼이 다른 키의 기본키를 참조하는데 사용되는 컬럼부모 테이블의 기본 키와 동일제약조건을 통해 참조 무결성을 유지할 수 있음 2. 테이블 생성하기 (DDL) 데이블을 생성할 때 컬럼별로 제약조건을 설정할 수 ..

[TIL] SQL 베이직 - 2회차

1. SQL 집계함수: COUNT, MAX, MIN, SUM, AVG  SQL의 집계함수는 여러 행 또는 열로부터 하나의 결과값을 반환한다. 집계함수는 전체 데이터를 대상으로 사용하거나, 특정 컬럼을 기준으로 사용할 수 있다. 집계함수는 NULL값 가진 행을 제외 하고 수행하기 때문에 count()를 이용해 행의 개수를 세었을 때 NULL 값을 제외한 수가 반환된다. AVG를 이용할 때도 NULL 값을 제외하고 평균을 구한다.  2. SQL 그룹화: GROUP BY와 HAVING GROUP BY절 집계함수에 그룹(기준) 이 더해진 개념이다. 특정 컬럼을 기준으로 데이터를 요약해서 비교하고 싶을 때 사용한다. SELECT문에 기준컬럼과 집계함수가 둘 다 있는 경우 GROUP BY는 필수이다.# 집계함수,..

[TIL] SQL 챌린지 - 1회차

1. 데이터베이스 서비스와 개념- MySQL 관계형 데이터베이스가 1970년에 개발된 이후 기조의 레거시 기업들은 Oracle 데이터베이스를 많이 사용하고 있으며, 여전히 대기업들은 많이 사용한다.- 클라우드 데이터베이스 종류 1) 클라우드 ▷ 클라우드를 활용하면 같은 데이터를 실시간으로 확인 가능하기 때문에 미스 커뮤니케이션을 줄일 수 있음 ▷ 프로젝트 진행 시 클라우드 데이터베이스를 사용하는 것을 권장하며 대표적으로 GOOGLE - BigQuery, AMAZON - REDSHIFT 등이 있음 2) ON - PREMISE  ▷ MySQL, ORACLE, PostgreSQL 이 대표적- 데이터 가져오기 정확하게 접속하고 싶은 DB가 있다면 정보를 알아야 한다. DBeaver는 데이터베이스를 연결하는 하나..

[TIL] SQL 베이직 - 1회차

1. SQL의 작동순서 및 작성순서- 작동순서 FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY 테이블 확인 후 조인 조건을 확인하고 조인 후 추출할 조건을 확인한다. 그리고 데이터 그룹화, 추출, 중복제거를 마치면 마지막으로 데이터를 정렬한다. 작동순서를 고려하지 않고 쿼리를 작성할 경우 의도와 다른 결과를 얻을 수 있으므로 작동순서를 꼭 기억해야 한다.- 작성순서 SELECT → FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY 2. SQL 기본구조: SELECT, FROM- SELECT SELECT문을 사용하여 테이블의 값을 선택한다. 아스테리크(*) 기호를 사용하..

[TIL] 엑셀보다 쉽고 빠른 SQL - 5주차

1. 조회한 데이터에 아무 값이 없다면  또는 상식적이지 않은 값을 가지고 있다면 어떻게 해야할까?- 데이터가 없을 때의 연산 결과 변화 케이스 1) 없는 값을 제외해주기 2) 다른 값을 대신 사용하기 ▷ 다른 값이 있을 때 조건문 이용하기 : if(rating>=1, rating, 대체값) ▷ null 값일 때 : coalesce(age, 대체값)- 데이터가 상식적이지 않은 값을 가지고 있을 때 1) 조건문으로 값의 범위를 지정하기 2. 업무 시작을 단축시켜 주는 마법의 문법 (Window Function - RANK, SUM)- Window Function의 사례와 기본 구조 Window Function은 각 행의 관계를 정의하기 위한 함수로 그룹 내의 연산을 쉽게 만들어 준다. 기본 SQL 구조로 ..

[코드카타] SQL 레벨 1(문1~문10) 정답

1. 이름이 있는 동물의 아이디SELECT ANIMAL_IDFROM ANIMAL_INSWHERE NAME IS NOT NULL; 2. 역순 정렬하기SELECT NAME , DATETIMEFROM ANIMAL_INSORDER BY ANIMAL_ID DESC 3. 중복 제거하기SELECT COUNT(DISTINCT NAME) countFROM ANIMAL_INSWHERE NAME IS NOT NULL 4. 동물의 아이디와 이름SELECT ANIMAL_ID , NAMEFROM ANIMAL_INSORDER BY ANIMAL_ID 5. 동물의 수 구하기SELECT COUNT(*)FROM ANIMAL_INS 6. 동명 동물 수 찾기SELECT NAME , COUNT(NAME) NAME_COUNTFR..

Code Kata/SQL 2024.06.27

[라이브세션] 데이터와 친해지는 SQL 3회차

문제 1 payment 테이블에서 pay_type이 ‘MONEY’이고 pay_amount가 500,000 이상인 데이터의 개수를 count 해주세요. 결과값은 아래와 같아야합니다.select count(*)from paymentwhere pay_type = 'MONEY' and pay_amount >= 500000 문제 2 group by 와 having 절을 사용하여 pay_type 별 최소 pay_amount를 구하고, 그 값이 500이상인 경우를 추출해주세요. 결과값은 아래와 같아야합니다.select pay_type , min(pay_amount) min_pay_amtfrom payment pgroup by pay_typehaving min_pay_amt >= 500 문제 3 각 서버(servern..

[TIL] 엑셀보다 쉽고 빠른 SQL - 4주차

1. 여러번의 연산을 한 번의 SQL문으로 수행하기(Subquery)- Subqury가 필요한 경우 1) 여러번의 연산을 수행해야 할 때 2) 조건문에 연산 결과를 사용해야 할 때 3) 조건에  Query 결과를 사용하고 싶을 때- Subqury 사용 가능한 곳 1) SELECT 절 (스칼라 서브쿼리): 특정 열의 값을 계산하거나 변환할 수 있음 2) FROM 절 (인라인 뷰): 임시 테이블처럼 사용할 수 있음. 사용시 반드시 별칭을 정해줘야 함 3) WHERE 절 (중첩 서브쿼리): 조건을 필터링할 수 있음 4) HAVING 절: 그룹화된 결과를 필터링할 수 있음 5) ORDER BY 절 6) INSERT 문의 VALUES 절 7) UPDATE 문의 SET 절 2. 필요한 데이터가 서로 다른 테이블에 ..

[라이브세션] 데이터와 친해지는 SQL 2회차

문제 1 group by 절을 사용하여, 서버별 게임캐릭터id수(중복값 허용x)와 평균 경험치를 추출해주세요.select serverno , count(distinct game_actor_id) , avg(exp)from usersgroup by serverno 문제 2 group by 와 having 절을 사용하여, 날짜 별(yyyy-mm-dd) 게임캐릭터id수(중복값 허용x)를 구하고, 그 값이 10개를 초과하는 경우를 추출해주세요.select date , count(distinct game_actor_id) ac_cntfrom usersgroup by datehaving ac_cnt > 10 문제 3 위와 같은 문제를 having 이 아닌 인라인 뷰 subquery 를 사용하여, 추출해주세요.sel..

[라이브세션] 데이터와 친해지는 SQL 1회차

문제 1 date 컬럼이 2023-01-01 보다 큰 날짜의 game_account_id, game_actor_id, serverno를 추출해주세요.select game_account_id , game_actor_id , servernofrom userswhere date > '2023-01-01' 문제 2 조건1) leverl 컬럼이 10초과이고 조건2) severno컬럼이 1이 아니며 조건3) 아이템 이름 컬럼이 레벨업 패키지 또는 시즌패스이고 조건4) 아이템 획득경로가 상점에서 구매한 경우 date, ip_addr, exp, zone_id 를 추출하고 결과값을 date 기준 내림차순으로 정렬하여 추출해주세요.select date , ip_addr , exp , zone_idfrom userswher..

[TIL] 엑셀보다 쉽고 빠른 SQL - 3주차

1. 업무 필요한 문자 포맷이 다를 때, SQL로 가공하기 (REPLACE, SUBSTRING, CONCAT)- Query 결과를 바로 사용할 수 없을 때 함수 사용 1) 특정 문자를 다른 문자로 바꾸기replace(바꿀 컬럼, 현재 값, 바꿀 값)  2) 원하는 문자만 남기기substr(조회 할 컬럼, 시작 위치, 글자 수)  3) 여러 컬럼의 문자 합치기(붙일 수 있는 문자의 종류는 컬럼, 한글, 영어, 숫자, 기타 특수문자가 있다.)concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, ~~~) 2. 조건에 따라 포맷을 다르게 변경해야 한다면(IF, CASE)- 범주별로 다른 연산(계산, 문자 바꾸기) 적용하기 1) 조건에 따라 다른 방법을 적용하고 싶을 때if(조건, 조건을 충족할..

[TIL] 엑셀보다 쉽고 빠른 SQL - 2주차

1.  엑셀 대신 SQL로 한번에 계산하기 (SUM, AVERAGE, COUNT, MIN, MAX) - 숫자 연산 기호는 SQL에서도 사용- 숫자 연산 종류연산자설명+더하기-빼기*곱하기/나누기 - 합계와 평균 함수 사용 1) 합계: SUM(컬럼) 2) 평균: AVG(컬럼)- 전체 데이터 갯수 구하기 1) 데이터 갯수: COUNT(컬럼 혹은 * 혹은 1 사용) 2) 중복 제거: DISTINCT- 데이터의 최솟값과 최댓값 1) 최솟값: MIN(컬럼) 2) 최댓값: MAX(컬럼) 2. GROUP BY로 범주별 연산 한 번에 끝내기 - GROUP BY의 개념 원하는 것의 값을 내기 위해 WHERE절을 사용해 수십개의 쿼리를 작성하게 되면 비효율적이므로 여러번의 Query 없이, 카테고리를 지정하여 수식 함수로 ..