#2 SQL 복습
1. select문의 기능들
- 선택
행 단위로 DATA를 읽는 것.
- 프로젝션
열 단위로 DATA를 읽는 것.
- 조인(어려움.)
여러개의 table DATA를 동시에 검색할 때 사용.
- 가장 중요한 것은 select는 출려을 위한 것이며 table value에는 전혀 영향을 끼치지 않는다.
- STR과 날짜 값은 왼쪽 정렬 INT값은 오른쪽 정렬이다.
2. '*'
SQL> select *
2 from departments;
SQL> select location_id, department_id,... etc
2* from departments;
- 결과값이 똑같다. 또한 select list 절에 어려개의 columns를 ','로 이어 붙일 수 있으며 그것은 표에 나타는 순서를 나타내기도 한다.
3. 특정 열 선택(projection)
SQL> department_id, location_id
2* from departments;
4. SQL문 작성
- SQL문은 대소문자를 구분하진 않지만 사실상 구분하는것과 같다.
왜냐하면 parse 라는 개념때문이다.
- parse란 파씽이라고 하며 DB coding에 있어서 가장 중요한 것은 성능이다. 이때 1초라도 자원을 아껴야 한다.
5. parse
- 파씽이란 1. 검증 2. 실행계획수립 3. 실행 의 순으로 진행되는데 이때 파씽에 앞서 data dictionary를 검색하여 검색한 기록이 있다면 자원을 최소한 소모하고 결과값이 최대한 빨리 받아볼 수 있다.
SQL> select name
2* from employees;
SQL> select NAME
2* from employees;
- 그렇다면 위의 2 명령어는 같다고 볼 수 있을까? pc입장에서 보면 아니다 왜냐하면 PC는 ASC코드로 alphabet을 저장하는데 a와 A의 ASC코드의 값은 앞서 설명한 것 처럼 31의 차이가 있기 때문에 다른 명령어라고 판단하고 처음부터 파씽을 다시 하는 것이다.
- 따라서 코드를 짤 때 있어 본인만의 규칙이 있는 것이 중요하다.
6. 산술식
- 계산기처럼 기본적인 사칙연산이 가능하다. 단, 숫자는 모두 가능 문자는 불가능 날짜는 기본적인 날짜 더하기 빼기만 가능
- column + 상수, column + column 도 가능
- 연산자 우선순위와 괄호는 일반 사칙연산처럼 똑같이 사용 가능
SQL> select last_name, salary*12
2* from employees
- 하여 월급 * 12 = 연봉을 계산할 수 있다.
하지만 다음과 같이 문자열을 곱하면 error 메시지를 표출한다.
7. NVL
- 위 사진들은 commission_pct 즉, 보너스가 없는 값들을 계산하였을 경우의 결과값이다. 이럴경우 DATA는 손실되었고 무결성이라 볼 수 없다. 이에 null값을 대신하여 계산할 수 있는 함수가 있다.
SQL> select last_name, salary*12*nvl(해당column,null값 대신 들어갈 수)
8. alias
- 자 위와 같이 column heading 즉, 열 머릿글이 그대로 출력되어버리기 때문에 column heading을 다시 rename해줄 필요가 있다.
- 방법은 3가지이다.
- AS : 단일문장(단일단어), 반드시 대문자
- 공백 : 단일문장(단일단어), 반드시 대문자
- " " : 복수문장(2자 이상의 단어), 쓰여진 형식 그대로(소문자도 가능)
- 1개의 column당 1개의 alias 명을 지정해야한다.
- AS > 공백 : 공백보단 AS를 많이 쓰도록 하자 왜냐하면 pc가 인식할 때 공백은 우선 column으로 처리하기 때문에 소요되는 자원이 너무 많다.
- 안 좋은 사례들
9. distinct
- 무조껀 select 뒤에 1번만 기재한다.
- 겹치는 값들을 제거하여 결과를 보여준다. 로직은 우선 첫번째 부여된 id의 data들을 그룹화 후 다음에 있는 data들의 중복값을 삭제한다.
10. 연결연산자
- 출력하는 값들을 하나로 합친다. 하지만 현업에서는 잘 쓰이진 않는다.
11. 리터럴 문자열 사용
- 문자, 날짜는 반드시 작은 따옴표(' ')로 해야한다. 왜냐하면 큰 따옴표(" ")는 alias이니까!
12. 분석할 줄 알아야함.
- 다음 결과값이 12 rows들이 나왔다고 부서의 개수가 12개가 아니다 자세히 보면 1개의 null값이 있기 때문에 사실 이 회사는 11개의 부서가 있다고 분석하는게 맞다.