[부트캠프] 데이터베이스 3일차

RedPanda·2022년 8월 3일
0

[부트캠프] DataBase

목록 보기
3/5

📌 필기 내용

연산자

논리 연산

  • IS boolean_value

  • != 연산자는 false와 NULL을 비교할 수 없다. -> 결과가 null로 나오기 때문에 IS NOT FALSE라는 자세한 연산자를 사용해야 한다.

범위 연산

  • 표현식A AND 표현식B : 표현식A && 표현식B

  • BETWEEN A AND B : A와 B 사이의 값(A,B 포함)

시간 연산(데이터 타입이 바뀜)

  • '날짜'+ integer 'data' : 일수 추가
  • '날짜' + time 'data' : TIMESTEMP로 바뀜
  • '날짜' - date '날짜' : 날짜 사이의 일수를 출력
  • CURRENT_DATE, CURRENT_TIME, LOCALTIME, LOCALTIME_TIMESTEMP : 날짜 반환 연산자

서브쿼리 연산

  • EXISTS 서브쿼리 : 서브쿼리의 값이 존재하면 참
  • column_name IN 서브쿼리 : 해당 column에서 서브쿼리에 해당되는 값들은 참
  • data 연산자 ANY 서브쿼리 : 서브쿼리 안에 data와의 연산자가 참인 값이 하나라도 있으면 참
  • ALL 서브쿼리 : 서브쿼리의 모두가 참

패턴과 패턴매칭 연산

  • '%값' : 값을 제외한 모든 문자열(ex. '%과' -> '제일제과') // '%'와 '*'는 같은 표현

  • '' - ''를 포함해서 글자수가 맞아야 하며 값의 위치가 맞는 문자열(ex. '' -> '바나나') // 과 .는 같은 표현, LIKE와 ~~는 같은 표현

  • column_name LIKE '패턴' : 패턴에 해당되는 값들이 칼럼에 있으면 참

조건, 집계함수, 조인

  • CASE문 (CASE\n TAB WHEN query...\n END column_name) : 해당 칼럼을 CASE의 조건으로 나누어 보여줌

  • COALESCE(매개변수...) : 함수에 제공되는 매개변수

  • COUNT(COLUMN) : 해당 칼럼의 개수를 세줌

  • DISTINCT : 테이블에서 중복 제거에서 사용

  • UNION : 두개의 쿼리문으로 하나의 테이블을 만듦.(칼럼이 같아야 가능) / UNION ALL과 UNION 의 차이점 : UNION은 중복을 제거하고 테이블을 만듦.

  • INTERSECT : 두 쿼리의 교집합으로 테이블을 만듦.

  • EXCEPT : 두 쿼리의 여집합으로 테이블을 만듦.(먼저 입력한 테이블이 우선)

  • GROUP BY : 원하는 조건으로 칼럼을 그룹화(칼럼은 SELECT의 순서대로 숫자로 나타낼 수 있다 - 비추)

  • HAVING : 집계데이터를 조건으로 검색하고 싶을 경우 -> GROUP BY의 조건을 달고 싶을때 사용

  • JOIN : 테이블을 가로로 추가

  • SELECT * FROM ramen. rating == SELECT rating CROSS JOIN ramen -> 조인

  • INNER JOIN : 교집합, LEFT or RIGHT OUTER JOIN : 해당 방향쪽 주로, FULL OUTER JOIN : 합집합
    --> ex. SELECT columns FROM table1 INNER JOIN table2 ON 조건 or USING() : ON은 같은 칼럼이 없으면 사용, USING은 같은 칼럼을 하나에 묶어줌.

✔ 추가내용

  • 커미션 디나이 : 권한 없음 -> 관리자 권한으로 실행해야 한다.

  • 원하는 폴더에서 cmd창 여는법 : 해당 경로에 들어가서 검색에 cmd를 치면 해당 경로에서 cmd가 열림.

  • SQL 우선순위 : FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

<데이터 모델링>

  • 데이터 모델링이란? : 저장할 데이터 구조를 정하는 작업

📃 실습내용

  • 책에있는 내용을 토대로 실습을 진행했다
SELECT 지역명, 학교명, 100 * (취업여자수 + 취업남자수) / (졸업여자수 + 졸업남자수) AS 취업률 
FROM graduates
WHERE 
기준년도 >= '2015-01-01' AND
    기준년도 < '2016-01-01' AND
    (취업여자수 + 취업남자수) != 0 AND
     100 * (취업여자수 + 취업남자수) / (졸업여자수 + 졸업남자수) >= 50;

비율을 구하는 문제가 고민이였다. 계산만 하면 됐는데 0으로 나눌 수 없다는 부분이 생각을 많이 하게 만든 것 같다.

SELECT 
    extract(year from 기준년도) AS 기준년도,
    학교명, 
    SUBSTRING(지역명, 9, 4) AS 지역명,
    (CASE
        WHEN 졸업여자수 + 졸업남자수 = 0 THEN 0
        ELSE ((진학여자수 + 진학남자수)*100)/ (졸업여자수 + 졸업남자수) 
        END)
    AS 진학률 
FROM graduates 
WHERE 
    지역명 LIKE '%고양시 일산%'
    ORDER BY ((진학여자수 + 진학남자수)*100)/ (졸업여자수 + 졸업남자수) DESC;

이 문제는 확인할 것이 많다.

1.EXTRACT(TYPE FROM column_name) : 형변환에 사용되는 함수
2.SUBSTRING(column_name, start_index, string_len) : 문자열 자르기 함수
3.CASE (WHEN 조건 THEN result ELSE result END) : 기존 조건문을 CASE로 해결
4.column_name LIKE data : 문자열 비교는 LIKE로 해야한다. '=' 비교는 안됨.

profile
끄적끄적 코딩일기

0개의 댓글