Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

학습기록남기기

2022_04_21_ DB_1일 본문

수업_정리

2022_04_21_ DB_1일

backend_na 2022. 4. 22. 14:03

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