본문 바로가기
BackEnd/Backend 공부 정리

sqldeveloper-12

by Brilliant_Graphite 2024. 8. 22.

오라클 데이터베이스 sql developer

SELECT ALL department_id

FROM employees

ORDER BY 1 ASC;

 

ALL : default value

 

SELECT DISTINCT department_id

FROM employees

ORDER BY 1 DESC;

 

**DISTINCT

 

의사컬럼(Pseudo-Column) : 실제로 존재하지 않는 컬럼, 오라클엔진 제공

ROWID : 결과행이 저장된 메모리 주소

 

CONCAT (str1, str2) : 두 문자열을 연결한 결과를 반환

-- || : 연결 연산자 (간단)

 

바인드 변수 (:=) : 쿼리 실행할 때 임의의 값을 대입해서 처리

--PL/SQL 대입연산자(:=) - 변수나 상수에 값을 대입하는 연산자

 

CREATE TABLE emp_test AS

SELECT employee_id AS emp_id,

                last_name AS l_name

FROM hr.employees

WHERE employee_id BETWEEN 100 AND 150;

 

테이블 삭제

DROP TABLE emp_test;

 

-- 연속적인 일련번호 생성을 해주는 '시퀀스(Sequence)'라는 오라클 데이터베이스 객체에 대해서

 

-- 1) 그래픽 모드로 생성

-- 접속 > 계정(=스키마) > HANUL > 시퀀스 > 마우스 우클릭

-- 2) SQL 모드로 생성

-- CREATE SEQUENCE 시퀀스명

INCREMENT BY 1

START WITH 시작하는 숫자

MAXVALUE  끝나는 숫자

MINVAULE 최소값

NOCACHE;

 

INSERT INTO emp_test 

VALUES (emp_id_sequence.NEXTVAL, 'Seon', 'IT_TUT', 80);

 

 

-- 

 

--CTAS : 씨타스, 1) 테이블 구조 2)테이블 구조 + 데이터를 복사하듯 생성하는 DDL

헤이디 sql

SELECT memid, memname FROM members
ORDER BY memname LIMIT 3 OFFSET 1;

 

AUTO_INCREMENT

값이 자동으로 증가하도록 정의할 수 있다.

반드시 INT 타입이어야 한다

 

UPDATE order_h

SET cancelyn = Y, cancledtm = CURRENT_TIMESTAMP

WHERE orderno = 202201005;

 

 

FROM order_h, members;

-- p.236 내부조인(INNER JOIN)
-- ※ 오라클은 EQUI JOIN(동등 조인, 동등연산자 = 를 사용한 조인)
-- 두 테이블의 공통 컬럼을 기준으로, 조인 연산한 결과를 반환하는 형식
-- 1) MariaDB JOIN
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h, members
WHERE order_h.memid = members.memid;


-- 2) ANSI JOIN
-- ON절 <===> WHERE 조건절
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h INNER JOIN members
ON order_h.memid = members.memid;

-- 3) ANSI JOIN 
-- USING 절 ==> 공통 컬럼은 참조하는 테이블의 별칭(Alias)를 생략
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, memid,order_h.ordamt,
memid, members.memname, members.addr
FROM order_h INNER JOIN members
USING (memid);

-- ※p.237 INNER 조인을 사용하면, 조건을 만족하지 않은 데이터는 누락될수 있어서
-- 반드시 결과에 대한 검증이 필요함
-- order_h의 주문자(memid)중 abcd 라는 member가 없어서, 9개 주문기록중 8건이 조회됨


-- p.240 외부조인(OUTER JOIN) : [LEFT | RIGHT]
-- order_h : 9rows   ,   members : 6rows
-- abcd 라는 memid의 주문
SELECT a.orderno, a.memid,
b.memname
FROM order_h a LEFT OUTER JOIN members b
ON a.memid = b.memid
ORDER BY a.orderno;

-- OUTER JOIN 결과 컬럼의 값이 NULL이라면, 실제 NULL인지 또는 조인 조건이
-- 잘못되어 NULL인지 분명하게 판단해야 한다.

