본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

[DB]특정 데이터 추출,SQL함수

by 초응 2022. 12. 13.

오라클에서 주석처리는  --로 한다.

 

데이터베이스 : 원하는 데이터를 추출하는데 목적. 

--WHERE절
select --컬럼
from --테이블명
where --조건

--조건 = 컬럼명 연산자 데이터
--     이름 = 홍길동
-- [ WHERE]
select * from emp
where deptno=10

select * from emp
where sal >=2000

--날짜데이터  :수치자료형의 특징과 문자 자료형의 특징을 가지고 있다.
select *
from emp
where hiredate >='1980-01-01'-- ' '를 붙이지 않으면 에러. 뺄셈으로 인식하기때문.

--[문자 처리 연산자 LIKE] - 와일드카드 (%,_f)를 사용할 수 있음
--(% : 글자수 상관 없음. , _ : 한글자자리수 가짐.) 
select *
from emp
where ename like 'FORD' 

select *
from emp
--where ename like 'M%'  --M으로 시작하는
--where ename like '%N' --N으로 끝나는
where ename like '%A%' --A가 들어있는

--사원의 이름에 두번째가 A가 들어 있는 사원들을 검색.
select * from emp
where ename like '_A%'

--10번 부서에 근무하고 clerk인 사원을 검색
select *from emp
where deptno =10 and job ='CLERK'


--[BETWEEN AND 연산자]
select *from emp
--where sal >= 1000 and sal <=2000
where sal between 1000 and 2000

--[In 과 or  연산자]
select *from
--where comm =300 or comm = 500 or comm=1400
where comm in (300,500,1400)


