본문 바로가기
카테고리 없음

DB study 03 : SQL

by gun_poo 2024. 6. 3.

Sql은 db와 상호작용하기 위해 사용되는 표준 언어이다. 

  • DDL
  • DML
  • DCL
  • TCL
  • 고급 쿼리

가 존재한다.

 

DDL

DDL은 데이터베이스 구조를 정의하고 관리하는데 사용. 주요 명령어 : CREATE, ALTER, DROP

객체 관리

-- 새로운 테이블 생성
CREATE TABLE Users (
    userId INT PRIMARY KEY,
    userName VARCHAR(50),
    userEmail VARCHAR(50)
);

-- Users 테이블에 새로운 열 추가
ALTER TABLE Users ADD userAge INT;

-- Users 테이블의 열 이름 변경
ALTER TABLE Users RENAME COLUMN userEmail TO email;

-- Users 테이블 삭제
DROP TABLE Users;

DML

DML은 데이터베이스 내 데이터를 조작하는데 사용됨. 주요 명령어 : SELECT, INSERT, UPDATE, DELETE

데이터 관리

-- Users 테이블의 모든 데이터를 조회
SELECT * FROM Users;

-- 특정 조건을 만족하는 데이터를 조회
SELECT userName, email FROM Users WHERE userAge > 18;

-- Users 테이블에 새로운 행 삽입
INSERT INTO Users (userId, userName, email, userAge) VALUES (1, 'John Doe', 'john@example.com', 25);

-- 특정 조건을 만족하는 데이터의 값을 수정
UPDATE Users SET email = 'john.doe@example.com' WHERE userId = 1;

-- 특정 조건을 만족하는 데이터를 삭제
DELETE FROM Users WHERE userId = 1;

DCL

데이터베이스에 대한 권한을 제어. 주요 명령어 : GRANT, REVOKE

 

-- 사용자에게 SELECT 권한 부여
GRANT SELECT ON Users TO 'username';

-- 사용자로부터 SELECT 권한 회수
REVOKE SELECT ON Users FROM 'username';

 

TCL

데이터베이스 내에서 트랜잭션을 제어하는데 사용, 주요 명령어 :  COMMIT, ROLLBACK, SAVEPOINT

 

-- 트랜잭션을 완료하고 변경 사항을 저장
COMMIT;

-- 트랜잭션을 취소하고 변경 사항을 되돌림
ROLLBACK;


-- 되돌릴 지점 설정
SAVEPOINT savepoint_name;

-- 특정 지점까지 되돌림
ROLLBACK TO SAVEPOINT savepoint_name;

 

고급 쿼리

JOIN 

여러 테이블의 데이터를 결합

-- INNER JOIN을 사용하여 Users와 Orders 테이블의 데이터를 결합
SELECT Users.userName, Orders.orderDate
FROM Users
INNER JOIN Orders ON Users.userId = Orders.userId;

 

Subquery

-- 서브쿼리를 사용하여 특정 조건을 만족하는 데이터 조회
SELECT userName FROM Users
WHERE userId IN (SELECT userId FROM Orders WHERE orderDate > '2023-01-01');

 

Index

검색 성능 향상을 위해 테이블의 특정열에 인덱스 생성

-- email 열에 인덱스 생성
CREATE INDEX idx_email ON Users(email);

 

View

쿼리 결과를 테이블처럼 사용할수 있는 가상 테이블 생성

-- 특정 열만 포함하는 뷰 생성
CREATE VIEW UserEmails AS
SELECT userName, email FROM Users;

 

Stored Procedure

반복적 수행 작업을 위해 sql문을 저장해놓은것

-- 매개변수를 받아 데이터를 삽입하는 저장 프로시저 생성
CREATE PROCEDURE InsertUser (IN userName VARCHAR(50), IN email VARCHAR(50), IN userAge INT)
BEGIN
    INSERT INTO Users (userName, email, userAge) VALUES (userName, email, userAge);
END;

 

Trigger

특정이벤트가 발생할때 자동으로 실행되는 sql

-- Users 테이블에 데이터가 삽입될 때 자동으로 실행되는 트리거 생성
CREATE TRIGGER before_user_insert
BEFORE INSERT ON Users
FOR EACH ROW
BEGIN
    SET NEW.created_at = NOW();
END;

댓글