# 서브쿼리
**서브쿼리를 사용할 때 규칙
# 다중행 연산자
다중 행 연산자 | 설명 | 예 |
IN | 같은 값 | IN (10, 20) → 10이나 20이 포함 |
NOT IN | 같은 값이 아님 | NOT IN (10, 20) → 10이나 20이 포함되지 않음 |
EXISTS | 값이 있으면 반환 | EXISTS (10) → 10이 존재하면 참 |
ANY | 최소한 하나라도 만족하는 것(OR) <, = 등 비교 연산자와 같이 사용 |
ANY (10, 20) → 10이나 20이 포함 |
ALL | 모두 만족하는 것(AND) <, = 등 비교 연산자와 같이 사용 |
ALL (10, 20) → 10과 20이 포함 |
SHOW USER;
SELECT *
FROM BUY;
SELECT *
FROM MEMBERS;
SELECT M.MEM_ID, M.MEM_NAME, B.PROD_NAME, B.AMOUNT
FROM MEMBERS M
JOIN BUY B ON M.MEM_ID = B.MEM_ID
WHERE M.MEM_ID = 'MMU'
ORDER BY M.MEM_NAME;
-- 서브쿼리 : SELECT문 안에 있는 SELECT문
-- 기본 쿼리문
SELECT *
FROM EMPLOYEES E
WHERE E.SALARY = 17000;
-- 서브쿼리문으로 작성한 구문
-- 위의 쿼리문과 같은 결과
SELECT *
FROM EMPLOYEES E
WHERE E.SALARY =
(
SELECT SALARY
FROM EMPLOYEES
WHERE LAST_NAME = 'De Haan'
);
-- 다중행 결과가 존재할 때 단일행 연산자를 사용해 요류 발생
-- 단일 행 서브쿼리가 하나 이상의 행을 전달했습니다.
-- 다중행 서브쿼리를 사용해줘야 오류가 없음
SELECT *
FROM EMPLOYEES E
WHERE E.SALARY =
(
SELECT SALARY
FROM EMPLOYEES
WHERE LAST_NAME = 'Taylor'
);
-- 다중행 서브쿼리
SELECT *
FROM EMPLOYEES E
WHERE E.SALARY IN
(
SELECT MIN(SALARY) AS 최저급여
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
)
ORDER BY E.SALARY DESC;
SELECT *
FROM EMPLOYEES E
WHERE (E.JOB_ID, E.SALARY)
IN
(
SELECT JOB_ID, MIN(SALARY) AS 그룹별급여
FROM EMPLOYEES
GROUP BY JOB_ID
)
ORDER BY E.SALARY DESC;
-- 단일행 조건 연습문제
SELECT
MAX(HEIGHT)
FROM MEMBERS;
SELECT MEM_NAME, HEIGHT
FROM MEMBERS
WHERE HEIGHT =
(
SELECT MAX(HEIGHT)
FROM MEMBERS);
# DML 데이터 조작 명령어
- DML은 트랜잭션을 다루는 명령어 (*데이터를 조작하여 저장하는 일련의 과정을 트랜잭션이라고 함)
INSERT | 새로운 데이터를 데이터베이스에 삽입하는 명령어 |
UPDATE | 데이터베이스의 기존 데이터를 수정하는 명령어 |
DELETE | 데이터베이스에서 데이터를 삭제하는 명령어 |
-- DML 데이터 조작명령어
-- INSERT : 행 삽입하기(데이터 삽입)
SELECT *
FROM DEPARTMENTS;
INSERT INTO
DEPARTMENTS
(DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID)
VALUES
(271, 'HONG-GILDONG', 200, 1700);
-- 저장된 데이터를 지워줌(되돌려줌)
ROLLBACK;
-- 데이터를 저장, 롤백을 해도 안지워짐
COMMIT;
-- 열 이름을 생략해도 데이터 저장가능
INSERT INTO
DEPARTMENTS
VALUES
(272, 'GO-GILDONG', 200, 1700);
-- 데이터값에 NULL 값을 허용하면 NULL 값 들어감
INSERT INTO
DEPARTMENTS
(DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID)
VALUES
(273, 'DULLY', '', 1700);
-- UPDATE : 행 갱신하기(데이터 수정)
SELECT *
FROM DEPARTMENTS;
-- WHERE절의 조건을 가진 데이터를 SET의 데이터로 바꿔줌
UPDATE DEPARTMENTS
SET MANAGER_ID = 201,
LOCATION_ID = 1800
WHERE DEPARTMENT_NAME = 'HONG-GILDONG';
UPDATE DEPARTMENTS
SET DEPARTMENT_NAME = 'SON.HM'
WHERE MANAGER_ID = 200;
-- DELETE : 행 삭제하기(데이터 제거)
SELECT *
FROM DEPARTMENTS;
DELETE FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'DULLY';
DELETE FROM DEPARTMENTS
WHERE DEPARTMENT_ID = 272;
# DDL 테이블, 열 조작 명령어
- 테이블과 관련 열을 생성, 변경, 삭제하는 명령어
- 따로 커밋(COMMIT)하지 않아도 DB에 바로 반영되어 기록
- 제약 조건에 의해 적용이 어려울수 있음
CREATE TABLE 테이블 이름
(열 이름1 데이터타입,
열 이름2 데이터타입(자릿수),
열 이름3 데이터타입);
**테이블과 열의 이름 생성 규칙
-- CREATE : 테이블 생성하기
DROP TABLE SAMPLE_PRODUCT;
CREATE TABLE SAMPLE_PRODUCT
(PRODUCT_ID NUMBER PRIMARY KEY,
PRODUCT_NAME VARCHAR2(30),
MANU_DATE DATE);
INSERT INTO SAMPLE_PRODUCT
VALUES (1, 'TELEVISION', TO_DATE('140101','YYMMDD'));
INSERT INTO SAMPLE_PRODUCT
VALUES (2, 'WASHER', TO_DATE('150101','YYMMDD'));
INSERT INTO SAMPLE_PRODUCT
VALUES (3, 'CLEANER', TO_DATE('160101','YYMMDD'));
COMMIT;
SELECT *
FROM SAMPLE_PRODUCT;
-- 열 추가
ALTER TABLE 테이블 이름
ADD ( 열 이름 1 데이터 타입,
열 이름 2 데이터 타입,
…
);
-- 열 수정
ALTER TABLE 테이블 이름
MODIFY ( 열 이름 1 데이터 타입,
열 이름 2 데이터 타입,
…
);
-- 열 이름 바꾸기
ALTER TABLE 테이블 이름
RENAME COLUMN 열 이름 1 to 바꾸려는 열 이름 1;
-- 열 삭제하기
ALTER TABLE 테이블 이름
DROP COLUMN 열 이름;
-- ALTER : 테이블 수정하기
-- 열 추가
ALTER TABLE SAMPLE_PRODUCT
ADD (FACTORY VARCHAR(10));
-- 열 수정
ALTER TABLE SAMPLE_PRODUCT
MODIFY (FACTORY CHAR(10));
-- 열 이름 바꾸기
ALTER TABLE SAMPLE_PRODUCT
RENAME COLUMN FACTORY TO FACTORY_NAME;
-- 열 삭제하기
ALTER TABLE SAMPLE_PRODUCT
DROP COLUMN FACTORY_NAME;
TRUNCATE TABLE 테이블 이름;
- 내용만 지워지고 테이블의 구조는 그대로 남아있음
-- 테이블의 내용 삭제
TRUNCATE TABLE SAMPLE_PRODUCT;
DROP TABLE 테이블 이름;
- 테이블을 완전히 삭제함
-- 테이블 완전 삭제
DROP TABLE SAMPLE_PRODUCT;
6월 28일_SQL(VIEW, JAVA에서 SQL불러오기) (0) | 2024.06.28 |
---|---|
6월 27일_SQL(데이터의 무결성, 제약조건) (0) | 2024.06.27 |
6월 25일_SQL( 단일함수, 그룹함수, JOIN) (0) | 2024.06.25 |
6월 24일_SQL(WHERE조건절, 연산자, 문자, 숫자, 날짜 함수) (0) | 2024.06.24 |
6월 21일_SQL(기초, 오라클 사용, SELECT 구문) (0) | 2024.06.21 |