주니 개발 도서관

오라클(Oracle)

(1) SQL 기초

주니홍 2022. 7. 4. 02:24

DDL

 

전체 테이블 조회

SELECT * FROM ALL_TABLES; (관리자일 경우)

SELECT * FROM USER_TABLES; (관리자 아닐 경우)

SELECT * FROM TAB; (관리자 아닐 경우)

*  의 뜻은  "전체" 라는 뜻으로 보면 된다 ! 

 

 

 

테이블 생성 (자바의 클래스 역할)

CREATE  TABLE  테이블명

 

 

 

칼럼 생성 (자바의 멤버변수 역할)

CREATE TABLE STUDENT(
NUM INT PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,  
AGE INT NOT NULL,
SCORE INT DEFAULT 0,
PHONE VARCHAR(20) NOT NULL UNIQUE
);

INT

ㅡ> SQL에서 정수 데이터 형식

 

VARCHAR(20)

ㅡ> SQL에서 문자열 데이터 형식이며

( ) 안에 정수값만큼의 byte값을 넣을 수 있음

영문자 기준으로 1개당 1byte 이다

 

PRIMARY KEY

ㅡ> 데이터베이스 테이블의 설계 (데이터베이스)를 고유하게 식별하는 키

모든 테이블에는 PK가 있어야하며 이론상 오직 하나의 PK만 존재할 수 있습니다

 

NOT NULL

ㅡ> 해당 칼럼은 데이터값을 무조건 넣어야 한다!

 

DEFAULT  0

ㅡ> 칼럼에 값을 넣지 않는다면 0을 대입하겠다는 뜻

 

UNIQUE

ㅡ> 중복값 불가능

 

 

 

테이블 삭제

DROP TABLE 테이블명

 

 


 

DML

 

INSERT INTO (생성)

기존의 테이블에 데이터를 집어 넣는다

INSERT INTO STUDENT(NUM,NAME,AGE,SCORE,PHONE) VALUES(1,'아무무',20,80,'010-1234-1234');

INSERT INTO STUDENT(NUM,NAME,AGE,PHONE) VALUES(2,'아리',20,'010-1234-1235');

INSERT INTO STUDENT VALUES(3,'오리아나',22,45,'010-6611-1234');

 

NUM PAIMARY KEY

꼭 적어주어야하고 PK 역할을 함

 

NAME NOT NULL

값을 꼭 넣어 주어야 함

 

AGE NOT NULL

값을 꼭 넣어 주어야 함

 

SCORE DEFAUL 0

값을 입력하지 않는다면 0으로 대입

 

 PHONE NOT NULL UNIQUE

값을 꼭 넣어 주어야하고, 중복되선 안됨

 

VALUES

모든 칼럼을 자동으로 쓰겠다

모든 칼럼에 값을 넣겠다로 생각하면 되겠다

 

 

PK값 자동으로 ++ 해주는 로직만들기

INSERT INTO STUDENT VALUES((SELECT MAX(NUM)+1 FROM STUDENT),'모르가나',22,0,'010-1233-1231');

INSERT INTO STUDENT VALUES((SELECT NVL(MAX(NUM),0)+1 FROM STUDENT),'모르가나',22,0,'010-1233-1231');

INSERT INTO STUDENT VALUES((SELECT NVL(MAX(NUM),0)+1 FROM STUDENT),'티모',24,95,'010-1234-1331');

 

SELECT MAX (column_name) FROM TABLE_NAME

FROM 테이블에 선택된 칼럼의 가장 큰 값을 가져옵니다

 

SELECT MAX ( NUM ) +1 FROM STUDENT

STUDENT의 칼럼 (NUM) 의 가장 큰값을 가져온뒤 +1 하겠습니다

ㅡ> PK (NUM) 를 차례로 +1씩 증가하는 역할

 

NVL( A , B )

A의 값이 NULL 이라면 B값으로 취급해 주세요

 

SELECT NVL( MAX(NUM) , 0 ) +1 FROM STUDENT

칼럼에 저장되있는 값이 없다면 +1 씩 증가하는 메소드에 오류가 있기에

NULL 이라면 0으로 대입하게 하여 1 부터 시작할 수 있도록 만듬

 

 

 

 

 

SELECT (출력)

SELECT NUM,NAME FROM STUDENT;
-- 특정 칼럼을 출력

SELECT NUM,NAME,AGE,SCORE,PHONE FROM STUDENT;
-- 모든 칼럼을 출력

