Computer Science/Database

[MySQL] SQL문 사용법

2021. 2. 9. 13:09

MySQL에서는 SQL이라고 명명된 SQL문을 사용하여 MySQL(DBMS)에 명령을 할 수 있다.

 

1. DML (Data Manipulation Language)

데이터 조작에 사용되는 SQL문으로 SELECT, INSERT, UPDATE, DELETE가 있다. 트랜잭션(Transaction, 임시 적용)이 발생한다.

SELECT 구문

/* WHERE 조건문 */
SELECT * FROM table1 WHERE column='value1' AND NOT column2>5;

/* 연속적인 값 */
SELECT * FROM table1 WHERE column2 BETWEEN 5 AND 10;

/* 이산적인 값 */
SELECT * FROM table1 WHERE column1 IN('value1','value2');

/* 문자열 검색 */
/* %는 길이 상관X, _는 한 글자만, 제일 앞에 쓰면 속도가 느려지므로 주의 */
SELECT * FROM table1 WHERE column1 LIKE 'value_';


/* 하위쿼리(SubQuery) */
SELECT * FROM (SELECT * FROM table1) AS T -- 괄호 안의 결과를 새로운 테이블(T)이라고 생각하여 쿼리를 이어나갈 수 있다.

SELECT * FROM table1
	WHERE column2 >= (SELECT * FROM table1 WHERE column='value1');
/* 결과가 두 개 이상일 때는 ANY나 ALL을 사용 */
	WHERE column2 >= ANY (SELECT * FROM table1 WHERE column='value1'); -- 하위쿼리 중 하나만 만족해도 됨
	WHERE column2 >= ALL (SELECT * FROM table1 WHERE column='value1'); -- 하위쿼리 모두 만족해야 함

/* 정렬: ORDER BY는 가장 마지막에 사용해야하고, 부하가 크기 때문에 자주 쓰는 것은 좋지 않다 */
SELECT * FROM table1 ORDER BY column1, column2; -- 오름차순 정렬
SELECT * FROM table1 ORDER BY column2 DESC; -- 내림차순 정렬

/* 중복 제거 (Unique 값만)*/
SELECT DISTINCT column1 FROM table1;

/* 중복 행만 */
SELECT column1, COUNT(column1) FROM table1 GROUP BY column1 HAVING COUNT(column1)>1;

/* 출력 행 개수 제한 */
SELECT * FROM table1 LIMIT 10; -- 10개
SELECT * FROM table1 LIMIT 0, 10; -- 0에서 시작하여 10개, LIMIT 10 OFFSET 0과 동일

/* 테이블 복사 (제약 조건은 복사 X) */
SELECT * INTO table2 FROM table1;
CREATE TABLE table2 (SELECT * FROM table1);

/* 별칭(Alias) 지정, AS를 생략해도 됨 */
SELECT column1 AS '컬럼 1', column2 '컬럼 2';

/* 집계함수 (GROUP BY 문은 생략 가능) */
/* SUM() 이외에도 AVG(), MIN(), MAX(), COUNT(), COUNT(DISTINCT), STDEV(), VAR_SAMP() 등이 존재 */
SELECT id, SUM(column2*column3) FROM table1 GROUP BY id;

SELECT column, COUNT(DISTINCT id) FROM table GROUP BY column;

/* GROUP BY절에서는 WHERE문 대신 HAVING문을 사용 */
SELECT id, SUM(column2*column3) FROM table1 GROUP BY id
	HAVING SUM(column2*column3) > 1000;

/* 중간 합계 및 총 합계 표시 */
SELECT id, SUM(column2*column3) FROM table1 GROUP BY id
	WITH ROLLUP;
    
/* IN 결과에 포함되어있는 것만 출력 */
SELECT * FROM table1
	WHERE id IN (SELECT id FROM table2 WHERE address IS NOT NULL);

INSERT 구문

/* 단일 데이터 삽입 */
INSERT INTO table1 VALUES ('value1', value2);
INSERT INTO table1(column1, column2) VALUES ('value1', value2);

/* 여러 데이터 삽입 */
INSERT INTO table1 VALUES ('value1', value2), ('value3', value4), ('value5', value6);

/* 대량 데이터 삽입, 테이블이 이미 정의되어 있어야 함 */
INSERT INTO table1
	SELECT * FROM table2;

UPDATE 구문

UPDATE table1 SET column1='value3' WHERE column2=value2;

DELETE 구문

DELETE FROM table1 WHERE column2=value2;

 

2. DDL (Data Definition Language)

데이터베이스 개체를 조작하는 SQL문으로, CREATE, DROP, ALTER 등이 있다. 트랜잭션이 발생하지 않아서 실행 즉시 적용된다.

/* 테이블 생성 */
CREATE TABLE db1.table1 (
	column1 CHAR(10) NOT NULL,
	column2 INT(5) NOT NULL,
	PRIMARY KEY (column1));

/* 테이블 삭제, DELETE구문에서 필요한 트랜잭션이 없기 때문에 효율적이다 */
DROP TABLE table1; -- 테이블 자체를 삭제
TRUNCATE TABLE table1; -- 테이블 형식은 보존


/* 자동으로 증가하는 index의 값을 1로 다시 설정해줌. 이후 INSERT를 하면 바뀐 값으로 들어간다 */
ALTER TABLE table1 AUTO_INCREMENT=1;

 

3. DCL (Data Control Language)

사용자 관리에 사용되는 SQL문으로, GRANT, REVOKE, DENY 등이 있다.

 

그 외 유용한 구문

1. 정보 검색

/* 사용자 확인 */
SELECT USER();

/* 데이터베이스 조회 */
SHOW DATABASES;

/* 테이블 조회 */
USE db1; SHOW TABLE STATUS;

/* 테이블 이름만 조회 */
USE db1; SHOW TABLES;

/* 필드(열 이름) 조회, DESC table1으로도 작성 가능 */
DESCRIBE table1;

 

 

Reference

  • 우재남. 이것이 MySQL이다. 한빛미디어, 2016.

 

 

 

 

 

# unique mysql, # mysql query, # mysql group by

 

728x90
반응형