본문 바로가기

스터디

[7주차]SQL 입문

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