TIL - 0714
SQL(MySQL)
테이블 생성하기
- 데이터를 저장하기위해서 저장하고자하는 어떤 데이터를 어떤 타입으로 저장할지를 정한 후 표(테이블)를 생성해야함
- 테이블이 저장될 데이터베이스(원래는 스키마 계층이 하나 더 있어야하지만 mysql은 같은 계층으로 사용) 생성 or 선택
- data type 참고
- 데이터베이스 내에 테이블 : 하나의 데이터서버에 여러 서비스의 데이터를 저장할 수 있으니 영역을 구분짓는 용도(?)
> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| exam |
| mysql |
| performance_schema |
| sys |
+--------------------+
> use exam;
> CREATE TABLE MEMBER (
MEMBER_ID INTNOT NULL,
TEAM_ID INT,
NAME VARCHAR(255),
PRIMARY KEY (MEMBER_ID)
);
> show tables;
+----------------+
| Tables_in_exam |
+----------------+
| MEMBER |
+----------------+
> describe MEMBER;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| MEMBER_ID | int(11) | NO | PRI | NULL | |
| TEAM_ID | int(11) | YES | | NULL | |
| NAME | varchar(255) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
기본 SQL(DML)
- 조회하기
- “*” 에 column명을 넣으면 해당 column의 데이터만 출력됨
-
AND, OR : 여러 조건절을 붙일 수 있음 - && 와 과 같은 역할 - DISTINCT : 선택한 행에서 중복되는 값을 제외하고 출력
-
ORDER BY ASC DESC : 특정 행 기준 오름차순 내림차순으로 정렬 출력 - COUNT(*) : 출력될 행에 출력될 열이 몇개인지 출력, COUNT 이외에도 여러 함수들(SUM, AVG, MAX, MIN 등)이 있음, 해당 함수들은 NULL을 제외하고 집계하고 * 대신에 모든 데이터 타입이 가능
- GROUP_CONCAT($column_name) : 특정 행의 데이터(열)를 “,”로 묶어서 출력, column명 앞에 DISTINCT를 붙이면 중복제거 후 문자열 그룹핑
- GROUP BY $column_name : 특정 행만 가지고 조회, 선택 시에 이미 해당 column만 하기로 했기때문에 출력 데이터에 다른 행을 넣으면 안됨(*를 포함해서), GROUP BY한 행에 대한 조건을 붙이기위해서는 WHERE가 아닌 HAVING을 사용해야함
- HAVING : GROUP BY로 그룹핑한 데이터에 대해서 조건을 부여하기위해서 사용
> SELECT * FROM $TABLE_NAME
> SELECT * FROM MEMBER WHERE NAME = 'colin'
> SELECT * FROM MEMBER WHERE MEMBER_ID > 10 AND TEAM_ID IS NOT NULL;
> SELECT DISTINCT TEAM_ID FROM MEMBER WHERE TEAM_ID IS NOT NULL;
> SELECT * FROM MEMBER ORDER BY MEMBER_ID DESC;
> SELECT COUNT(*) FROM MEMBER WHERE NAME = 'colin';
> SELECT GROUP_CONCAT(DISTINCT NAME) FROM MEMBER;
> SELECT TEAM_ID, COUNT(*) FROM MEMBER GROUP BY TEAM_ID;
> SELECT TEAM_ID, COUNT(*) FROM MEMBER GROUP BY TEAM_ID HAVING TEAM_ID IS NOT NULL;