no image
[Oracle SQL] 집계 및 그룹 함수(COUNT(), SUM(), AVG(), MAX(), MIN(), GROUP BY, HAVING)
집계 함수 여러 행에 대해 하나의 결과를 출력하는 그룹 함수를 이용하여 여러가지 집계 연산을 수행 COUNT() 열의 행 개수를 구하는 함수 --salary 컬럼의 행의 개수를 모두 추출(null이 아닌거) SELECT COUNT(salary) FROM employees; --manager_id 컬럼의 행의 개수를 모두 추출(null이 아닌거) SELECT COUNT(manager_id) FROM employees; --commission_pct 행의 값의 개수를 모두 추출(null이 아닌거) SELECT COUNT(commission_pct) FROM employees; --모든 행의 개수를 추출 SELECT COUNT(*) FROM employees; SUM() / AVG() 열의 합계를 구하는 SU..
2023.11.22
no image
[Oracle SQL] 숫자, 날짜, 변환, 일반 함수
본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. 숫자 함수 숫자 함수는 주로 숫자 계산과 추가 처리에 사용 CEIL() / FLOOR() • 숫자를 정수로 올림하는 CEIL() 함수, 숫자를 정수로 내림하는 FLOOR() 함수 SELECT salary, salary/21, CEIL(salary/21), FLOOR(salary/21) FROM employees; ROUND() / TRUNC() • 숫자를 반올림하는 ROUND() 함수, 숫자를 절삭하는 TRUNC() 함수 SELECT salary, salary/21, ROUND(salary/21), ROUND(salary/21, 2), ROUND(salary/21, -1), TRUNC(salary/21), TRUN..
2023.11.21
no image
[Oracle SQL] 함수와 문자 함수(LOWER(), UPPER(), INITCAP(), SUBSTR(), REPLACE(), CONCAT(), LENGTH(), INSTR(), LPAD(), RPAD(), LTRIM(), RTRIM())
본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. 함수 함수 • 자주 사용되는 기능을 미리 만들어 놓고 필요할 때마다 사용하는개념 • DBMS에서는 주로 사용되는 문자, 숫자, 날짜 등의 다양한 기능과 데이터 타입을 변환하는 함수들을 제공 타입 데이터 타입 설명 문자 CHAR(n) n 크기의 고정 길이 문자 형식 저장 (최대 2,000 byte) 문자 VARCHAR2(n) n 크기의 가변 길이 문자 형식 저장 (최대 4,000 byte) 숫자 NUMBER(p, s) 숫자 형식 저장(p: 정수 자리수, s: 소수 자리수) 날짜 DATE 날짜 형식 저장 (9999년 12월 31일까지 저장 가능) 단일행 함수 • 데이터 값 계산 및 조작 • 행별로 하나의 결과를 반환 ..
2023.11.21
no image
[Oracle SQL] 정렬, 집합 연산(ORDER BY, UNION, UNION ALL, INTERSECT, MINUS)과 SQL연산자(BETWEEN, IN, IS NULL, LIKE)
본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. ORDER BY ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력 ORDER BY 키워드와 함께 정렬 기준이 되는 속성과 정렬 방식을 지정 오름차순(기본): ASC / 내림차순: DESC 널 값은 오름차순에서는 맨 마지막에 출력되고, 내림차순에서는 맨 먼저 출력됨 여러 기준에 따라 정렬하려면 정렬 기준이 되는 속성을 차례대로 제시 --employees 테이블에서 first_name, last_name를 출력하되, first_name를 기준으로 오름차순으로 정렬 SELECT first_name, last_name FROM employees ORDER BY first_name; --emp..
2023.11.20
no image
[Oracle SQL] 조건 검색과 비교, 논리 연산(WHERE, AND, OR, NOT)
본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. WHERE 특정 조건을 만족하는 데이터만 조회 연산자, 컬럼명, 표현식, 숫자, 문자 등을 이용한 조건 제시 숫자뿐만 아니라 문자나 날짜 값을 비교하는 것도 가능( ‘A’ , >=, =, = 120 AND employee_id = 10000 AND salary 8000; --jobs 테이블에서 대 월급이 10000달러 이하인 직업 조회 SELECT * FROM jobs WHERE max_salary = 4000 AND m..
2023.11.20
no image
[Oracle SQL] SELECT 문
본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. SELECT 문 데이터베이스 내 테이블에서 원하는 데이터를 조회 및 분석하는데 사용되며, 일반적으로 가장 많이 사용되는 구문 테이블 전체 조회 SELECT * FROM departments; 특정 열(column)만 조회 테이블에서 필요한 열만 조회 여러 개의 열을 가져오고 싶을 때는 콤마로 구분 열 이름의 순서는 출력하고 싶은 순서대로 배열 SELECT department_id, department_name from departments; -- 해당 행만 출력 별칭 사용하기 열 이름을 다른 별칭으로 표시 SELECT department_id AS 부서ID, department_name AS 부서이름 from de..
2023.11.19
no image
SQL분류(DML, DDL, DCL, TCL)
SQL(Structured Query Language) DML(Data Manipulation Language) 데이터 조작 언어 데이터를 조작(수정, 삭제, 삽입, 선택)하는데 사용되는 언어 DML 구문이 사용되는 대상은 테이블의 행 DML 구문을 사용하기 위해서는 꼭 그 이전에 테이블이 정의되어 있어야 함 SELECT, INSERT, UPDATE, DELETE 구문 DDL(Data Definition Language) 데이터 정의 언어 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성 / 삭제/ 변경하는 역할 DDL은 트랜잭션 발생시키지 않음 CREATE, DROP, ALTER 구문 롤백이나 커밋 사용불가 DCL(Data Control Language) 데이터 제어 언어 사용자에게 어..
2023.11.19
no image
이클립스(Eclipse) 디버그 모드
디버그 모드란? 오류가 발생했을 때, 코드의 논리적인 순서 흐름을 파악할 수 있도록 코드를 한줄 한줄씩 실행해나가는 과정을 뜻한다. 디버그 모드를 사용하면 어디서 에러가 발생하는지를 좀 더 쉽게 알 수 있다. 디버그 모드 사용 디버그 모드를 사용하려면 먼저 브레이크 포인트를 걸어야 한다. 브레이크 포인트 코드가 처음부터 실행되다가 일시적으로 멈추게 되는 지점이다. 브레이크 포인트부터 사용자가 순차적으로 코드를 진행시키며 코드의 실행 흐름을 파악할 수 있다. 소스코드 좌측에, 라인번호 왼쪽에 파란색으로 칠해진 공간을 더블 클릭하면 브레이크 포인트를 지정할 수 있다. 브레이크 포인트가 걸리면 위 사진처럼 동그란 아이콘이 나타난다. 이 포인트가 디버그 시작점이다. 이후 디버그 모드(단축키 : F11)를 실행하..
2023.11.18

집계 함수

여러 행에 대해 하나의 결과를 출력하는 그룹 함수를 이용하여 여러가지 집계 연산을 수행

 

COUNT()

열의 행 개수를 구하는 함수

--salary 컬럼의 행의 개수를 모두 추출(null이 아닌거)
SELECT COUNT(salary) FROM employees;

--manager_id 컬럼의 행의 개수를 모두 추출(null이 아닌거)
SELECT COUNT(manager_id) FROM employees;

--commission_pct 행의 값의 개수를 모두 추출(null이 아닌거)
SELECT COUNT(commission_pct) FROM employees;

--모든 행의 개수를 추출
SELECT COUNT(*) FROM employees;

 

SUM() / AVG()

열의 합계를 구하는 SUM() 함수, 열의 평균을 구하는 AVG() 함수

--salary의 합계, 평균
SELECT SUM(salary), AVG(salary) FROM employees;

--salary의 평균
SELECT SUM(salary) / COUNT(salary) FROM employees;

-- salary 값을 first_name의 순서대로 더하는 것으로, 각 행에서 이전 행까지의 모든 값을 누적하여 합산
SELECT first_name, salary,
    SUM(salary) OVER (ORDER BY first_name)
FROM employees;

 

MIN() / MAX()

열의 최솟값을 구하는 MIN() 함수, 열의 최댓값을 구하는 MAX() 함수

--first_name과 salary를 그룹으로 묶고, 그룹별로 first_name과 salary를 first_name순으로 정렬하여 출력
SELECT first_name, salary FROM employees 
GROUP BY first_name, salary ORDER BY first_name;

--salary의 최솟값과 최댓값을 출력
SELECT MIN(salary), MAX(salary) FROM employees;

--first_name의 최솟값과 최댓값을 출력(이름순의 최솟값과 최댓값)
SELECT MIN(first_name), MAX(first_name) FROM employees;

 

STDDEV() / VARIANCE()

표준편차를 구하는 STDDEV() 함수, 분산을 구하는 VARIANCE() 함수

--salary의 표준편차, 분산을 출력
SELECT STDDEV(salary), VARIANCE(salary) FROM employees;

--department_id가 50이고, first_name, salary, salary의 분산을 first_name순으로 정렬하여 출력
SELECT first_name, salary,
    STDDEV(salary) OVER (ORDER BY first_name)
FROM employees
WHERE department_id = 50;

 

GROUP BY

지정한 열의 데이터 값을 기준으로 그룹화하여 집계 함수 적용


GROUP BY 동작 순서

  • 테이블에서 WHERE 조건식에 맞는 데이터 값만 구분
  • 지정한 열 기준으로 같은 데이터 값으로 그룹화
  • 지정한 열들의 그룹화된 집계 결과 출력


GROUP BY 절 특징

  • WHERE 절은 그룹화 되기 전에 조건식 적용
  • GROUP BY 절 사용시 SELECT 절에 지정된 기준 열을 지정
  • SELECT 절에 그룹 함수 없이도 GROUP BY 절 사용 가능
--job_id로 그룹을 묶고, 그룹별로 job_id와 salary의 합계와 평균을 출력
SELECT job_id, SUM(salary), AVG(salary)
FROM employees
GROUP BY job_id;

 

--job_id로 그룹을 묶고,department_id가 50인 것만 ,그룹별로 job_id와 salary의 합계와 평균을 출력
SELECT job_id, SUM(salary), AVG(salary)
FROM employees
WHERE department_id = 50
GROUP BY job_id;

 

--department_id로 묶고, 그룹별로 department_id, salary의 최솟값과, 최댓값 출력
SELECT department_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY department_id;

 

--department_id로 묶고, hire_date가 2007년 01월 01일 이후인 사람만, 그룹별로 department_id, salary의 최솟값과, 최댓값 출력
SELECT department_id, MIN(salary), MAX(salary)
FROM employees
WHERE hire_date > '20070101'
GROUP BY department_id;

 

--country_id로 묶고, country_id순으로 정렬하고, 그룹별로 country_id와 country_id컬럼의 열의 개수를 출력
SELECT country_id, COUNT(country_id)
FROM locations
GROUP BY country_id
ORDER BY country_id;

 

 

다중 GROUP BY 절

--job_id, department_id로 묶고, department_id가 50~100 사이만, job_id를 기준으로 정렬하고, 그룹별로 job_id, department_id, salary의 합계, 평균 출력
SELECT job_id, department_id, SUM(salary), AVG(salary)
FROM employees
WHERE department_id BETWEEN 50 AND 100
GROUP BY job_id, department_id
ORDER BY job_id;

 

SELECT department_id, manager_id, SUM(salary), AVG(salary)
FROM employees
WHERE department_id = 50
GROUP BY department_id, manager_id
ORDER BY manager_id;

 

--manager_id, department_id, job_id로 묶고, manager_id가 100또는 101인 것만, manager_id와 department_id 기준으로 정렬하고
--그룹별로 manager_id, department_id, job_id, salary의 합계, 최솟값, 최댓값 출력
SELECT manager_id, department_id, job_id, SUM(salary), MIN(salary), MAX(salary)
FROM employees
WHERE manager_id IN (100, 101)
GROUP BY manager_id, department_id, job_id
ORDER BY manager_id, department_id;

 

HAVING 절

WHERE 절에서는 그룹 함수를 사용할 수 없음
그룹화된 집계 결과에 조건식을 적용할 때 HAVING 절 사용

--job_id로 묶고, salary의 평균이 10000초과인 것만, 그룹별로 job_id, salary 합계, 평균 출력
SELECT job_id, SUM(salary), AVG(salary)
FROM employees
GROUP BY job_id
HAVING AVG(salary) > 10000;

 

--department_id로 묶고, salary의 최댓값이 7000초과인 것만, 그룹별로 department_id, salary의 최솟값, 최댓값 출력
SELECT department_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 7000;

 

--country_id로 묶고, country_id의 개수가 2초과인 것만, country_id기준으로 정렬하고, 
--그룹별로country_id, country_id의 개수 출력
SELECT country_id, COUNT(country_id)
FROM locations
GROUP BY country_id
HAVING COUNT(country_id) > 2
ORDER BY country_id;

 

--job_id, department_id로 묶고, department_id가 50~100사이 것만, salary평균이 9000이상인 것만
--job_id를 기준으로 정렬해서 그룹별로 job_id, department_id, salary의 합계, 평균 출력
SELECT job_id, department_id, SUM(salary), AVG(salary)
FROM employees
WHERE department_id BETWEEN 50 AND 100
GROUP BY job_id, department_id
HAVING AVG(salary) > 9000
ORDER BY job_id;

 

--manager_id, department_id, job_id로 묶고, manager_id가 100 또는 101인 것만
--salary가 10000과 40000 사이의 것만, manager_id, department_id 기준으로 정렬
--그룹별로 manager_id, department_id, job_id, salary의 합계, 최솟값, 최댓값을 출력
SELECT manager_id, department_id, job_id, SUM(salary), MIN(salary), MAX(salary)
FROM employees
WHERE manager_id IN (100, 101)
GROUP BY manager_id, department_id, job_id
HAVING SUM(salary) BETWEEN 10000 AND 40000
ORDER BY manager_id, department_id;

 

연습 문제

--employees 테이블에서 salary가 8000이상인 직원의 수를 조회
SELECT COUNT(salary) FROM employees WHERE salary > 8000;

 

--employees 테이블에서 hire_date가 2007년 1월 1일 이후인 직원의 수를 조회
SELECT COUNT(hire_date) FROM employees WHERE hire_Date > '20070101';

 

--jobs 테이블에서 max_salary 값의 합계와 평균을 조회
SELECT MAX(max_salary), AVG(max_salary) FROM jobs;

 

--employees 테이블에서 job_id가 ‘IT_PROG’인 직원의 salary 합계와 평균을 조회
SELECT SUM(salary), AVG(salary)
FROM employees
WHERE job_id = 'IT_PROG';

 

--employees 테이블에서 department_id가 50과 80 사이인 직원의 first_name, salary,
--그리고 commission_pct의 평균값을 first_name 정렬 기준으로 조회 (null 값은 0으로 출력)
SELECT first_name, salary, AVG(NVL(commission_pct, 0)) OVER (ORDER BY first_name)
FROM employees
WHERE department_id BETWEEN 50 AND 100;

 

--jobs 테이블에서 max_salary 값의 최솟값과 max_salary 값의 최댓값을 조회
SELECT min(max_salary), MAX(max_salary) FROM jobs;

 

--jobs 테이블에서 job_title이 ‘Programmer’인 직업의 max_salary 값의 최솟값과 max_salary 값의 최댓값을 조회
SELECT MIN(max_salary), MAX(max_salary)
FROM jobs
WHERE job_title = 'Programmer';

 

--employees 테이블에서 department_id가 50인 데이터의 hire_date 최소값과 최댓값 조회
SELECT MIN(hire_date), MAX(hire_date)
FROM employees
WHERE department_id = 50;

 

--employees 테이블에서 department_id가 100인 데이터의 first_name, salary,
--그리고 salary의 분산값을 hire_date 정렬 기준으로 조회
SELECT first_name, salary, VARIANCE(salary) OVER (ORDER BY hire_date)
FROM employees
WHERE department_id = 100;

 

--employees 테이블에서 hire_date 값이 
--2004년 1월 1일부터 2006년 12월 31일 사이의 데이터를 job_id 기준으로
--그룹화한 뒤에 job_id와 salary 최솟값과 최대값을 조회
SELECT job_id, MIN(salary), MAX(salary)
FROM employees
WHERE hire_date BETWEEN '20040101' AND '20061231'
GROUP BY job_id;

 

--employees 테이블에서 department_id 가 50과 80인 데이터를
--department_id와 job_id 기준으로 그룹화한 뒤에 department_id와
--job_id, salary 합계, 최솟값, 최대값을 job_id 기준으로 정렬하여 조회
SELECT department_id, job_id, SUM(salary), MIN(salary), MAX(salary)
FROM employees
WHERE department_id IN (50, 80)
GROUP BY department_id, job_id
ORDER BY job_id;

 

--employees 테이블에서 department_id와 job_id 기준으로 그룹화한
--뒤에 salary 평균값이 12000 이상인 데이터만 department_id와
--job_id, salary 최솟값, 최대값, 평균을 department_id 기준으로 정렬하여 조회
SELECT department_id, job_id, MIN(salary), MAX(salary), AVG(salary)
FROM employees
GROUP BY department_id, job_id
HAVING AVG(salary) > 12000
ORDER BY department_id;

본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. 


숫자 함수

숫자 함수는 주로 숫자 계산과 추가 처리에 사용

 

CEIL() / FLOOR()

• 숫자를 정수로 올림하는 CEIL() 함수, 숫자를 정수로 내림하는 FLOOR() 함수

SELECT salary, salary/21, CEIL(salary/21), FLOOR(salary/21) FROM employees;

 

ROUND() / TRUNC()

• 숫자를 반올림하는 ROUND() 함수, 숫자를 절삭하는 TRUNC() 함수

SELECT salary, salary/21, 
    ROUND(salary/21), ROUND(salary/21, 2), ROUND(salary/21, -1),
    TRUNC(salary/21), TRUNC(salary/21, 2), TRUNC(salary/21, -1)
FROM employees;

 

MOD() 

• 숫자를 나눈 후 나머지를 구함

SELECT salary, salary/21, MOD(salary, 21) FROM employees;

 

SIGN()

• 숫자가 양수일 경우 1, 음수일 경우 -1, 나머지는 0을 반환

SELECT SIGN(-123), SIGN(0), SIGN(123) FROM dual;

 

POWER() / SQRT()

• 거듭제곱을 출력하는 POWER() 함수, 제곱근을 출력하는 SQRT() 함수

SELECT POWER(3, 3), SQRT(4) FROM dual;

 

날짜 함수

데이터 중의 날짜 형식을 가지는 데이터를 계산하기 위해서 사용되는 날짜 함수
• 날짜(Date) + 숫자(Number) = 날짜에 숫자 이후의 날짜
• 날짜(Date) - 숫자(Number) = 날짜에 숫자 이전의 날짜
• 날짜(Date) + 날짜(Date) = 날짜에서 날짜를 더한 날짜
• 날짜(Date) – 날짜(Date) = 날짜에서 날짜를 뺀 날짜

 

SYSDATE

• 오라클이 설치된 시스템의 현재 날짜를 반환

SELECT SYSDATE, SYSDATE + 1, SYSDATE - 1 FROM dual;

 

MONTH_BETWEEN()

• 날짜와 날짜 사이의 개월 수를 계산

SELECT SYSDATE, hire_date, MONTHS_BETWEEN(SYSDATE, hire_date) FROM employees;

 

ADD_MONTH()

 오라클이 설치된 시스템의 현재 날짜를 반환

SELECT hire_date, 
    ADD_MONTHS(hire_date, 2), ADD_MONTHS(hire_date, -2)
FROM employees;

 

NEXT_DAY() / LAST_DAY()

 지정된 날짜부터 돌아오는 요일 날짜를 출력하는 NEXT_DAY() 함수
• 월의 마지막 날짜를 계산하는 LAST_DAY() 함수

SELECT hire_date, 
    NEXT_DAY(hire_date, 3), NEXT_DAY(hire_date, '수요일'), LAST_DAY(hire_date)
FROM employees;

 

ROUND() / TRUNC()

• 날짜를 연도나 월 단위로 반올림하는 ROUND() 함수
• 날짜를 연도나 월 단위로 절삭하는 TRUNC() 함수

SELECT hire_date,
    ROUND(hire_date, 'YEAR'), TRUNC(hire_date, 'MONTH')
FROM employees;

 

변환 함수

• 오라클에서 제공하는 데이터 타입을 필요에 따라 변환

 

자동(암묵적) 변환

SELECT 1 + '2'
FROM dual;

 

수동(명시적) 변환

 

 

날짜 지정 형식

 

시간 지정 형식

 

기타 형식

 

숫자 지정 형식

 

TO_CHAR()

숫자와 날짜 데이터를 문자 데이터로 변환하는 함수

SELECT TO_CHAR(SYSDATE, 'CC AD Q') FROM dual;

 

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') FROM dual;

 

SELECT TO_CHAR(SYSDATE, 'W DAY') FROM dual;

 

SELECT TO_CHAR(SYSDATE, 'AM HH:MI:SS') FROM dual;

 

SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS PM') FROM dual;

 

SELECT TO_CHAR(SYSDATE, 'YY-MM-DD') FROM dual;

 

SELECT TO_CHAR(SYSDATE, 'MM"월" DD"일"') FROM dual;

 

SELECT TO_CHAR(salary, '9999999') FROM employees;

 

SELECT TO_CHAR(salary, '0999999') FROM employees;

 

SELECT TO_CHAR(salary, '$999999') FROM employees;

 

SELECT TO_CHAR(salary, 'L999999') FROM employees;

 

SELECT TO_CHAR(salary, '99999.99') FROM employees;

 

SELECT TO_CHAR(salary, '9,999,999') FROM employees;

 

TO_NUMBER()

숫자로 된 문자열을 숫자 타입으로 변환하는 함수

SELECT TO_NUMBER('123') FROM dual;

 

SELECT TO_NUMBER('123.123') FROM dual;

 

TO_DATE()

숫자로 된 문자열을 날짜 타입으로 변환하는 함수

SELECT TO_CHAR(TO_DATE('20210909'), 'YYMMDD') FROM dual;

 

일반 함수

NVL()

NULL 값을 특정한 값으로 치환하는 함수

SELECT department_name, NVL(manager_id, 100) FROM departments;

 

SELECT NVL(state_province, 'None') FROM locations ORDER BY state_province;

 

NVL2()

NULL 값인 경우와 아닌 경우를 구분하여 특정한 값으로 치환하는 함수

SELECT department_name,  NVL2(manager_id, '관리자 있음', '관리자 없음') FROM departments;

 

SELECT city, NVL2(state_province, '주소 있음', '주소 없음') FROM locations ORDER BY state_province;

 

DECODE()

데이터가 조건 값과 일치하면 치환 값을 출력하고, 일치하지 않으면 기본값을 출력하는 조건 논리 처리 함수

SELECT job_title, min_salary,
    DECODE(min_salary, 2500, min_salary * 1.1, min_salary)
FROM jobs;

 

SELECT job_title, max_salary,
    DECODE(max_salary, 40000, max_salary * 0.9, max_salary)
FROM jobs;

 

CASE()

복잡한 논리 조건 처리 함수

SELECT job_title, min_salary,
CASE
    WHEN min_salary < 4000 THEN min_salary * 1.2
    WHEN min_salary BETWEEN 4000 AND 6000 THEN min_salary * 1.1
    ELSE min_salary
    END AS 최소급여변경
FROM jobs;

 

RANK(), DENSE_RANK(), ROW_NUMBER() 함수

• RANK(): 공통 순위는 건너뛰어 다음 순위를 출력하는 순위 함수
• DENSE_RANK(): 공통 순위를 건너뛰지 않고, 다음 순위를 출력하는 순위
함수
• ROW_NUMBER(): 공통 순위 없이 순위를 출력하는 순위 함수

SELECT first_name, salary,
    RANK() OVER(ORDER BY salary DESC) RANK,
    DENSE_RANK() OVER(ORDER BY salary DESC) DENSE_RANK,
    ROW_NUMBER() OVER(ORDER BY salary DESC) ROW_NUMBER
FROM employees;

 

연습문제

--jobs 테이블에서 min_salary 값을 30으로 나눈 값의 올림값과 내림값을 조회
SELECT min_salary, CEIL(min_salary / 30), FLOOR(min_salary / 30) FROM jobs;

 

-- jobs 테이블에서 max_salary 값을 30으로 나눈 값을 소수점 둘째 자리에서 반올림한 값과 정수 첫째 자리에서 반올림한 값을 조회
SELECT max_salary, ROUND(max_salary / 30, 2), ROUND(min_salary / 30, -1) FROM jobs;

 

--jobs 테이블에서 max_salary 값을 30으로 나눈 값을 소수점 셋째 자리에서 절삭한 값과 정수 둘째 자리에서 절삭한 값을 조회
SELECT max_salary, TRUNC(max_salary / 30, 2), TRUNC(max_salary / 30, -2) FROM jobs;

 

--현재 날짜와 현재 날짜에서 한 달 뒤의 날짜를 조회
SELECT SYSDATE, ADD_MONTHS(SYSDATE, 1) FROM dual;

 

--현재 날짜와 현재 날짜에서 돌아오는 월요일과 금요일의 날짜를 조회
SELECT SYSDATE, NEXT_DAY(SYSDATE, 2), NEXT_DAY(SYSDATE, 6) FROM dual;

 

--현재 날짜의 월/일과 요일을 조회
SELECT TO_CHAR(SYSDATE, 'MM/DD DAY') FROM dual;

 

-- 현재 시간의 오전 또는 오후 그리고 시:분을 조회'
SELECT TO_CHAR(SYSDATE, 'AM HH:MI') FROM dual;

 

--2021년 01월 01일의 요일을 조회
SELECT TO_CHAR(TO_DATE('20210101', 'YYMMDD'), 'DAY') FROM dual;

 

-- employees 테이블에서 salary, commission_pct, 그리고 salary에 commission_pct를 곱한 값을 salary에 반영하고,
--commission_pct 정렬 순으로 조회 (commission_pct가 null인 경우에는 salary 그대로 반영)
SELECT salary, commission_pct, salary + salary * NVL(commission_pct, 1)
FROM employees ORDER BY(commission_pct);

 

--employees 테이블에서 first_name, last_name, department_id,  salary 그리고 department_id가 50인 경우 salary를 10% 증가시킨
--값을 ‘급여인상’, department_id가 100인 경우 salary를 10%  감소시킨 값을 ‘급여감소’로 조회
SELECT first_name, last_name, department_id, salary,
    DECODE(department_id, 50, salary * 1.1, salary) AS 급여인상,
    DECODE(department_id, 100, salary * 0.9, salary) AS 급여감소
FROM employees;

 

--jobs 테이블에서 job_title에 Manager가 들어간 데이터 중에 job_title, max_salary, 그리고 max_salary가 20000 초과인 것은
--‘상위’, 10000에서 20000 사이인 것은 ‘중위’, 그 밖에는 ‘하위’로 표기하는 ‘급여등급’을 조회
SELECT job_title, max_salary,
CASE
    WHEN max_salary > 20000 THEN '상위'
    WHEN max_salary BETWEEN 20000 AND 10000 THEN '중위'
    ELSE '하위'
END AS 급여등급
FROM jobs WHERE job_title LIKE '%Manager%';

본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. 


함수

함수

자주 사용되는 기능을 미리 만들어 놓고 필요할 때마다 사용하는개념
• DBMS에서는 주로 사용되는 문자, 숫자, 날짜 등의 다양한 기능과 데이터 타입을 변환하는 함수들을 제공

타입 데이터 타입 설명
문자 CHAR(n)  n 크기의 고정 길이 문자 형식 저장 (최대 2,000 byte)
문자  VARCHAR2(n)  n 크기의 가변 길이 문자 형식 저장 (최대 4,000 byte)
숫자 NUMBER(p, s)  숫자 형식 저장(p: 정수 자리수, s: 소수 자리수)
날짜 DATE  날짜 형식 저장 (9999년 12월 31일까지 저장 가능)

 

단일행 함수

데이터 값 계산 및 조작
• 행별로 하나의 결과를 반환
• SELECT, WHERE, ORDER BY 절에서 사용
• 중첩 함수로 사용 가능 (가장 안쪽 단계에서 바깥쪽 단계순으로 진행)
• 문자, 숫자, 날짜, 변환, 일반 함수 등이 존재

 

다중행 함수(그룹 함수, 집계 함수)

• 행의 그룹 계산 및 요약
• 여러 행이 입력되고, 결과는 하나의 행씩 반환
• GROUP BY, HAVING 절 사용

 

문자 함수

문자 함수는 주로 데이터 조작에 사용되며 문자와 문자열은 작은 따옴표(‘)로 묶어서 표현

 

LOWER(), UPPER(), INITCAP()


문자열을 소문자로 변환하는 LOWER() 함수, 문자열을 대문자로 변환하는 UPPER() 함수, 첫 문자만 대문자로 변환하는 INITCAP() 함수

--employees 테이블에서 first_name의 원래 그대로, 소문자, 대문자, 첫글자만 대문자를 출력 
SELECT first_name, LOWER(first_name), UPPER(first_name), INITCAP(first_name) FROM employees;

 

SUBSTR()

 문자열에서 지정된 길이 만큼의 일부만 추출할 때 사용

--employees 테이블에서 job_id의 원래 그대로, 앞에서 두글자, 4번째 idx에서 끝까지 출력
SELECT job_id, SUBSTR(job_id, 1, 2), SUBSTR(job_id, 4) FROM employees;

 

REPLACE()

 특정 문자열을 찾아서 바꾸는 함수

--employees 테이블에서 job_id의 원래 그대로, job_id의 MGR을 MANAGER로 변경하여 출력 
SELECT job_id, REPLACE(job_id, 'MGR', 'MANAGER') FROM employees;

--employees 테이블에서 job_id의 원래 그대로, job_id의 PROG를 PROGRAMMER로 변경하여 출력 
SELECT job_id, REPLACE(job_id, 'PROG', 'PROGRAMMER') FROM employees;

 

CONCAT()

 두 개의 문자열을 하나로 합치는 함수

--employees 테이블에서 first_name을 ' '과 last_name을 합친 값을 출력
SELECT CONCAT(first_name, CONCAT(' ', last_name)) FROM employees;

 

LENGTH()

• 문자열의 길이를 반환하는 함수

--employees 테이블에서 first_name, first_name의 길이를 출력
SELECT first_name, LENGTH(first_name) FROM employees;

 

INSTR()

 문자열 위치값을 반환하는 함수

--employees 테이블에서 first_name, first_name에서 a가 있는 idx를 출력
SELECT first_name, INSTR(first_name, 'a') FROM employees;

 

LPAD(), RPAD()

특정 문자를 왼쪽부터 채우는 LPAD() 함수, 특정 문자를 오른쪽부터 채우는 RPAD() 함수

--employees 테이블에서 총 10글자중 first_name을 오른쪽부터 채우고 남은 왼쪽은 *로 채움, 총 10글자중 first_name을 왼쪽부터 채우고 남은 오른쪽은 *로 채움
SELECT LPAD(first_name, 10, '*'), RPAD(first_name, 10, '*') FROM employees;

 

LTRIM(), RTRIM()

왼쪽에 특정 문자를 제거하는 LPAD() 함수, 오른쪽에 특정 문자를 제거하는 RPAD() 함수

--employees 테이블에서 job_id의 가장 왼쪽에 있는 A를 제거, job_id의 가장 오른쪽에 있는 T를 제거
SELECT job_id, LTRIM(job_id, 'A'), RTRIM(job_id, 'T') FROM employees;

 

TRIM()

• 문자열의 공백(space)을 제거하는데 사용하는 함수

--양쪽에 있는 공백 제거
SELECT TRIM(' Suan '), TRIM(' Su an') FROM dual;

 

DUAL 테이블

하나의 열 DUMMY와 하나의 값 ‘X’를 가지고 있는 테이블로 특정 테이블을 참조하지 않고 출력할 때 사용

--하나의 열 DUMMY와 하나의 값 ‘X’를 가지고 있는 테이블로 특정 테이블을 참조하지 않고 출력할 때 사용
SELECT * FROM dual;

 

연습 문제

--jobs 테이블에서 job_title과 소문자와 대문자로 변환한 job_title을 조회
SELECT job_title, LOWER(job_title) ,UPPER(job_title) FROM jobs;

 

--employees 테이블에서 first_name 첫 1 문자와 last_name 조회
SELECT first_name, SUBSTR(first_name, 1,1) FROM employees;

 

--employees 테이블에서 job_id가 ‘REP’인 부분을 ‘REPRESENTATIVE’로 바꿔서 조회
SELECT job_id, REPLACE(job_id, 'REP', 'REPRESENTATIVE') FROM Employees;

 

-- employees 테이블에서 first_name 첫 1 문자와 last_name을 중간에 공백을 두고 하나로 결합하여 조회
SELECT CONCAT(SUBSTR(first_name, 1, 1), CONCAT(' ', last_name)) from employees;

 

--employees 테이블에서 first_name과 last_name의 길이를 합쳐서 조회
SELECT LENGTH(CONCAT(first_name, last_name)) from employees;

 

--employees 테이블에서 first_name과 last_name의 길이를 합쳐서 조회
SELECT LENGTH(first_name) + LENGTH(last_name) from employees;

 

--employees 테이블에서 job_id와 job_id에 ‘A’ 문자 위치 조회
SELECT job_id, INSTR(job_id, 'A') FROM employees;

 

--locations 테이블의 city를 15자리 문자열로 바꾸고, 빈 공간을 ‘.’으로 표현하여 조회
SELECT LPAD(city, 15, '.'), RPAD(city, 15, '.') FROM locations;

 

--locations 테이블에서 city의 왼쪽부터 ‘S’ 문자를 지운 것과 오른쪽부터 ‘e’ 문자를 지운 결과를 조회
SELECT LTRIM(city, 'S'), RTRIM(city, 'e') FROM locations;

본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. 


ORDER BY

  • ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력
  • ORDER BY 키워드와 함께 정렬 기준이 되는 속성과 정렬 방식을 지정
  • 오름차순(기본): ASC / 내림차순: DESC
  • 널 값은 오름차순에서는 맨 마지막에 출력되고, 내림차순에서는 맨 먼저 출력됨
  • 여러 기준에 따라 정렬하려면 정렬 기준이 되는 속성을 차례대로 제시
--employees 테이블에서 first_name, last_name를 출력하되, first_name를 기준으로 오름차순으로 정렬
SELECT first_name, last_name FROM employees ORDER BY first_name;

 

--employees 테이블에서 first_name, last_name를 출력하되, first_name를 기준으로 내림차순으로 정렬
SELECT first_name, last_name FROM employees ORDER BY first_name DESC;

 

--departments 테이블에서 department_name를 오름차순으로 출력
SELECT department_name FROM departments ORDER BY department_name;

 

--departments 테이블에서 department_name를 내림차순으로 출력
SELECT department_name FROM departments ORDER BY department_name DESC;

 

--locations 테이블에서 country_id, city를 country_id를 기준으로 오름차순으로 출력하되 동일 항목에 대해선 city를 기준으로 오름차순 정렬
SELECT country_id, city FROM locations ORDER BY country_id, city;

 

--departments 테이블에서 location_id, department_name를 location_id를 기준으로 내림차순으로 출력하되 동일 항목에 대해선 department_name를 기준으로 오름차순 정렬
SELECT location_id, department_name FROM departments ORDER BY location_id DESC, department_name;

 

SQL 연산자

BETWEEN 연산자

• 두 값의 범위에 해당하는 데이터만 출력할 때 사용되는 확장 연산자

--employees테이블에서 employee_id가 120이상 130이하인 모든 컬럼을 출력
SELECT * FROM employees WHERE employee_id BETWEEN 120 AND 130;

 

--employees테이블에서 salary가 10000이상 12000이하인 모든 컬럼을 출력
SELECT * FROM employees WHERE salary BETWEEN 10000 AND 12000;

 

IN 연산자

• 여러 개의 데이터 값을 지정하여 일치하는 데이터만 출력할 때 사용

--employees테이블에서 first_name이 'Steven', 'John', 'Peter'인 모든 컬럼을 출력
SELECT * FROM employees WHERE first_name IN ('Steven', 'John', 'Peter');

 

--counturies테이블에서 country_id가 'US', 'IL', 'SG' 인 모든 컬럼을 출력
SELECT * FROM countries WHERE country_id IN ('US', 'IL', 'SG');

 

--locations 테이블에서 city가 'Sao Paulo', 'London', 'Southlake'가 아닌 모든 컬럼을 출력
SELECT * FROM locations WHERE city NOT IN ('Sao Paulo', 'London', 'Southlake');

 

IS NULL 연산자

• 특정 속성의 값이 NULL 값인지를 비교하여 데이터 조회

--locations 테이블에서 state_province이 null인 모든 컬럼을 출력
SELECT * FROM locations WHERE state_province IS NULL;

 

--employees 테이블에서 commission_pct이 null이 아닌 모든 컬럼을 출력
SELECT * FROM employees WHERE commission_pct IS NOT NULL;

 

 

LIKE 연산자

• 문자열 속성에서 부분적으로 일치하는 것만 출력할 때 사용

기호 설명
% 0개 이상의 문자 (문자의 내용과 개수는 상관 없음)
_ 1개의 문자 (문자의 내용은 상관 없음)
기호 설명
LIKE ‘data%’  data로 시작하는 문자열 (길이 상관 없이 data로 시작)
LIKE ‘%data’ data로 끝나는 문자열 (길이 상관 없이 data로 끝남)
LIKE ‘%data%’ data가 포함된 문자열 (길이 상관 없이 data가 포함)
LIKE ‘data____’ data로 시작하는 8자리 문자열
LIKE ‘____data’  data로 끝나는 8자리 문자열
--locations테이블에서 city가 South로 시작하는 모든 컬럼을 출력
SELECT * FROM locations WHERE city LIKE 'South%';

 

--locations테이블에서 street_address가 St로 끝나는 모든 컬럼을 출력
SELECT * FROM locations WHERE street_address LIKE '%St';

 

--locations테이블에서 city가 South로 시작하고 총 9글자인 모든 컬럼을 출력
SELECT * FROM locations WHERE city LIKE 'South____';

 

 

집합 연산자

•  연산자 앞뒤의 값을 비교하여 데이터 조회

연산자 설명
UNION 합집합 (중복 제외)
UNION ALL 합집합 (중복 포함)
MINUS 차집합
INTERSECT 교집합
--employees테이블에서 department_id가 60인 집합과 employees테이블에서 department_id가 100인 집합의 합집합에서 employee_id, first_name, department_id 컬럼을 출력
SELECT employee_id, first_name, department_id FROM employees WHERE department_id = 60
UNION
SELECT employee_id, first_name, department_id FROM employees WHERE department_id = 100;

 

--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 합집합 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
UNION
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;

 

--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 합집합(중복 포함) 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
UNION ALL
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;

 

--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 차집합 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
MINUS
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;

 

--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 교집합 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
INTERSECT
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;

 

 

연습 문제

--jobs 테이블에서 job_title 기준으로 정렬하여 직업 조회
SELECT job_title FROM jobs ORDER BY job_title;

 

--countres 테이블에서 country_name 기준으로 내림차순으로 정렬
SELECT country_name FROM countries ORDER BY country_name DESC;

 

--employees 테이블에서 salary가 10000에서 12000 사이인 직원 조회
SELECT * FROM employees WHERE salary BETWEEN 10000 AND 12000;

 

--employees 테이블에서 job_id가 IT_PROG와 ST_MAN인 직원 조회
SELECT * FROM employees WHERE job_id IN('IT_PROG','ST_MAN');

 

--employees 테이블에서 manager_id가 NULL인 직원 조회
SELECT * FROM employees WHERE manager_id IS NULL;

 

--departments 테이블에서 manager_id가 NULL이 아닌 부서 조회
SELECT * FROM departments WHERE manager_id IS NOT NULL;

 

--employees 테이블에서 job_id가 'AD'로 시작하는 직원 조회
SELECT * FROM employees WHERE job_id LIKE 'AD%';

 

--employees 테이블에서 first_name에서 'ni'를 포함하는 직원 조회
SELECT * FROM employees WHERE first_name LIKE '%ni%';

 

--locations 테이블에서 location_id, street_address, city 에 대해 location_id가 3000 이하인 데이터와 2000 이상인 데이터를 합집합(중복포함)
SELECT location_id, street_address, city FROM locations WHERE location_id <= 3000
UNION ALL
SELECT location_id, street_address, city FROM locations WHERE location_id >= 2000;

 

--locations 테이블에서 location_id, street_address, city 에 대해 location_id가 3000 이하인 데이터와 2000 이상인 데이터를 차집합
SELECT location_id, street_address, city FROM locations WHERE location_id <= 3000
MINUS
SELECT location_id, street_address, city FROM locations WHERE location_id >= 2000;

 

--locations 테이블에서 location_id, street_address, city 에 대해 location_id가 3000 이하인 데이터와 2000 이상인 데이터를 교집합
SELECT location_id, street_address, city FROM locations WHERE location_id <= 3000
INTERSECT
SELECT location_id, street_address, city FROM locations WHERE location_id >= 2000;

본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다. 


WHERE

  • 특정 조건을 만족하는 데이터만 조회
  • 연산자, 컬럼명, 표현식, 숫자, 문자 등을 이용한 조건 제시
  • 숫자뿐만 아니라 문자나 날짜 값을 비교하는 것도 가능( ‘A’ < ‘C’ ,  ‘2019-12-01’ < ‘2019-12-02’ 등)
  • 조건에서 문자나 날짜 값은 작은따옴표로 묶어서 표현
연산자
산술 연산자(+, -, *, /)
비교 연산자(=, <>, (!=), >, >=, <, <=)
논리 연산자(AND, OR, NOT)
집합 연산자(UNION, UNION ALL, MINUS, INTERSECT)
SQL 연산자(BETWEEN, IN, LIKE, IS NULL)
  • 연산자 우선순위
연산자 설명
*, /  산술 연산자
+, -  산술 연산자
=, !=, ^=, <>, >, >=, <, <=  대소 비교 연산자
IS (NOT) NULL, (NOT) LIKE, (NOT) IN (그 외 비교 연산자)
BETWEEN A AND B SQL 연산자
NOT 논리 연산자
AND 논리 연산자
OR 논리 연산자

 

 

비교연산자

  • 연산자 앞뒤의 값을 비교하여 데이터 조회
연산자 설명
= 같다
<> 다르다
< 작다
> 크다
<= 작거나 같다
>= 크거나 같다
--employees 테이블에서 employee_id가 110인 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id = 110;

 

--employees 테이블에서 employee_id가 110이 아닌 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id <> 110;

 

--employees 테이블에서 employee_id가 110보다 작은 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id < 110;

 

 --employees 테이블에서 employee_id가 110보다 큰 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id > 110;

 

--employees 테이블에서 employee_id가 110보다 작거나 같은 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id <= 110;

 

--employees 테이블에서 employee_id가 110보다 크거나 같은 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id >= 110;

 

 

논리연산자

  • 여러 조건을 논리 연산자로 연결시켜 데이터 조회
연산자 설명
AND 모든 조건을 만족해야 조회
OR 여러 조건 중 하나만 만족해도 조회
NOT 조건을 만족하지 않는 것만 조회

 

--employees 테이블에서 employee_id가 120이상, 130이하인 모든 열의 값을 조회
SELECT * FROM employees WHERE employee_id >= 120 AND employee_id <= 130;

 

--employees 테이블에서 salary가 10000 이상, 12000이하인 모든 열의 값을 조회
SELECT * FROM employees WHERE salary >= 10000 AND salary <= 12000;

 

--employees 테이블에서 manager_id가 100이거나 120인 모든 열의 값을 조회
SELECT * FROM employees WHERE manager_id = 100 OR manager_id = 120;

 

--employees 테이블에서 last_name이 King 이거나 Smith인 모든 열의 값을 조회
SELECT * FROM employees WHERE last_name = 'King' OR last_name = 'Smith';

 

--employees 테이블에서 department_id가 50이 아닌 모든 열의 값을 조회
SELECT * FROM employees WHERE NOT department_id = 50;

 

--employees 테이블에서 department_id가 50이 아니거나 80이 아닌 모든 열의 값을 조회
SELECT * FROM employees WHERE NOT department_id = 50 AND NOT department_id = 80;

 

 

연습 문제

--employee 테이블에서 first_name이 david인 직원 조회
SELECT * FROM employees WHERE first_name = 'David';

 

--jobs 테이블에서 최소 월급이 4000달러인 직업 조회
SELECT * FROM jobs WHERE min_salary = 4000;

 

--jobs 테이블에서 최소 월급이 8000달러 초과인 직업 조회
SELECT * FROM jobs WHERE min_salary > 8000;

 

--jobs 테이블에서 대 월급이 10000달러 이하인 직업 조회
SELECT * FROM jobs WHERE max_salary <= 10000;

 

--jobs 테이블에서 최소 월급이 4000달러 이상이고 최대 월급이 10000달러 이하인 직업 조회
SELECT * FROM jobs WHERE min_salary >= 4000 AND max_salary <= 10000;

 

--employees 테이블에서 job_id가 'IT_PROG'이면서 salary가 5000초과인 직원 조회
SELECT * FROM employees WHERE job_id = 'IT_PROG' AND salary > 5000;

본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다.


SELECT 문

데이터베이스 내 테이블에서 원하는 데이터를 조회 및 분석하는데 사용되며, 일반적으로 가장 많이 사용되는 구문

 

테이블 전체 조회

SELECT * FROM departments;

 

특정 열(column)만 조회

  • 테이블에서 필요한 열만 조회
  • 여러 개의 열을 가져오고 싶을 때는 콤마로 구분
  • 열 이름의 순서는 출력하고 싶은 순서대로 배열
SELECT department_id, department_name from departments; -- 해당 행만 출력

 

별칭 사용하기

  • 열 이름을 다른 별칭으로 표시
SELECT department_id AS 부서ID, department_name AS 부서이름 from departments; --원하는 컬럼 이름으로 출력

 

중복 제외(DISTINCT)

  • 중복된 것은 제외해서 출력
  • 테이블의 크기가 클수록 효율적임
SELECT DISTINCT location_id From departments; --해당 컬럼의 중복 제거해서 출력

 

연결 연산자(||)

  • 열이나 문자열을 연결할 때 사용
SELECT department_id || department_name from departments; --해당 컬럼을 결합해서 출력

 

SELECT 'department of ' || department_name from departments; --문자열과 컬럼 결합

 

SELECT 'department of ' || department_name AS 부서이름 from departments; --연결연산자 + 별칭

 

 

산술 연산자(+, -, *, /)

SELECT first_name, last_name, salary + 500 FROM employees;

 

SELECT first_name, last_name, salary - 500 FROM employees;

 

SELECT first_name, last_name, salary * 1.1 FROM employees;

 

SELECT first_name, last_name, salary / 1.2 FROM employees;

 

 

연습 문제

SELECT * FROM countries; --countries 테이블 조회

 

--country_id, country_name 조회
SELECT country_id, country_name FROM countries;

 

SELECT country_id AS 국가ID, country_name AS 국가명 FROM countries; --별칭 부여

 

SELECT DISTINCT region_id FROM countries; --중복 제거

 

--country_id와 country_name 컬럼 결합
SELECT country_id || country_name FROM countries;

 

--컬럼 결합에 별칭부여
SELECT country_id || country_name AS 국가명 FROM countries;

 

--street_address, city 두 개의 컬럼만 추출
SELECT street_address, city FROM locations;

 

SELECT job_id, job_title FROM jobs; --두 개의 컬럼만 추출

 

--최소연봉과 최대 연봉 10%인상
SELECT job_title, min_salary * 1.1, max_salary * 1.1 FROM jobs;

 

--두 컬럼 결합
SELECT first_name ||' '|| last_name AS 이름 FROM employees;

 

SELECT DISTINCT job_id FROM employees; --중복 제거

SQL(Structured Query Language)

DML(Data Manipulation Language)

  • 데이터 조작 언어
  • 데이터를 조작(수정, 삭제, 삽입, 선택)하는데 사용되는 언어
  • DML 구문이 사용되는 대상은 테이블의 행
  • DML 구문을 사용하기 위해서는 꼭 그 이전에 테이블이 정의되어 있어야 함
  • SELECT, INSERT, UPDATE, DELETE 구문

 

DDL(Data Definition Language)

  • 데이터 정의 언어
  • 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성 / 삭제/ 변경하는 역할
  • DDL은 트랜잭션 발생시키지 않음
  • CREATE, DROP, ALTER 구문
  • 롤백이나 커밋 사용불가

 

DCL(Data Control Language)

  • 데이터 제어 언어
  • 사용자에게 어떤 권한을 부여하거나 빼앗을 때 주로 사용하는 구문
  • GRANT, REVOKE 구문

 

TCL(Transaction Control Language)

  • 트랜잭션이 발생하는 SQL
  • 테이블의 데이터를 변경(입력 / 수정 / 삭제)할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키며 취소 가능
  • DML에서 실행한 사항을 관리
  • COMMIT, ROLLBACK, SAVEPOINT 구문

디버그 모드란?

오류가 발생했을 때, 코드의 논리적인 순서 흐름을 파악할 수 있도록 코드를 한줄 한줄씩 실행해나가는 과정을 뜻한다.

디버그 모드를 사용하면 어디서 에러가 발생하는지를 좀 더 쉽게 알 수 있다.

 

디버그 모드 사용

디버그 모드를 사용하려면 먼저 브레이크 포인트를 걸어야 한다.

브레이크 포인트
코드가 처음부터 실행되다가 일시적으로 멈추게 되는 지점이다.

브레이크 포인트부터 사용자가 순차적으로 코드를 진행시키며 코드의 실행 흐름을 파악할 수 있다.

소스코드 좌측에, 라인번호 왼쪽에 파란색으로 칠해진 공간을 더블 클릭하면 브레이크 포인트를 지정할 수 있다.

 

 

브레이크 포인트가 걸리면 위 사진처럼 동그란 아이콘이 나타난다.

이 포인트가 디버그 시작점이다.

이후 디버그 모드(단축키 : F11)를 실행하면, 브레이크 포인트부터 코드를 분석할 수 있다.

브레이크 포인트를 해제하려면 동그란 아이콘을 다시 더블 클릭하면 된다.

 

이런 창이 나타나면 Yes를 눌러주면 된다.

 

디버그 모드가 실행되면 위와 같은 화면을 볼 수 있다.

우측 상단에 현재 변수가 생성된 목록과 해당 변수의 값이 무엇이 담겼는지 알 수 있다.

여기서 한줄씩 디버그를 진행하려면 F6이나 F5를 누르면 된다.

그러면 브레이크 포인트로부터 한 줄씩 내려가면서 코드가 실행된다.

 

몇 번 F6을 누른 후의 사진이다.

변수가 어떤 것이 있고, 변수에 무슨 값이 담겨있는지 확인할 수 있다.

소스 코드 수정하는 공간 위에 위와 같은 아이콘을 볼 수 있다.

  1. 첫 번째 아이콘 : step into - 메소드를 포함한 라인을 만나면 메소드 안으로 진입 (단축키 F5)
  2. 두 번째 아이콘 : step over - 다음 라인으로 이동, 메소드가 있어도 메소드 안으로 진입하지 않고 다음 라인으로 이동 (단축키 F6)
  3. 세 번째 아이콘 : step Return - 현재 메소드에서 즉시 리턴 (단축키 F7)
  4. 네 번째 아이콘 : 메소드를 처음부터 다시 실행

 

참고