<Database> 기본문(조회, 저장, 연산자)

이제내손을java...·2024년 3월 14일

Database 개념정리

목록 보기
3/11

Database 3번째 게시물은 DML SELECT에 관한 개념 정리와 간단한 조회 명령문 정리입니다!
SQL구문을 처음 시작하는 단계인데요 ! 거의 짧고 기본 개념 구문들로 이루어져있기때문에 코드에 설명을 덧붙이는 방법으로 적어보았습니다!

테이블 정보 확인

SELECT

SELECT 컬럼 명,[컬럼명,...]
FROM 테이블 명
[WHERE 조건식];

SELECT는 조회하는 명령어로 여러 컬럼을 조회하는 경우 쉼표로 구분, 마지막 컬럼 다음은 쉼표를 사용하지 않는다.
모든 컬럼 조회 시 컬럼 명 대신 '*'기호 사용 가능하며 조회 결과는 기술한 컬럼 명 순으로 표시된다.

FROM은 조회 대상 컬럼이 포함된 테이블 명을 기술한다.

WHERE은 행을 선택하는 조건 기술이며,
여러개의 제한 조건을 포함할 수 있으며, 각각의 제한 조건은 논리 연산자로 연결되며 제한 조건을 만족시키는 행들만 Result Set에 포함된다.

생성된 테이블 정보 확인해보기

SELECT * FROM TAB;

각 테이블의 데이터 정보확인하기(EMPLOYEE 테이블의 정보를 확인하기)

SELECT*FROM EMPLOYEE;

EMPLOYEE안의 항목에 대한 정보확인하기

DESC EMPLOYEE; 

테이블에 정보를 저장하기

DEPRATMENT : 부서에 대한 정보를 저장하는 테이블

SELECT*FROM DEPARTMENT;
DESC DEPARTMENT;

JOB : 직책에 대한 정보를 저장하는 테이블

SELECT*FROM JOB;
DESC JOB;

LOCATIONAL : 부서지역에 대한 정보를 저장하는 테이블

SELECT*FROM LOCATION;
DESC LOCATION;

NATIONAL : 부서지역에 설정된 국가 정보를 저장하는 테이블

SELECT*FROM NATIONAL;
DESC NATIONAL;

SAL_GRADE : 급여등급에 대한 정보를 저장하는 테이블

SELECT*FROM SAL_GRADE;
DESC SAL_GRADE;

> 데이터 조회하기

-EMPLOYEE 테이블에 있는 전체 COLUMN의 데이터 조회하기

SELECT*FROM EMPLOYEE;

EMPLOYEE테이블에 있는 이름, 주민번호, 이메일, 급여, 보너스 조회하기

SELECT EMP_NAME,EMP_NO,EMAIL.SALARY,BOUNUS
FROM EMPLOYEE;

DEARTMENT 의 모든 컬럼데이터 출력하기

SELECT*FROM DEPARTMENT;

SELECT문의 산술연산을 작성/출력하기

  1. 기본적인 연산이 가능하다.

,+,-,*,/

SELECT EMP_NAME,10+10
FROM EMPLOYEE;
  1. 리터럴이 사용 가능하다.

사용 방법
숫자 : 10 20, 실수 : 180.5 3.14 ,문자열 : '문자열', 날짜 : 'YY/MM/DD'

문자열+문자열 -> 문자열 문자열 문자열 결합연산이 불가능하다.
ORACLE 에서 + 연산은 무조건 수치연산만 가능하다😲‼️

  1. 컬럼과 컬럼의 산술연산이 가능하다
SELECT EMP_NAME, SALARY, SALARY+SALARY,SALARY+1000.15
FROM EMPLOYEE;

기본 문제 풀이

  1. 사원의 이름, 급여, 보너스금액 출력하기
SELECT EMP_NAME, SALARY, NVL(BONUS,0),SALARY*NVL(BONUS,0)
FROM EMPLOYEE;

문제 풀이 :EMPLOYEE컬럼에 있는 사원의 이름, 월급, 보너스값(NULL값이면 0으로 처리),보너스를 포함한 월급(보너스가 NULL값이면 0으로 처리) 하여 데이터를 출력하라는 문제✌️

  1. 사원테이블에서 사원명, 부서코드, 월급, 연봉을 조회하기
    보너스가 없는 사원의 연봉도 잘 출력하게 해보자!
SELECT EMP_NAME,DEPT_CODE,SALARY,
(SALARY+(SALARY*NVL(BONUS,0)))*12 AS TOTALSAL
FROM EMPLOYEE;

AS는 만들어준 가상 컬럼의 컬럼이름을 지정해주는 명령어이다. 이 문제에서는 연봉을 출력한 가상 컬럼의 이름을 TOTALSAL로 지정해주고 있는 것!

별칭에 특수문자 사용가능할까?
띄어쓰기도 불가능하며, 사용하려면 별칭을 ""묶어주면 가능하다.
꼭 쓰려면 문자라는 것을 알려주기위해 " "안에 작성한다.

SELECT SALARY AS "월^^급",EMP_NAME"ㅠ ㅠ"
FROM EMPLOYEE;

DISTINCT예약어 사용하기

중복되는 ROW를 제외하고 출력해주는 기능이다.

SELECT DISTINCT 컬럼명[,컬럼명] FROM 테이블명
-- DISTINCT는 컬럼작성부 맨앞에만 작성가능
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;

DISTINCT뒤에 컬럼을 여러개 작성하면 한개 그룹으로 묶고 일치여부를 확인한다.

SELECT DISTINCT DEPT_CODE,JOB_CODE
FROM EMPLOYEE;

