ORDER BY : 컬럼 정렬하기

형식

 SELECT 컬럼명1, 컬럼명2

 FROM 테이블명

 WHERE 조건식

 ORDER BY 컬럼명1 [ASC/DESC], 컬럼명2 [ASC/DESC];

 

 SELECT 컬럼명1, 컬럼명2

 FROM 테이블명

 WHERE 조건식

 ORDER BY 컬럼번호1 [ASC/DESC], 컬럼번호2 [ASC/DESC];

 

참고

 ASC : 오름차순, ASC는 생략가능하다.

 DESC : 내림차순

 

예시

-- scott 스키마

-- ASC : 올림차순

SELECT ename, sal FROM emp
ORDER BY sal ASC;


-- DESC : 내림차순 

SELECT ename, sal FROM emp
ORDER BY sal DESC;


-- NULL 먼저 나오도록 하는법

SELECT ename, comm FROM  emp 
ORDER BY comm NULLS FIRST;


-- NULL 나중에 나오도록 하는법 

SELECT ename, comm FROM  emp 
ORDER BY comm NULLS LAST;

-- 위와 동일 : NULLS LAST = default 값

SELECT ename, comm FROM  emp 
ORDER BY comm;


-- hr 스키마

-- 두가지 정렬 가능

SELECT employee_id, job_id, salary FROM employees
ORDER BY job_id ASC, salary DESC;

 

 

 

GROUP BY : 통계를 내기 위한 그룹화

형식

 SELECT 컬럼명

 FROM 테이블명

 WHERE 조건식

 GROUP BY 필드명1, 필드명2,.. 필드명n

 HAVING 그룹 내 조건식;

 

참고

 GROUP FUNCTION : COUNT() , SUM(), AVG(), MAX(), MIN()

 

예시

-- hr 스키마

-- COUNT : 얼마나 있느냐?

SELECT COUNT(salary) FROM employees
WHERE job_id = 'IT_PROG';
 
SELECT COUNT(salary), COUNT(*), SUM(salary), AVG(salary), MAX(salary), MIN(salary) 
FROM employees
WHERE job_id = 'IT_PROG'; 


SELECT job_id
FROM employees
GROUP BY job_id
ORDER BY job_id;
 
 
/* 묶은 다음에는 일반 컬럼은 사용할 수 없다. 

SELECT job_id, first_name 
FROM employees
GROUP BY job_id
ORDER BY job_id;

*/


SELECT job_id, COUNT(*), SUM(salary), AVG(salary)
FROM employees
GROUP BY job_id
ORDER BY job_id;


-- 업무별로 급여의 합계가 100000이상인 업무만 출력하라.
-- 1. GROUP 2. HAVING

SELECT job_id, SUM(salary)
FROM employees
GROUP BY job_id              
HAVING SUM(salary) >= 100000;


-- 급여가 5000이상 받는 사원으로 합계를 내서 업무로 그룹화하여
-- 급여의 합계가 20000을 초과하는 업무명을 구하라
-- 1. WHERE절 2. GROUP 3. HAVING 4. ORDER

SELECT job_id, SUM(salary) AS 합계
FROM employees
WHERE salary >= 5000
GROUP BY job_id
HAVING SUM(salary) > 20000
ORDER BY 합계 DESC;

 

 

 

DISTINCT :  출력 컬럼의 중복 없애기

형식

 SELECT DISTINCT 컬럼명 FROM 테이블명;

 

예시

-- emp 스키마
-- job의 중복행 제거

SELECT DISTINCT job FROM emp;

 

 

 

DESC : 테이블의 구조 보기

형식

 DESC 테이블명;

 

예시

-- emp 스키마
-- emp테이블의 구조 확인

DESC emp;
-- scott

-- 1 emp 테이블에서 사원번호, 사원이름, 월급을 출력하시오 .

SELECT empno, ename, sal FROM emp;


-- 2 emp 테이블에서 사원이름과 월급을 출력하는데 컬럼명은 이름, 월급으로 변경하여 출력하시오. 

SELECT ename "이 름", sal "월 급" FROM emp;


-- 3 emp 테이블에서 사원번호 사원이름 월급 연봉을 구하고 각각 컬럼명을 사원번호, 사원이름, 월급으로 변경하여 출력하시오.

SELECT empno 사원번호, ename 사원이름, sal 월급, sal*12 연봉 FROM emp;


-- 4 emp 테이블에서 업무(job)를 중복되지 않게 표시하시오.

SELECT DISTINCT job FROM emp;


-- 5 emp Table의 사원명과 업무로 연결 해서 표시하고 컬러명은 Employee and Job로 표시하시오.

SELECT '(' || ename || ',' || job || ')' AS "Emplyee and Job" FROM emp;


--6) emp 테이블에서 사원번호가 7698 인 사원의 이름, 업무, 급여를 출력하시오.

SELECT ename, job, sal FROM emp 
WHERE empno = 7698;


-- 7) emp 테이블에서 사원이름이 SMITH인 사람의 이름과 월급, 부서번호를 구하시오.

