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 EMP_NAME,10+10 FROM EMPLOYEE;
사용 방법
숫자 : 10 20, 실수 : 180.5 3.14 ,문자열 : '문자열', 날짜 : 'YY/MM/DD'
문자열+문자열 -> 문자열 문자열 문자열 결합연산이 불가능하다.
ORACLE 에서 + 연산은 무조건 수치연산만 가능하다😲‼️
- 컬럼과 컬럼의 산술연산이 가능하다
SELECT EMP_NAME, SALARY, SALARY+SALARY,SALARY+1000.15 FROM EMPLOYEE;
기본 문제 풀이
SELECT EMP_NAME, SALARY, NVL(BONUS,0),SALARY*NVL(BONUS,0)
FROM EMPLOYEE;
문제 풀이 :EMPLOYEE컬럼에 있는 사원의 이름, 월급, 보너스값(NULL값이면 0으로 처리),보너스를 포함한 월급(보너스가 NULL값이면 0으로 처리) 하여 데이터를 출력하라는 문제✌️
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을 찾을 수 있는 연산자를 제공한다.
- 표현식
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;
첫번째 기본적인 데이터 조회와 출력을 위한 기본 명령어들의 첫 정리를 마치겠습니다!!✌️😊😊😊