-- INNER JOIN vs OUTER JOIN 을 언제 사용할까?
-- 개체 관계도(ERD)에서 개체간의 관계가 1개 또는 여러개라면, 두 조인의 결과는 같다.
-- 하지만, 0개 또는 1개 또는 여러개의 관계에서는 데이터에 따라서 그 결과가 다를수 있다.
-- ========================================================================================
-- ※데이터베이스 관련 개발자는 항상 ERD를 참조하여 올바른 결과를 만들어 낼 수 있어야 한다.
-- ========================================================================================


-- p.243 다음과 같은 상황의 데이터를 검색해보자
-- 주문금액이 3000보다 크고, 주문자의 직업코드가 1또는 1인 회원이 주문한 주문내용으로
-- 주문번호, 주문자ID, 주문자이름, 주문총액, 직업코드를 조회한다.
-- 결과 데이터는 주문번호의 오름차순으로 정렬해서 표시한다.
SELECT a.orderno AS 주문번호, a.memid AS 주문자ID, b.memname AS 주문자이름,
a.ordamt AS 주문총액, b.jobcd AS 직업코드
FROM order_h a LEFT OUTER JOIN members b
ON a.memid = b.memid
AND b.jobcd IN ('1', '2')
ORDER BY a.orderno;


SELECT a.orderno AS 주문번호, a.memid AS 주문자ID, b.memname AS 주문자이름,
a.ordamt AS 주문총액, b.jobcd AS 직업코드
FROM order_h a INNER JOIN members b
ON a.memid = b.memid
AND b.jobcd IN ('1', '2')
ORDER BY a.orderno;

-- p.233

-- 1) 상호조인 (CROSS JOIN)
-- 조인하는 테이블의 Row 수 만큼 곱한 결과를 반환
-- members: 6 rows    x    9 rows : order_h   ==> 54 rows
-- ※CROSS JOIN은 일반적으로 사용하지 않는다 ==> 조인 조건을 생략하지 않도록 주의!
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h, members;

-- p.236 내부조인(INNER JOIN)
-- ※ 오라클은 EQUI JOIN(동등 조인, 동등연산자 = 를 사용한 조인)
-- 두 테이블의 공통 컬럼을 기준으로, 조인 연산한 결과를 반환하는 형식
-- 1) MariaDB JOIN
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h, members
WHERE order_h.memid = members.memid;


-- 2) ANSI JOIN
-- ON절 <===> WHERE 조건절
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h INNER JOIN members
ON order_h.memid = members.memid;

-- 3) ANSI JOIN 
-- USING 절 ==> 공통 컬럼은 참조하는 테이블의 별칭(Alias)를 생략
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, memid,order_h.ordamt,
memid, members.memname, members.addr
FROM order_h INNER JOIN members
USING (memid);

-- ※p.237 INNER 조인을 사용하면, 조건을 만족하지 않은 데이터는 누락될수 있어서
-- 반드시 결과에 대한 검증이 필요함
-- order_h의 주문자(memid)중 abcd 라는 member가 없어서, 9개 주문기록중 8건이 조회됨


-- p.240 외부조인(OUTER JOIN) : [LEFT | RIGHT]
-- order_h : 9rows   ,   members : 6rows
-- abcd 라는 memid의 주문
SELECT a.orderno, a.memid,
b.memname
FROM order_h a LEFT OUTER JOIN members b
ON a.memid = b.memid
ORDER BY a.orderno;

-- OUTER JOIN 결과 컬럼의 값이 NULL이라면, 실제 NULL인지 또는 조인 조건이
-- 잘못되어 NULL인지 분명하게 판단해야 한다.

-- INNER JOIN vs OUTER JOIN 을 언제 사용할까?
-- 개체 관계도(ERD)에서 개체간의 관계가 1개 또는 여러개라면, 두 조인의 결과는 같다.
-- 하지만, 0개 또는 1개 또는 여러개의 관계에서는 데이터에 따라서 그 결과가 다를수 있다.
-- ========================================================================================
-- ※데이터베이스 관련 개발자는 항상 ERD를 참조하여 올바른 결과를 만들어 낼 수 있어야 한다.
-- ========================================================================================


