고인물을 지양하는 블로그

MySQL: SELECT_1 본문

카테고리 없음

MySQL: SELECT_1

yunjaeGong 2019. 8. 27. 00:48

이번 학기 수강할 데이터베이스 과목 수업 이전에, 데이터베이스의 기본 및 DBMS의 기본 기능들을 공부하기 위해 방학 마지막 주도 반납한다. ㅠㅜ

 

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+

show 키워드를 이용, 데이터베이스 항목을 출력한다

 

 use world; Database changed
sample의 world 데이터베이스(스키마)를 이용한다.

use 키워드를 이용, 이용할 데이터 베이스를 선택한다.

 

 

이후부터 관계형 데이터베이스의 조회 기능을 수행하는 SELECT 문의 기본 동작을 실습으로 익혀보겠다.

 

SELECT

mysql> select * from city; city database의 모든 행의 모든 열(*)을 출력한다
use 키워드를 이용, default 데이터베이스를 선택하지 않은 경우 select * from world.city; 와 같이 사용할 수 있다.

 

1개의 데이터 베이스에는 복수의 테이블이 저장돼 있다.

SELECT문의 기본은 어디서 (FROM 테이블명) 무엇을 가지고 온다(SELECT 열명)고 적는다.

 

SELECT 열명 FROM 테이블명;

실제 예시는 다음과 같다.

mysql> select * from city;
 // city database로부터 모든 열(*)을 출력한다

 

 

필요한 데이터를 클라이언트로 가져오기 위해 선택하는 행 수를 줄일 필요가 있다.

이 때 WHERE 구문을 이용해 'WHERE 조건'의 형태로 SELECT 문의 끝에 추가한다.

SELECT 열명 FROM 테이블명 WHERE 조건;

예를 들어, 지역을 나타내는 district 열에서 전라남도를 나타내는 'chollanam'이라는 값을 가지는 행을 SELECT 할 때 다음과 같은 SQL을 사용한다.

mysql> select * from city where district = 'chollanam';

 

또한, 인구가 15만명 보다 큰 도시만을 SELECT 할 때는 다음과 같은 SQL을 사용한다

mysql> select * from city where district = 'chollanam' and population > 150000;

and를 이용해 조건의 중첩이 가능하다.

 

테이블 집약

MySQL을 사용하면 SELECT 결과에 행수('15 rows in set')가 출력되는데, 커맨드라인 클라이언트가 집계하는 것으로, DBMS에서 돌려받은 것이 아니다. 실제로 행수를 카운트 할 때는

select count(*) 라고 한다.

mysql> select count(*) from city where countrycode = "KOR"; +----------+
| count(*) |
+----------+
|       70 | // 행 수가 표시된다
+----------+

이외에도, - SUM 테이블의 수치 데이터를 합계하는 함수

- AVG 테이블의 수치 데이터 평균을 구하는 함수

- MAX 테이블의 임의열 데이터 중 최대값을 구하는 함수

- MIN 테이블의 임의열 데이터 중 최소값을 구하는 함수 등이 있다.

 

위에서 나열한 집약함수는 기본적으로 NULL을 제외하고 집계한다.

 

또한 SUM, AVG 이외의 집약함수는 수치 데이터 이외에도 이용할 수 있다.

  e.g. 도시명 최대값은 'Y'로 시작하는 'Yosu', 최소값은 'A'로 시작하는 'Andong'

 

mysql> select min(population),max(population),sum(population),avg(population) from city where countrycode = "KOR"; +-----------------+-----------------+-----------------+-----------------+
| min(population) | max(population) | sum(population) | avg(population) |
+-----------------+-----------------+-----------------+-----------------+
|           92239 |         9981619 |        38999893 |     557141.3286 |
+-----------------+-----------------+-----------------+-----------------+

행정구역이 '전라북도'인 도시만을 검색해 보자

mysql> select * from city where countrycode = "KOR" and district = "chollanam"; +------+------------+-------------+-----------+------------+
| ID   | Name       | CountryCode | District  | Population |
+------+------------+-------------+-----------+------------+
| 2360 | Sunchon    | KOR         | Chollanam |     249263 |
| 2361 | Mokpo      | KOR         | Chollanam |     247452 |
| 2370 | Yosu       | KOR         | Chollanam |     183596 |
| 2390 | Kwang-yang | KOR         | Chollanam |     122052 |
| 2397 | Naju       | KOR         | Chollanam |     107831 |
+------+------------+-------------+-----------+------------+

 

문자열 집약하기

GROUP_CONCAT(...)

수치열의 집약 뿐 아니라 문자열 집약도 가능하다.

MySQL의 GROUP_CONCAT는 시스템 변수(group_concat_max_len)로 상한선(1024 바이트)이 정해져 있어, 그 이상의 문자열은 잘린다.

 

select district, group_concat(name) from city where countrycode="KOR" group by district

테이블을 그룹(시.도) 그룹으로 분리하고, 해당 도시 이름들을 한 행으로 집약해 출력한다.

+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
| district      | group_concat(name)                                                                                                                  |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
| Cheju         | Cheju                                                                                                                               |
| Chollabuk     | Kunsan,Iksan,Namwon,Kimje,Chonju,Chong-up                                                                                           |
| Chollanam     | Mokpo,Sunchon,Yosu,Naju,Kwang-yang                                                                                                  |
| Chungchongbuk | Chungju,Chongju,Chechon                                                                                                             |
| Chungchongnam | Chonan,Sosan,Kongju,Nonsan,Asan,Poryong                                                                                             |
| Inchon        | Inchon                                                                                                                              |
| Kang-won      | Chunchon,Kangnung,Wonju,Tonghae                                                                                                     |
| Kwangju       | Kwangju                                                                                                                             |
| Kyonggi       | Kuri,Ichon,Kwangmyong,Pyongtaek,Paju,Yong-in,Ansan,Koyang,Anyang,Shihung,Hanam,Kunpo,Uijongbu,Puchon,Suwon,Uiwang,Namyangju,Songnam |
| Kyongsangbuk  | Yongju,Sangju,Kimchon,Pohang,Kumi,Yongchon,Kyongju,Mun-gyong,Andong,Kyongsan                                                        |
| Kyongsangnam  | Koje,Chinhae,Kimhae,Miryang,Chang-won,Masan,Chinju,Sachon,Yangsan,Ulsan,Tong-yong                                                   |
| Pusan         | Pusan                                                                                                                               |
| Seoul         | Seoul                                                                                                                               |
| Taegu         | Taegu                                                                                                                               |
| Taejon        | Taejon                                                                                                                              |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+
Comments