본문 바로가기
Database

MySQL - SQL 기초 문법(2)

by DGK 2021. 11. 6.

 

데이터베이스 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

SQL 기초 문법(MySQL)

MySQL을 사용하여, 테이블의 데이터 생성(Create), 읽기(Read), 수정(Update), 삭제(Delete)를 연습하고자 한다.

 

데이터 CRUD [Create(생성), Read(읽기), Update(수정), Delete(삭제)]

데이터를 관리하는 것은 결국 데이터의 생성, 읽기(검색), 수정(갱신), 삭제를 한다는 것을 의미한다.

 

 

  • 데이터 생성(Create)
USE mydata;
SHOW TABLES;
DESC mytable;

INSERT INTO mytable VALUES (1, 'I7', '7700', 'Kaby Lake');
SELECT * FROM mytable;

 

```

결과 :

 

```

 

* 테이블의 전체 컬럼에 대응하는 값(value)을 모두 넣는 방법

 

   - INSERT INTO 테이블명 VALUES (value1, value2, value3, ... );

 

이 경우에는 테이블의 전체 컬럼에 값(value)들이 순서대로 들어간다. (데이터 생성)

 

 

ALTER TABLE mytable MODIFY COLUMN model_type VARCHAR(30) NOT NULL;

INSERT INTO mytable (name, model_num, model_type) VALUES('i7', '7700', 'Kaby Lake');
INSERT INTO mytable (name, model_num, model_type) VALUES('i5', '9600K', 'Coffee Lake Refresh');
INSERT INTO mytable (name, model_num, model_type) VALUES('i5', '9400K', 'Coffee Lake Refresh');
INSERT INTO mytable (name, model_num, model_type) VALUES('i7', '9700K', 'Coffee Lake Refresh');
INSERT INTO mytable (name, model_num, model_type) VALUES('I7', '9700K', 'Coffee Lake Refresh');
INSERT INTO mytable (name, model_num, model_type) VALUES('i5', '8500K', 'Coffee Lake Refresh');
SELECT * FROM mytable;

 

```

결과 :

```

 

* 테이블의 특정 컬럼에 대응하는 값(value)만 넣는 방법

 

   - INSERT INTO 테이블명 (컬럼명1, 컬럼명2, 컬럼명3, ... ) VALUES (value1, value2, value3, ... );

 

이 경우에는 테이블의 특정 컬럼에만 원하는 값(value)들이 들어가며, 컬럼과 값은 순서대로 매칭된다.

또한, 지정되지 않은 컬럼은 디폴트 값 또는 NULL 값이 들어간다.

 

 

 

  • 데이터 읽기(Read)
SELECT * FROM mytable;

 

```

결과 :

```

 

* 테이블 전체 컬럼의 데이터를 모두 읽는 방법

 

   - SELECT * FROM 테이블명;

 

여기서 *는 해당 테이블에 존재하는 모든 컬럼을 뜻한다. (전체 컬럼을 읽어올 때 사용함)

 

 

SELECT name FROM mytable;
SELECT model_num FROM mytable;
SELECT model_num, model_type, id FROM mytable;

 

```

결과 :

 

 

```

 

* 테이블에서 특정 컬럼의 데이터만을 읽는 방법

 

   - SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명;

 

 

SELECT name AS cpu_name, model_num AS cpu_num FROM mytable;

 

```

결과 :

```

 

* 테이블에서 특정 컬럼의 데이터만을 읽어오되, 표시할 컬럼명도 변경하는 방법

 

   - SELECT 컬럼명1 AS 변경할 컬럼명1, 컬럼명2 AS 변경할 컬럼명2, ... FROM 테이블명;

 

 

SELECT id, name FROM mytable ORDER BY id DESC;
SELECT id, name, model_type FROM mytable ORDER BY model_type ASC;

 

```

결과 :

 

```

 

