Oracle/개념

1장. SELECT 검색

2024. 6. 6. 02:03
728x90

1. SELECT 명령어

줄 바꿈 잘못해서 에러가 발생하는 경우가 발생한다.

- FROM 키워드 줄 바꿔서 에러

- 테이블 이름 줄 바꿔서 에러

- 컬럼 이름 줄 바꿔서 에러

- 작성 도중에 단어별로 단어를 모두 작성 후 줄바꿈하기

 

 

 


 

 

 

(1) 모든 칼럼 조회하기

SELECT *
FROM 테이블;

 

실외용을 출력한다. 해당 테이블의 실제로 들어 있는 내용을 출력한다. 키워드를 잘 따져서 작성해야 한다.

 

 

줄 바꿈 잘못해서 에러가 발생하는 경우가 발생한다.

  • FROM 키워드 줄 바꿔서 에러
  • 테이블 이름 줄 바꿔서 에러
  • 컬럼 이름 줄 바꿔서 에러
  • 작성 도중에 단어별로 단어를 모두 작성 후 줄바꿈하기

 

DESC로 테이블 구조 파악하기

테이블의 내용을 설명해달라는 명령어. 해당 사용자가 만든 모든 테이블 조회한다. 가변형 문자열로 변경되어 있다.

DESC 테이블;

 

 

해당 사용자가 만든 모든 테이블 조회하기

SELECT *
FROM tab;

 

 tab은 table의 약자이다. 데이터베이스에 들어 있는 테이블이 어떤 게 들어 있는가, 기본적인 다양한 테이블을 출력한다.

 

 

 


 

 

 

(2) 원하는 칼럼만 조회하기

오라클 11g 리눅스용

SELECT 데이터
FROM 테이블;

 

오라클 12c 윈도우즈용

SELECT 데이터
FROM 테이블;

 

 

※ 참고

 

* 데이터가 숫자일 경우

COL 칼럼 FOR 숫자
  • '칼럼'의 길이를 숫자 길이까지 들어가게 설정하세요
  • 숫자 자리에는 9를 작성한다. 9의 개수에 따라 칼럼의 길이가 결정된다.

 

* 데이터가 문자일 경우

COL 칼럼 FOR a숫자
  • 칼럼의 길이를 (숫자)바이트까지 들어가게 설정하세요

 

* 한 화면에 출력 가능한 줄 길이 설정 (가로 길이 설정)

SET LINE 숫자
  • 한 화면을 가로로 (숫자) 바이트까지 되게 하세요

 

* 한 페이지에 출력 가능한 줄 수 설정 (세로 길이 설정)

SET PAGES 숫자
  • 한 페이지에 (숫자)줄까지 출력하세요

 

 

 


 

 

 

(3) SELECT 명령에 표현식(Expression)을 사용하여 출력하기

'리터럴(literal) 상수(문자)'/표현식

SET pagesize 숫자
SELECT 데이터
FROM 테이블;
  • 표현식 안에 홑따옴표 있을 경우 특히 주의한다.

 

SELECT name, 'value', "별칭"
FROM 테이블;
  • value: 값을 찍어내는 부분. 실제로 출력되는 부분. 싱글 따옴표로 사용하여 작성한다. 똑같은 것이 계속 출력된다.
  • 별칭: alias(별칭). 이곳에 입력한 값을 헤더에 사용한다. 이중 따옴표로 작성한다.

 

 

 


 

 

 

(4) 컬럼 별칭 사용하여 출력하기

별칭 사용 전

SELECT 데이터1, 데이터2, ···, 데이터n
FROM 테이블;
  • 헤더에 쓰인 데이터들의 이름은 모두 대문자로 출력된다.

 

별칭 사용 후

SELECT 데이터, "데이터-별칭"
FROM 테이블;

 

  • 큰따옴표를 붙여 작성한 내용이 그대로 헤더 안에 들어간다.
  • 큰따옴표를 붙이지 않는다면 사용자가 작성한 이름은 따라가지만, 작성한 내용 중 대문자로 쓰지 않는 것들도 대문자로 쓰인다. 이때 AS는 생략해도 된다.

 

 

 


 

 

 

