251023 [ Day 72 ] - SQL (2)

TaeHyun·2025년 10월 23일

TIL

목록 보기
85/182

시작하며

어제 기본적인 SQL 언어와 흐름을 배우고 복습하며 조금씩 익숙해지니까 오늘은 확실히 할 만했던 것 같다.

ALTER 문

  • 생성된 테이블의 속성과 속성에 대한 제약및 기본키 , 외래키를 변경

FOREIGH KEY 문

  • CREATE TABLE 시 외래 키 설정
CREATE TABLE orders (
		order_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    cust_id CHAR(10) NOT NULL,
    prod_name CHAR(6) NOT NULL,
    price INT NOT NULL,
    amount SMALLINT NOT NULL,
    FOREIGN KEY (cust_id) REFERENCES customer (cust_id)
		ON DELETE CASCADE
    ON UPDATE CASCADE
);
  • ALTER TABLE 시 외래 키 추가
    • 이미 만들어진 테이블에 나중에 외래 키를 추가하는 방식
ALTER TABLE students
ADD CONSTRAINT fk_students_advisor_id
FOREIGN KEY (advisor_id) REFERENCES professors (professor_id)
ON DELETE SET NULL
ON UPDATE SET NULL;
  • 제약 조건 확인
SELECT CONSTRAINT_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_NAME = "orders";
  • 외래 키 삭제
ALTER TABLE 테이블 이름 DROP FOREIGN KEY 제약명;

DML

  • DML (Data Manipulation Language) : 데이터를 조작하는 명령어
  • 주요 명령어
    • SELECT, INSERT, UPDATE, DELETE

CRUD

  • 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 처리 기능
    • Create : 생성 (INSERT)
    • Read : 읽기 (SELECT)
    • Update : 갱신 (UPDATE)
    • Delete : 삭제 (DELETE)

INSERT 문

  • 테이블에 새로운 데이터를 추가할 때 사용
    • 컬럼명과 값은 순서와 개수가 일치해야 함
    • 필드를 명시하지 않는 경우 테이블의 모든 컬럼에 값을 순서대로 추가해야 함
INSERT INTO customer (cust_id, cust_name, address, phone, birth) 
VALUES ("C001", "김민수", "서울시", "01012345678", "1990-05-14");
  • 필드 제외 가능
INSERT INTO customer
VALUES ("C002", "이영희", "부산시", "01023456789", "1985-08-22");
  • 여러 데이터 한번에 추가
INSERT INTO customer
VALUES 
("C003", "박철수", "대전시", "01034567890", "1992-11-02"),
("C004", "정유진", "광주시", "01045678901", "1998-01-19");
  • 자동 증가는 비우기
INSERT INTO orders (cust_id, prod_name, price, amount) 
VALUES ("C001", "커피머신", 120000, 1);

SELECT 문

  • 테이블에서 데이터를 조회(read)할 때 사용하는 SQL 구문
    • 질의어(query)라고도 함
    • SQL 문 중 가장 많이 사용되는 문법
  • 전체 컬럼 조회 : * (모든 컬럼을 의미)
  • 구성 요소
    • 생략 가능
    • 반드시 순서대로 작성
SELECT 컴럼 FROM 테이블 WHERE 조건 GROUP BY 컬럼 HAVING 조건 ORDER BY 컬럼 LIMIT 숫자;
  • Alias (별칭)
# 컬럼 별칭
SELECT 컬럼 AS 별칭 FROM 테이블;
# 테이블 병칭
SELECT 별칭.컬럼 FROM 테이블 AS 별칭;
# AS 생략 가능
SELECT 컬럼1 별칭1, 컬럽2 별칭2 FROM 테이블;

SELECT + WHERE

  • WHERE = 조건 지정
    • 조건을 지정하여, 명령어가 어떤 행에만 적용될지 결정
    • SELECT, UPDATE, DELETE 에서 활용 가능
SELECT 컬럼 FROM 테이블 WHERE 조건
  • 비교 연산자, 논리 연산자, 조건 연산자(BETWEEN, IN, LIKE, IS NULL) 사용 가능
  • BETWEEN = a와 b 사이의 값 사이에 있으면 참(a, b 값도 포함 )
SELECT * FROM student WHERE age BETWEEN 20 AND 25;
  • IN (list) = 리스트의 값중 어느 하나라도 일치하면 참
SELECT * FROM class WHERE category IN ("백엔드", "프론트엔드", "디자인");
  • LIKE = 비교 문자열과 형태가 일치하면 사용 (%, _ 사용 )
SELECT * FROM student WHERE name LIKE "이%";
SELECT * FROM student WHERE name LIKE "%영";
SELECT * FROM student WHERE name LIKE "__영"; # 언더바 1개당 글자 1개
SELECT * FROM student WHERE name LIKE "_원%";
SELECT * FROM student WHERE name LIKE "%원%"; # "원"포함 여부
  • IS NULL = NULL 값인 경우 true, 아니면 false
SELECT * FROM student WHERE age IS NULL;

ORDER BY, LIMIT, DISTINCT

  • ORDER BY = 결과 데이터를 정렬
    • ASC : Ascending, 오름차순 (기본값 )
    • DESC : Descending, 내림차순
    • WHERE과 함께 사용 가능 (단, where 절 뒤에 나와야 함)
  • LIMIT = 출력 개수 제한
    • OFFSET과 함께 사용 (시작 지점 설정)
SELECT * FROM student WHERE age IS NULL ORDER BY class_id DESC LIMIT 1, 2;
  • DISTINCT = 중복된 데이터 제거
SELECT DISTINCT class_id FROM student; 

GROUP BY, HAVING

  • GROUP BY
    • 같은 값을 가진 행끼리 하나의 그룹으로 묶어 줌
    • 각 그룹에 대해 집계 함수를 적용하여 계산
  • HAVING
    • 그룹화 이후에 조건을 적용
# 1.
SELECT class_id, COUNT(*) student_count FROM student GROUP BY class_id;
# 2.
SELECT gender, AVG(age) avg_age FROM student GROUP BY gender;
# 3.
SELECT gender, AVG(age) avg_age FROM student GROUP BY gender HAVING AVG(age) >= 26;
# 4.
SELECT class_id, MIN(join_date) first_join FROM student GROUP BY class_id;
# 5.
SELECT class_id, MIN(age) min_age FROM student GROUP BY class_id HAVING MIN(age) >= 25;
# 6.
SELECT gender, (MAX(age) - MIN(age)) age_gap FROM student GROUP BY gender HAVING (MAX(age) - MIN(age)) >= 3;
# 7.
SELECT class_id, AVG(age) avg_age FROM student GROUP BY class_id HAVING AVG(age) >= 24 ORDER BY avg_age DESC;

마치며

이제 데이터를 추가하고 수정하는 등 기능을 하나씩 배우니까 점점 재미있어지는 것 같다. 데이터를 처리하는 언어이다 보니까 앞으로를 생각해서라도 지금부터 잘 배우고 잘 복습해둬야겠다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글