SELECT ename, sal, deptno FROM emp 
WHERE ename = 'SMITH';


-- 8) 월급이 2500이상 3500미만인 사원의 이름, 입사일, 월급을 구하시오.

SELECT ename, hiredate,sal FROM emp 
WHERE sal >= 2500 AND sal < 3500;


-- 9) 급여가 2000에서 3000사이에 포함되지 않는 사원의 이름, 업무, 급여를 출력하시오.

SELECT ename, job, sal FROM emp 
WHERE sal NOT BETWEEN 2000 AND 3000;


-- 10) 81년 05월 01일과 81년 12월 03일 사이에 입사한 사원의 이름, 급여, 입사일을 출력하시오.

SELECT ename, sal, hiredate FROM emp 
WHERE hiredate BETWEEN '81/05/01' AND '81/12/03';


-- 11) emp테이블에서 사원번호가 7566,7782,7934인 사원을 제외한 사람들의 사원번호,이름,  월급을 출력하시오.

SELECT empno, ename, sal FROM emp 
WHERE empno NOT IN (7566,7782,7934);


-- 12) 부서번호 30(deptno)에서 근무하며 월 2,000달러 이하를 받는 81년05월01일 이전에 입사한 사원의 이름, 급여, 부서번호, 입사일을 출력하시오.

SELECT ename, sal, deptno, hiredate FROM emp 
WHERE deptno = 30 AND sal <= 2000 AND hiredate < '81/05/01';  


-- 13) emp테이블에서 급여가 2,000와 5,000 사이고 부서번호가 10 또는 30인 사원의 이름과 급여,부서번호를 나열하시오.

SELECT ename, sal, deptno FROM emp 
WHERE (sal BETWEEN 2000 AND 5000) AND (deptno = 10 OR deptno= 30);
   
SELECT ename, sal, deptno FROM emp
WHERE (sal BETWEEN 2000 AND 5000) AND deptno IN (10,30);             


-- 14) 업무가 SALESMAN 또는 MANAGER이면서 급여가 1,600, 2,975 또는 2,850이 아닌 모든 사원의 이름, 업무 및 급여를 표시하시오.

SELECT ename, job, sal FROM emp
WHERE (job IN ('SALESMAN','MANAGER')) AND (sal NOT IN (1600,2975,2850)) ;


-- 15) emp테이블에서 사원이름 중 S가 포함되지 않은 사람들 중 부서번호가 20인 사원들의 이름과 부서번호를 출력하시오.

SELECT ename,deptno FROM emp 
WHERE ename NOT LIKE ('%S%') AND deptno = 20 ;


-- 16) emp테이블에서 이름에 A와 E가 있는 모든 사원의 이름을 표시하시오.

SELECT ename FROM emp 
WHERE ename LIKE '%A%' AND ename LIKE '%E%';


-- 17) emp테이블에서 관리자가 없는 모든 사원의 이름과 업무를 표시하시오.

SELECT ename, job FROM emp 
WHERE NVL(mgr,0) = 0;
 
SELECT ename, job FROM emp 
WHERE mgr IS NULL;


-- 18) emp테이블에서 커미션 항목이 입력된 사원들의 이름과 급여, 커미션을 구하시오.

SELECT ename, sal, comm FROM emp 
WHERE NVL(comm,0) > 0;

SELECT ename, sal, comm FROM emp 
WHERE comm IS NOT NULL AND comm <> 0;
   
SELECT ename, sal, comm FROM emp 
WHERE comm IS NOT NULL AND comm != 0;    
-- hr 스키마

-- 문제1) EMPLOYEES 테이블에서 급여가 3000이상인 사원의 사원번호, 이름, 담당업무, 급여를 출력하라.

SELECT employee_id, first_name, job_id, salary FROM employees 
WHERE salary >= 3000; 


-- 문제2) EMPLOYEES 테이블에서 담당 업무가 ST_MAN인 사원의 사원번호, 성명, 담당업무, 급여, 부서번호를 출력하라.

SELECT employee_id, first_name, job_id, salary, department_id FROM employees 
WHERE job_id = 'ST_MAN';


-- 문제3) EMPLOYEES 테이블에서 입사일자가 2006년 1월 1일 이후에 입사한 사원의 
-- 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라.

SELECT employee_id, first_name, job_id, salary, hire_date, department_id FROM employees 
WHERE hire_date > '06/01/01';

SELECT employee_id, first_name, job_id, salary, hire_date, department_id FROM employees 
WHERE hire_date > TO_DATE('060101','YYMMDD');


-- 문제4) EMPLOYEES 테이블에서 급여가 3000에서 5000사이의 사원의 성명, 담당업무, 급여, 부서번호를 출력하라.

SELECT first_name, job_id, salary, department_id FROM employees 
WHERE salary >= 3000 AND salary <= 5000;

SELECT first_name, job_id, salary, department_id FROM employees 
WHERE salary BETWEEN 3000 AND 5000;