-- p.243 다음과 같은 상황의 데이터를 검색해보자
-- 주문금액이 3000보다 크고, 주문자의 직업코드가 1또는 1인 회원이 주문한 주문내용으로
-- 주문번호, 주문자ID, 주문자이름, 주문총액, 직업코드를 조회한다.
-- 결과 데이터는 주문번호의 오름차순으로 정렬해서 표시한다.
SELECT a.orderno AS 주문번호, a.memid AS 주문자ID, b.memname AS 주문자이름,
a.ordamt AS 주문총액, b.jobcd AS 직업코드
FROM order_h a LEFT OUTER JOIN members b
ON a.memid = b.memid
AND b.jobcd IN ('1', '2')
ORDER BY a.orderno;


SELECT a.orderno AS 주문번호, a.memid AS 주문자ID, b.memname AS 주문자이름,
a.ordamt AS 주문총액, b.jobcd AS 직업코드
FROM order_h a INNER JOIN members b
ON a.memid = b.memid
AND b.jobcd IN ('1', '2')
ORDER BY a.orderno;


-- p.249 셀프조인(SELF JOIN)
-- 하나의 테이블을 서로 다른 테이블인것처럼 조인연산 하는 형식
-- ※ INNER JOIN 또는 OUTER JOIN 절의 좌우에 같은 테이블 이름을 기술하여 자기 자신을
-- JOIN 하는 것

-- 1) members 테이블에 recommender 컬럼, 가변문자 10바이트 추가
ALTER TABLE members
ADD COLUMN recommender VARCHAR(10) AFTER stat;
/* 영향 받은 행: 0  찾은 행: 0  경고: 0  지속 시간 1 쿼리: 0.734 초 */

-- 2) members 테이블의 데이터중 memid가 'seo'인 행에서, recommender를 'kim1'으로 수정
-- ※UPDATE, DELETE 구문은 데이터를 영구적으로 변경 ==> 복구할 수 없다 (미리 백업하는걸 추천..)
UPDATE members
SET recommender = 'kim1'
WHERE memid = 'seo';
/* 영향 받은 행: 1  찾은 행: 0  경고: 0  지속 시간 1 쿼리: 0.469 초 */

-- 3) SELF JOIN으로, members 테이블에서 recommend 컬럼의 값을 이용해 같은 테이블인
-- members의 추천인 이름을 조회하시오

SELECT a.memid AS 추천인ID, a.memname AS 추천인,
b.memname AS 추천자
FROM members a INNER JOIN members b
ON a.recommender = b.memid
-- USING (공통컬럼) : 테이블 별칭(Alias)를 생략
ORDER BY 1;

SELECT a.memid AS 추천인ID, a.memname AS 추천인,
b.memname AS 추천자
FROM members a LEFT OUTER JOIN members b
ON a.recommender = b.memid
-- USING (공통컬럼) : 테이블 별칭(Alias)를 생략
ORDER BY 1;

 

 

-- p.233

-- 1) 상호조인 (CROSS JOIN)
-- 조인하는 테이블의 Row 수 만큼 곱한 결과를 반환
-- members: 6 rows    x    9 rows : order_h   ==> 54 rows
-- ※CROSS JOIN은 일반적으로 사용하지 않는다 ==> 조인 조건을 생략하지 않도록 주의!
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h, members;

-- p.236 내부조인(INNER JOIN)
-- ※ 오라클은 EQUI JOIN(동등 조인, 동등연산자 = 를 사용한 조인)
-- 두 테이블의 공통 컬럼을 기준으로, 조인 연산한 결과를 반환하는 형식
-- 1) MariaDB JOIN
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h, members
WHERE order_h.memid = members.memid;


-- 2) ANSI JOIN
-- ON절 <===> WHERE 조건절
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, order_h.memid,order_h.ordamt,
members.memid, members.memname, members.addr
FROM order_h INNER JOIN members
ON order_h.memid = members.memid;

-- 3) ANSI JOIN 
-- USING 절 ==> 공통 컬럼은 참조하는 테이블의 별칭(Alias)를 생략
SELECT ROWNUM() AS 'NO',
order_h.orderno, order_h.orddt, memid,order_h.ordamt,
memid, members.memname, members.addr
FROM order_h INNER JOIN members
USING (memid);

-- ※p.237 INNER 조인을 사용하면, 조건을 만족하지 않은 데이터는 누락될수 있어서
-- 반드시 결과에 대한 검증이 필요함
-- order_h의 주문자(memid)중 abcd 라는 member가 없어서, 9개 주문기록중 8건이 조회됨


