일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- BOJ 11726
- 다익스트라
- BOJ 5568
- BOJ 1697
- BOJ 1912
- BOJ 2012
- Lambda
- javascript
- MySQL
- BOJ 2407
- DP
- BOJ 2234
- Coercion
- BOJ 2213
- springboot
- 조합 알고리즘
- 분할과 정복
- BOJ 5791
- AWS
- BOJ 4948
- BOJ 1926
- BOJ 2146
- priority_queue
- spring security
- BOJ 6593
- BOJ 1074
- serverless
- BOJ 4485
- 플로이드 와샬
- BOJ 2167
- Today
- Total
고인물을 지양하는 블로그
MySQL: SELECT_1 본문
이번 학기 수강할 데이터베이스 과목 수업 이전에, 데이터베이스의 기본 및 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 |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------+