🐢 꼬부기 LV.1 | 개념•기초/💧물대포(핵심개념)

SQL 기본문법 정리

서화 2025. 11. 1. 22:44

 

DB에 데이터를 저장할 때 가장 중요한 것은 데이터 중복을 피하는 것이다 데이터를 저장하는 데는 비용(코스트)이 발생하기 때문이다 이미 알고 있는 규칙(예: 점수-등급)이나 유추 가능한 계산 결과(예: 총 구매 금액)는 DB에 저장할 필요가 없다

데이터의 중복을 제거하려는 노력을 정규화(Normalization)라고 부르며, 이는 SQLD 자격증 시험에서도 중요하게 다뤄지는 개념이다

SQL 언어의 특징 및 종류

SQL은 스크립트어의 일종으로, 자바와 달리 한 페이지 전체가 아닌 라인 바이 라인(한 줄씩) 수행된다는 특징이 있다

SQL은 크게 두 가지로 나뉜다

DDL (Data Definition Language): 테이블(데이터를 저장하는 공간)을 정의하고 관리하는 언어

DML (Data Manipulation Language): 테이블 내의 실제 데이터를 조작(CRUD)하는 언어

--SQL 기본문법 정리

--테이블 만들기 = DDL
CREATE TABLE STUDENT(
	--컬럼==변수명=이름 적고 뒤에 자료형 적고 제약조건 적기
	--제약조건이란 반드시 실행되야하는 조건이다
	STUDENT_ID INT PRIMARY KEY,
	-- 시스템에서 부여받을 PK지정해주기
	NAME VARCHAR(30) NOT NULL,
	--VARCHAR=자바의 Strtig (30)은 바이트단위  
	--NOT NULL = 이름 공백 미허용
	SCORE INT DEFAULT 0
	-- 숫자 입력 없을시 기본 0점
);
-- 데이터 다루기 = DML

-- 샘플데이터 3개 추가하기
INSERT INTO STUDENT VALUES(1,'서태웅',90);
INSERT INTO STUDENT VALUES(2,'강백호',100);
INSERT INTO STUDENT VALUES(3,'송태섭',73);

-- 다른방법으로도 추가할수 있음
INSERT INTO STUDENT(STUDENT_ID,NAME) VALUES(4,'정대만');
--학생의 고유번호(PK)와 이름을 지정해서 추가하기
--점수 입력없을시 0이기때문에 오류안남

INSERT INTO STUDENT VALUES((SELECT NVL(MAX(STUDENT_ID),0)FROM STUDENT)+1,'이명헌',90);
INSERT INTO STUDENT(STUDENT_ID,NAME) VALUES((SELECT NVL(MAX(STUDENT_ID),0)FROM STUDENT)+1,'채치수');
--서브쿼리 사용하는 방법
--서브쿼리란 쿼리안에 쓰는 쿼리문이다
--NVL
--MAX(컬럼명)가 NULL일수 있다
--NVL(A,B) = A가 NULL일때 B값으로 대체한다
--NVL(MAX(컬럼명),0) = MAX(컬럼명)이 NULL일때, 0으로 대체한다
--이렇게하는 이유는 시스템이 PK를 지정할수 있게 하기 위해서이다

SELECT * FROM STUDENT;
-- 현재 샘플데이터 전체출력하기
-- 애스터리스크 = *
-- 사용하면 속도가 느리다 
SELECT NAME,SCORE FROM STUDENT;
-- 현재 샘플데이터의 이름과 점수만 출력하기
-- 이런식으로 보고싶은 데이터만 선택하여 출력할수있다

SELECT * FROM STUDENT ORDER BY STUDENT_ID;
--전체출력해서 오름차순으로 정렬하기 정방향
SELECT * FROM STUDENT ORDER BY STUDENT_ID DESC;
--전체출력해서 내림차순으로 정렬하기 역방향

-- 조건으로 출력하기
SELECT * FROM STUDENT WHERE STUDENT_ID=1;
-- 학생한명만 출력하기
SELECT * FROM STUDENT WHERE SCORE>=0;
-- 몇점 이상만 출력하기
SELECT * FROM STUDENT WHERE STUDENT_ID=1 OR SCORE<50;
-- 학생한명이거나 점수가 50점 이상이거나 둘중에하나 조건에 맞으면됨
SELECT * FROM STUDENT WHERE STUDENT_ID=1 AND SCORE>50;
-- 점수가 50점보다 큰 학생한명 출력 학생한명과점수 50점 이상이 모두 포함되야함
SELECT * FROM STUDENT WHERE NAME LIKE '%태%';
-- 태를 포함하는 모든 이름 출력
-- 태% = 태로 시작하는 이름
-- %태 = 태로 끝나는 이름

--그룹(집계)함수 : COUNT(),MAX(),MIN(),AVG()등이 있음
SELECT COUNT(*)FROM STUDENT;
--현재 데이터에 저장된 학생수 출력
--COUNT(*) = 모든데이터
--COUNT(컬럼) = NULL을 제외한 개수
SELECT COUNT(*) AS 학생수 FROM STUDENT;
-- 현재 데이터에 별칭달기
-- 출력할 데이터에 알아보기 쉽게 이름을 달아주는것

--데이터 정보 바꾸기
UPDATE STUDENT SET NAME='정우성' WHERE STUDENT_ID=1;
--1번 학생의 이름변경하기
UPDATE STUDENT SET SCORE=100 WHERE STUDENT_ID=1;
--1번 학생의 점수를 100로 변경하기
UPDATE STUDENT SET NAME='정우성',SCORE=100 WHERE STUDENT_ID=1;
--1번 학생의 이름과 점수를 변경하기

DROP TABLE STUDENT;
--테이블 삭제하기 = 자바에서 배열을 삭제하는것과 같음
--안에있는 모든 데이터를 삭제한다

DELETE FROM STUDENT WHERE STUDENT_ID=1;
--1번학생 삭제하기
--데이터만 삭제된다 테이블은 삭제되지않는다