Database/SQL

[SQL] SELECT 문

gangintheremark 2023. 7. 26. 11:39
728x90
SELECT문 구조
SELECT
FROM
[WHERE 조건식] 👉 WHERE 바로가기
[GROUP BY 단순 컬럼] 👉 GROUP BY 바로가기
[HAVING 조건식] 👉 HAVING 바로가기
[ORDER BY 표현식]; 👉 ORDER BY 바로가기

SELECT문은 데이터베이스에 저장된 데이터를 검색할 때 사용되는 SQL문장으로 DQL (Data Query Lanuage) 라고 한다. SELECTFROM키워드를  기본으로 사용하며 SELECT 키워드는 원하는 컬럼을 지정할 때 사용되고 FROM은 데이터가 저장된 테이블명을 기술할 때 사용된다.

 

모든 데이터 조회

-- * 은 모든(all) 컬럼을 의미하기 때문에 모든 데이터가 검색
SELECT * FROM 테이블명;

 

특정 데이터 조회

SELECT 컬럼명,컬럼명2,...,컬럼명n
FROM 테이블명;

-- 사원번호(employee_id)와 이름(last_name),입사일(hire_date),월급(salary)조회
SELECT employee_id, last_name, hire_date, salary
FROM employees;
💡 문자 데이터와 날짜 데이터는 왼쪽 정렬 기본, 수치 데이터는 오른쪽 정렬 기본

 

산술 연산자 사용

+ - * / 사용. SQL문에는 MOD() 함수를 사용하여 나머지를 구하기 때문에 % 는 사용X

-- 이름(last_name),월급(salary)과 연봉(salary*12) 조회
SELECT last_name, salary, salary * 12
FROM employees;

 

별칭 사용

위의 연산식을 실행하였을 때 해당 컬럼 헤딩에 연산식이 그대로 출력된다. 이 헤딩이 사용자가 이해하기 어려운 경우도 있기 때문에 별칭을 사용하여 표현하면 훨씬 정확한 의미 전달이 가능하다. as 키워드를 사용하여 별칭을 기술하면 된다. 이때 as생략 가능하다.

-- 이름(last_name),월급(salary)과 연봉(salary*12)을 별칭을 사용하여 조회
SELECT last_name as 이름, salary 월급, salary * 12 as 연봉
FROM employees;

-- 별칭에 공백문자 또는 특수문자를 사용하기 위해서는 반드시 " " 로 감싸줘야 된다.
SELECT last_name as "사원 이름", salary "사원 월급", salary * 12 as "연 봉" 
FROM employees;

 

널 (null)

널(null)은 0이나 공백과는 다르다. null 은 값 자체가 없는 것이다. null 값에 연산자를 사용한 경우 결과는 항상 null값이 반환된다. null값의 존재 여부와 상관없이 정확한 연산식이 필요한 경우에는 NVL() 을 사용한다.

NVL(컬럼명, 값)

NVL 함수null값을 어떤 특정 값으로 변환하는데 사용된다. 변환 가능한 데이터 타입은 문자, 날짜, 수치 데이터이다.

-- 수수료(commission_pct)가 null인 사원의 연봉은 수수료 값을 0으로 바꾸어 연산
SELECT last_name 이름, salary 월급, commission_pct 수수료,
 salary * 12+NVL(commission_pct,0) as 연봉
FROM employees;

 

연결 연산자

연결 연산자 ||를 사용하면 여러 개의 문자열을 연결하여 하나의 문자열로 생성할 수 있다. 즉, 기존의 컬럼에 다른 컬럼값을 연결하거나 새로운 값을 추가할 때 사용된다.

-- employees 테이블의 이름(last_name)과 월급(salary)를 연결 연산자(||)를 사용하여 하나의 컬럼으로 만든 후 출력
SELECT last_name || salary as "이름 월급"
FROM employees;

-- 컬럼과 컬럼이 아닌 새로운 값도 연결 가능
SELECT last_name || ' 사원' 
FROM employees;

SELECT last_name || '의 직업은 ' || job_id || ' 입니다' as "사원별 직급" 
FROM employees;

 

중복 데이터 제거

SELECT문은 기본적으로 중복되는 행을 제거하지 않고 모두 출력한다. 실행 결과에서 중복되는 행을 제거하기 위해서는 DISTINCT 키워드를 사용하고 기본적으로 오름차순으로 정렬되어 출력된다.

-- employees 테이블의 모든 직업(job_id)을 중복없이 출력
SELECT DISTINCT job_id
FROM employees;

 

🧐 키워드

  • NVL 
  • DISTINCT
728x90