
1. SQL(Structured Query Language)
- 관계형 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 표준 검색 언어로 원하는 데이터를 찾는 방법이나 절차를 기술하는게 아닌 조건을 기술하여 작성
| 분류 | 용도 | 명령어 |
| DQL (Data Query Language) |
데이터 검색 | SELECT |
| DML (Data Manipulation Language) |
데이터 조작 | INSERT, UPDATE, DELETE |
| DDL (Data Definition Language) |
데이터 정의 | CREATE, DROP, ALTER |
| TCL (Transaction Control Language) |
트랜잭션 제어 | COMMIT,ROLLBACK |
1) SELECT : 데이터를 조회한 결과를 ResultSet이라고 하는데 SELECT 구문에 의해 반환된 행들의 집합을 의미한다.
-Result Set은 0개 이상의 행이 포함될 수 있고, 특정 기준에 의해 정렬가능한 테이블의 특정 컬럼, 행, 행/컬럼 또는 여러 테이블의 특정 행/컬럼 조회가 가능하다.
* 작성법
SELECT 컬럼 명 [, 컬럼명, …] FROM 테이블 명 [WHERE 조건식];
--직원 전부의 사번과 이름, 월급을 조회하는 구문
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE;
* SELECT
조회하고자 하는 컬럼명 기술한다.
여러 컬럼을 조회하는 경우 컬럼은 쉼표로 구분하고, 마지막 컬럼 다음은 쉼표를 사용하지 않음
모든 컬럼 조회 시 컬럼 명 대신 '*' 기호 사용 가능하며 조회 결과는 기술한 컬럼 명 순으로 표시 됨
* FROM
조회 대상 컬럼이 포함된 테이블 명 기술한다.
* WHERE
행을 선택하는 조건 기술 여러 개의 제한 조건을 포함할 수 있으며,
각각의 제한 조건은 논리 연산자로 연결 제한 조건을 만족시키는 행들만 Result Set에 포함.
* 예시
--직원 전부의 모든 정보를 조회하는 구문
SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE, DEPT_CODE,
JOB_CODE, SAL_LEVEL, SALARY, BONUS, MANAGER_ID, HIRE_DATE,
ENT_DATE, ENT_YN
FROM EMPLOYEE;
--또는 '*'으로 표시
SELECT * FROM EMPLOYEE;
--‘AS 별칭‘이나 “별칭”, 또는 ‘AS “별칭“’을 사용해서 컬럼 별칭을 지을 수 있음
SELECT EMP_NAME AS 이름, SALARY*12 “연봉(원)”, (SALARY + (SALARY*BONUS))*12 AS "총 소득(원)"
FROM EMPLOYEE;
--DISTINCT: 컬럼에 포함된 데이터 중 중복 값을 제외하고 한 번씩만표시하고자 할 때 사용
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
--WHERE절 : 검색할 컬럼의 조건을 설정하여 행 결정
-- 부서코드가 ‘D9’인 직원의 이름, 부서코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D9’;
-- 급여가 4000000보다 많은 직원 이름과 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY > 4000000;
-- **여러 개 조건 작성 시 AND/OR 사용**
-- 부서코드가 ‘D6’이고 급여를 2000000보다 많이 받는 직원의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D6’ AND SALARY > 2000000
* 연결 연산자
: '||'를 사용하여 여러 컬럼을 하나의 컬럼인 것 처럼 연결하거나 컬럼과 리터럴을 연결함.
--컬럼과 컬럼을 연결한 경우
SELECT EMP_ID || EMP_NAME || SALARY
FROM EMPLOYEE;
--컬럼과 리터럴을 연결한 경우
SELECT EMP_NAME || ‘의 월급은 ‘ ||SALARY || ‘원 입니다.’
FROM EMPLOYEE;
*논리 연산자
:여러 개의 제한 조건 결과를 하나의 논리 결과로 만들어줌.

*비교 연산자
: 표현식 사이의 관계를 비교하기 위해 사용하고 비교 결과는 논리 결과(TRUE/FALSE/NULL) 중 하나가 됨.
단 비교하는 두 컬럼 값/표현식은 서로 동일한 데이터 타입이어야 함

--BETWEEN AND : 비교하려는 값이 지정한 범위에 포함되면 TRUE를 리턴하는 연산자
--상한 값과 하한 값의 경계도 포함된다.
-- 급여를 3500000보다 많이 받고 6000000보다 적게 받는 직원이름과 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3500000 AND SALARY <= 6000000;
-- 또는 WHERE SALARY BETWEEN 3500000 AND 6000000;
--LIKE : 비교하려는 값이 지정한 특정 패턴을 만족하면 TRUE를 리턴하는 연산자
--‘%’와 ‘_’를 와일드 카드로 사용
--‘전’씨 성을 가진 직원 이름과 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE ‘전%’;
-- 핸드폰의 앞 네 자리 중 첫 번호가 7인 직원 이름과 전화번호 조회
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE ‘_ _ _7%’;
--와일드 카드 문자와 패턴의 특수문자가 동일한 경우 어떤 것을 패턴으로 결정하는지 구분하지 못하기 때문에
--데이터로 처리할 와일드 카드 문자 패턴 기호 앞에 임의의 특수문자를 사용하고 ESCAPE OPTION으로 등록하여 처리
--EMAIL ID 중 ‘_’의 앞이 3자리인 직원 이름, 이메일 조회
SELECT EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE ‘_ _ _#_%’ ESCAPE ‘#’;
--NOT LIKE
‘이’씨 성이 아닌 직원 사번, 이름, 이메일 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE ‘이%’
--IS NOT NULL / IS NULL
--NULL 여부를 비교하는 연산자
- 관리자도 없고 부서 배치도 받지 않은 직원 조회
SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;
--부서 배치를 받지 않았지만 보너스를 지급받는 직원 조회
SELECT EMP_NAME, BONUS, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;
--IN : 비교하려는 값 목록에 일치하는 값이 있으면 TRUE를 반환하는 연산자
--D6 부서와 D8 부서원들의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN (‘D6’, ‘D8’);
--WHERE DEPT_CODE = ‘D6’ OR DEPT_CODE = ‘D8’;

--‘J2’ 또는 ‘J7’ 직급 코드 중 급여를 2000000보다 많이 받는 직원의 이름, 급여, 직급코드 조회
SELECT EMP_NAME, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE (JOB_CODE = ‘J7’ OR JOB_CODE = ‘J2’) AND SALARY > 2000000;
--* 우선순위를 고려하여 OR가 먼저 처리 되도록 ( )를 이용해 우선 순위 변경해줌'SQL' 카테고리의 다른 글
| oracle] 함수 (function) (1) | 2023.10.24 |
|---|---|
| oracle]함수 (function) - 날짜 처리 함수 (0) | 2023.10.23 |
| oracle]함수(function) - 숫자 처리 함수 (0) | 2023.10.21 |
| oracle] 함수 (funtion) - 문자 처리 함수 (0) | 2023.10.20 |
| oracle] 데이터베이스 개요 (0) | 2023.10.18 |