-- 문제5) EMPLOYEES 테이블에서 사원번호가 145,152,203인 사원의 사원번호, 성명, 담당업무, 급여, 입사일자를 출력하라

SELECT employee_id, first_name, job_id, salary, hire_date FROM employees 
WHERE employee_id IN (145 , 152 , 203);


-- 문제6) EMPLOYEES 테이블에서 입사일자가 05년도에 입사한 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라.

SELECT employee_id, first_name, job_id, salary, hire_date, department_id FROM employees 
WHERE hire_date LIKE ('05%');


-- 문제7) EMPLOYEES 테이블에서 보너스가 없는 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 보너스, 부서번호를 출력하라.

SELECT employee_id, first_name, job_id, salary, hire_date, commission_pct, department_id FROM employees 
WHERE NVL(commission_pct,0)  =  0 ;

SELECT employee_id, first_name, job_id, salary, hire_date, commission_pct, department_id FROM employees 
WHERE commission_pct IS NULL ;


-- 문제8) EMPLOYEES 테이블에서 급여가 1100이상이고 JOB이 ST_MAN인 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라

SELECT employee_id, first_name, job_id, salary, hire_date, department_id FROM employees 
WHERE salary >= 1100 AND job_id = 'ST_MAN';


-- 문제9) EMPLOYEES 테이블에서 급여가 10000이상이거나 JOB이 ST_MAN인 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라

SELECT employee_id, first_name, job_id, salary, hire_date, department_id FROM employees 
WHERE salary >= 10000 OR job_id = 'ST_MAN';


-- 문제10) EMPLOYEES 테이블에서 JOB이 ST_MAN, SA_MAN, SA_REP가 아닌 사원의 사원번호, 성명, 담당업무, 급여, 부서번호를 출력하라

SELECT employee_id, first_name, job_id, salary, department_id FROM employees 
WHERE job_id NOT IN ('ST_MAN', 'SA_MAN', 'SA_REP'); 


-- 문제11) 업무가 AD_PRES이고 급여가 12000이상이거나 업무가 SA_MAN인 사원의 사원번호, 이름, 업무, 급여를 출력하라.

SELECT employee_id, first_name, job_id, salary FROM employees 
WHERE job_id = 'AD_PRES' AND salary >= 12000 OR job_id = 'SA_MAN';


-- 문제12) 업무가 AD_PRES 또는 SA_MAN이고 급여가 12000이상인 사원의 사원번호, 이름, 업무, 급여를 출력하라.

SELECT employee_id, first_name, job_id, salary FROM employees 
WHERE job_id IN ('AD_PRES' , 'SA_MAN') AND salary >= 12000;
-- 문제1) EMPLOYEES Table의 모든 자료를 출력하여라.

SELECT * FROM employees;


-- 문제2) EMPLOYEES Table의 컬럼들을 모두 출력하라.

DESC employees;


-- 문제3) EMPLOYEES Table에서 사원 번호, 이름, 급여, 담당업무를 출력하여라.

SELECT employee_id, first_name, salary, job_id FROM employees; 


-- 문제4) 모든 종업원의 급여를 $300증가 시키기 위해서 덧셈 연산자를 사용하고 결과에 SALARY+300을 디스플레이 합니다.

SELECT first_name, salary, salary+300 AS "SALARY+300" FROM employees;


-- 문제5) EMP 테이블에서 사원번호, 이름, 급여, 보너스, 보너스 금액을 출력하여라. 
-- (참고로 보너스는 월급 + (월급*커미션))

SELECT employee_id, first_name || last_name AS Name, salary, commission_pct, salary + (salary*commission_pct) as bouns FROM employees;


-- commission_pct을 Java로 가져올시 NullPointException 발생 !!  null -> 0 으로 바꿔서 가져와야함
-- NVL 함수 : NVL(대상컬럼, 대상컬럼이 NULL인 경우에 출력할 값) ★★★★★

SELECT employee_id, first_name, salary, NVL(commission_pct,0), salary+NVL(salary*commission_pct,0) FROM employees;


-- 문제6) EMPLOYEES 테이블에서 LAST_NAME을 이름으로 SALARY을 급여로 출력하여라.

SELECT last_name 이름, salary 급여 FROM employees;


-- 문제7) EMPLOYEES 테이블에서 LAST_NAME을 Name으로 SALARY * 12를 Annual Salary(연봉)로 출력하여라

SELECT last_name "Name", salary*12 "Annual Salary(연봉)" FROM employees;


-- 문제8) EMPLOYEES 테이블에서 이름과 업무를 연결하여 출력하여라. 

SELECT first_name || ' ' || last_name || ' : ' || job_id AS "이름 : 업무" FROM employees;


-- 문제9) EMPLOYEES 테이블에서 이름과 업무를 “KING is a PRESIDENT” 형식으로 출력하여라. 

SELECT last_name || ' is a ' || job_id FROM employees;


-- 문제10) EMPLOYEES 테이블에서 이름과 연봉을 “KING: 1 Year salary = 60000” 형식으로 출력하여라. 