* 테이블의 컬럼 데이터를 정렬해서 읽는 방법

 

   - SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명 ORDER BY 정렬할 기준 컬럼명 DESC or ASC;

 

여기서 DESC는 내림차순, ASC는 오름차순을 의미한다.

 

참고로 위의 예시코드 처럼, 문자열(model_type)을 오름차순 또는 내림차순의 기준으로 정하는 경우에는

문자열을 나타내는 고유 번호(프로그램이 문자열을 인식하는 번호)가 기준이되어 오름차순 또는 내림차순으로 정렬된다.

 

 

SELECT * FROM mytable WHERE id < 5;
SELECT * FROM mytable WHERE id > 3 AND id < 7;
SELECT * FROM mytable WHERE id < 3 OR id > 6;
SELECT * FROM mytable WHERE id < 3 OR name = 'i7';

 

```

결과 :

 

 

 

```

 

* 조건에 맞는 컬럼의 데이터만 읽는 방법(WHERE 조건문을 활용)

 

   - SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명 WHERE 컬럼명 + 조건;

 

WHERE 뒤에 컬럼명과 조건을 함께 써서, 테이블 안에 존재하는 다수의 컬럼 중 조건에 충족되는 컬럼만 선택하여

데이터를 읽어올 수 있다. (WHERE 뒤에 조건을 경우, 다양한 연산자를 사용할 수 있음)

 

 

SELECT * FROM mytable WHERE model_type LIKE '%Lake%';
SELECT * FROM mytable WHERE model_type LIKE 'Kaby%';
SELECT * FROM mytable WHERE model_type LIKE 'Kaby_____';
SELECT * FROM mytable WHERE model_type LIKE 'Coffee_____________';
SELECT * FROM mytable WHERE model_type LIKE '_____ Lake' OR name = 'i7';

 

```

결과 :

 

 

 

 

```

 

* 조건에 맞는 컬럼의 데이터만 읽는 방법(WHERE 조건문과 LIKE 활용)

 

   - SELECT *(or 컬럼명) FROM 테이블명 WHERE 컬럼명 LIKE 조건;

 

   ex1) Lake로 시작되는 값을 모두 찾는 경우

   SELECT *(or 컬럼명) FROM 테이블명 WHERE 컬럼명 LIKE 'Lake%';

 

   ex2) Lake가 들어간 값을 모두 찾는 경우

   SELECT *(or 컬럼명) FROM 테이블명 WHERE 컬럼명 LIKE '%Lake%';

 

   ex3) Lake로 시작되고 뒤에 글자 2개가 붙는 값을 모두 찾는 경우

   SELECT *(or 컬럼명) FROM 테이블명 WHERE 컬럼명 LIKE 'Lake__';

 

 

SELECT * FROM mytable LIMIT 5;
SELECT * FROM mytable LIMIT 2, 2;
SELECT * FROM mytable LIMIT 0, 2;
SELECT * FROM mytable LIMIT 4, 3;

 

```

결과 :

 

 

 

```

 

* 결과 중 일부의 데이터만을 읽어오는 방법(LIMIT을 활용)

 

   - SELECT *(or 컬럼명) FROM 테이블명 LIMIT 결과에서 가져올 데이터 개수;

   - SELECT *(or 컬럼명) FROM 테이블명 LIMIT 숫자1, 숫자2;

 

SELECT *(or 컬럼명) FROM 테이블명 LIMIT 숫자1, 숫자2 코드에서 숫자1은 데이터의 인덱스 번호와 데이터를 

가져오는 시작점을 의미하고, 숫자2는 결과에서 가져올 데이터 개수를 뜻한다.

[ex. SELECT * FROM mytable LIMIT 0, 2; (전체 7개의 결과 중 인덱스 번호가 0인 데이터부터 2개를 가져옴)]

 

 

SELECT * FROM mytable WHERE id < 4 AND name LIKE '%I%' ORDER BY name DESC LIMIT 2;

 