(5) DISTINCT 명령어

- 중복된 값을 제거하고 출력하기

SELECT 데이터 
FROM 테이블;

SELECT DISTINCT 데이터
FROM 테이블;

 

 Oracle 10g R1 버전까지는 정렬 후 출력이 되지만 10g R2 버전부터는 Hash 알고리즘으로 변경되어 정렬되지 않는다. 반드시 SELECT 키워드 뒤에 사용해야 한다. 불필요한 DISTINCT 금지.

  • 중복된 값을 제거하고 출력된다.
  • 정렬되지 않고 출력된다.
  • ORDER BY라는 명령어를 작성하여 해당 값들을 정렬할 수 있다.

 

SELECT 데이터1, 데이터2
FROM 테이블
ORDER BY 숫자1, 숫자2;
SELECT DISTINCT 데이터1, 데이터2
FROM 테이블
ORDER BY 숫자1, 숫자2;
  • 결과를 출력할 때 데이터1 기준으로 정렬한다.
  • 한 줄 전체를 봐서 중복된 것 제거 후 출력한다. 컬럼 단위로 적용되는 것이다. 따라서 SELECT 키워드 뒤에 사용해야 한다.
  • 불필요한 DISTINCT 금지. 문법상으로 오류가 생길 수 있다.

 

 

 


 

 

 

(6) 연결(합성) 연산자(Concatenation)로 컬럼을 붙여서 출력하기

SELECT 데이터1, 데이터2
FROM 테이블;

 

때에 따라서는 두 가지의 칼럼을 붙여야 하는 경우가 있다.

SELECT 데이터1 || 데이터2
FROM 테이블;

 

리터럴 문자와 연결 연산자와 함께 사용하기

SELECT ename||' ''s job is '|| job "데이터1 AND 데이터2"
FROM 테이블;

 

 

 


 

 

 

(7) 원하는 조건만 골라내기

- WHERE 절 사용

SELECT [ Column or Expression ]
FROM [ Table or View ]
WHERE 조건식;

 

