on my way

Do it! 오라클로 배우는 DB 입문 : 04 SELECT문의 기본 형식 + 실습 문제 본문

Computer Science/Database

Do it! 오라클로 배우는 DB 입문 : 04 SELECT문의 기본 형식 + 실습 문제

wingbeat 2024. 4. 1. 16:03
반응형

둘째마당. 실무에서 가장 많이 사용하는 SQL, 조회 (중요)

 

04 SELECT문의 기본 형식

 

04-1 실습용 테이블 살펴보기

 

사원 정보가 들어있는 EMP 테이블 

EMP는 employee의 약어며, 사원 데이터를 보관 및 관리하는 테이블이다.

 

회사 부서 정보가 들어있는 DEPT 테이블 

 

사원들의 급여 정보가 들어있는 SALGRADE 테이블

 

 

04-2 데이터를 조회하는 3가지 방법 - SELCTION, PROJECTION, JOIN

행 단위로 조회하는 셀렉션

행 단위로, 가로줄의 몇몇 데이터만 선택해서 데이터 조회할 때는 셀렉션

 

열 단위로 조회하는 프로젝션

열 단위로, 세로 줄의 몇 데이터를 조회하는 방식.

 

셀렉션 + 프로젝션

상세한 데이터 조회가 가능하다.

 

두 개 이상의 테이블을 사용하여 조회하는 조인

데이터는 여러 테이블로 쪼개져있다. (중복을 줄이기 위해서) 두 개의 테이블을 하나의 테이블처럼 결과를 조회하는 방식이다.

 

 

04-3 SQL의 기본 뼈대, SELECT 절과 FROM 절

SELECT는 저장된 데이터를 조회하는 데 사용한다. (화면에 출력하기 위해서)

SELECT * FROM 이 기본 구성이다.

 

FROM절은 조회할 데이터가 저장된 테이블의 이름

SELECT절은 명시한 테이블에서 조회할 열이나 여러 열에 저장된 데이터의 조합 또는 연산식

 

*로 테이블 전체 열 출력하기

 

테이블 부분 열 출력하기

// 가독성을 위해 들여쓰기, 줄바꿈, 대소문자로 구분하면 더 좋다. 
SELECT
    empno, ename, deptno
FROM emp;

 

실행 순서는 FROM 절이 먼저 실행된다. 그래서 작성할 때도 FROM을 먼저 작성해보자.

 

 

04-4 중복 데이터를 삭제하는 DISTINCT

GROUP BY를 쓰면 DISTINCT를 안써도 돼서 잘 쓰지 않긴 함.

DISTINCT로 열 중복 제거 (열이 한 개인 경우)

SELECT distinct deptno FROM emp;

 

DISTINCT로 열 중복 제거 (열이 여러 개인 경우)

SELECT distinct job, deptno FROM emp;

MANAGER들의 부서 번호가 다르기에 중복 데이터가 아님.

열(컬럼명)을 , 로 구별해서 쓸 수 있다.

 

ALL로 중복되는 열 제거 없이 그대로 출력

SELECT ALL job, deptno FROM emp;

ALL을 생략해도 됨.

 

 

04-5 한 눈에 보기 좋게 별칭 설정하기

열과 연산식

SELECT ename, sal, sal*12+comm, comm FROM emp;

 

 

별칭 지정 방식

""를 해도 안해도 무관하지만, 컬럼명에 공백을 포함 하고 싶다면 " " 에 넣어야 한다.

 

실무에서 별칭 지정

SELECT ename, sal, sal*12+comm AS 연봉, comm FROM emp;

 

웬만하면 한글보다는 영어로.

또한 큰 따옴표("")를 별칭을 만들 때 넣지 않는 이유는 Java에서 처리될 수 있기 때문이다.

 

SELECT ename, sal, sal*12+comm as "emp annsal" , comm, '삼성' 회사명,1 FROM emp; // 실행 됨
SELECT ename, sal, sal*12+comm as "emp annsal" , comm, '삼성' 회사명,1, company FROM emp; // 에러

홑따옴표(')는 문자열이다.

AS 없이 공백을 써도 사용은 된다. (그치만 사용은 많이 안함)

 

 

SQL에서 '과 "

  1. 단일 인용부호('): 주로 문자열을 표현할 때 사용. 예를 들어, 'Hello, World!'와 같이 문자열을 나타낼 때 사용된다. SQL에서는 문자열을 표현할 때 '로 감싸서 표현한다. 
  2. 이중 인용부호("): 주로 식별자(테이블명, 열명 등)를 표현할 때 사용. 만약 테이블명이나 열명에 공백이나 특수문자가 포함되어 있을 때 사용된다. 예를 들어, "Customer Name"과 같이 열명을 나타낼 때 사용된다. 이중 인용부호 안에는 테이블명이나 열명이 들어간다. 이중 인용부호를 사용하면 대소문자 구분이 되고, 단일 인용부호를 사용하면 대소문자 구분이 되지 않는다.

예시:

  • SELECT * FROM "Customers" WHERE "Country" = 'USA'; : "Customers" 테이블에서 "Country" 열이 'USA'인 행을 선택
  • SELECT * FROM Customers WHERE Country = 'USA'; : Customers 테이블에서 Country 열이 'USA'인 행을 선택

즉, '와 "의 주된 차이점은 문자열과 식별자(테이블명, 열명 등)를 표현하는 데 사용된다는 것이다.

 

SQL에서 주석

-- 한 줄

/*
여러 줄
*/

 

04-6 원하는 순서로 출력데이터를 정렬하는 ORDER BY

데이터를 정렬된 상태로 출력하기 위해서 ORDER BY절을 사용한다.

ORDER BY 정렬기준
컬럼명 ASC/DESC

 

SELECT deptno, ename, mgr 
FROM emp 
ORDER BY deptno, ename;

중첩된 것은 두번째 order by로 정렬된다.

 

오름차순 사용하기

SELECT ename 
FROM emp 
ORDER BY ename asc;

ascending - asc 생략 가능하다.

 

내림차순 사용하기

SELECT ename 
FROM emp 
ORDER BY ename desc;

descending - desc

 

SELECT deptno, ename, mgr
FROM emp 
ORDER BY deptno asc, ename asc, mgr;

중첩된 것은 두번째 order by 값(ename)으로 정렬된다.

ORDER BY는 맨 끝에 위치하고, 가장 늦게 시행 됨. 성능에 많은 영향을 준다.

  

SELECT * FROM EMP ORDER BY deptno asc, sal desc;

 

 

확인 문제

SELECT DISTINCT job FROM emp ;

 

SELECT 
    empno EMPLOYEE_NO, ename EMPLOYEE_NAME, mgr MANAGER,
    sal SALARY, comm COMMISION, deptno DEPARTMENT_NO
FROM emp
ORDER BY deptno desc, ename asc;
반응형