ㅁ 보통 테이블의 첫 컬럼이 기본키(PRIMARY KEY)
- 절대 중복되면 안되고, 없어서도 안 됨.
- 식별자 역할 수행.
ㅁ 컬럼값 = 데이터값.
- 행과 열이 만나는 지점. 하나 하나가 데이터다.
ㅁ SQL 명령어를 이렇게까지 세분화하지 않고 크게 3개로 분류하기도 한다.
- DDL, DML, DCL
- DQL(SELECT)은 DML로, TCL(COMMIT, ROLLBACK)은 DCL로.
ㅁ 명령문을 전부 소문자로 실행해도 결과는 동일하다.
- 오라클의 예약어(키워드)는 대소문자를 가리지 않는다.
- 테이블명, 칼럼명도 대소문자를 가리지 않는다.
- 작성 스타일은 회사마다 다르다.
전부 대문자, 전부 소문자, 예약어는 대문자 나머지는 소문자로 쓰기도 한다.
- 단 실제 담겨있는 데이터 값은 대소문자를 가린다.
조건식에서 데이터 값을 표현할 때는 정확히 써야 한다.
- 오라클에서 테이블명 또는 칼럼명을 대문자와 소문자를 섞어서 작성해도, 전부 대문자로 보인다.
그래서 여러 단어를 조합할 경우에 낙타 표현법이 불가능하다.
각 단어들마다 주로 언더바로 연결한다.
ㅁ (null) 이라고 되어있는 컬럼값은 이 문자가 있는게 아니고 엑셀로 보면 진짜 비어있음.
ㅁ BR 계정 워크시트 열고, C:\workspaces에 "01_SELECT(기본문법)_BR계정.sql" 파일을 저장하고 시작한다.
ㅁ < SELECT >
- DATA QUERY LANGUAGE(DQL)
- 데이터 조회 명령문. 데이터 조회시 사용한다.
- 조회 결과를 RESULT SET이라고 한다.
- 데이터 조회했다고 데이터가 변경되지는 않음.
- 표현법
SELECT 조회할칼럼, 칼럼, ..., 산술식, 함수식, ... AS "별칭"
FROM 조회할테이블
- SELECT문에서 SELECT절, FROM절은 필수다.
나머지는 다 생략 가능.
SELECT 조회할칼럼, 칼럼, ..., 산술식, 함수식, ... AS "별칭"
FROM 조회할테이블
WHERE 조회할데이터의 조건식
GROUP BY 그룹핑시킬 컬럼, 컬럼, ...
HAVING 그룹에 대한 조건식
ORDER BY 정렬기준
ㅁ "Oracle수업용스크립트.sql" 파일에서 EMPLOYEE 테이블의 데이터 조회하기.
- EMPLOYEE 테이블을 열어서 '데이터' 탭을 가보면 열이 엄청 많다.
- '열' 탭에는 각 칼럼에 대한 정보가 있다.
- EMPLOYEE 테이블에서 전사원의 모든 칼럼 조회하기
- EMPLOYEE 테이블에서 전사원의 사번, 이름 급여만 조회하기
ㅁ 실습
- JOB 테이블의 모든 컬럼 조회
SELECT *
FROM JOB;
- JOB 테이블의 직급명 컬럼만 조회
SELECT JOB_NAME
FROM JOB;
- DEPARTMENT 테이블의 모든 컬럼 조회
SELECT *
FROM DEPARTMENT;
- DEPARTMENT 테이블의 부서코드, 부서명 컬럼만 조회
SELECT DEPT_ID, DEPT_TITLE
FROM DEPARTMENT;
- EMPLOYEE 테이블의 사원명, 이메일, 전화번호, 입사일, 급여 조회
SELECT EMP_NO, EMAIL, PHONE, HIRE_DATE, SALARY
FROM EMPLOYEE;
ㅁ 컬럼값을 통한 산술연산
- SELECT절에 산술연산식을 작성시 해당 컬럼을 통한 산술연산 결과가 조회됨.
(데이터가 변경되는 것은 아님)
- EMPLOYEE의 사원명, 사원의 연봉(급여*12) 조회하기
SELECT EMP_NAME, SALARY*12
FROM EMPLOYEE;
- (SALARY + BONUS*SALARY) * 12
산술연산을 하는데 NULL이 포함되면, 산술연산 결과도 NULL이 나온다.
자동으로 NULL이 0으로 취급안 됨.
곱셈 연산뿐 아니라 덧셈 연산도 NULL이다!
- 오라클에서는 날짜 데이터 타입도 있고, 날짜 데이터간의 산술 연산도 가능하다.
입사일로부터 오늘날까지 근무일수 구하기.
- 날짜만 보여지고 있지만 내부적으로 시간에 대한 데이터도 표현 가능
- SYSDATE : 현재 시스템의 날짜 및 시간
SELECT SYSDATE
FROM DUAL;
DUAL은 테이블이 필요없는경우 작성하는 가상 테이블(더미 테이블)이다.
실제 데이터값이 담겨있진 않지만 FROM절을 필수로 써야 하기 때문에 작성한다.
"두자리 년도 / 두자리 월 / 두자리 일" 로 보여진다.
만약 지금 조회되고 있는 날짜 및 시간에 대한 상세정보가 궁금하다면 그 데이터 값을 더블클릭하면 연필모양이 뜸.
그걸 누르면 실제 데이터값을 확인할 수 있는 창이 뜬다.
- 날짜 데이터 간의 산술 연산
- 입사한 날부터 오늘까지 12579일 지났다. 일단위는 맞음.
그런데 날짜 - 날짜하면 시간에 대한 데이터까지도 뺄셈이 진행되서 소수점 아래로 지저분하게 보인다.
나중에 버림이나 반올림하는 것을 배운다.
ㅁ 칼럼에 별칭 부여하기
- 조회시 보여질 컬럼명에 별칭을 부여할 수 있다.
- 부여할 별칭에 띄어쓰기나 특수문자가 포함될 경우, 반드시 쌍따옴표를 써준다.
- 열 별칭을 정의할 때, 별칭에 한글을 사용할 경우 큰 따옴표로 감싸야 합니다.
- 컬럼명 | 산술식 [AS] 별칭 | "별칭" // AS는 생략 가능.
ㅁ 리터럴
- 임의로 지정한 문자(' ') 값을 리터럴이라고 한다.
- SELECT절에 리터럴값을 제시하면 마치 존재하는 데이터처럼 같이 조회가 가능하다.
- 사원의 사번, 사원명, 급여, 단위 조회
네번째 컬럼 자리에 리터럴 값이 조회됨.
조회만 되는 것뿐이지 실제 EMPLOYEE 테이블에 존재하는 것은 아님.
ㅁ 연결연산자 ( || )
- 여러 컬럼 값들을 마치 하나의 컬럼인 것처럼 연결해서 조회하거나
또는 컬럼 값과 리터럴 값을 연결해서 조회할 때 사용
- 각각의 컬럼 값들이 하나의 컬럼으로 연결돼서 조회됨.
- 오라클에서는 문자(한 글자)와 문자열(여러 글자)을 따로 취급하지 않음.
ㅁ DISTINCT
- 조회되는 컬럼 값들 중에 중복된 값은 한번씩만 조회. (NULL도 한번만 조회)
- DISTINCT 사용시 유의사항.
DISTINCT는 SELECT절에 딱 한번만 사용 가능. (조회되는 행수가 다를 수 있어서)
- 여러 컬럼을 묶어서 중복 제거.
DEPT_CODE와 JOB_CODE를 묶어서 중복을 제거함.
DISTINCT를 빼면 15개의 데이터가 조회됨.
ㅁ < WHERE 절>
- 특정 조건에 만족하는 데이터만을 조회할 때 조건식을 작성하는 구문
- 다양한 연산자를 통해 참/거짓이 나오도록 조건식을 작성
- 작성위치는 FROM절 뒤에 작성
- 매행 매행 조건검사를 한다.
(1) 비교 연산자
- 대소비교: >, <, >=, <=
- 동등비교: =, != 혹은 ^= 혹은 <>
- 데이터 값을 표현할 때는, 특히 문자 값은 ' '를 써야 한다.
- 데이터 값은 대소문자를 가린다.
- DEPT_CODE가 D1이 아닌 사원은 20명인데 18명만 조회되었다.
NULL인 사람 2명이 빠졌다.
NULL 값은 비교 연산자(=, <>, 등)를 사용할 때 특별한 처리가 필요합니다.
DEPT_CODE가 NULL인 사원들은 WHERE 절에서 DEPT_CODE <> 'D1' 조건을 만족시키지 않습니다.
- NULL인 사람도 포함시키려면,
WHERE DEPT_CODE <> 'D1' OR DEPT_CODE IS NULL;
ㅁ 지금까지 만든 파일을 깃허브에 올리기
- 3번째 방법.
이미 있는 폴더를 로컬저장소로 지정하고, 원격 저장소 만들기.
- 깃허브데스크톱 - 파일 - new repository.
내가 올리고자 하는 폴더의 상위폴더를 Local Path로 지정. (폴더를 지정하는게 아니고)
Name은 아무거나 쓰면 안되고, 올리고자하는 폴더명과 똑같이 작성.
- 깃허브데스크톱 - publish repository까지 눌러야 원격저장소가 만들어짐.
ㅁ WHERE절에 별칭을 쓸 수 있나?
- WHERE절에서 SELECT절에서 부여한 별칭 사용 불가.
SELECT EMP_NAME, SALARY, SALARY*12 AS 연봉, DEPT_CODE
FROM EMPLOYEE
WHERE 연봉 >= 50000000; // 불가
- 연산식 다 써줘야 함.
SELECT EMP_NAME, SALARY, SALARY*12 AS 연봉, DEPT_CODE
FROM EMPLOYEE
WHERE SALARY*12 >= 50000000;
- 왜냐면 실행순서 때문이다.
- 회사에서는 하나의 쿼리문에서 SELECT절이 100줄이 넘을 수도 있다.
SELECT문 안에 SELECT문 안에 SELECT문.
(2) 논리 연산자 ( AND, OR )
- 여러 개의 조건을 엮어서 하나로 제시하고자할 때 사용
- A조건 AND B조건 : 두 조건 모두 참이어야만 최종 결과도 참
- A조건 OR B조건 : 두 조건 중 하나만 참이어도 최종 결화는 참
- BEETWEEN A AND B : A 이상, B 이하의 범위
WHERE SALARY BETWEEN 3500000 AND 6000000;
(3) 논리 부정 연산자 NOT
WHERE NOT SALARY BETWEEN 3500000 AND 6000000;
WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
컬럼명 앞 또는 BETWEEN 앞에 작성 가능.
- 입사일이 90년대(90/01/01 ~ 99/12/31)인 사원들의 모든 컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '99/12/31'
DATE와 DATE 간에 있어서 숫자간의 산술연산 다 가능.
대소비교도 가능. 비교할 날짜 형식을 문자열로 전달.
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01' AND '99/12/31';
(4) LIKE 연산자
- 비교하고자하는 컬럼값이 내가 제시한 "특정 패턴"에 만족하는지를 비교할 때 사용. 일치가 아니라.
- 비교대상컬럼 LIKE '특정패턴'
만족할 경우 참, 만족하지 못할 경우 거짓.
- 참고)
특정패턴 작성시 %, _를 와일드 카드로 사용할 수 있다.
%는 0글자 이상
_는 무조건 1글자
- LIKE 대신 '='을 쓰면 이름 자체가 '전%'인 사람을 찾음.
- 전화번호 3번째 자리가 1인 사원들의 컬럼들 조회
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '__1%'
- 와일드 카드와 실제 데이터 값이 겹치는 경우
이메일 중 앞글자가 3글자인 사원들의 컬럼들 조회
ex) sim_bs@br.com, sum_di@br.com, ...
이메일 데이터 값 안에 실제로 언더바가 있다.
와일드카드를 의미하는 언더바 말고, 실제 데이터 값인 문자 언더바를 어떻게 구분하여 표시하는가.
데이터값으로 취급하고자 하는 값 안에 나만의 와일드 카드를 제시하고 해당 와일드 카드를 등록.
내가 데이터값으로 취급하고자 하는 값 앞에 특수문자 아무거나 하나 작성.
대신 그 특수문자를 와일드카드로 등록해줘야 함.
ㅇ 실습 문제
- 사원들 중 전화번호 처음 3자리가 010이 아닌 사원들의 컬럼들 조회
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%'; // WHERE NOT PHONE LIKE '010%'도 가능.
- DEPARTMENT에서 해외영업부가 아닌 부서들의 컬럼들 조회
SELECT DEPT_ID, DEPT_TITLE
FROM DEPARTMENT
WHERE DEPT_TITLE NOT LIKE '해외영업_부'; // WHERE NOT DEPT_TITLE LIKE '해외영업_부';
(5) NULL값 비교에 사용되는 연산자 ( IS NULL | IS NOT NULL )
- 이건 NOT 위치를 바꾸면 안 됨.
(6) IN 연산자
- 비교대상 컬럼 값이 내가 제시한 목록 중에 일치하는 값이 있는지 비교
비교대상컬럼 IN ( 값1, 값2, 값3, ... )
ㅁ 연산자 우선순위
- 괄호( )는 우선순위 0.
- JOB_CODE가 J7이거나 J2인 사원들 중, 급여가 200만원 이상인 사원들의 모든 컬럼 조회
괄호가 없으면, AND가 먼저 연산되어서 J2면서 급여가 200만원 미만인 사람들도 조회됨.
ㅁ < ORDER BY 절 >
- 조회되는 데이터를 정렬시켜서 조회
- SELECT문의 가장 마지막 줄에 작성
- 실행 순서 가장 마지막이다.
- SELECT 절에서 부여한 별칭을 ORDER BY절에서 사용 가능. 실행 순서상.
- ORDER BY 정렬기준의컬럼명 | 별칭 | 컬럼순번 [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]
ASC : 오름차순 정렬 (생략시 기본값)
DESC : 내림차순 정렬
NULLS LAST : 정렬하고자하는 컬럼 값에 NULL이 있을 경우 맨 뒤에 배치 (ASC일 때의 기본값)
NULLS FIRST : 정렬하고자하는 컬럼 값에 NULL이 있을 경우 맨 앞에 배치 (DESC일 때의 기본값)
- 정렬 기준 여러개 제시 가능. BONUS가 같은 경우.
첫번째 기준의 컬럼 값이 동일할 경우 두번째 컬럼 기준으로 정렬.
-
SELECT EMP_NAME, SALARY*12 "연봉"
FROM EMPLOYEE
ORDER BY SALARY * 12 DESC; 산술 연산식 작성 가능
ORDER BY 연봉 DESC; 별칭 작성 가능
ORDER BY 2 DESC; 컬럼 순번(조회되는 컬럼 순서) 작성 가능
'클라우드 활용 자바개발자 양성과정 > 02. 데이터베이스 활용' 카테고리의 다른 글
05. SUBQUERY (0) | 2024.07.19 |
---|---|
04. JOIN (조인문) (0) | 2024.07.18 |
03. GROUP BY & HAVING (0) | 2024.07.18 |
02. SELECT (함수) (0) | 2024.07.17 |
0. 오라클 설치 (0) | 2024.07.15 |