SELECT last_name||': 1 Year salary = '|| salary*12 FROM employees;


-- 문제11) EMPLOYEES 테이블에서 JOB을 모두 출력하라.

SELECT DISTINCT job_id FROM employees; 

WHERE (조건절)

형식

 SELECT 컬럼명
 FROM 테이블명
 WHERE 조건식; 
   

비교연산자 

같다 : =

다르다 : <>, !=, ^=

크다 : >

작다 : <

크거나 같다 : >=

작거나 같다 : <=

 

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 비교연산자 검색값;

 

예시

-- hr 스키마

-- 이름 -> Julia

SELECT first_name, last_name FROM employees WHERE first_name = 'Julia';



-- 급여가 $9000 이상인 사원

SELECT first_name, salary FROM employees WHERE salary >= 9000;



-- 이름이 Shanta 보다 큰 이름 (이름도 비교가능)

SELECT first_name FROM employees WHERE first_name > 'Shanta';



-- 이름의 첫 스팰링이 J보다 큰 이름

SELECT first_name FROM employees WHERE first_name >= 'J';



-- 2007년 12월 31일 이후에 입사한 사원을 출력
-- 날짜 형식 비교시 날짜 -> '07/12/31' 이런식으로 써줘야 한다.

SELECT first_name, hire_date FROM employees WHERE hire_date > '07/12/31';


-- TO_DATE -> DATE -> String으로 변환

SELECT first_name, hire_date FROM employees WHERE hire_date > TO_DATE( '071231', 'yymmdd');

 

 

 

IS NULL( = NULL ), IS NOT NULL( != NULL ) : 값이 없는 상태 검색하기

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IS NULL;

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IS NOT NULL;

 

예시

-- 매니저가 없는 사원

SELECT first_name FROM employees WHERE manager_id IS NULL;


--  = , '' 사용할 수 없다!!! 
-- SELECT first_name FROM employees WHERE manager_id = NULL;
-- SELECT first_name FROM employees WHERE manager_id = '';


-- 매니저가 있는 사원

SELECT first_name FROM employees WHERE manager_id IS NOT NULL;

 

 

 

AND : 모두 만족하면 검색하기

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 검색값 AND 컬럼명 = 검색값;

 

예시

-- 이름 John, 월급은 5000이상

SELECT first_name, salary FROM employees WHERE first_name = 'John' AND salary >= 5000;


-- 입사일자가 06/01/01 ~ 06/12/31 사이인 사원

SELECT first_name, hire_date FROM employees 
WHERE hire_date >= '06/01/01' AND  hire_date <= '06/12/31';

 

 

 

OR : 하나라도 만족하면 검색하기

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 검색값 OR 컬럼명 = 검색값;

 

예시

-- 이름이 Shanta이거나 Vollman인 사원 검색

SELECT first_name FROM employees WHERE first_name = 'Shanta' OR first_name = 'Vollman';

 

 

 

IN : 여러 데이터로 검색하기

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN (검색값, 검색값);

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 NOT IN (검색값, 검색값);

 

예시

-- 급여가 8000, 3200, 6000 인 직원들

SELECT first_name, salary FROM employees WHERE salary IN (8000, 3200, 6000);


-- 급여가 8000, 3200, 6000 아닌 직원들

SELECT first_name, salary FROM employees WHERE salary NOT IN (8000, 3200, 6000);

 

 

 

ANY : 여러 데이터로 검색하기(=OR, =IN)

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = ANY(검색값, 검색값);

 

예시

-- 급여가 8000, 3200, 6000인 직원들

SELECT first_name, salary FROM employees WHERE salary = ANY(8000, 3200, 6000);

 

 

 

BETWEEN .. AND(범위 연산자) : 범위에 만족하면 검색하기

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 BETWEEN 검색값 AND 검색값;

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 NOT BETWEEN 검색값 AND 검색값;

 

예시

-- 월급이 3200에서 9000사이인 사원 검색

SELECT first_name, salary FROM employees  -- WHERE salary >= 3200 AND salary <= 9000;
                                             WHERE salary BETWEEN 3200 AND 9000; -- 위와 동일


-- 월급이 3200에서 9000사이인 사원을 제외한 사원 검색

SELECT first_name, salary FROM employees WHERE salary NOT BETWEEN 3200 AND 9000;   

 

 

 

LIKE : 포함된 문자로 검색하기 ★★★★★

형식

 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '%검색값&';

 

참고

 '문자%' : 문자로 시작하는 값

 '%문자' : 문자로 끝나는 값

 '%문자%' : 문자가 포함된 값

 '_' : 지정한 위치에 1자리 문자면 무엇이든 가능

 

예시

-- _ 한글자가 어떠한 문자든 허용

SELECT first_name FROM employees WHERE first_name LIKE 'G_ra_d';


-- % 글자수에 제한없이 모두 허용

SELECT first_name FROM employees WHERE first_name LIKE 'K%y'; 


