SQL - 연산자, 조건절, 그룹화, 정규화

이공·2023년 9월 19일

SQL

목록 보기
3/4
post-thumbnail

1. SQL 연산자

  • 산술 연산자 : +,-,*,/,mod(나머지),div(몫)
  • 비교 연산자 : =(같다),<,>,<=,>=,<>(다르다)
  • 대입 연산자 : =
    - 논리 연산자 : and or not xor
  • 기타 연산자
    1. is : 양쪽의 피연산자가 모두 같으면 True 아니면 False, null은 이걸로 찾아야함
    1. between A and B : 값이 A보다는 크거나 같고 B보다 작거나 같으면 True 아니면 False
    2. in : 매개변수로 전달된 리스트의 값이 존재하면 True 아니면 False
    3. like : 패턴으로 문자열을 검색하여 값이 존재하면 True 아니면 False

2. 조건절

select 필드명1, 필드명2 ,...from 테이블명 where 조건절;

3. 데이터 정렬 order by

select 필드명1, 필드명2 ,...from 테이블명 where 조건절 order by 필드명[asc,desc];

4. limit

limit은 Mysql에서만 사용 가능합니다.

select 필드명 from 테이블명 limit 가져올로우수
select 필드명 from 테이블명 limit 시작로우,가져올로우갯수
select 필드명1, 필드명2 ,...from 테이블명 where 조건절 order by 필드명[asc,desc] limit 가져올로우수

5. 집계함수

원하는 그룹으로 함수를 적용하는 것을 의미합니다. 보통 일반 컬럼이 select절에 나오지 못합니다.

  • count() : 행의 갯수를 세는 함수, primary ket 걸려있는데 행의 개수 세고싶을때 최고의 방법
  • sum : 행의 값을 더함
  • avg : 행들의 평균을 구함
  • min : 행의 최소값을 구함
  • max : 행의 최대값을 구함

6. group by : 그룹을 만들어 계산

select 그룹을 맺을 컬럼 또는 집계함수 from 테이블명  group by 그룹화할 필드명 

7. having : group by의 조건절

select는 where을 조건절로 사용한다면 group by는 having을 조건절로 사용합니다.

select 그룹을 맺을 컬럼 또는 집계함수 from 테이블명  group by 그룹화할 필드명 having 그룹조건절;

8. join

sql에서 가장 중요한 여러개의 테이블을 병합하는 기능인 join입니다.

select 테이블1.필드, 테이블2.필드 
  from 테이블1 [inner, left, right] join 테이블2 
    on 테이블1.컬럼 = 테이블2.컬럼
  • 보통 sql문장은 이전의 문법들처럼 길게 쓰거나 지금의 예시처럼 select from join on의 끝자리를 일렬로 맞춰쓰는 방법이 있습니다. 일렬로 쓰는 방법은 가독성이 좋아서 처음 학습할때 용이합니다.

8.1. inner join(=cross join, join 디폴트값)

  • 조인하는 테이블의 on 절의 조건에 일치하는 결과만 출력
  • 두 테이블의 교집합

8.2. left/right outer join

  • 두 테이블이 join될때 왼/오른쪽 기준으로 기준 테이블의 데이터를 모두 출력
  • 왼쪽인 member기준으로 member기준 profile 값이 없어도 null로 나옴

9. select 전체 문법

sql문은 아래의 순서대로 해석됩니다.

select            -- 5
  from            -- 1
 where            -- 2
 group by         -- 3
having            -- 4
 order by;        -- 6
  • select절보다 나중에 수행되는 문법은 order by가 유일
  • select절에서 정의되는 컬럼 별칭은 order by절에서만 사용 가능(where절 사용 불가)

10. 데이터 정규화

데이터베이스를 설계할때 중복최소화의 목적으로 수행하는 과정입니다. 조직화 되어있지 않은 테이블과 관계들을 조직화된 테이블과 관계들로 나누는 것을 의미합니다.

  • 데이터 정규화가 필요한 경우 = 이상현상이 발생한 가능성이 있다면 정규화가 반드시 필요
    • 이상현상 : 데이터를 갱신, 삽입, 삭제, 수정할때 원하지 않게 데이터가 삭제되거나 가공되는 일이 발생할 수 있음

10.1. 정규화의 종류

1. 1NF(제 1정규화)

  • 테이블 안의 모든 값들은 단일 값이여야 한다. 중복이 없는 값.
  • 즉, 더이상 쪼개질 수 없는 단위로 저장되어야 한다.

2. 2NF(제 2정규화)

  • 모든 속성은 주식별자에 종속되어야 한다.
  • 1NF를 만족하면서, 완전함수종속성을 가진 관계들로만 테이블 생성
  • 종속성들 중 종속 관계에 있는 열들끼리 테이블을 구분해 주는 것
  • 함수 종속성 : x값에 따라 y값이 결정되는 경우

    before - 학번, 교수, 학과, 과목, 성적 (여기서 학과는 교수의 학과임)
    after - 학번, 성적, 과목코드 / 과목코드, 교수, 학과, 과목 (학과로 쪼개면 교수쪽 테이블에 과목이 또 드가야함)

3. 3NF(제 3정규화)

  • 주식별자를 제외한 속성은 속성들끼리 종속되어서는 안된다.
  • 2NF를 만족하면서, 기본키에 대해 이행적 함수 종속이 되지 않는 것을 의미
    before - 학번, 교수, 학과 (여기서 학과는 교수의 학과임)
    after - 학번, 교수코드 / 교수코드, 교수, 학과

    before - 학번, 교수, 학과 (여기서 학과는 교수의 학과임)
    after - 학번, 교수코드 / 교수코드, 교수, 학과

4. 비정규화(반정규화)

  • 정규형에 일치하게 되어있는 테이블을 정규형을 지키지 않는 테이블로 변경
  • 테이블을 조회하는 용도로 사용하거나, 너무 데이터가 많이 나뉘어 성능이 저하된다면 비정규화를 하여 테이블을 다루는 것이 더 효율적일 수 있음
  • 어떤 작업을 수행하는지, 어떤 데이터를 사용하는지에 따라 적절한 정규화를 하는 것이 좋음
profile
인공지능 / 데이터분석

0개의 댓글