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
반응형
'Computer Science > Database' 카테고리의 다른 글
[Java] 자바 어플리케이션에서 데이터베이스에 접속하는 방법 (Java, JDBC API, JDBC driver, MySQL) (0) | 2021.02.10 |
---|---|
[MySQL] Database 인덱스와 제약 조건 (Index, Constraint) (0) | 2021.02.09 |
[MySQL] 텍스트 검색 기능 (0) | 2021.02.09 |
[MySQL] 조인 (JOIN) 사용법 (0) | 2021.02.09 |
[MySQL] 데이터베이스 개체의 종류 (0) | 2021.02.09 |