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;
댓글