--[부정 연산자(not, i=,<>)
select * from emp
--where not deptno =10
--where deptno <> 10
where deptno !=10 -- 원래는 안됐지만 오라클이 업데이트가 돼서 실행됨. 다른 DBMS에서는 안될 수 있음.

--[not 컬럼명 between , not 컬럼명 in()// not between, not in()은 다른 부정이다.
select *from emp
--where not sal between 1000 and 2000
where sal not between 100 and 2000
select *from emp
--where not comm in (200,500,1400)
where comm not in (200,500,1400)

--[is null // NULL인 값 불러오기]
select *from emp
where comm is null
--where comm is not null // null이 아닌값 불러오기

--[정렬하여 출력하기 위한 ORDER BY절]
--오름 차순일 경우 asc, 내림차순일 경우 desc
select *from emp 
order by sal desc
--order by deptno, sal desc --다중 정렬

-단일 따옴표 안에 문자열 데이터는 대소문자를 구분하므로 소문자로 사원명을 기술하면 해당 데이터 찾지 못함.

-날짜 데이터는 수치자료형과 문자자료형의 특징 모두가지고 있다.

특정 데이터를 추출하기
WHERE where 컬럼명 연산자 데이터 특정데이터 추출 컬럼명 연산자 데이터
ORDER BY order by 
컬럼명
연산자
생략 가능(asc 또는 desc) 
정렬하여 출력
(다차정렬 가능)
오름차순 : asc (기본)
내림차순 : desc
연산자 비교연산자    <,>,<=,>=,=  
논리 연산자    AND,OR,NOT(부정연산자) NOT : not , <>, !=
LIKE   와일드카드 ( % , _) % : 어떤 글자든지, 몇글자든지 상관 없음.
_ : 어떤 글자든 상관없으나 한글자만 가능.
IN   다중 OR 부정 : not in
BETWEEN AND    범위 표현 부정 : not between and
IS NULL   NULL인 값 불러오기 부정 : is not null

 

 좋은 프로그램 : 데이터베이스에 있는 데이터를 가져와서 뿌려만 주는 프로그램. (데이터구조는 데이터베이스에서 잡는것)

 

select

from

where

order by-- 마지막의 위치.


SQL 주요 함수.

 

메서드와 함수는 모두 기능(function)이다. 

메서드 :  종속되어있는 기능

함수 :  독립되어있는 기능

메서드와 함수는 전혀 다른 기능을 의미한다.

C : 함수만 있음,  C++ : 메서드와 함수를 사용.  

 

함수는 바로 접근해서 사용 가능

 

DUAL 테이블 (테스트 할때 사용할 테이블)

- SYS 사용자가 소유하는 것으로 모든 사용자가 사용할 수 있다.

- DUAL 테이블은 DUMMY라는 단 하나의 컬럼으로 구성. 이 컬럼에는 길이가 1인 문자 한개를 저장할 수 있음.

--[ROUND ( , ) 반올림 함수]
select round(45.256,2)--  인덱스 번호. 자리수 라고 생각하면 안됨. 
from dual

--[TRUNC (,) 버림 함수]
select trunc(45.256,2)
from dual

--[MOD(,) 나머지 구하는 함수]
select *
from emp
where mod(empno,2)=1
--[UPPER (대문자로 변환) 함수.]
select upper('welcom to java')
from dual

--[LOWER (소문자로 변환) 함수.]
select lower('WELCOM TO JAVA')
from dual

--[INITCAP(첫 이니셜 대문자로 변환)함수]
select inicap(name)
from emp

--[LENGTH (문자열 길이를 알려주는) 함수] // 공백도 포함.
select ename, length(ename)
from emp

--[INSTR (특정문자 출현하는 위치 알려주는)함수]
select ename, instr(ename,'A')
from emp
select ename, instr(ename, 'A',3,1) --세번째 자리시작하여 첫번째로 나타나는 함수의 위치
from emp

--[SUBSTR (문자의 일부분 추출) 함수]
select empno, ename, hiredate, substr(hiredate,1,4) -- (데이터, 시작 위치, 시작위치에서 몇자리를 가져올건지)
from emp

--[lPAD (오른쪽 정렬, 왼쪽에 생긴 빈 공백 특정문자 채움) 함수]
select lpad('java',10,'#')-- (데이터, 몇개의 자리, 채울문자)
from dual

--[RPAD ( 왼쪽 정렬 , 오른쪽에 생긴 빈 공백 특정문자 채움) 함수]
select rpad('JAVA',10,'#')
from dual

--[LTRIM (왼쪽에서 특정 문자 삭제) 함수] -- 공백 제거때문에 사용.
select ltrim('#####java#####', '#') -- (데이터, 삭제하고자하는 문자값)
from dual

--[RTRIM (오른족에서 특정 문자 삭제) 함수]
select rtrim('#####java#####', '#')
from dual

 

SQL 주요 함수
함수 ROUND(데이터, 반올림 위치) 반올림 위치는 인덱스 번호 매치 ( 자리수X) 
TRUNC(데이터, 버림 위치) " 마찬가지로 인덱스 번호로
MOD(데이터, 나눌값)  
문자 처리 함수 UPPER(데이터) 대문자로 변환
LOWER(데이터) 소문자로 변환
INITCAP(데이터) 첫 이니셜 대문자로 변환
LENGTH(데이터) 문자열의 길이를 알려줌
(공백도 포함)
INSTR(데이터, 문자)
INSTR(데이터, 문자 , 시작위치, 몇번째)
특정문자가 출현하는 위치 알려줌.
SUBSTR(데이터, 시작위치, 몇자리) 문자의 일부분 추출(인덱스 X, 자리로 )
LPAD(데이터, 자리수, 채울내용) 오른쪽 정렬 후 왼쪽에 생긴 빈 공백에 특정문자를 채움.
RPAD(데이터, 자리수, 채울내용) 왼쪽 정렬 후 오른쪽에 생긴 빈 공백에 특정 문자를 채움.
LTRIM(데이터, 삭제하고자하는 문자값) 왼쪽에서 특정 문자 삭제
(공백 제거때문에 사용)
RTRIM(데이터, 삭제하고자하는 문자값) 오른쪽에서 특정문자 삭제
(공백 제거때문에 사용)

 

실습

1. 이름의 세번째 자리가 N인 직원 검색

2. 이름의 끝자리가  N으로 끝나는 직원 검색

3. and나 between 연산자를 사용하지 않고 80년도에 입사한 직원검색

4. 직원 중 이름이 5글자인 직원 검색, 이름을 소문자로 출력