-- 이름의 시작이 K인 이름 모두 허용

SELECT first_name FROM employees WHERE first_name LIKE 'K%'; 


-- a 들어있는 이름 모두 허용

SELECT first_name FROM employees WHERE first_name LIKE '%a%'; 

 

주요 데이터 형식


NUMBER

수치 데이터 저장 (정수, 실수)
형식 : NUMBER(전체 자릿수, 소수점 이하 자릿수)

DATE

날짜(시간 포함) 데이터를 저장

CHAR

고정 문자열 저장
형식 : CHAR(크기)


예시 

CHAR(10) 

     입력 - 7자리

     저장 - 10자리 


VARCHAR2
가변 문자열 저장
형식 : VARCHAR2(크기)


예시

VARCHAR2(10)

     입력 - 7자리

     저장 - 7자리 

문자열 저장 시 입력한 만큼만 저장하는 가변 문자열 형식이 고정 문자열 형식보다 저장 공간을 적게 차지한다.

 

 

 

 CREATE : TABLE(데이터를 집어넣을 수 있는 자료형) 생성 

형식

 CREATE TABLE 테이블명(
    컬럼명1 자료형,
    컬럼명2 자료형,
   );   

 

예시

CREATE TABLE TB_CHAR(
    COL1 CHAR(10 BYTE), -- BYTE 용량 변화 X
    COL2 CHAR(10 CHAR), -- CHAR 용량 변화 O
    COL3 CHAR(10)  --> 자동적으로 BYTE
);

 

 

 

INSERT : 테이블에 데이터 입력

형식

 INSERT INTO 테이블명(컬럼명, 컬럼명...)
 VALUES(값, 값, ...);

 

예시

INSERT INTO tb_char(COL1, COL2, COL3)
VALUES('ABC','ABC','ABC');   --영문한글자 : 1BYTE

INSERT INTO tb_char(COL1, COL2, COL3)
VALUES('가','나','다');   --한글한글자 : 3BYTE

INSERT INTO tb_char(COL1, COL2, COL3)
VALUES('가나','나나','다나');   --한글한글자 : 3BYTE

INSERT INTO TB_CHAR(COL1, COL2, COL3)
VALUES('가나다','나나다','다나다');   --한글한글자 : 3BYTE

 

CHAR 저장 공간 계산 방법

CHAR은 데이터 삽입 전 10BYTE이다. (크기가 고정되어있음)

문자가 '가'만 들어가 있을 경우 한글 1글자의 크기가 3BYTE + 10BYTE(CHAR 고정 크기) - 1BYTE = 12BYTE이다.

    가(3 BYTE) + 9 BYTE = 12 BYTE

문자가 '가나'만 들어가 있을 경우 한글 2글자의 크기가 6BYTE + 10BYTE(CHAR 고정 크기) - 2BYTE = 14BYTE이다.
    가나(6 BYTE) + 8 BYTE = 14 BYTE

문자가 '가나다'만 들어가 있을 경우 한글 3글자의 크기가 9BYTE + 10BYTE(CHAR 고정 크기) - 3BYTE = 16BYTE이다.
    가나다(9 BYTE) + 7 BYTE = 16 BYTE

 

 

 

SELECT : 검색

형식

 

 1. 테이블의 모든 컬럼 검색

    SELECT 컬럼명 FROM 테이블명;

 

예시

SELECT * FROM tb_char;

 

 2. 테이블의 컬럼명1, 컬럼명2 .. 컬럼명n 컬럼만 검색
    SELECT 컬럼명1, 컬럼명2 .. 컬럼명n FROM 테이블명;

 

예시

SELECT col1, col3 FROM tb_char;

 

 3. 컬럼명을 별명으로 설정하여 검색
 SELECT 컬럼명 AS 별명 FROM 테이블명;
 SELECT 컬럼명 as 별명 FROM 테이블명;
 SELECT 컬럼명 별명 FROM 테이블명;

 

예시

SELECT col1 AS 별명 FROM tb_char;

SELECT col1 as 별명 FROM tb_char;

SELECT col1 별명 FROM tb_char;

 

 

 

ALIAS : 테이블에 보이는 컬럼명 바꾸기(= 별명, 별칭)

형식

 SELECT 형식 3 참고

 

참고

 별명 지정 시 AS, as, 생략가능 
 별명은 기본적으로 문자로 시작하여야 하지만, 숫자로 시작하거나 공백이 있을경우 "별명"으로 작성한다.

 

예시

SELECT col1 "1별명" FROM tb_char;

SELECT col1 "별 명" FROM tb_char;

 

 

 

DROP : 테이블 삭제

형식

 DROP TABLE 테이블명;

 

예시

DROP TABLE tb_char;

 

 

 

 

 

DUAL TABLE : 가상 테이블 (결과용 테이블)

형식

 SELECT 문자 출력값, 연산 결과값 FROM DUAL;

 

예시

