본문 바로가기
서버인프라/데이터베이스

Mariadb Select 조금더 심도 있게~

by techwold ted 2023. 11. 6.

https://mariadb.com/kb/en/getting-data-from-mariadb/

 

Getting Data from MariaDB

Extensive tutorial on using the SELECT statement.

mariadb.com

오늘은 Getting Data From MariaDB 를 진행해 보겠습니다.

 

우선 테스를 위해 데이터 삽입을 해야 할거 같습니다. 아래와 같이 몇개 더 넣어보죠~

INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('0553213695', 'Sample Title 1', 1, NULL, '2000', 'Description for Sample Title 1.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('1553213695', 'Sample Title 2', 2, NULL, '2001', 'Description for Sample Title 2.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('2553213695', 'Sample Title 3', 1, NULL, '2002', 'Description for Sample Title 3.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('3553213695', 'Sample Title 4', 2, NULL, '2003', 'Description for Sample Title 4.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('4553213695', 'Sample Title 5', 1, NULL, '2004', 'Description for Sample Title 5.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('5553213695', 'Sample Title 6', 2, NULL, '2005', 'Description for Sample Title 6.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('6553213695', 'Sample Title 7', 1, NULL, '2006', 'Description for Sample Title 7.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('7553213695', 'Sample Title 8', 2, NULL, '2007', 'Description for Sample Title 8.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('8553213695', 'Sample Title 9', 1, NULL, '2008', 'Description for Sample Title 9.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('9553213695', 'Sample Title 10', 2, NULL, '2009', 'Description for Sample Title 10.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('0553213696', 'Sample Title 11', 1, NULL, '2010', 'Description for Sample Title 11.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('1553213696', 'Sample Title 12', 2, NULL, '2011', 'Description for Sample Title 12.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('2553213696', 'Sample Title 13', 1, NULL, '2012', 'Description for Sample Title 13.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('3553213696', 'Sample Title 14', 2, NULL, '2013', 'Description for Sample Title 14.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('4553213696', 'Sample Title 15', 1, NULL, '2014', 'Description for Sample Title 15.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('5553213696', 'Sample Title 16', 2, NULL, '2015', 'Description for Sample Title 16.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('6553213696', 'Sample Title 17', 1, NULL, '2016', 'Description for Sample Title 17.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('7553213696', 'Sample Title 18', 2, NULL, '2017', 'Description for Sample Title 18.');
INSERT INTO books (isbn, title, author_id, publisher_id, year_pub, description) VALUES ('8553213696', 'Sample Title 19', 1, NULL, '2018', 'Description for Sample Title 19.');

 

이제 준비가 되었다면 다음과같이 보일 겁니다. 가장 기본적인 select를 진행합니다.

select * from books;

 

22개의 라인의 데이터가 보이네요.

 

이제 예제에서와 같이 다음과 같이 실행해 보겠습니다.

select isbn, title, author_id from books LIMIT 5;

이제는 설명하지 않아도 아시겠죠?

다음은 우리가 처음 해보는 쿼리문 입니다.

SELECT isbn, title, author_id FROM books LIMIT 5, 10;

위 쿼리는 처음 5개의 결과문을 건너뛰고 10개를 출력하라는 쿼리문 입니다. 실행하면 다음과 같이 박스 부분이 날라간 것이죠.

 

예제와 조금 다르지만, 다음과 같이 where 을 사용해서 author_id가 1인 것 중 앞에서 5개만 출력해 보려 합니다.

SELECT isbn, title FROM books WHERE author_id = 1 LIMIT 5;

 

그리고 아래와 같이 실행해 볼께요. 그럼 author_id 이 1인 것들 전부 출력 됩니다.

select isbn, title from books where author_id = 1;

 

이제 부터 한단계 더 복잡한 쿼리를 진행해 보겠습니다.

SELECT isbn, title FROM books WHERE author_id = 1 ORDER BY title ASC LIMIT 5;

위 쿼리는 author_id가 1인 것중 title의 값을 오름차순으로 정렬 하는 것 입니다.

 

그럼 반대로 정렬도 해봐야겠죠

SELECT isbn, title FROM books WHERE author_id = 1 ORDER BY title DESC LIMIT 5;

 

이제 더 복잡한 쿼리를 생성해 보죠 우리는 2갠의 테이블이 있습니다.

하나는, books이고 다른 하나는 authors 테이블 입니다. 이 두개의 테이블을 조인 하여 새로운 필드를 만들고 거기에 조건에 부합하는 것을 만드려 합니다.

우리가 이번에 하려는 것은 books의 author_id와 authors테이블의 author_id의 값이 같은 것을 찾아서 books의 year_pub 필드가 1995와 같은 것을 찾아 title을 정렬 하려 합니다. 2가지의 조건이 붙는 것이죠
A와 B의 필드 값이 1인 것과, 필드 중 다시 year_pub가 1995인 것을 찾는 것 입니다.
SELECT isbn, title, CONCAT(name_first, ' ', "ted") AS author from books JOIN authors USING (author_id) WHERE year_pub = '1995' ORDER BY title LIMIT 5;

 

여기서 LIKE절에 대해서 배워봅시다.LIKE는 보통 문자열 검사를 위해 사용합니다. 하지만 대량으로 할 경우 성능 저하 이슈가 있습니다.그러니 주의해서 사용할 필요가 있습니다.

SELECT isbn, title, CONCAT(name_first, ' ', name_last) AS author FROM books JOIN authors USING (author_id) WHERE name_last LIKE 'kafka%' ORDER BY title ASC LIMIT 5;

가장 큰 장장이자 단점이 바로 저 네모 박스입니다. 대 소문자를 구별하지 않는....

하지만 앞에서 검색의 범위를 줄여서 LIKE를 사용한다면 상당히 유용합니다. 이번에는 SQL_CALC_FOUND_ROWS에 대해서 알아 보려 합니다.

사용 방법은 아래와 같습니다.

SELECT SQL_CALC_FOUND_ROWS isbn, title FROM books JOIN authors USING (author_id) WHERE name_last = 'Kafka' LIMIT 4;

위와 같이 4개의 데이터만 보입니다. 하지만 아래와 같이 다음과 같이 실행하면

SELECT FOUND_ROWS();

위 쿼리에 대한 전체 행의 개수를 구할 수 있습니다. SQL_CALC_FOUND_ROWS 에 의하여 출력된 값의 전체 개수를 구할 수 있게 될 수 있습니다. 이역시 유용하게 사용할 수 있습니다. 2번 쿼리하여 가져오지 않아도 되니까요

 

'서버인프라 > 데이터베이스' 카테고리의 다른 글

PostgreSQL 튜너  (68) 2024.01.25
데이터 변경 그리고 삭제  (61) 2023.10.31
MariaDB Basic  (2) 2023.10.25
update를 해보자  (69) 2023.10.22
데이터를 확인하고 변경해보자~  (73) 2023.10.22

댓글