SELECT * FROM STUDENT;
-- 모든 칼럼을 출력 => 위와 같은뜻

 

조건절 WHERE

SELECT * FROM STUDENT WHERE NUM>=3;
-- NUM이 3보다 큰것만 출력

SELECT NAME FROM STUDENT WHERE NAME = '아리'; 
-- NAME이 '아리'만 출력

 

칼럼명 AS 바꿀이름

SELECT NUM AS 이름 ,NAME,SCORE*100 AS GRADE FROM STUDENT;
SELECT NUM,NAME AS "이  름",SCORE*100 AS "grade" FROM STUDENT;

AS 에서는 " " 를 이용하면 띄어쓰기와 소문자를 이용할 수 있다

 

 

 

 

SELECT * FROM [테이블명] ORDER BY [칼럼]     (정렬)

SELECT * FROM STUDENT ORDER BY NUM DESC;
-- 칼럼명 DESC(내림차순)

SELECT * FROM STUDENT ORDER BY NUM ASC;
-- 칼럼명 ASC(올림차순)

 

 

연결 연산자  ||  (값 옆에 출력됨)

SELECT NAME,SCORE ||'점' AS 성적 FROM STUDENT;

|| 를 이용해 SCORE 값 옆에 '점' 이 출력됨

|| 를 이용하면 칼럼명이 이상하게 출력되므로

AS를 이용해서 정리해주도록 하자

 

 

 

DISTINCT 칼럼명

SELECT DISTINCT AGE FROM STUDENT;
-- SELECT DISTINCT 칼럼명 / 해당 칼럼만 보여줘

 

 

WHERE [칼럼명] LIKE

검색에 많이 활용됨

SELECT NAME FROM STUDENT WHERE NAME LIKE '아%';
-- 앞글자가 "아" 인 이름출력

SELECT NAME FROM STUDENT WHERE NAME LIKE '%아%';
-- "아"를 가진 이름 출력

SELECT NAME FROM STUDENT WHERE NAME LIKE '%나';
-- 마지막글자가 "나" 인 이름 출력

 

 

문자열관련 관련 함수들

 

UPPER & LOWER

INSERT INTO STUDENT VALUES(6,'apPLE',5,12,'010-1234-1100');
--   apPLE 생성

SELECT * FROM STUDENT WHERE UPPER(NAME) = 'APPLE';
--   모두 UPPER 대문자로 바꿔서
--   = APPLE 인것만 출력

apPLE 이 대문자로 바뀌면

= APPLE 로 찾을 수 있기때문에 출력이 된다

SELECT UPPER(NAME) FROM STUDENT;
-- 대문자로 STUDENT 모두 출력

SELECT LOWER(NAME) FROM STUDENT;
-- 소문자로 STUDENT 모두 출력

NAME 을 LOWER로 표현하면서 점수, 폰번호를 추가적으로 출력하고싶다면
뒤에 , SCORE, PHONE 을 적어주면된다!
하나이상 적혀있다면 *을 사용할 수 없는거 같다

 

 

 

 

IF문을 SQL로 구현

SELECT NAME,CASE WHEN SCORE >= 80 THEN 'A'
WHEN SCORE >=50 THEN 'B
ELSE 'C'
END AS 학점 FROM STUDENT;

CASE WHEN 조건1 해당시 THEN 출력1

 

WHEN 조건2 해당시 THEN 출력2

 

ELSE 출력3

 

END FROM 테이블명

 

 

 

 

 

다중행 함수

그룹함수, 통계함수, 집계함수 라고도 불리며

여러개의 값을 처리하여 하나의 값을 반환합니다

** null 값은 통계에서 제외합니다

 

 

COUNT ( ) 

SELECT COUNT(*) FROM STUDENT;

COUNT ( 칼럼명 )

해당 칼럼의 갯수를 숫자로 출력해준다** NULL 값은 포함하지 않는다

 

COUNT ( * )  = COUNT ( 1 )전체 행의 갯수를 숫자로 출력해준다** NULL 값을 포함한다

 

** 댓글수, 등록한 상품수 등등으로 이용할 수 있을것 같다

 

 

 

UPDATE ( 갱신 )

UPDATE STUDENT SET AGE=520 WHERE NAME='아리';
-- UPDATE 테이블명 SET 컬럼명=값,컬럼명=값,... WHERE 컬럼명 = 타겟컬럼값;

 

 

DELETE (삭제)

DELETE FROM STUDENT WHERE NUM=6;
-- DELETE FROM 테이블명 WHERE 타겟칼럼