SELECT 1 FROM DUAL;
SELECT 'A' FROM DUAL;
SELECT '가나' FROM DUAL;
SELECT 23*45 FROM DUAL;

 

 

 

Standard Function (표준 함수)

 

문자열 함수 (Character Function) 정리

 

1. 변환함수

 

LOWER() : 알파벳 값을 소문자로 변환

 

형식

 LOWER(문자열)

 

예시

SELECT LOWER('HI, HELLO') FROM DUAL; -- hi, hello

 

 

UPPER() : 알바펫 값을 대문자로 변환

 

형식

 UPPER(문자열)

 

예시

SELECT UPPER('hi, hello') FROM DUAL;  -- HI, HELLO

 

 

INITCAP() : 첫번째 글자만 대문자로 변환

 

형식

 INITCAP(문자열)

 

예시

SELECT INITCAP('HI, HELLO') FROM DUAL; -- Hi, Hello

 

 

2. 문자 조작 함수

 

CONCAT() : 두 문자열 연결(결합)

 

형식

 CONCAT(값1, 값2)

 

예시

SELECT CONCAT(CONCAT('나는',' '),'최고입니다') FROM DUAL; -- 나는 최고입니다

 


|| : 문자열 연결(결합)

 

형식

 값1 || 값2 || ... 값n

 

예시

SELECT '나는 ' || '최고입니다' FROM DUAL; -- 나는 최고입니다

 

 

SUBSTR() : 문자열 중 특정 문자 또는 문자열의 일부분을 선택 ★★★★★

 

형식

 SUBSTR(문자열, 시작INDEX, 취득개수) 

 

예시

SELECT SUBSTR('ABCDE', 3) FROM DUAL; -- CDE


-- 3번째부터 2글자 가져와라 CD

SELECT SUBSTR('ABCDE', 3, 2) FROM DUAL; -- CD

 


LENGTH() : 문자열의 길이를 구함

 

형식

 LENGTH(문자열) 

 

예시

SELECT LENGTH('ABCDE') FROM DUAL; -- 5

 

 

INSTR() :  문자열 내 위치를 구함

 

