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;