티스토리 뷰

Database

MySQL Query CRUD

조묵헌 2018. 5. 11. 17:18

SQL Query

데이터베이스의 조작에 특화된 언어. INSERT - SELECT - UPDATE - DELETE

조회 (SELECT)

SELECT 열이름 FROM 테이블명;

/* 데이터베이스에서 데이터를 읽기 */
# 테이블에서 모든 데이터를 가져오기
SELECT * FROM posts;
SELECT * FROM world.city;


/* 필요한 열만 표시하기 */
# SELECT 뒤에 필요한 열을 콤마로 구분해 나열한다.
SELECT name, population FROM city WHERE district = 'Chollanam';


/* DISTINCT 연산자 - 중복 행 제외하기 */
# 각 국가별 국가코드만 모두 표시하기
SELECT DISTINCT countrycode FROM city;

# 한국의 행정구역 표시하기
SELECT DISTINCT district FROM city WHERE countrycode = 'KOR';

WHERE

검색 조건 추가하기

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

/* WHERE 구문으로 조건을 추려내기 */
# WHERE : 가져올 데이터 선별

# student table에서 id=3 인 데이터 가져오기
SELECT * FROM student WHERE id=3;

# 한국의 도시 이름만 추리기
SELECT * FROM city WHERE countrycode = 'KOR';

# 전라남도에 속한 도시명만 추리기
SELECT * FROM city WHERE district = 'Chollanam';


/* 다양한 조건을 추가히기 */
# AND 연산자, OR 연산자
# 인구가 15만명보다 큰 전라남도 도시 이름, 인구수 출력하기
SELECT name, population FROM city WHERE district = 'Chollanam' AND population > 150000;
# 조건에 사용되는 비교 연산자
= 같다
<> 같지 않다
>= 같거나 크다
> 보다 크다
<= 같거나 작다
< 보다 작다

GROUP BY, HAVING

데이터를 그룹 단위로 집약

SELECT ~ FROM 테이블명 GROUP BY 열명1, 열명2, ...;

SELECT ~ FROM ~ GROUP BY ~ HAVING 그룹의 값에 대한 조건;

# district 별로 그룹을 나눠 몇개의 도시가 등록되어 있는지 확인하기.
SELECT district, count(*) FROM city WHERE countrycode='KOR' GROUP BY district;
+---------------+----------+
| district      | count(*) |
+---------------+----------+
| Cheju         |        1 |
| Chollabuk     |        6 |
| Chollanam     |        5 |


# 조건을 지정해 그룹을 나누기 - 도시가 6개인 district만 출력하기
SELECT district, count(*) FROM city WHERE countrycode='KOR' GROUP BY district HAVING count(*)=6;

# ORDER BY 로 집약함수 기술
SELECT district, count(*) FROM city WHERE countrycode = 'KOR' GROUP BY district HAVING count(*) > 6 ORDER BY COUNT(*) DESC;
+--------------+----------+
| district     | count(*) |
+--------------+----------+
| Kyonggi      |       18 |
| Kyongsangnam |       11 |
| Kyongsangbuk |       10 |
+--------------+----------+
3 rows in set (0.00 sec)

ORDER BY

SELECT ~ ORDER BY 열1, 열2 ,...;

검색결과 정렬 - 내림차순 (역순) : DESC, 오름차순 : ASC

# 각 도시를 인구가 적은 순으로 나열하기
SELECT * FROM city WHERE countrycode = 'KOR' ORDER BY population;

# 각 도시를 인구 순으로 나열하기 (역순)
SELECT * FROM city WHERE countrycode='KOR' ORDER BY population DESC;

# district ABC 순서로 정렬하고 내부의 도시명도 정렬하기
SELECT * FROM city WHERE countrycode='KOR' ORDER BY district, name;

LIMIT - offset , limit

# student 테이블의 세번째 값 (offset 2, limit 1)
SELECT * FROM student LIMIT 2,1;

COUNT, MIN, MAX, SUM, AVG

집약함수는 SELECT , ORDER BY , HAVING 뒤에만 작성할 수 있다.

  • COUNT 테이블의 행수를 알려주는 함수
  • MAX 테이블의 특정 열 데이터 중 최대값
  • MIN 테이블의 특정 열 데이터 중 최소값
  • SUM 테이블의 수치 데이터를 합계
  • AVG 테이블의 수치 데이터 평균
  • GROUP_CONCAT 문자열 집약
# 행수를 카운트하기
SELECT COUNT(*) FROM city WHERE countrycode = 'KOR';
+----------+
| COUNT(*) |
+----------+
|       70 |
+----------+
1 row in set (0.00 sec)


# 각 도시 인구의 최소, 최대, 합계, 평균을 출력하기
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 |
+---------------+---------------+---------------+---------------+
1 row in set (0.01 sec)


# 출력을 한 행으로 집약하기
SELECT GROUP_CONCAT(name) FROM city WHERE countrycode = 'KOR' AND district = 'Chollabuk';
#=>
+-------------------------------------------+
| GROUP_CONCAT(name)                        |
+-------------------------------------------+
| Chonju,Iksan,Kunsan,Chong-up,Kimje,Namwon |
+-------------------------------------------+
1 row in set (0.05 sec)

# DISTINCT를 사용해 행정구역 명을 한번에 출력하기
SELECT GROUP_CONCAT(DISTINCT district) FROM city WHERE countrycode = "KOR";

#=> Seoul, Pusan, Inchon, Taegu, Taejon, Kwangju, Kyongsangnam, Kyonggi, Chollabuk, Chungchongbuk, Kyongsangbuk, Chungchongnam, Cheju, Chollanam, Kang-won

삽입 (INSERT)

INSERT INTO 테이블명 (열1, 열2) VALUES (값1, 값2);

# posts 테이블에 데이터 삽입
INSERT INTO posts (title, description, author) VALUES ('Alice in Wonderland','Alice was beginning to get very tired of sitting by her sister on the bank,', 'LEWIS CARROLL');


# 다른 테이블의 데이터를 벌크로 입력하기
INSERT INTO posts_copy SELECT * FROM posts;


# 복수 행 입력하기
INSERT INTO posts (title, description, author) VALUES ('Alice in Wonderland', 'Alice was beginning to get very tired of sitting by her sister on the bank,', 'LEWIS CARROLL'), ('Wonderful Wizard of Oz', 'Folklore, legends, myths and fairy tales have followed childhood through the ages,', 'Frank Baum');

갱신 (UPDATE)

UPDATE 테이블명 SET 열명 = 값, 열명 = 값 WHERE 조건;

# 테이블의 id=3인 값의 title, description 데이터 수정하기
UPDATE posts SET title='Alice in Wonderland', description='Alice was beginning to get very tired of...' WHERE id=3;

제거 (DELETE)

DELETE FROM 테이블명 WHERE 조건;

# 테이블에서 id=3 인 값 삭제하기
DELETE FROM posts WHERE id=3;

'Database' 카테고리의 다른 글

MongoDB 설치와 실행  (0) 2018.05.11
MongoDB 기초  (0) 2018.05.11
MySQL Index, Join, Grant  (0) 2018.05.11
MySQL Query CRUD  (0) 2018.05.11
MySQL 사용하기  (0) 2018.05.11
Database 기본  (0) 2018.05.11
댓글
댓글쓰기 폼