1. SQL 연산자
- 산술 연산자 : +,-,*,/,mod(나머지),div(몫)
- 비교 연산자 : =(같다),<,>,<=,>=,<>(다르다)
- 대입 연산자 : =
- 논리 연산자 : and or not xor- 기타 연산자
1. is : 양쪽의 피연산자가 모두 같으면 True 아니면 False, null은 이걸로 찾아야함
- between A and B : 값이 A보다는 크거나 같고 B보다 작거나 같으면 True 아니면 False
- in : 매개변수로 전달된 리스트의 값이 존재하면 True 아니면 False
- 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. 비정규화(반정규화)
- 정규형에 일치하게 되어있는 테이블을 정규형을 지키지 않는 테이블로 변경
- 테이블을 조회하는 용도로 사용하거나, 너무 데이터가 많이 나뉘어 성능이 저하된다면 비정규화를 하여 테이블을 다루는 것이 더 효율적일 수 있음
- 어떤 작업을 수행하는지, 어떤 데이터를 사용하는지에 따라 적절한 정규화를 하는 것이 좋음