728x90

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절

SQL문 작성 규칙

**실행결과를 빠르게 처리할 수 있는 성능이 중요

==> 대소문자 구분을 하면 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

12개 부서 아니다. 아직 배치받은 인원이 null값으로 되어 있다

   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의 기능, 중복제거 잊지말자!

728x90

'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
복사했습니다!