학습기록남기기
2022_04_21_ DB_1일 본문
Oracle_DB
DDL - CREATE , ALTER , DROP ,RENAME , TRUNCATE
: 테이블로부터 데이터 구조를 생성(CREATE), 변경(ALTER) ,제거(DROP)합니다. 또는 이름을 변경(RENAME)하거나 구조만 남기고 모든 데이터를 삭제(TRUNCATE)합니다.
DML - SELECT , INSERT , UPDATE , DELETE
SELECT :데이터베이스로부터 데이털르 검색(조회)합니다 .
INSERT , UPDATE , DELETE : 개별적으로 데이터베이스 테이블에서 새로운 행을 입력(INSERT)하고 ,기존의 행을 변경(UPDATE)하고 ,기존의 행을 제거(DELETE)합니다.
TCL - COMMIT , ROLLBACK , SAVEPOINT
DML 명령문으로 만든 변경을 관리합니다.데이터 변경은 논리적 트랜잭션으로 함께 그룹화 될 수 있습니다.
DCL - GRANT , REVOKE
데이터베이스에 접근하고 객체들을 사용할 수 있도록 권한을 주거나 회수 합니다.
1.SELECT절_0421.sql
-- 오라클의 주석입니다.
/*
여러줄 주석입니다.
호호호~
*/
--SELECT 컬럼명(여러개 가능) FROM 테이블 이름;
--모든 컬럼 조회
SELECT * FROM employees;
--특정 컬럼 조회
SELECT employee_id,first_name,last_name from employees;
--특정 컬럼 조회
SELECT email,phone_number,hire_date FROM employees;
--실존하지 않는 컬럼 만들어 연산후 조회
--컬럼을 조회하는 위치에서 * / + - 연산이 가능합니다.
SELECT
employee_id,
first_name,
last_name,
salary,
salary+salary*0.1
FROM
employees;
--NULL 값의 확인(숫자 0 이나 공백이랑은 다른 존재입니다.)
SELECT department_id,commission_pct
FROM employees;
--alias(컬럼명,테이블명의 이름을 변경해서 조회합니다.):별명
SELECT first_name as 이름,last_name as 성,
salary as 급여
FROM employees;
-- ' ''s:특수문자 표시'
--컬럼값과 컬럼값의 연결 || : 연결자
--오라클은 홑따옴표 ' ' 로 문자를 표현하고 , 문자열 안에 홑따옴표를
--표현하고 싶으면 ''를 두번 연속으로 쓰면됩니다.
SELECT
first_name||' '||last_name||'''s salary is ${' ||salary||'}'
as 급여내역
FROM employees;
--DISTINCT (중복 행의 제거)
SELECT department_id FROM employees;
SELECT DISTINCT department_id FROM employees;
--ROWNUM,ROWID
--(**로우넘 : 쿼리에 의해 반환되는 행 번호를 출력)
--(로우아이디:데이터베이스에서 행의 주소값을 반환)
SELECT ROWNUM,ROWID,employee_id
FROM employees;
2.WHERE절_0421.sql
SELECT * FROM employees;
--WHERE절 비교 (데이터 값은 대/소문자를 구분합니다.) : 해석 순서 FROM -> WHERE ->SELECT
SELECT first_name,last_name,job_id
FROM employees
WHERE job_id='IT_PROG';
SELECT * FROM employees
WHERE last_name='King';
SELECT * FROM employees
WHERE department_id=90; --숫자 90
SELECT * FROM employees
WHERE salary>=15000;
SELECT * FROM employees
WHERE hire_date='04/01/30';
--데이터 행 제한(BETWEEN , IN , LIKE)
-- BETWEEN 15000 AND 20000 : WHERE 보다 연산속도 느림
-- WHERE salary>15000 AND WHERE salary<20000
--범위를 지정 하여 조회할 때 BETWWEN 키워드를 사용
SELECT * FROM employees
WHERE salary BETWEEN 15000 AND 20000;
SELECT * FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';
--IN연산자의 사용(특정 값들과 비교할 때 사용)
--괄호안의 값이 포함되어 있는 경우 조회
SELECT * FROM employees
WHERE manager_id IN (100,101,102);
SELECT * FROM employees
WHERE job_id IN ('IT_PROG','AD_VP');
--LIKE 연산자
-- %는 뭐든(anything :어느것이든) ,_는 데이터의 위치를 찾아낼 때
SELECT first_name,hire_date FROM employees
WHERE hire_date LIKE '03%';
--hire_date의 값이 03으로 시작하고 뒤에 어떤값이 붙어있던 상관없음
SELECT first_name,hire_date FROM employees
WHERE hire_date LIKE '%15';
--hire_date의 값이 15로 끝나고 , 앞에 어떤값이 붙어 있던 상관없음
SELECT first_name,hire_date FROM employees
WHERE hire_date LIKE '%05%';
--hire_date의 값에 05라는 단어만 있으면,
--위치 관계없이 모두 조회해라 || 게시판 Query
SELECT first_name,hire_date FROM employees
WHERE hire_date LIKE '___05%';
-- _는 자리수를 나타냄 : _ _ _05 는 hire_date가 05월 인 것만 조회
--IS NULL (NULL값을 찾음)
--manager_id가 NULL인 값 조회
SELECT * FROM employees
WHERE manager_id IS NULL;
SELECT * FROM employees
WHERE commission_pct IS NULL;
SELECT * FROM employees
WHERE commission_pct IS NOT NULL;
--AND( T && T =T) ,OR ,
--AND가 OR보다 연산순서가 빠름.
SELECT * FROM employees
WHERE job_id='IT_PROG'
OR job_id='FI_MGR'
AND salary>=6000;
SELECT * FROM employees
WHERE (job_id='IT_PROG'
OR job_id='FI_MGR')
AND salary>=6000;
--데이터의 정렬 (SELECT 구문의 가장 마지막에 배치됩니다.)
--항상 정렬이 마지막에 작성
--ASC :ascending 오름차순 , DESC : descending 내림차순
SELECT *FROM employees
ORDER BY hire_date ASC;
SELECT *FROM employees
ORDER BY hire_date DESC;
SELECT * FROM employees
WHERE job_id='IT_PROG'
ORDER BY first_name ASC;
SELECT * FROM employees
WHERE salary>=5000
ORDER BY employee_id DESC;
SELECT first_name,salary*12 AS pay
FROM employees
ORDER BY pay ASC;
3.연습문제_0421.sql
--1.모든 사원의 사원번호, 이름, 입사일, 급여를 출력하세요.
SELECT employee_id,first_name,hire_date,salary
FROM employees;
--2.모든 사원의 이름과 성을 붙여출력하세요 .열 별칭은 name으로 하세요
SELECT first_name ||' '|| last_name AS name FROM employees;
--3.50번 부서 사원의 모든 정보를 출력하세요.
SELECT * FROM employees WHERE department_id=50;
--4.50번 부서 사원의 이름,부서,직무아이디를 출력하세요.
SELECT first_name,department_id,job_id FROM employees
WHERE department_id=50;
--5.모든 사원의 이름 ,급여 그리고 300달러 인상된 급여를 출력하세요
SELECT first_name,salary,salary+300 AS 인상된급여
FROM employees;
--6.급여가 10000보다 큰 사원의 이름과 급여를 출력하세요
SELECT first_name,salary
FROM employees WHERE salary>10000;
--7.보너스를 받는 사원의 이름과 직무, 보너스율을 출력하세요
SELECT first_name,job_id,commission_pct FROM employees
WHERE commission_pct IS NOT NULL;
--8.2003년도 입사한 사원의 이름과 그리고 급여를 출력하세요(BETWEEN 연산자 사용)
SELECT first_name,hire_date,salary FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';
--9.2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요(LIKE 연산자 사용)
SELECT first_name,hire_date,salary FROM employees
WHERE hire_date LIKE '03%';
--10.모든 사원의 이름과 급여를 급여가 많은 사원부터 적은 사원순서로 출력하세요.
SELECT first_name,salary FROM employees
ORDER BY salary DESC;
--11.위 질의를 60번 부서의 사원에 대해서만 질의하세요.
SELECT first_name,salary FROM employees
WHERE department_id=60
ORDER BY salary DESC;
--12.직무아이디가 IT_PROG 이거나 ,SA_MAN인 사원의 이름과 직무아이디를 출력하세요.
SELECT first_name,job_id FROM employees
WHERE job_id='IT_PROG' OR job_id='SA_MAN';
--WHERE job_id IN('IT_PROG',"SA_MAN')도 가능
--13.Steven King 사원의 정보를 "Steven King 사원의 급여는 24000달러 입니다" 형식으로 출력하세요
SELECT first_name ||' '||last_name ||'사원의 급여는 '||salary||'달러 입니다'
FROM employees;
--14.매니저(MAN) 직무에 해당하는 사원의 이름과 직무 아이디를 출력하세요
SELECT first_name,job_id FROM employees
WHERE job_id LIKE '%MAN';
--15.매니저(MAN) 직무에 해당하는 사원의 이름과 직무 아이디를 직무아이디 순서대로 출력하세요
SELECT first_name,job_id FROM employees
WHERE job_id LIKE '%MAN'
ORDER BY job_id ASC; -- ASC는 default라서 생략 가능
4.문자열함수_0421.sql
-- lower(소문자),initcap(앞글자만 대문자),upper(대문자)
--lower: 모두 소문자로 변환 , upper : 모두 대문자로 변환
/*
sys :최고 관리자 -> system :하위 관리자
dual 이라는 테이블은 sys가 소유하는 오라클의 표준 테이블로서,
오직 한 행에 한 컬럼만 담고 있는 dummy 테이블이다.
일시적인 산술 연산이나 날짜 연산 등을 주로 사용한다.
모든 사용자가 접근할 수 있다. 주로 테스트에서 사용함
*/
SELECT * FROM dual;
SELECT 'abcDEF',lower('abcDEF'),upper('abcDEF')
FROM dual;
SELECT last_name,lower(last_name),INITCAP(last_name),upper(last_name)
FROM employees;
SELECT last_name FROM employees
WHERE lower(last_name)='austin'; --DB의 값을 바꾸지 않음
--length(길이) , instr(문자 찾기. 없으면 0 값 나옴, 인덱스값으로 처리)
SELECT 'abcdef' AS ex,LENGTH('abcdef'),INSTR('abcdef','a')
FROM dual;
SELECT first_name,LENGTH(first_name),INSTR(first_name,'a')
FROM employees;
--substr(문자열 자르기) : 내가 원하는 범위로 자름
--concat(문자 연결) 2개밖에((abc,def)) 사용 불가 || ** 문자열은 1부터 시작(배열 인덱스 1부터)
SELECT 'abcdef' AS ex ,SUBSTR('abcdef',1,4),CONCAT('abc','def')
FROM dual;
SELECT first_name,SUBSTR(first_name,1,3),CONCAT(first_name,last_name)
FROM employees;
--LPAD ,RPAD (좌,우측 지정문자열로 채우기)
-- 주민등록번호 뒷자리 가리거나 할 때
SELECT LPAD('abc',10,'*') FROM dual;
--(기준,총문자열길이,채울문자)
--문자열 abc를 포함한 길이가 10이며 남은 공간은 *으로 채워짐
SELECT RPAD('abc',10,'*') FROM dual;'수업_정리' 카테고리의 다른 글
| 2022_04_27_DB_5일 (0) | 2022.04.27 |
|---|---|
| 2022_04_26_DB_4일 (0) | 2022.04.26 |
| 2022_04_25_DB_3일 (0) | 2022.04.25 |
| 2022_04_22_DB_2일 (0) | 2022.04.23 |
| oracle database express edition 11g & oracle sql developer 21.4.3 설치 / sample data (0) | 2022.04.21 |