본문 바로가기
data(SQL)

2일차 SQL 셀렉션

by AI미남홀란드 2022. 9. 7.
728x90
data type(데이터타입, 데이터형, 데이터종류)
1. 숫자: number
-정수 : 10, number(자릿수)
-실수 : 10.37 , number(전체자릿수, 소수점자릿수)
 
2. 문자
-Char(byte)    ex) char(4) <- 4byte 영문자 4글자, 한글 2글자 저장가능  (고정크기)   알파벳 1개 1byte 가 들어와도 4byte가 잡힌다  성능 ↑메모리낭비
   =>(charater)
-varchar2(byte)  (가변크기) 알파벳 1개 1byte 가 들어와도 1byte가 잡힌다 들어오는 크기대로 성능↓ 메모리효율
   => 바챠투,바캐릭터투
 
문자 데이터(문자 값,문자 리터럴)
-> 문자 값 의 표현 = '문자' (중요) 홀 따옴표
날짜 데이터(날짜 값, 날짜 리터럴)
-> 날짜 데이터 표현 = '2022/09/06'  홀 따옴표
수치 데이터(수치 값, 수치 리터럴)
-> 수치 데이터 표현 = 10, 100, 13
 
쌍따옴표를 쓰는 경우 : 별칭 As  select 에서 테이블명을 바꾸는 경우 쌍따옴표를 쓴다
select employee_id  as "e_id"

1. Selection 기능
Select (*) , 컬럼명 ,
from 테이블명 ;
 
(*) 식별자(identifier)
-> 개념 : 프로그램언어에서 사용하는 단어
-> 2가지
1. 시스템(오라클)이 미리 정의한단어 : 예약어 , 키워드 (변경x) ex) select, from, where
2. 사용자(개발자)가 정의한 단어 ex) departments(테이블명), 콜럼명(employee_id) 등

SELECT last_name as 이름, salary 월급, salary * 12 as 연 봉 FROM employees;

-> 오류가 남 salary * 12 as 연 으로 인식이 되어 봉이 식별자로 error 쌍따옴표를 붙혀서 " 연 봉" 으로 수정하면 에러가 안남
 
결과 : select 절엔 * , 컬럼명, 연산한 컬럼, as로 별칭을 붙힌 컬럼 등 사용가능하고
             from 절엔 테이블 명
             where 절엔 조건 값이 들어간다
 
* Null 값
1. 의미 : 값 없음, 화면에서는 비어있는 형태 , Sdldeveloper 는 (null) 표현됨
2. 모든 컬럼은 기본적으로 null 허용 -> not null 제약 조건
3. null 값 + 값과의 연산 결과는 항상 null 반환
-> 해결방법 함수(function)  nvl(컬럼명, null이면 사용할 값)
4. 정렬시 오름차순(기본), 내림차순(큰->작)
-> 오름차순, 내림차순시 null 값이 있는 경우  가장 큰 값으로 처리한다
내림차순(Desc) 오름차순 (ASC)
 
5. is not null, is null
- 연결연산자
SELECT last_name || '의 직업은 ' || job_id || ' 입니다' as "사원별 직급"
FROM employees;
=> 아무개의 직업은 가수 입니다
- 중복데이터 제거(distinct)

SELECT DISTINCT job_id FROM employees;

-> 중복되지 않게 출력해준다
WHERE 절

SELECT employee_id,last_name,job_id, salary

FROM employees
WHERE last_name = 'King'; (king) 으로치면 오류 홀 따옴표 필수
* 대소문자 안가리는 것은 식별자다, 리터럴은 대소문자를 가린다 데이터 값이기 때문에
 
* 값비교
1. 숫자                                  
2. 문자                 ★A:65 a97 - ASCII코드 값★
3. 날짜                      7byte 처리 (초단위계산)
 
select employee_id
from employee
where last_name < 'king' ;    <== 크다, 작다 문자로 값 비교 가능
 
Between a AND b 연산자
숫자, 날짜 , 범위 다 가능하다.
SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE hire_date BETWEEN '07/01/01' AND '08/12/31';
-> 범위를 찾을때 사용함
 
WHERE 컬럼명 In (값1, 값2, 값3,...)
SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE employee_id IN ( 100,200,300 );
-> 한꺼번에 여러번의 값을 찾을때 사용함
Like(_,%) 연산자
SELECT employee_id,last_name,salary
FROM employees
WHERE last_name LIKE 'J%'; '%A', '%c%'
-> j로 시작하는 모든글자를 찾는다. A로 끝나는 글자를 찾는다. , C가 있는 글자를 찾는다.
WHERE last_name LIKE 'J_'
-> j_ j로 시작하는 두글자를 찾는다.
 
job_id _ 값을 가진 레코드 검색?
A_B
X_B
XB_
AX_
정답 : '%_%' (x) 언더바를 가진걸 다 찾기때문에, 이스케이프 문자를 써줘야함 '%$_%' 로 써줘야함
3번째가 글자가 _이 오는경우
SELECT employee_id,last_name,salary,job_id
FROM employees
WHERE job_id LIKE '%E___' ESCAPE 'E';
-->ad_vp , AD VP
- 논리연산자
AND(그리고) :  조건식 and 조건식 참(T) , 거짓(F) 두개다 T 여야 T
OR (또는): 조건식 or 조건식 두개중 1개만 T여도 T
NOT (아니다): not 조건식 
우선순위 1. AND 2. OR 3. NOT
x and x or x and x 인 경우 묶어서 1,2 and 수행후 or 을 수행
 
IS NULL 연산자
 
SELECT last_name,job_id,salary
FROM employees
WHERE commission_pct = NULL;
-> = 말고 is 로 써야한다.
SELECT last_name,job_id,salary
FROM employees
WHERE commission_pct IS NULL;

ORDER BY 절

order by 절은 숫자를 통해 컬럼명의 차순을 정할 수 있다.
내림차순 : DESC
오름차순 : ASC(생략가능)
 
SELECT employee_id(1),last_name(2),job_id(3),salary as(4) "월급“
FROM employees
ORDER BY 4 DESC;
-> (4) 를 order by 절에 넣었기 때문에 샐러리가 내림차순이 된다
 
SELECT employee_id,last_name as 이름,job_id,salary
FROM employees
ORDER BY last_name ASC(생략가능);
-> name 을 오름차순
- 다중데이터정렬
SELECT employee_id,last_name,salary,hire_date
FROM employees
ORDER BY salary DESC, hire_date;
-> 샐러리를 내림차순하고 ,그 후 날짜를 오름차순
 
SELECT employee_id,last_name,salary,hire_date
FROM employees
ORDER BY 3 DESC, 4;
-> 샐러리를 내림차순하고 그 후 날짜를 오름차순
 
* 정렬
->  굉장히 많은 부하가 걸린다 (함부로 남발 하면 안된다)

SQL 함수
 
*오라클 함수(기능처리)
1. 단일행 함수
-행단위로 실행
2. 그룹함수(다중행 함수)
- 행의 갯수만큼 그룹핑해서
 
728x90