SELECT Statement
Table에서 Row를 선택합니다.
SELECT 구문
SELECT column_name, column_name
FROM table_name;
Row의 모든 Column들을 가져오려면 *(asterisk)를 사용합니다.
SELECT *
FROM table_name;
MariaDB에 Table에 Row 추가하기
-- 전체 Row 삭제
DELETE FROM INT_BOARD_TB;
-- Table의 AUTO_INCREMENT 설정
ALTER TABLE INT_BOARD_TB AUTO_INCREMENT=0;
-- 초기 Row 추가
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 1', '테스트 내용 1', 'testid1');
SELECT SLEEP(0.05);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 2', '테스트 내용 2', 'testid2');
SELECT SLEEP(0.1);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 3', '테스트 내용 3', 'testid1');
SELECT SLEEP(0.15);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 4', '테스트 내용 4', 'testid3');
SELECT SLEEP(0.05);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 5', '테스트 내용 5', 'testid2');
SELECT SLEEP(0.15);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 6', '테스트 내용 6', 'testid2');
SELECT SLEEP(0.1);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 7', '테스트 내용 7', 'testid3');
SELECT SLEEP(0.2);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 8', '테스트 내용 8', 'testid1');
SELECT SLEEP(0.1);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 9', '테스트 내용 9', 'testid3');
SELECT SLEEP(0.05);
INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 10', '테스트 내용 10', 'testid1');
SELECT SLEEP으로 새로운 Row가 추가되디 전에 시간을 지연시킵니다.
MariaDB에서 Table의 Row 선택하기
SELECT *
FROM INT_BOARD_TB;
INT_BOARD_TB에 있는 전체 Row를 가져옵니다.
WHERE Clause
Table에서 WHERE 절의 조건에 맞는 Row를 선택합니다.
WHERE 절
SELECT column_name, column_name
FROM table_name
WHERE condition;
MariaDB에서 Table의 Row 선택하기
SELECT *
FROM INT_BOARD_TB
WHERE REG_ID = 'testid1';
INT_BOARD_TB에서 등록자 아이디가 'testid1'인 Row를 가져옵니다.
ORDER BY
선택된 Row를 오름차순(Ascending, ASC) 또는 내림차순(Descending, DESC)으로 정렬합니다. (기본적으로 오름차순(Ascending, ASC))
ORDER BY
SELECT column_name, column_name
FROM table_name
ORDER BY column_name ASC|DESC, column_name ASC|DESC;
MariaDB에서 Table의 Row 선택하기
SELECT *
FROM INT_BOARD_TB
WHERE REG_ID = 'testid1'
ORDER BY REG_DTM DESC;
INT_BOARD_TB에서 등록자 아이디가 'testid1'인 Row를 등록 일자를 기준으로 내림차순으로 가져옵니다.
GROUP BY
하나 이상의 Column으로 선택된 Row를 그룹화하여 집계(COUNT(), MAX(), MIN(), SUM(), AVG())합니다.
GROUP BY
SELECT column_name
FROM table_name
GROUP BY column_name
ORDER BY column_name ASC|DESC;
MariaDB에서 Table의 Row 선택하기
SELECT REG_ID, COUNT(REG_ID)
FROM INT_BOARD_TB
GROUP BY REG_ID
ORDER BY COUNT(REG_ID) DESC;
INT_BOARD_TB에서 등록자 아이디별로 등록된 Row의 수를 내림차순으로 가져옵니다.
HAVING Clause
GROUP BY에 의해 처리된 결과에 조건을 설정합니다.
HAVING 절
SELECT column_name
FROM table_name
GROUP BY column_name
HAVING condition
ORDER BY column_name;
MariaDB에서 Table의 Row 선택하기
SELECT REG_ID, COUNT(REG_ID)
FROM INT_BOARD_TB
GROUP BY REG_ID
HAVING COUNT(REG_ID) > 3
ORDER BY COUNT(REG_ID) DESC;
INT_BOARD_TB에서 등록자 아이디별로 등록된 Row의 수를 등록된 Row의 수가 3보다 큰 것만 내림차순으로 가져옵니다.
SELECT에서 * 대신 사용할 Column만 사용하는 것이 좋습니다.
SELECT *는 모든 Column를 가져오기 때문에 많은 리소스(메모리와 CPU 사용량)를 필요로 합니다.
그래서 사용할 Column만 지정하면 리소스를 절약할 수 있습니다. (lower cost가 됩니다)
Sub-Query 안에서 SELECT에 Column의 변형(타입 변형, FUNCTION 사용, CASE 문 처리)을 사용하지 말고 제일 밖에 있는 SELECT에서 사용하는 것이 좋습니다.
Sub-Query에서 WHERE 절의 조건을 위해 변형하거나 추가하는 것이 아니라면 변형을 위해 많은 리소스(메모리와 CPU 사용량)를 사용하게 됩니다.
'Database' 카테고리의 다른 글
MariaDB SQL JOIN - INNER JOIN, LEFT JOIN (LEFT OUTER JOIN), RIGHT JOIN (RIGHT OUTER JOIN) (0) | 2022.08.14 |
---|---|
MariaDB SQL JOIN - Driving Table, Nested Loop Join(NL Join), Sort Merge Join, Hash Join (2) | 2022.08.14 |
MariaDB SQL DELETE Statement (0) | 2022.08.14 |
MariaDB SQL UPDATE Statement (0) | 2022.08.14 |
MariaDB SQL INSERT INTO Statement (0) | 2022.08.14 |