Database

MariaDB SQL SELECT Statement

carrotweb 2022. 8. 14. 11:17
728x90
반응형

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 사용량)를 사용하게 됩니다.

728x90
반응형