Day1
데이터베이스 다루기
데이터 종류 알아보기
: 문자형
- 텍스트로 구성된 문자형 데이터
- 반드시 따옴표와 사용해야 함. 안 그러면 키워드나 함수, 데이터베이스/테이블/컬럼의 이름으로 인식.
- CHAR(n) : 고정 길이 문자열. 정해진 만큼의 공간을 모두 사용.
- VARCHAR(n) : 변동 길이 문자형. 필요한 만큼의 공간만 사용.
- n은 사용할 저장공간을 바이트 수로 표기한 숫자.
: 숫자형
- 정수형(소수점x) : 바이트에 따라 표현할 수 있는 숫자의 범위가 달라짐. 주 사용 타입은 INT
- 실수형(소수점ㅇ) : 주 사용 타입은 FLOAT.
- 데이터 간 연산 가능
: 날짜형
- 날짜와 시간 데이터
: 데이터를 저장하기 전에 데이터의 타입을 정하지 않으면 저장 불가능
기본적인 데이터 다뤄보기
: 데이터들은 함수를 사용하여 타입 변환이 가능
테이블 만들고 변경하기
: 보통의 경우에는 데이터베이스를 생성 후 테이블 생성
: CREATE DATABASE [데이터베이스 이름];
: SHOW DATABASES; - 모든 데이터베이스 보기
: USE [데이터베이스 이름];
: CREATE TABLE [테이블 이름] (
[컬럼 이름] [데이터 타입],
[컬럼 이름] [데이터 타입],
[컬럼 이름] [데이터 타입],
...
);
: 데이터베이스/테이블/컬럼 이름 정할 때의 유의사항
- 문자, 숫자, _ 사용
- 주로 영문 소문자 사용
- 예약어X
- 단어와 단어 사이에는 _ 사용
- 문자로 시작
- 이름은 중복 불가능
: ALTER TABLE [테이블 이름] RENAME [새로운 테이블 이름];
: ALTER TABLE [테이블 이름] ADD COLUMN [컬럼 이름] [데이터 타입];
: ALTER TABLE [테이블 이름] MODIFY COLUMN [컬럼 이름] [새로운 데이터 타입];
: ALTER TABLE [테이블 이름] CHANGE COLUMN [컬럼 이름] [새로운 컬럼 이름] [새로운 데이터 타입];
: ALTER TABLE [테이블 이름] DROP COLUMN [컬럼 이름];
테이블 지우기
: DROP DATABASE [데이터베이스 이름];
: DROP TABLE [테이블 이름];
: TRUNCATE TABLE [테이블 이름]; - 특정 테이블의 값만 제거
: DROP DATABASE IF EXISTS [데이터베이스 이름]; - 에러 방지용
: DROP TABLE IF EXISTS [테이블 이름]; -에러 방지용
데이터 삽입, 삭제, 수정하기
: INSERT INTO [테이블 이름] ([컬럼1 이름], [컬럼2 이름], [컬럼3 이름], ...)
VALUES ([컬럼1 값], [컬럼2 값], [컬럼3 값], ...);
- 여러 row를 입력해야 할 때는 로우마다 괄호 여닫고 쉼표 사용하기
: DELETE FROM [테이블 이름]
WHERE [조건 값];
: UPDATE [테이블 이름]
SET [컬럼 이름]=[새 값]
WHERE [조건 값];
실습_테이블 생성 및 데이터 삽입
: 테이블 생성, 데이터 삽입
: 테이블명 및 컬럼명 변경
: 테이블 값 제거 및 테이블 제거
데이터 가져오기
데이터 가져오기
: SELECT */데이터/컬럼 FROM 테이블명;
- 여러 데이터베이스를 사용할 때는 FROM 데이터베이스.테이블명 과 같은 방식으로 사용하는 걸 추천
- 데이터나 컬럼을 여러 개 가져오고 싶다면 쉼표 사용
별명 붙이기
: AS [컬럼 별명];
- 테이블 내 실제 컬럼이 변하는 것은 아니며 별명은 쿼리 내에서만 유효
- 실제 컬럼 이름을 변경하고 싶다면 ALTER TABLE 구문 사용
데이터 일부만 가져오기
: LIMIT [로우 수];
- 가져올 데이터의 로우 개수를 지정
- 쿼리의 가장 마지막에 위치
- 만약 입력한 숫자가 전체 로우 수보다 크다면 있는 로우만 가져옴
중복 제거하기
: DISTINCT [컬럼 이름];
- 중복된 데이터는 제외하고 같은 값을 한 번만 가져오는 키워드
실습
: 테이블에서 데이터 가져오기
권장 강의_SQL
데이터 베이스 종류
: 계층형 데이터베이스
- 데이터와 부모자식 관계를 가진 트리 구조
- 단점
- 일대일 관계가 무너지면 변경이 어려움
- 데이터 중복 발생이 쉬움
- 데이터가 상하 종속 관계이기 때문에 채택 후 프로세스 변경이 어려움
- 현재는 거의 사용X
: 네트워크형 데이터베이스
- 데이터를 노드로 표현
- 노드는 네트워크 상에 있는 대등한 관계
- 계층형의 단점인 중복, 상하 종속 관계 해결
- 단점
- 멤버 노드가 반드시 주인 노드와 연결되어야 함
- 멤버 노드가 주인 노드의 레코드와 연결되어야 함
- 종속성 문제가 발생할 수 있음
- 구조 변경이 어려움
: 키-값 데이터베이스
- NoSQL의 한 종류로 키와 값을 일대일 대응해 데이터를 저장
- 데이터의 중복이 발생하며 비정형 데이터 저장에 유리
- 스키마 없이 작동하기 때문에 데이터 구조를 미리 정의할 필요가 없음
- 다양한 형태로 표현 가능
: 관계형 데이터베이스
- 가장 많이 사용되는 데이터베이스
- 데이터를 테이블 형태로 저장하며 열과 행으로 구성
ERD(Entity Relationship Diagram)
: 테이블 간의 관계를 표현한 그림, 논리 모델과 물리 모델이 있음
Day2
조건에 맞는 데이터 가져오기
WHERE
: WHERE [조건식]
: 조건식이 참인 로우만 선택
: SELECT [컬럼 이름] FROM [테이블 이름] WHERE 조건식;
: 보통 연산자를 사용해 조건식 작성
: 참은 1로, 거짓은 0으로 출력
: 사용하는 연산자는 비교 연산자, 논리 연산자, 기타 연산자 등이 있음
비교 연산자
: =, !=, >, <, >=, <=
논리 연산자
: AND, OR, NOT
: NOT(조건식)
기타 연산자
: BETWEEN A AND B
- A<=[컬럼 이름] AND [컬럼 이름]<=B
: [컬럼 이름] IN (A, B, C, ...)
- [컬럼 이름] IN (A, B) => [컬럼 이름]=A OR [컬럼 이름]=B
문자형 데이터 다루기
: [컬럼 이름] LIKE [검색할 문자열]
- [검색할 문자열] 내에 와일드카드를 사용해 검색 조건 구체화 가능
- 와일드카드 : %(0개 이상의 문자), _(1개의 문자)
NULL
: 데이터 값이 존재하지 않음
: 0이나 공백이 아닌 알 수 없는 값을 의미
: IS NULL
: [컬럼 이름]=NULL이나 [컬럼 이름]!=NULL과 같은 표현은 사용하지 않음
원하는 데이터 만들기
데이터 줄 세우기
: ORDER BY [컬럼 이름]
: 기본은 오름차순(ASC)
: 내림차순으로 표현하고자 할 때는 DESC
: 여러 컬럼으로도 정렬 가능
: 컬럼 번호(SELECT 절의 컬럼 이름 순서)로도 정렬 가능
데이터 순위 만들기
: RANK () OVER (ORDER BY [컬럼 이름])
: 항상 ORDER BY와 함께 사용
: SELECT 절에 사용하며 정렬된 순서에 순위를 붙인 새로운 컬럼을 보여줌
: 테이블의 실제 데이터에는 영향X
: RANK - 공동 순위가 있으면 다음 순서로 건너뜀
: DENSE_RANK - 공동 순위가 있어도 다음 순위를 뛰어넘지 않음
: ROW_NUMBER - 공동 순위를 무시함
문자형 데이터 정복하기
: MySQL 내의 데이터는 함수를 사용해 변형 가능
: 함수 - 특정 식을 거쳐 결과값을 반환
: 함수 이름(함수를 적용할 값 혹은 컬럼 이름)
: 결과값을 새로운 컬럼으로 반환
: LOCATE(문자열1, 문자열2 혹은 컬럼)
- 문자열1이 문자열2에서 몇번째에 위치한지 검색 후 위치 반환
- 문자가 여러 개라면 가장 먼저 찾은 문자의 위치 반환
- 찾는 문자가 없다면 0 반환
: SUBSTRING(문자열 혹은 컬럼, n)
- 문자열이나 컬럼에서 n번째 문자부터 반환
- 입력한 숫자가 문자열의 길이보다 크다면 아무것도 반환X
: RIGHT, LEFT(문자열 혹은 컬럼, n)
- 오른쪽 혹은 왼쪽에서 n번째 문자까지 반환
: UPPER, LOWER(문자열 혹은 컬럼)
- 대문자 혹은 소문자로 바꿔 반환
: LENGTH(문자열 혹은 컬럼)
- 글자 수 반환
: CONCAT(문자열1, 문자열2)
- 문자열1과 문자열2를 합쳐 반환
: REPLACE(문자열 혹은 컬럼, 문자1, 문자2)
- 문자열 혹은 컬럼의 문자1을 문자2로 바꿔 반환
숫자형 데이터 정복하기
: ABS(숫자 혹은 컬럼) - 숫자의 절댓값 반환
: CEILING, FLOOR(숫자 혹은 컬럼) - 숫자를 올림하거나 내림해서 반환
: ROUND, TRUNCATE(숫자 혹은 컬럼, 자릿수 n)
- 숫자를 소숫점 자릿수 n까지 반올림/버림해서 반환
- 자릿수에 0 입력시 소수점 없이 정수만 반환
: POWER(숫자 혹은 컬럼, 숫자2) - 숫자 혹은 컬럼을 숫자2만큼 제곱해 반환
: MOD(숫자 혹은 컬럼, 숫자2)
- 숫자 혹은 컬럼을 숫자2로 나눈 나머지 반환
- 숫자 2로 나누면 짝수인지 홀수인지 확인 가능
날짜형 데이터 정복하기
: NOW, CURRENT_DATE(), CURRENT_TIME()
- 현재 날짜와 시간, 날짜, 시간 반환
- 입력값이 필요 없는 함수
: YEAR(날짜), MONTH(날짜), MONTHNAME(날짜)
- 연도, 월, 영문 월을 반환
: DAYNAME(날짜), DAYOFMONTH(날짜), DAYOFWEEK(날짜), WEEK(날짜)
- 영어 요일, 일, 숫자 요일, 해당 연도의 몇 번째 주인지를 반환
- 숫자 요일은 일요일부터 1로 시작
: HOUR(시간), MINUTE(시간), SECONDE(시간)
- 시, 분, 초 반환
: DATE_FORMAT(날짜/시간, 형식)
- 날짜/시간을 특정 형식으로 바꿔 반환
: DATEDIFF(날짜1, 날짜2), TIMEDIFF(시간1, 시간2)
- (날짜1 - 날짜2)를 일단위로 반환, (시간1 - 시간2)를 시:분:초 단위로 반환
실습문제3
: 포켓몬 테이블에서 포켓몬을 포획한 지 기준 날짜까지 며칠이 지났는 지를 ‘days’라는 별명으로 가져와 주세요. 이 때, 포켓몬의 이름도 함께 가져와 주세요.
: 조건 - 기준 날짜는 2022년 2월 14일입니다.
=> SELECT name, DATEDIFF('2022-02-14', capture_date) AS days FROM mypokemon;
데이터 그룹화하기
데이터 그룹화하기
: GROUP BY [컬럼 이름]
: GROUP BY가 쓰인 컬럼의 SELECT 절에는 GROUP BY 대상 컬럼과 그룹 함수만 사용 가능
- 만약 GROUP BY 대상 컬럼이 아닌 컬럼을 SELECT 하면 에러 발생
: 여러 컬럼으로 그룹화 가능, 키워드 뒤에 [컬럼 이름]을 복수 개 입력
: 컬럼 번호로도 그룹화 가능
그룹에 조건 주기
: HAVING 조건식
- 가져올 데이터 그룹의 조건 지정
: 조건식이 참인 그룹만 선택
: HAVING 절의 조건식에서는 그룹 함수 활용
: GROUP BY 뒤에 위치
다양한 그룹 함수 알아보기
: COUNT([컬럼 이름])
- 그룹의 값 수를 세는 함수
- SELECT, HAVING 절에서 사용
- 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같을 필욘 없음
- COUNT(1)은 하나의 값을 1로 세는 표현
- GROUP BY 없는 쿼리에서도 사용 가능하며, 이 때는 전체 로우에 함수가 적용됨
: SUM([컬럼 이름])
- SELECT, HAVING 절에서 사용
- GROUP BY 없는 쿼리서도 사용 가능하며, 이 때는 전체 로우에 함수 적용
- 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같을 필요 없음
: AVG([컬럼 이름])
- SELECT, HAVING 절에서 사용
- GROUP BY 없는 쿼리서도 사용 가능하며, 이 때는 전체 로우에 함수 적용
- 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같을 필요 없음
: MIN([컬럼 이름]), MAX([컬럼 이름])
- SELECT, HAVING 절에서 사용
- GROUP BY 없는 쿼리서도 사용 가능하며, 이 때는 전체 로우에 함수 적용
- 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같을 필요 없음
쿼리 실행 순서 알아보기
: 작성 순서
- SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
: 실행 순서
- FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY
'스터디' 카테고리의 다른 글
[9주차] SQL 입문2 (0) | 2024.06.21 |
---|---|
[8주차] SQL 입문2 (0) | 2024.06.14 |
[5주차] 파이썬 실습2 및 1차 미니 프로젝트 (0) | 2024.05.24 |
[4주차] 파이썬 기초2 및 실습 (0) | 2024.05.17 |
[3주차] 파이썬 기초 (0) | 2024.05.10 |