Language/SQL

[DATABASE] 연산을 통한 데이터 조회

simDev1234 2022. 4. 14. 23:38

■ 연산자의 종류

- 산술을 제외하고, 관계/논리/기타 모두 문자열에 사용 가능하다. 
**산술은 문자열에 사용 불가하다.

연산자 코드
산술 연산자 +  -  *  /  mod(피젯수, 젯수)
관계 연산자 >   >=  <   <=  =(동일한가)  !=(동일하지 않음)  <> (동일하지 않음)
**null을 체크할 때는, 필드 is null   필드  is not null 을 사용한다.
논리 연산자 and or not 
필드 between A and B   (A이상 B이하) 
필드 in (A, B, C)            필드=A or 필드=B or 필드=C
패턴 비교 연산자 LIKE, %, _    

 

* 오라클은 정수, 실수 개념이 없어서, 10/3은 실수로 나온다.

* mod(x,y) --> 나머지 구하는 

* dual은 오라클에서 기본적으로 제공하는 테이블이다.

* XML에서 < > 태그 사용하므로 >= ~ <= 보다, between을 쓰는게 좋다.

* 가급적 not(  ) 역조건은 사용하지 않는 것이 좋다.
-- why? SELECT를 두 번 하기 때문에 속도 저하 

 

기본 필드와 연산 필드

--heading : select의 결과로 추출된 임시 컬럼명
--연산 필드 : 기본 필드의 연산에 의해서 형성된 필드

select
   sabun as 사번,       -- 기본 필드
   saname 사원명,       -- as 생략가능 
   --sajob as 직 급,    -- 에러! 공백을 띄어서 표준명명법에 어긋남  
   sajob as "직 급",    -- OK 
   sapay,
   sapay * 0.1 as bonus  -- 연산 필드
from sawon

 

■ 문자의 결합 ||

select (문자데이터)칼럼명 || '추가하고자 하는 문자열' from 테이블명

 

■ 패턴 비교 연산자 : LIKE, %, _

[1] % (나 다음 모든문자)

select * from 테이블
  where (문자데이터)칼럼명 like '김%'   -- 맨앞글자가 김인 데이터(그 뒤는 길이도 상관없음)

 

[2] _  (모든 문자에서 1개)

select * from 테이블
  where (문자데이터)칼럼명 like '____-1%' 
  
  -- 앞에 6글자는 아무것이나 와도 되나, 그 뒤는 '-1'이 오는 데이터만 추출

 

■ 정규식을 이용한 패턴 비교(REGEX_LIKE)

정규식은 차후에 업로드 예정

 

▼  연산자 예시 *출처 : 뉴렉처  

 

[1] 산술 연산 / 문자열 결합 예시

--덧셈은 숫자만 더하기 때문에 숫자 + 문자면 숫자로 더해진다 
SELECT 1+'3' FROM DUAL;
--문자와 문자를 더하기
SELECT 1 || '3' FROM DUAL;

--Q. 모든 회원의 이름을 조회하시오. 단 이름은 ID를 붙여서
SELECT NAME || '(' || ID || ')' "이름(ID)" FROM MEMBER;

>> 마지막 Q결과

 

[2] 비교연산자 예시

-- 게시글 중에서 작성자가 '홍길동'인 게시글만 조회
SELECT * FROM NOTICE WHERE WRITER_ID = '홍길동';

-- 게시글 중에서 조회수가 100이 넘는 글만 조회
SELECT * FROM NOTICE WHERE HIT > 100;

-- 게시글 중에서 내용을 입력하지 않은 게시글을 조회
-- ★ NULL의 경우 = 연산자 사용 불가. 반드시 IS를 써야한다.
SELECT * FROM NOTICE WHERE CONTENT IS NULL;

 

[3] 논리연산자 예시

-- 조회수가 0, 1, 2인 게시글을 조회하시오.
SELECT * FROM NOTICE WHERE HIT IN (0, 1, 2);
SELECT * FROM NOTICE WHERE HIT = 0 OR HIT = 1 OR HIT = 2;
SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 2;
SELECT * FROM NOTICE WHERE 0 <= HIT AND HIT <= 2;

--조회수가 0, 2, 7인 게시글을 조회하시오.
SELECT * FROM NORICE WHERE HIT IN (0, 2, 7);
SELECT * FROM NOTICE WHERE HIT = 0 OR HIT = 2 OR HIT = 7; -- 비효율적

--조회수가 0, 2, 7이 아닌 게시글을 조회하시오.
SELECT * FROM NOTICE WHERE HIT NOT IN(0, 2, 7);

 

[4] 패턴 비교 연산자 예시

-- 회원 중에서 '박'씨 성을 조회하시오
SELECT * FROM MEMBER WHERE NAME = '박%'; -- 박% 이라는 문자를 찾는다
SELECT * FROM MEMBER WHERE NAME LIKE '박%';

-- 회원 중에서 '박'씨이고 이름이 외자인 회원을 조회하시오.
SELECT * FROM MEMBER WHERE NAME LIKE '박_';

-- 회원 중에서 '박'씨 성을 제외한 회원을 조회하시오.
SELECT * FROM MEMBER WHERE NAME NOT LIKE '박%';

-- 회원 중에서 이름에 '도'자가 들어간 회원을 조회하시오.
SELECT * FROM MEMBER WHERE NAME LIKE '%도%';

 

 

[예시 코드 출처]

- 뉴렉쳐 강의