조건식에 쓰이는 숫자는 따옴표 없이 그냥 사용 가능하다. 문자는 홑따옴표(')를 써야 하고 대소문자 구분한다.

 

리눅스(유닉스)용 오라클과 윈도우즈용 오라클의 날짜 형태가 각각 다르다.

입력을 해야 할 때 OS마다 알맞은 명령어를 작성해야 한다.

이때 리눅스용 오라클에 해당하는 명령어를 작성한 후 날짜를 입력할 때 대소문자를 구분하지 않아도 된다.

 

 

 


 

 

 

(8) SQL에서 기본 산술연산자 사용하기

+, -, *, /

 

SELECT 데이터1 (연산자) 데이터2
FROM 테이블
WHERE 조건식;

 

 

 


 

 

 

(9) 다양한 연산자를 활용하는 방법

연산자 종류 설명
= 비교 대상에서 같은 조건을 검색
!=, <> 비교 대상에서 같지 않은 조건을 검색
> 비교 대상에서 큰 조건을 검색
>= 비교 대상에서 크거나 같은 조건을 검색
< 비교 대상에서 작은 조건을 검색
<= 비교 대상에서 작거나 같은 조건을 검색
BETWEEN A AND B AB 사이에 있는 범위 값을 모두 검색
IN(A, B, C) A이거나 B이거나 C인 조건을 검색
LIKE 특정 패턴을 가지고 있는 조건을 검색
IS NULL / IS NOT NULL NULL 값을 검색 / NULL이 아닌 값을 검색
A AND B A 조건과 B 조건을 모두 만족하는 값만 검색
A OR B A 조건이나 B 조건 중 한 가지라도 만족하는 값을 검색
NOT A A가 아닌 모든 조건을 검색

 

 

① 비교 연산자 사용하기

- 숫자와 문자

SELECT 데이터
FROM 테이블
WHERE 데이터 (연산자) 숫자-or-'문자'

 

- 날짜

SELECT 데이터
FROM 테이블
WHERE 값 (연산자) '연/월/일'

 

 

 

② BETWEEN 연산자를 사용하여 테이블에서 조건식에 부합하는 데이터 출력

SELECT 데이터
FROM 테이블
WHERE 조건식1 BETWEEN 조건식2;

 

※ 주의

1. 작은 값을 앞에, 큰 값을 뒤에 쓴다는 것

2. 조건식의 두 값을 모두 포함하는 결과를 출력한다는 것

3. 위의 코드에서는 비교 연산자(AND) 쓰기

 

 

BETWEEN 연산자로 문자나 날짜도 조회 가능

SELECT 출력데이터
FROM 테이블
WHERE 출력데이터 BETWEENS 데이터1 AND 데이터2
ORDER BY 출력 데이터

 

 

 

③ IN 연산자로 여러 조건을 간편하게 검색하기

 중요한 연산자. 어떤 고정 값이 여러 개로 나오는 경우이거나 연산자일 시 그 대신 IN 연산자로 쓰면 된다. 연산자 속도가 빨라서 아주 많이 사용되고 있다.

SELECT 데이터1, 데이터2, ···, 데이터n
FROM 테이블
WHERE 데이터n IN (숫자1, 숫자2);

 숫자1과 숫자2에 있는 데이터1, 데이터2, ···를 출력한다. WHERE절에서 IN으로 조건을 준 것을 잘 확인한다. 조건에는 숫자 뿐만 아니라 문자나 날짜도 당연히 올 수 있다.

 

 

 

④ LIKE 연산자로 비슷한 것들 모두 찾기

SELECT 데이터1, 데이터2, ···, 데이터n
FROM 테이블
WHERE 데이터n LIKE '%()%'

- % : 글자 수 제한 없고(0개 포함) 어떤 글자가 와도 상관없다. 괄호 앞, 뒤 어느곳이나 붙어도 된다.

- _(Underscore) : 글자 수는 한 글지, 어떤 글자가 와도 상관없다.

- 숫자, 문자, 날짜 모두 사용할 수 있다. 하지만 데이터n에 날짜가 온다면 성능에 나쁜 영향을 준다. 인덱스가 있을 때 활용하지 못한다.

 

 

 

⑤ 값이 무엇인지 모를 경우 - IS NULL / IS NOT NULL 연산자를 활용하기

 사전적 의미로는 '무가치하다, 없다', 컴퓨터 상의 의미로는 '0이 아니다, 값을 모르는, 입력이 되어있지 않은 상태'이다. 의미를 알려면 IS NULL(NULL 값 조회하기) 혹은 IS NOT NULL( NULL 아닌 값 조회하기)이 와야 한다.

// NULL인 데이터가 있는지 출력
SELECT 데이터
FROM 테이블
WHERE 데이터 = NULL;

 

 NULL == NULL은 true로 출력하지 않는다. A와 B가 있다. A와 B의 성적은 입력되지 않았다. 그래서 값이 출력되지 않았다. 입력되지 않은 값은 출력되지 않는다. NULL이다.

 이때 A와 B의 성적은 같을까? 아니다. 모른다. 따라서 NULL == NULL은 true가 아니다.

 

 

 

⑥ 검색조건이 두 개 이상일 경우 조회하기

AND : 두 조건 모두 만족

SELECT 데이터
FROM 테이블
WHERE 조건식1 AND 조건식2;

 

OR : 두 조건 중 한 가지만 만족연산자의 우선 순위 조심하기

SELECT 데이터
FROM 테이블
WHERE 조건식1 OR 조건식2;

 

모든 연산자는 순위가 있다. 따라서 연산자의 우선 순위를 조심해야 한다.

 

 

 

⑦ 사용자에게 조건을 입력 받아서 조건에 맞는 값 출력하기

& 기호를 사용하여 외부에서 값 입력 받기. 실행하기 전에 값을 받겠다!

SELECT 데이터1, 데이터2, ···, 데이터n
FROM 테이블
WHERE 데이터n = %데이터n;

 

 

 


 

 

 

(10) 정렬하여 출력하기

default: 오름차순

한글: 가, 나, 다, 라, ···

영어: A, B, C, D, ···

숫자: 1, 2, 3, 4

날짜: 예전 날짜부터 시작해서 취근 날짜로 정렬된다.

 

 

ORDER BY 절 사용하기

오름차순은 ASC, 내림차순은 DES 사용 / 기본값은 오름차순

 

 

- 정렬 안 하고 출력

SELECT 데이터
FROM 테이블

 

- 정렬하고 출력

SELECT 데이터1, 데이터2, ···, 데이터n
FROM 테이블
ORDER BY 데이터n;

 

- 두 번 정렬하기

SELECT 데이터1, 데이터2
FROM 테이블
ORDER BY 데이터1 ASC, sal DESC;

 

- 숫자로 위치 값 지정하기

SELECT 데이터1
FROM 테이블
WHERE 조건식
ORDER BY 숫자1, 숫자2;

 

 

 


 

 

 

(11) 집합 연산자 (SET OPERATOR)

연산자 종류 내용
UNION (합집합 ∪) 두 집합의 결과를 합쳐서 출력. 중복 값 제거하고 정렬함.
UNION ALL 두 집합의 결과를 합쳐서 출력. 중복 값 제거 안 하고 정렬 안 함.
INTERSECT (교집합 ∩) 두 집합의 교집합 결과 출력. 정렬.
MINUS (차집합 A - B) 두 집합의 차집합 결과 출력. 정렬. 쿼리의 순서 중요.

 

합집합과 교집합은 순서가 상관 있지만 차집합은 순서가 중요하다.

 

첫째. 두 집합의 SELECT 절에 오는 컬럼의 개수가 동일해야 한다.

둘째. 두 집합의 SELECT 절에 오는 컬럼의 데이터 형이 동일해야 한다.

셋째. 두 집합의 칼럼 명은 달라도 상관없다.

 

 

① UNION / UNION ALL (두 집합의 결과들을 더한다)

- STUDNO 값으로 정렬

  • 정렬 : O
  • 중복값 제거 : O
SELECT 데이터1
FROM 테이블1
WHERE 조건식1

UNION

SELECT 데이터2
FROM 테이블2
WHERE 조건식2;

 

- 정렬 안 되고 출력

  • 정렬 : X
  • 중복값 제거 : X
SELECT 데이터1
FROM 테이블1
WHERE 조건식1

UNION ALL

SELECT 데이터2
FROM 테이블2
WHERE 조건식2;

 

UNION / UNION ALL은 실행계획을 복잡하게 만들기 때문에 안 좋음.

 

 

② INTERSECT 연산자 사용하기

- 교집합 찾기

SELECT 데이터1
FROM 테이블1
WHERE 조건식1

INTERSECT

SELECT 데이터2
FROM 테이블2
WHERE 조건식2;

 

복수로 나오는 칼럼을 포함하여 결과로 출력한다.

 

 

③ MINUS 연산자 사용하기

 큰 결과를 가진 SELECT 먼저 쓰고 MINUS 쓰고, 작은 결과를 가진 SELECT를 나중에 쓰면 된다.한 가지 주의할 점은 마이너스이기 때문에 SELECT 문장 쓰는 순서만 조심하면 된다.

SELECT 데이터1
FROM 테이블1
WHERE 조건식1

MINUS

SELECT 데이터2
FROM 테이블2
WHERE 조건식2;

 

  A 집합을 모든 데이터들의 모음이고, B 집합을 특정 데이터들의 모음이라 하자.

 통상적으로(이론적으로) A 집합이 크고 B 집합이 A 집합을 빼간다. 남은 값들이 다 작다. 결과가 나와야 하므로 A 집합이 커야 한다. 조건을 가진 B 집합을 사용하여 잔여의 데이터들을 찾는다.

 

 

 

※ 집합 연산자 주의사항

query block has incorrect number of result columns

expression must habe same datatype as correspnding expression

'Oracle > 개념' 카테고리의 다른 글

6장. DML 데이터 관리  (0) 2024.06.13
5장. DDL 명령과 딕셔너리  (0) 2024.06.12
4장. JOIN  (3) 2024.06.12
3장. SQL 복수행 함수  (0) 2024.06.12
2장. SQL 단일행 함수  (1) 2024.06.11