```

결과 :

```

 

위에서 나열한 조건을 조합하여 다양한 Query를 작성할 수 있다.

단, 조건의 조합 순서는 SELECT *(or 컬럼명) FROM 테이블명 WHERE ORDER BY LIMIT 순이다.

 

 

SELECT * FROM mytable WHERE model_num LIKE '7700%';
SELECT * FROM mytable WHERE name = 'i7';
SELECT * FROM mytable WHERE model_type = 'Kaby Lake' LIMIT 1;

 

```

결과 :

 

 

```

 

앞서 배운 내용을 토대로 연습한 실전 예제이다.

 

 

 

  • 데이터 수정(Update)
UPDATE mytable SET name = 'i3' WHERE id = 3;
UPDATE mytable SET name = 'i3', model_num = '5500K', model_type = 'Kaby Lake' WHERE id = 3;
SELECT * FROM mytable;

 

```

결과 :

 

```

 

* 테이블에 저장된 데이터를 수정하는 방법

 

   - UPDATE 테이블명 SET 수정하고 싶은 컬럼명 = '수정하고 싶은 값' WHERE 컬럼명 + 조건;

   - UPDATE 테이블명 SET 수정하고 싶은 컬럼명1 = '수정하고 싶은 값', 수정하고 싶은 컬럼명2 = '수정하고 싶은 값',

      ... WHERE 컬럼명 + 조건; 

 

이처럼 다수의 컬럼을 한 번에 수정할 수도 있다.

단, UPDATE 테이블명 SET 수정하고 싶은 컬럼명 = '수정하고 싶은 값' 뒤에 반드시 WHERE 조건문을 반드시 써야한다.

만약, WHERE 조건문을 쓰지 않으면 에러가 발생한다. (즉, 일차적으로 모든 컬럼을 한 번에 수정하는 것은 막고 있음)

 

 

 

  • 데이터 삭제(Delete)
DELETE FROM mytable WHERE id = 1;
SELECT * FROM mytable;

 

```

결과 :

```

 

* 테이블에 저장된 데이터를 삭제하는 방법

 

   - DELETE FROM 테이블명 WHERE 컬럼명 + 조건;

   - DELETE FROM 테이블명;

 

이처럼 해당 테이블에서 조건에 맞는 컬럼의 데이터를 삭제할 수 있다.

만약, DELETE FROM mytable의 코드 처럼 WHERE 조건문을 쓰지 않으면 해당 테이블의 모든 데이터를 삭제한다.

 

 

 

  • 실전 예제
ALTER TABLE mytable ADD COLUMN lowest_price INT UNSIGNED;
DESC mytable;
SELECT * FROM mytable;

 

```

결과 :

 

```

 

 

UPDATE mytable SET lowest_price = 176660 WHERE id = 2;
UPDATE mytable SET lowest_price = 468090 WHERE id = 3;
UPDATE mytable SET lowest_price = 357520 WHERE id = 4;
UPDATE mytable SET lowest_price = 252130 WHERE id = 5;
UPDATE mytable SET lowest_price = 369800 WHERE id = 6;
UPDATE mytable SET lowest_price = 543920 WHERE id = 7;
SELECT * FROM mytable;

 

```

결과 :

```

 

 

SELECT name, model_num FROM mytable WHERE lowest_price <= 300000;
SELECT * FROM mytable WHERE lowest_price >= 400000;

 

```

결과 :

 

```

 

'Database' 카테고리의 다른 글

MySQL - pandas & pymysql 라이브러리  (0) 2021.11.10
MySQL - 파일로 실행하는 SQL  (0) 2021.11.10
MySQL - 파이썬으로 다루는 MySQL  (0) 2021.11.10
MySQL - SQL 기초 문법(1)  (0) 2021.11.05
MySQL - 데이터베이스와 RDBMS  (0) 2021.11.05

댓글