원하는 ROW만 조회하기
WHERE절을 이용한다
WHERE은 DB에서 사용하는 조건문이다. 예를 들어 JAVA의 SWITCH문과 같은 것!

부서가 D5인 사원의 전체 데이터 조회하기

SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE='D5';

월급이 300만원 이상인 사원의 이름, 이메일. 급여 조회하기

SELECT EMP_NAME,EMAIL,SALARY
FROM EMPLOYEE
WHERE SALARY>=3000000;

사원 중 직책이 J2가 아닌 사원 조회하기

SELECT *
FROM EMPLOYEE
WHERE JOB_CODE!='J2';

데이터를 비교할때는 대소문자를 구별함.

SELECT *
FROM EMPLOYEE
WHERE JOB_CODE='j2';

-> j2라는 데이터는 없기 때문에 J2로 수정해야 조회가 가능하다.

날짜에 대한 대소비교하기
문자열로 날짜패턴을 작성해서 비교를 한다.
00/01/01 이후 입사자 조회하기

SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE>'00/01/01';

조건이 여러개일 경우 논리연산자를 이용한다.

AND / OR 를 사용할 수 있다.
사원 중 부서가 D5이고 급여가 300만원 이상인 사원의 이름, 부서코드 ,급여를 조회하기

SELECT EMP_NAME,DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE DEPT_CODE='D5' AND SALARY>=3000000;

사원 중 직책이 J6이거나 J7인 사원의 이름, 이메일, 급여 직책코드를 조회하기

SELECT EMP_NAME, EMAIL,SALARY,JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE='J6' OR JOB_CODE='J7';

특정범위에 있는 값을 조회하기
사원중 급여를 200 만원 이상 300만원 이하 받는 사원 조회하기
사원명, 급여, 보너스, 입사일을 조회

SELECT EMP_NAME,SALARY,BONUS,HIRE_DATE
FROM EMPLOYEE
WHERE SALARY>=2000000 AND SALARY<=3000000;

사원중 입사일이 00년 01년 01일 부터 02년 12월 31일까지인 사원의 사원명, 급여, 부서코드, 입사일 조회하기

SELECT EMP_NAME,SALARY,DEPT_CODE,HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE>= '00/01/01' AND HIRE_DATE<='02/12/31';

범위값을 조회할때 범위조회연산자를 이용할 수 있다.

> BETWEEN AND

-- 컬럼명 BETWEEN 값(시작) AND 값2(끝)
SELECT EMP_NAME,SALARY,BONUS,HIRE_DATE
FROM EMPLOYEE
WHERE SALARY BETWEEN 2000000 AND 3000000;

LIKE연산자 이용하기
문자열에 대해 패턴으로 검색하는 연산자로, 패턴을 표현하는 표현식이 있다.

-- : 아무문자가 1개를 나타내는 표현식
-- '
강' : 강으로 끝나는 두글자
-- '_유 호' : 네글자인데 두번째는 유 마지막은 호가 들어가는 글자
-- '__' : 세글자
-- % : 아무문자가 0개이상을 나타내는 표현식
-- '%강' : 강으로 끝나는 글자 다 (앞에 문자나 문자의 수 상관 없음) 강, 한강, 두만강, 호호호호호하하강 모두 가능함
-- 하하하호호호오오오강강오 안됨 -> 강으로 안끝나서
-- '%명%' : 명이 있는 모든 글자
-- '
명%' : 명을 포함한 최소 두글자
-- 컬럼명 LIKE '패턴'
-- 컬럼명 NOT LIKE '패턴'

기본 문제 풀이

사원중 유씨성을 가진 사원의 이름, 급여, 부서코드 조회

SELECT EMP_NAME, SALARY, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '유%';

사원중 이메일에 yo가 포함된 사원 조회하기

SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '%yo%';

사원중 이메일에 j가 포함되고 유씨성을 가진 사원 조회하기

SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '%j%' AND EMP_NAME LIKE '유%';

사원중 유씨성이 아닌 사원들 조회하기

SELECT *
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE'유%;

NULL값 조회하기

NULL : 아무의미 없는 값, 빈값을 표시할 때 사용할 수 있고,
연산이 불가능하다.
그렇기 때문에 , NULL을 찾을 수 있는 연산자를 제공한다.

  • 표현식
IS  NULL/IS NOT NULL

보너스를 받지않는 사원 조회하기

SELECT EMP_NAME,BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;

보너스를 받는 사원 사원명, 급여, 보너스 조회하기

SELECT EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;

부서가 지정되지 않은 사원 조회하기 사원명, 부서코드

SELECT EMP_NAME, NBL(DEPT_CODE '인턴')AS DEPTCODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL;

다중값에 대한 동등비교 연산자

OR 연결되는 조건을 간단하게 처리할 수 있다.

  • 표현식
컬럼명 IN/ NOT IN(값,값,값...);

사원중 부서코드가 D5,D6,D8인 사원을 조회하기 이름,부서코드

SELECT EMP_NAME,DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IN('D5','D6','D8');

나중에 서브쿼리문(다중행)과 동등비교할 때 사용

SELECT EMP_NAME,DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE
IN(SELECT DEPT_ID FROM DEPARTMENT 
WHERE DEPT_TITLE='총무부' OR DEPT_TITLE LIKE'해외%');

유의해야할 점 :논리 연산자에도 순서가 있기 때문에
먼저 연산해아할 연산은 ()로 묶어서 처리해줘야한다.

SELECT EMP_NAME,JOB_CODE,SALARY
FROM EMPLOYEE
WHERE JOB_CODE IN('J7','J2') AND SALARY>=2800000;

첫번째 기본적인 데이터 조회와 출력을 위한 기본 명령어들의 첫 정리를 마치겠습니다!!✌️😊😊😊

0개의 댓글