형식

 INSTR(문자열, 찾을문자열[시작위치[, 검색차수]) 

 

참고

 시작위치가 있으면 시작위치부터 찾고 시작위치가 없다면 처음부터 찾는다.

 검색차수가 있으면 검색차수번째 순서에 있는 찾는문자열의 위치를 구한다.

 

예시

SELECT INSTR('abcde', 'a') FROM DUAL; -- 1

SELECT INSTR('123ABC456DEFABC', 'A') FROM DUAL; -- 4


-- 7번째 이후의 A의 INDEX번호

SELECT INSTR('123ABC456DEFABC', 'A', 7) FROM DUAL; -- 13


-- 7번째 이후의 1번째 나오는 A의 INDEX번호

SELECT INSTR('123ABC456DEFABCABC', 'A', 7, 2) FROM DUAL; -- 16

 

 

LPAD() / RPAD() : 나머지를 빈칸 또는 지정문자로 채운다. LPAD:왼쪽, RPAD:오른쪽

 

형식

 LPAD(문자열, 개수, [지정문자])

 RPAD(문자열, 개수, [지정문자])

 

예시

SELECT LPAD('BBB', 10) FROM DUAL; --        BBB


-- 지정문자 사용 예

SELECT LPAD('BBB', 10, '-') FROM DUAL; -- -------BBB

SELECT RPAD('124', 10, '0') FROM DUAL; -- 1240000000

 

 

LTRIM() / RTRIM() : 공백,  반복적인 문자를 지움 (LTRIM : 왼쪽, RTRIM : 오른쪽)

 

형식

 LTRIM(문자열)

 RTRIM(문자열)

 LTRIM(문자열, 삭제문자열)

 RTRIM(문자열, 삭제문자열)

 

예시

-- 공백 삭제

SELECT LTRIM('   BBB' )   FROM DUAL; 

SELECT RTRIM('BBB   ' )   FROM DUAL; 

--반복적인 문자 삭제

SELECT LTRIM('AABBB', 'AA')   FROM DUAL; -- BBB 

SELECT RTRIM('BBBAA', 'AA')   FROM DUAL; -- BBB

 

 

REPLACE() : 문자열 치환

 

형식

 REPLACE(문자열, 삭제문자)

 REPLACE(문자열, 대상문자, 교체문자)

 

예시

SELECT REPLACE('AAAAABCD', 'A') FROM DUAL; -- BCD

SELECT REPLACE('AAAAABCD', 'A', 'a') FROM DUAL; -- aaaaaBCD

SELECT REPLACE('AAAAABCD', 'AA', 'a') FROM DUAL; -- aaABCD

 

 

TREANSLATE() : 문자 치환

 

형식

 TREANSLATE(문자열, 대상문자, 치환문자)

 

참고

 글자를 지정해주지 않으면 에러발생

 

예시

SELECT TREANSLATE('AAAAABCD', 'A' , 'a') FROM DUAL; -- aaaaaBCD

-- 위와 동일 : 문자 치환이기 때문에

SELECT TREANSLATE('AAAAABCD', 'AA' , 'a') FROM DUAL; -- aaaaaBCD

 

 

 

숫자 함수 정리

 

CEIL() : 숫자를 올림 

 

형식

 CEIL(숫자)

 

예시

SELECT CEIL(13.1) FROM DUAL; -- 14

 

 

FLOOR() : 숫자를 내림

 

형식

 FLOOR(숫자)

 

예시

SELECT FLOOR(13.1) FROM DUAL; -- 13

 

 

ROUND() : 숫자를 반올림

 

 

형식

 ROUND(숫자)

 ROUND(숫자, 자릿수)

 

예시

SELECT ROUND(13.4) FROM DUAL; -- 13


-- 소수점 1번째자리 까지만 인정

SELECT ROUND(13.45,1) FROM DUAL; -- 13.5

 

 

TRUNC() : 숫자를 버림(절삭)

 

형식

 TRUNC (숫자)

 TRUNC (숫자, 자릿수)

 

예시

SELECT TRUNC(123.456) FROM DUAL; -- 123


-- 소수점 2번째자리 까지만 인정

SELECT TRUNC(123.456, 2) FROM DUAL; -- 123.45


-- 소수점 1번째자리 까지만 인정

SELECT TRUNC(123.456, 1) FROM DUAL; -- 123.4


-- 정수 1번째자리까지 인정

SELECT TRUNC(123.456, -1) FROM DUAL; -- 120

 

 

MOD() : 숫자를 나눈 나머지

 

형식

 MOD(숫자, 나눌수)

 

예시

SELECT MOD(3, 2)FROM DUAL; -- 1

 

 

POWER() : 거듭제곱(승수)

 

형식

 POWER (숫자, 승수)

 

예시

SELECT POWER(3, 2) FROM DUAL; -- 9

 

 

SIGN() : 양수, 음수, 0인지 확인

 

형식

 SIGN (숫자)

 

참고 

 양수일 때 반환값 : 1  

 음수일 때 반환값 : -1   

 0일 때 반환값 : 0 

 

예시

SELECT SIGN(13.4) FROM DUAL; -- 1

SELECT SIGN(-13.4) FROM DUAL; -- -1

SELECT SIGN(0) FROM DUAL; -- 0

 

 

CHR() : ASCII 값으로 변환

 

형식

 CHR(숫자)

 

예시

SELECT CHR(65) FROM DUAL; -- A

SELECT CHR(97) FROM DUAL; -- a

 

 

 

날짜 함수

 

SYSDATE : 오늘 날짜, 시간 반환

 

형식

SYSDATE 

 

예시

SELECT SYSDATE FROM DUAL;

 

 

MONTHS_BETWEEN() : 두 날짜 사이의 월수를 계산

 

형식

 MONTHS_BETWEEN(기준날짜, 비교날짜)

 

예시

SELECT MONTHS_BETWEEN(TO_DATE('20/04/23'), TO_DATE('20/01/1')) FROM DUAL; -- 3.7096..

 

 

ADD_MONTHS() : 월을 날짜에 더하기

 

형식

 ADD_MONTHS (기준날짜, 개월수)

 

예시

SELECT ADD_MONTHS(TO_DATE('20/04/23'), 6) FROM DUAL; -- 20/10/23

 

 

NEXT_DAY() : 명시된 날짜로부터 다음 요일에 대한 날짜 계산 (오늘은 포함 X)

 

형식

 NEXT_DAY (기준날짜, 요일문자열(요일번호))

 

참고

요일문자열 :  일요일, 월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 또는 일, 월, 화, 수, 목, 금, 토

요일번호 : 1(일), 2(월), 3(화), 4(수), 5(목), 6(금), 7(토)

 

예시

SELECT SYSDATE, NEXT_DAY(SYSDATE, '월요일') FROM DUAL;

 

출력화면

 

 

LAST_DAY() : 명시된  날짜가 속한 달의 마지막 날를 반환

 

형식

 LAST_DAY (기준날짜)

 

예시

SELECT LAST_DAY('24/02/22') FROM DUAL; -- 24/02/29

 

 

ROUND() : 날짜를 반올림

TRUNC() : 날짜를 절삭

형식

 ROUND (기준날짜, 반올림기준)

 TRUNC (기준날짜, 절삭기준)

 

예시

SELECT TO_CHAR(sysdate, 'HH:MI:SS') , 
		ROUND(sysdate, 'YEAR'), sysdate,
		ROUND(sysdate), TRUNC(sysdate, 'MONTH')
FROM DUAL;

 

출력화면

 

 

 

형변환 함수 정리

 

TO_CHAR () :  날짜,시간 → 문자 변환    ★★★★★

 

형식

TO_CHAR(날짜,문자형식)

TO_CHAR(숫자,문자형식)

 

예시

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH-MI-SS') FROM DUAL; -- 2021-05-31 01-02-12

SELECT TO_CHAR(123456789, '$999,999,999,999') FROM DUAL; -- $123,456,789 

 

 

TO_DATE() : 문자열 → 날짜,시간변환       ★★★★★

 

형식

TO_DATE(문자,날짜형식)

TO_DATE(문자,숫자형식)

 

예시

SELECT TO_DATE('20210525') FROM DUAL; -- 2021/05/25 00:00:00

-- 위와 같다.(지정변환가능)

SELECT TO_DATE('20210525', 'YYYYMMDD') FROM DUAL; -- 2021/05/25 00:00:00

 

 

TO_NUMBER() : 문자열 → 숫자

 

형식

TO_NUMBER(문자)

 

참고

TO_NUMBER()사용시 연산도 가능하다.

 

예시

SELECT TO_NUMBER('123') + 45 FROM DUAL; -- 168

 

 

 

 

참고 : 하루 10분 SQL

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scn = new Scanner(System.in);
        
		int num[] = new int [9];
        
		int max = 0;
		int index = 0;
		for (int i = 0; i < num.length; i++) {
			num[i]= scn.nextInt();
			if(num[i] > max) {
				max = num[i];
				index = i+1;
			}
		}
		System.out.println(max);
		System.out.println(index);
	}
}

 

