[SELECT]
: 말 그대로 선택해서 정보를 보여주는 절이다.
( SELECT 같은 걸 '쿼리' 라고 한다)
SELECT * -- 모두 선택 (2)
FROM EMPLOYEE; -- EMPLOYEE 데이터베이스에서 (1)
EMPLOYEE '테이블'에서 모든 정보를 선택하는 코드로
SELCET절과 FROM 절로 나뉘어 있다.
코드의 실행순서는 FROM > EMPLOYEE이다.
이유는 간단한데 "어디에서 뭘 가져오다"는 말이 되지만
'가져온다'가 먼저 실행되면 "어디에서 가져오라는 거야"가 되는 것처럼..
#중요#
CTRL + ENTER 하면 해당 줄의 코드가 실행되는데
끝나는 기준은 해당 줄부터 세미콜론 ; 이 있을 때까지 실행된다.
SELECT 예제)
--EMPLOYEE테이블의 사원명, 이메일, 전화번호, 입사일, 급여 조회
SELECT EMP_NAME, EMAIL, PHONE, HIRE_DATE, SALARY
FROM EMPLOYEE;
↓ 실행결과
EMPLOYEE 테이블에서 정보를 가져오게 된다.
=============================================================
[SYSDATE] SQL에서 현재 날짜를 알려주는 상수
SELECT EMP_NAME, HIRE_DATE, SYSDATE -- 오늘날짜
FROM EMPLOYEE;
←실행결과
===============================================================
[ AS "별칭" ] 컬럼명 지정
그리고 EMP_NAME | HIRE_DATE | SYSDATE
처럼 표시되는 컬럼명에 별칭을 부여해서 깔끔하게 정리가 가능하다.
SELECT EMP_NAME AS "직원 이름", HIRE_DATE AS "고용일", SYSDATE AS "오늘 날짜"
FROM EMPLOYEE;
←실행결과
===============================================================
[ 연결연산자: | | ] 여러 컬럼값들을 하나의 컬럼처럼 연결
( 문자열도 " " 을 사용해서 자바처럼 포함이 가능함 )
SELECT EMP_ID || EMP_NAME || SALARY
FROM EMPLOYEE;
←실행결과
===============================================================
[ DISTINCT ] 중복 제거
먼저 중복을 제거하지 않은 상태로 출력을 해보겠음
-- EMPLOYEE 테이블에서 DEPT_CODE만 출력
SELECT DEPT_CODE
FROM EMPLOYEE;
모든 직원들의 부서번호를 출력하니까
당연히 중복되는 값이 여러개 나옴
그리고 이번엔 DISTINCT를 사용해서 중복값을 제거해봄
-- EMPLOYEE 테이블에서 DEPT_CODE의 중복을 제거 (DISTINCT)
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;
DISTINCT 를 사용해서
중복들이 전부 제거된 모습
===============================================================
[ WHERE 절 ]
: SELECT 처럼 조건을 쓰는 절
JAVA에서의 if문과 같다고 보면 된다
[사용법]
SELECT 컬럼
FROM 테이블
WHERE 조건;
여기서도 if문 처럼 비교연산이 가능함
>>비교연산<<
>, <, >=, <= : 대소비교
= : 양쪽이 같다.
!=, ^=, <> : 양쪽이다르다
===========================================================
<AND, OR 연산자>
조건을 여러개 연결할 때 사용한다.
[표현법]
A AND B -> A, B가 모두 만족하는 값만 참으로 간주한다. *
A OR B -> A와 B중 하나만 만족해도 참으로 간주한다. +
[ BETWEEN AND ]
조건식에 사용되는 구문
몇이상 몇이하인 범위에 대한 조건을 제시할 때 주로 사용하는 연산자(이상, 이하만 가능)
[사용법]
BETWEEN A AND B
[ 논리부정 연산자 ]
NOT : ! 와 같은 부정 연산자
===========================================================
[연습]
1) EMPLOYEE에서 부서코드가 'D1'아닌 사원들의 사원명, 급여, 부서코드 조회
SELECT EMP_NAME as "직원명", SALARY as "월급", DEPT_CODE as "부서코드"
FROM EMPLOYEE
WHERE DEPT_CODE != 'D1'; -- 부서가 D1이 아닌 것만
앞에서 배웠던 "별칭"을 줘서 보기 편하게 했음
이해가 안 될 때 별칭을 사용하면 좀 더 보기 편하고
이해를 도와주기도 하는 느낌이 듦
-------------------------------------------------------------------------------------------------------
2) 급여가 350만원 이상 600만원 이하인 모든사원의 사원명, 사번, 연봉 조회
SELECT EMP_NAME, EMP_ID, SALARY * 12 AS "연봉"
FROM EMPLOYEE
WHERE SALARY >= 3500000 AND SALARY <= 6000000;
SALARY(월급)에 12를 곱해서 연봉을 계산하고 "연봉" 별칭 부여
그리고 WHERE절에 월급 조건을 걸었다.
=======================================================
[ LIKE ]
비교하려는 컬럼이 내가 제시한 패턴에 만족할 경우 조회
[사용법]
1. '%' : 포함 문자 검색'
◾ 비교할 컬럼 LIKE ' 문자% ' : 비교할 컬럼 중 해당 '문자'로 시작하는 값 조회
◾ 비교할 컬럼 LIKE ' %문자 ' : 비교할 컬럼 중 해당 '문자'로 끝나는 값 조회
◾ 비교할 컬럼 LIKE ' %문자% ' : 비교할 컬럼 중 해당 '문자'가 포함된 값 조회
2. '_' : 1글자를 대체하는 검색
◾비교할 컬럼 LIKE '_문자' : 비교할 컬럼 문자 앞에 아무 글자나 한 글자가 있는 값 조회
◾비교할 컬럼 LIKE '문자_' : 비교할 컬럼 문자 뒤에 아무 글자나 한 글자가 있는 값 조회
◾비교할 컬럼 LIKE '_문자_' : 비교할 컬럼 문자 앞뒤에 아무 글자나 한 글자씩 있는 값 조회
------------------------------------------------------------------------------------------------------------------
[연습]
1) 사원들중 성이 전씨인 사원의 사원명, 급여, 입사일 조회
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
전씨들만 출력된다
--------------------------------------------------------------------------------------------------------------------
2) 전화번호의 3번째 자리가 1인 사원들의 사원명 , 이메일, 전화번호 조회 ( %, _ 사용 )
SELECT EMP_NAME, EMAIL, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '__1%';
이제는 보기힘든 011이 출력된다
--------------------------------------------------------------------------------------------------------------------
3) 이메일 중 _앞글자가 3글자인 사원들의 사번, 이름, 이메일 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '____%';
이렇게 할 경우 언더바_ 가 4개가 되는데 이렇게 되면 위 이메일처럼 4번째 자리에 원래 _가 있는 경우가 있어서
_가 아무거나를 뜻하는지, 진짜 _ 를 뜻하는지 알 수 없게 된다.(이를 와일드카드 문자라고 함)
그래서 데이터값으로 취급하고싶은 문자(와일드카드문자) 앞에 탈출문자를 제시해준다
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___/_%' ESCAPE '/'; --수정
' / ' 문자를 가운데 끼워 넣어서 / 가 나오면 탈출(ESCAPE)한다고 써주면 된다
JAVA의 break랑 비슷하다!
--------------------------------------------------------------------------------------------------------------------
[ IN ]
WHERE절에서 비교대상 컬럼값이 내가 제시한 목록 중에 일치하는 값이 있는지 검사
[사용법]
비교대상컬럼 IN ('값','값','값')
연습문제) 부서코드가 D6이거나 D8이거나 D5인 부서원들의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D8' OR DEPT_CODE = 'D5';
↑ IN을 배우지 않았을 때는 이렇게 썼지만
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D6','D8','D5');
↑ IN을 사용하면 코드가 간소화된다
결과는 위 아래코드 둘 다 똑같다.
===========================================================
JAVA가 끝나고 SQL을 들어가고 느낀점은
자바는 이해를 요구하고
SQL은 이해도 필요하지만 이해보단 사용법을 많이 아는 게 중요한걸로 보인다
근데 난 SQL이 더 조금 어렵고 재미가 떨어짐
SQL을 하니까 JAVA 실력이 퇴화되는 게 느껴진다..
JAVA도 같이 병행하면서 해야할 것 같음
JAVA했을 때 보다 성장이 더디게 느껴짐
그리고 남들보다 이해력이 부족한 것도..
그만큼 더 열심히 해야겠지
'Oracle SQL' 카테고리의 다른 글
Oracle Sql - FUNCTION (0) | 2024.08.26 |
---|