![article thumbnail image](https://blog.kakaocdn.net/dn/kSNKM/btrMaIzI7dA/VbEDUg0uK0B45v5OVRVGsk/img.png)
SQL문
SELECT - 데이터 검색 | |
DML(데이터 조작어) - 데이터베이스 무결성 보장 - DB운영을 위해 사용 |
INSERT UPDATE DELETE MERGE |
DDL(데이터 정의어) - 데이터 저장 공간/구조를 생성 |
CREATE ALTER DROP RENAME TRUNCATE |
DCL(데이터 제어어) - 데이터를 보호하기 위한 보안과 관련 |
GRANT REVOKE |
트랜잭션 제어 | COMMIT ROLLBACK SAVEPOINT |
접속 conn hr/hr
●DESC DEPARTMENT 부서들의 데이터
DEPARTMENT_ID : 부서 번호(PK)
DEPARTMENT_NAME : 부서 이름
MANAGER_ID : 부서장의 사원번호
LOCATION_ID : 부서가 위치한 도시의 지역 번호
●DESC EMPLOYEES 사원들의 데이터
EMPLOYEE_ID : 사원번호(PK)
HIRE_DATA : 입사일
JOB_ID : 수행하고 있는 부서 업무
SALARY : 월 급여
COMMISSION_PCT : 보너스
MANAGER_ID : 내 사수의 사원 번호
DEPARTMENT_ID : 근무하고 있는 부서 번호(FK:DEPARTMENT 테이블참조)
◆SELECT --> 출력과 관계가 있다.
1. 셀렉션(선택) - 모든 컬럼의 데이터를 다 보고자할때
2. 프로젝션 - 내가 보고자 하는 데이터를 볼때
3. 조인 - 여러개의 테이블에서 데이터를 검색
- 기본 문법
1) select => 컬럼 이름을 적는 절(보고자 하는 데이터)->명시된 컬럼의 데이터가 결과로 출력
2) from => table의 이름을 적는 적(select절에 소유한 테이블의 이름)
ex)
select *
from departments;
" * " --> 모든컬럼을 의미
*글자수 변경
column department_name format a20
*초기화
column department_name clear
*실행 순서
from절 -> select절
**실행결과를 빠르게 처리할 수 있는 성능이 중요
==> 대소문자 구분을 하면 data dictionary에 재사용해서 parsing작업을 따로 안해도되서 성능이 올라감
==> 규칙을 만들면 재사용할 확률이 올라 성능이 올라서 빠른작업을 할 수 있다.
* space보다 Tab을 사용해야 성능이 좋아진다
* 튜닝 : 문제가 발생하지 않도록 개선해주는 행위
* parsing 명령문 실행했을 떄 하는 작업
* data dictionary : parsing 작업 전에 하는 검색작업
* data dictionary 공간에 공유공간이 있는데 parsing 결과, 문장 text가 저장되어있음
(결과가 있음 parsing작업따로 안해도됨)
* meta data : 저장주소,경로,사이즈등을 데이터 (data dictionary안에 있음)
1. 검증 => 오류나는것 없나 확인
2. 실행계획 수립
=> 테이블로부터 요구한 데이터를 가장 빠르게 가져오는 방법(옵티마이저 엔진)
3. 실행
*select 문이 실행 됬을때 항상 열 머릿글이 대문자로 시작된다.
*문자/날짜데이터는 왼쪽 정렬, 숫자는 오른쪽 정렬로 이루어진다.
IDE --> 개발할때 편리하게 할수 있도록 컴파일,디버깅 할수 있는 개발환경(이클립스)
예제)
select last_name, hire_date, salary
from employees
해석)
employees테이블로부터 last_name, hire_date, salary를 출력하세요.
->사원테이블로부터 이름과 입사일, 월급여를 출력하세요
예제) 사원의 이름과 그 사원이 받는 월 급여와 연봉을 출력
select last_name, salary, salary*12
from employees
**산술연산
1)컬럼과 상수에 대한 연산(O)
2)컬럼과 컬럼에 대한 연산(O)
=>숫자데이터 전부 가능
=>문자데이터 불가
=>날짜데이터는 일수에 +,-만 가능
*날짜데이터는 실제데이터로는 숫자값으로 저장이 되어있음
곱셈 나눗셈은 의미가 없음.
select last_name, salary*12, salary*12*nvl(commission_pct,1)
from employees
nvl => null value의 뜻으로 nvl(컬럼,1) 이면 null값을 1로 대체한다.
● 열 별칭 (alias)
*한개의 컬럼당 한개의 alias만 지정할 수 있다.
종류
1) AS사용 (성능,가독성 더 좋음)
-단일문장에 사용하고 대문자로 출력됨
2) 공백으로 사용(공백이 나타나면 컬럼으로 먼저 인식해서 검색하기때문에 성능이 떨어짐)
-단일문장에 사용하고 대문자로 출력됨
3) " "
-복수문장에 사용하고 쓰여진 형식 그대로(대소문자,공백 구분) 출력
#안좋은 방법(예)
1) "NAME" -> 대문자를 대문자로 바꾸는작업
2) as "Name" -> 불필요한 as 사용으로 코드만 길어짐
● 연결 연산자
● 리터럴 문자열
● 중복 행 제거
* distinct : 중복행 제거 -> 항상 select문 다음에 사용
select distinct department_id
from employees
27 -> 부서갯수
- 11 -> 사원들이 근무하고있는 부서
--------------------------------------------------
16 -> 사원들이 존재하지 않는 부서
**그룹화 현상
ex)
10 a 10 a
20 a 10 a
10 a 10 b
20 a 20 a
10 b 20 a
* 멀티플 중복제거
- a 먼저 정렬하고 그다음 b, 그 다음 c순으로 정렬이 된다.
PS. SQL의 기초 SELECT, 산술연산, NVL, alias의 기능, 중복제거 잊지말자!
'Study > DataBase' 카테고리의 다른 글
Database기초 6일차 <서브쿼리> (0) | 2022.09.20 |
---|---|
Database기초 5일차 <Group by, Having> (2) | 2022.09.19 |
Database기초 4일차 <예제 및 JOIN> (0) | 2022.09.17 |
DATABASE기초 3일차 (0) | 2022.09.16 |
데이터베이스 기초 1일차 (0) | 2022.09.13 |