int num [] = new int [9];

자연수를 넣어줄 배열의 크기를 9로 잡아준다.

 

int max = 0;

int index = 0;

max값과 배열의 index값을 넣어줄 변수에 선언과 초기화를 해준다.

 

for (int i = 0; i < num.length; i++) 

for문(반복문)의 조건식을 i < num.length(배열의 길이) 즉, 0 <9 만큼 실행하여준다.

 

num [i]= scn.nextInt();

num [i]에 값을 넣어준다.

 

if(num [i] > max) {
max = num[i];
index = i+1;
}

만약 num[i]num [i] > max 보다 크다면 num [i]를 max값으로 넣어준다.

index = i+1;

i는 0부터 시작이기 때문에 +1을 해준다.

 

System.out.println(max);
System.out.println(index);

for문을 빠져나와 print문을 실행해보면 max값과 index같이 잘 나오는 걸 볼 수 있다.

 

 

 

 

 

 

 

출처 : https://www.acmicpc.net/problem/2562

'문제풀이 > baekjoon' 카테고리의 다른 글

[자바] 10950번 : A+B - 3  (2) 2021.05.18

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scn = new Scanner(System.in);
		int line = scn.nextInt();
		for (int i = 0; i < line; i++) {
			int a = scn.nextInt();
			int b = scn.nextInt();
			System.out.println(a+b);
		}
	}
}

매우 간단한 문제이다.

 

Scanner를 이용하여 원하는 테스트 케이스를 입력받고

for문을 이용하여 출력하는 방법을 사용하였다.

 

 

 

 

출처 : https://www.acmicpc.net/problem/10950

'문제풀이 > baekjoon' 카테고리의 다른 글

[자바] 2562번 : 최댓값  (0) 2021.05.19

파일 내용 읽기

 

java.io.InputStreamReader.read()

 

참고

 1 글자씩 읽기

 반환형이 int형이라 출력문 사용 시 한문자씩 받기 위해 char형으로 변환해 주어야 한다.

 while문을 사용하여 ch!= -1이라는 조건을 사용한다.

 사용 시 IOException이 발생한다. 필자는 메인 메서드에 throws 하였다.

 

 

 

java.io.BufferedReader.readLine()

 

참고

 1 문장씩 읽기

 while문 사용 시!= null을 사용하여야 한다.

 사용 시IOException이 발생한다. 필자는 메인 메서드에 throws 하였다.

 

예시

import java.io.*;

public class FileRead {
	public static void main(String[] args) throws Exception {
		
		File file = new File("d:\\File class test\\myfile.txt");
		
		// 한글자씩 읽기
		FileReader fr = new FileReader(file);
		int ch = fr.read();
		// 한문자씩 읽어올때 더 이상 불러올 문자가 없으면 -1
		while(ch != -1) { // 더이상 뱉어낼꺼 없을땐 -1
			System.out.println((char)ch);
			ch = fr.read();
		}
		fr.close();

		// 한문장씩 읽기	Buffer(=저장공간)
		BufferedReader br = new BufferedReader(new FileReader(file));
		String str;
		// 한문장씩 읽어올때 더 이상 불러올 문장이 없으면 null
		while((str = br.readLine()) != null) {
			System.out.println(str);
		}
		br.close();
		
	}
}

 

실행화면

안
녕
하
세
요
반
갑
습
니
다
안
녕
하
세
요
안녕하세요
반갑습니다
안녕하세요

 

 

'IT > Java' 카테고리의 다른 글

[자바] 싱글톤(Sington)  (0) 2021.05.31
[자바] 파일 쓰기  (0) 2021.05.26
[자바] File Class  (0) 2021.05.16
[자바] Calendar Class  (0) 2021.05.13
[자바] String Class  (0) 2021.05.11

+ Recent posts