Oracle SQL

Oracle Sql - SELECT

J휘 2024. 8. 12. 20:15

[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