본문 바로가기

개발자노트/DBMS

[SQL] [오라클] 기본 문법

 

[DDL] - 개별적인 정보들을 저장한 DB

 CREATE(생성), DROP(삭제) , ALTER(구조변경)

 유의사항 : 같은 이름을 가진 테이블은 생성할 수 없다.

테이블 생성과 삭제

-- 주석은 //가 아닌 --로 사용한다.

SELECT * FROM USER_TABEL; -- 지금까지 만든 테이블을 출력

CREATE TABLE STUDENT( -- STUDENT라는 테이블을 생성할 때 필요한 멤버변수 설정
	--멤버변수이름(속성/칼럼) 자료형 제약조건
	NUM INT PRIMARY KEY, -- PK
	NAME VARCHAR(20) NOT NULL, -- String 대신에 VARCHAR(길이)
	AGE INT NOT NULL,
	SCORE INT DEFAULT 0,
	PHONE VARCHAR(20) NOT NULL, UNIQUE -- 제약조건 2개
 );

DROP TABLE STUDENT;   -- STUDENT TABLE 삭제

 

 

★[DML]★

INSERT, SELECT, UPDATE, DELETE

[ INSERT ]

[INSERT]
INSERT INTO 테이블명 (칼럼명,칼럼명,....) VALUES(값,값...)
INSERT INTO STUDENT (NUM,NAME,AGE,SCORE,PHONE) VALUES(1,'아무무',20,80,'010-1234-1234') 
INSERT INTO STUDENT (NUM,NAME,AGE,SCORE,PHONE) VALUES(2,'아리',20,'010-1234-1234') -- SCORE만 NOT NULL이 안붙어서 안써도 됨
INSERT INTO STUDENT VALUES(3,'오리아나',22,45,'010-16677-8899')
INSERT INTO STUDENT VALUES ((SELECT NVL(MAX(NUM),0)+1 FROM STUDENT) , '모르가나' , 22 , 0, '010-9876-5432'; -- PK값 자동증가
INSERT INTO STUDENT VALUES ((SELECT NVL(MAX(NUM),0)+1 FROM STUDENT) , '티모',24,95,'010-1111-111';
--                    쿼리문 안에 쿼리가 들어가서 서브쿼리
-- 초기 샘플 데이터가 없는 경우 새로 생성하게 되면 MAXNUM이 할당되어있지 않기 때문에, NVL을 사용해야함
NVL(A,B) -- 이건 단순 함수 
: A 값이 NULL이면 B값으로 취급하세요.
 -- > NVL(MAX(NUM),0)
 -- > MAX(NUM)값이 NULL이면 0으로 취급해줘

 

[SELECT]

 

[SELECT]
SELECT 칼럼명 FROM 테이블명
SELECT NUM,NAME,AGE,SCORE,PHONE FROM STUDENT;
SELECT NUM, NAME FROM STUDENT; -- 넘버랑 네임만 보여줘 ( 특정 칼럼만 선택해서 볼 수 있음)
SELECT * FROM STUDENT; -- 다 보여줘!!

 

 

[조건절 WHERE]

AS 별칭 기억하기~!

[WHERE]
SELECT * FROM STUDENT WHERE NUM>=3;
-- 출력되는 결과 칼럼에게 별칭AS "등   급"  -- 띄어쓰기를 쓸거면 " " 로 묶으면 된다.
SELECT * NUM,NAME,SCORE*100 AS GRADE FROM STUDENT;
SELECT * NUM,NAME,SCORE*100 AS 등급 FROM STUDENT;
SELECT * NUM,NAME,SCORE*100 AS "grade" FROM STUDENT; -- 소문자를 쓰고 싶으면 " " 사용

 

 

[정렬 ORDER BY]

SELECT * FROM STUDENT ORDER BY NUM DESC;  -- 내림차순 정렬
SELECT * FROM STUDENT ORDER BY AGE DESC,NUM ASC; -- 나이는 내림차순 그중에서 넘버는 오름차순으로

 

 

[연결 연산자 || ]

=> 실행 화면에 SCORE 대신 성적으로 나오고, 뒤에 +점이 붙어서 나온다.

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

 

[중복 데이터 제거 DISTINCT]

SELECT DISTINCT AGE FROM STUDENT;

 

[검색에 많이 활용되는 LIKE]

SELECT NAME FROM STUDENT WHERE NAME LIKE '아%';   -- '아'로 시작하는 이름
SELECT NAME FROM STUDENT WHERE NAME LIKE '%아%'; -- '아'가 들어가는 이름
SELECT NAME FROM STUDENT WHERE NAME LIKE '%나';   -- '나'로 끝나는 이름

 

[문자열 관련 함수들]

INSERT INTO STUDENT VALUES (6,'apPLE',5,12,'010-5050-9898')
SELECT * FROM STUDENT WHERE  UPPER(NAME)='APPLE'; -- 일시적으로 UPPER(NAME)로 NAME에 있는 값을 대문자로 바꿔줌

 

[IF문을 SQL로 구현 / WHEN , THEN, END]

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

 

 

 

[COUNT( )]

-- ★다중행 함수★ = 지금처럼 6개를 카운팅을 해서 결과를 한줄로 출력해버리는 함수
SELECT COUNT(*) FROM STUDENT;

 

[UPDATE]

UPDATE 테이블명 SET 컬럼명=값, 컬럼명=값,... WHERE 컬럼명=타겟컬럼값;
UPDATE STUDENT SET SCORE=60 WHERE NAME='아리';
DELETE FROM STUDENT WHERE NUM=6;

 

 

[DCL]

== 컨트롤 랭귀지 => 자바에선 많이 사용 x

     -- 계정 생성,삭제
     -- 권한에 관련된 명령

 

 

 

 

+추가로 알고 있으면 좋은 것들

[SUBSTR, LENGTH, INSTR, REPLACE(중요. 이름을 김*곤 이런식으로),...]

은 나중에 추가로 다뤄보겠다.