-- p.240 외부조인(OUTER JOIN) : [LEFT | RIGHT]
-- order_h : 9rows   ,   members : 6rows
-- abcd 라는 memid의 주문
SELECT a.orderno, a.memid,
b.memname
FROM order_h a LEFT OUTER JOIN members b
ON a.memid = b.memid
ORDER BY a.orderno;

-- OUTER JOIN 결과 컬럼의 값이 NULL이라면, 실제 NULL인지 또는 조인 조건이
-- 잘못되어 NULL인지 분명하게 판단해야 한다.

-- INNER JOIN vs OUTER JOIN 을 언제 사용할까?
-- 개체 관계도(ERD)에서 개체간의 관계가 1개 또는 여러개라면, 두 조인의 결과는 같다.
-- 하지만, 0개 또는 1개 또는 여러개의 관계에서는 데이터에 따라서 그 결과가 다를수 있다.
-- ========================================================================================
-- ※데이터베이스 관련 개발자는 항상 ERD를 참조하여 올바른 결과를 만들어 낼 수 있어야 한다.
-- ========================================================================================


-- p.243 다음과 같은 상황의 데이터를 검색해보자
-- 주문금액이 3000보다 크고, 주문자의 직업코드가 1또는 1인 회원이 주문한 주문내용으로
-- 주문번호, 주문자ID, 주문자이름, 주문총액, 직업코드를 조회한다.
-- 결과 데이터는 주문번호의 오름차순으로 정렬해서 표시한다.
SELECT a.orderno AS 주문번호, a.memid AS 주문자ID, b.memname AS 주문자이름,
a.ordamt AS 주문총액, b.jobcd AS 직업코드
FROM order_h a LEFT OUTER JOIN members b
ON a.memid = b.memid
AND b.jobcd IN ('1', '2')
ORDER BY a.orderno;


SELECT a.orderno AS 주문번호, a.memid AS 주문자ID, b.memname AS 주문자이름,
a.ordamt AS 주문총액, b.jobcd AS 직업코드
FROM order_h a INNER JOIN members b
ON a.memid = b.memid
AND b.jobcd IN ('1', '2')
ORDER BY a.orderno;


-- p.249 셀프조인(SELF JOIN)
-- 하나의 테이블을 서로 다른 테이블인것처럼 조인연산 하는 형식
-- ※ INNER JOIN 또는 OUTER JOIN 절의 좌우에 같은 테이블 이름을 기술하여 자기 자신을
-- JOIN 하는 것

-- 1) members 테이블에 recommender 컬럼, 가변문자 10바이트 추가
ALTER TABLE members
ADD COLUMN recommender VARCHAR(10) AFTER stat;
/* 영향 받은 행: 0  찾은 행: 0  경고: 0  지속 시간 1 쿼리: 0.734 초 */

-- 2) members 테이블의 데이터중 memid가 'seo'인 행에서, recommender를 'kim1'으로 수정
-- ※UPDATE, DELETE 구문은 데이터를 영구적으로 변경 ==> 복구할 수 없다 (미리 백업하는걸 추천..)
UPDATE members
SET recommender = 'kim1'
WHERE memid = 'seo';
/* 영향 받은 행: 1  찾은 행: 0  경고: 0  지속 시간 1 쿼리: 0.469 초 */

-- 3) SELF JOIN으로, members 테이블에서 recommend 컬럼의 값을 이용해 같은 테이블인
-- members의 추천인 이름을 조회하시오

SELECT a.memid AS 추천인ID, a.memname AS 추천인,
b.memname AS 추천자
FROM members a INNER JOIN members b
ON a.recommender = b.memid
-- USING (공통컬럼) : 테이블 별칭(Alias)를 생략
ORDER BY 1;

SELECT a.memid AS 추천인ID, a.memname AS 추천인,
b.memname AS 추천자
FROM members a LEFT OUTER JOIN members b
ON a.recommender = b.memid
-- USING (공통컬럼) : 테이블 별칭(Alias)를 생략
ORDER BY 1;

'BackEnd > Backend 공부 정리' 카테고리의 다른 글

sqldeveloper-13  (0) 2024.08.23
Java-13  (0) 2024.08.23
Java-12  (0) 2024.08.22
sqldeveloper-11  (0) 2024.08.21
Java-11  (2) 2024.08.21