SQL 기초 -Table, 기초 명령어

Jungmin·2022년 11월 1일
1

SQL

목록 보기
2/17
post-custom-banner

⏹️Table

Table 생성

  • 데이터베이스 생성: create database 데이터베이스명 default character set utf8mb4;
    default character set utf8mb4 : utf8(다국어지원)mb4(이모지 문자)을 기본사용으로 선언
  • Table : 데이터베이스 안에서 실제 데이터가 저장되는 형태이고, 행과 열로 구성된 데이터 모음
  • Table 생성 문법 : create table tablename

❗varchar 타입 : pandas의 object와 같은 형태(string)

  • CREATE TABLE 테이블명(컬럼명 데이터타입, 컬럼명 데이터타입, ...); :Table 생성
  • SHOW TABLES; : 현재 데이터베이스에 있는 테이블 목록 확인
  • DESC 테이블명 : 지정한 테이블의 정보 확인

Table 변경 & 삭제

  • ALTER TABLE 테이블명 RENAME 새테이블명 : 새로운 테이블명으로 변경
  • ALTER TABLE 테이블명 ADD COLUMN 새컬럼 데이터타입 : 테이블에 새로운 컬럼 추가
mysql> alter table person add column agee double;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc table;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(16) | YES  |     | NULL    |       |
| agee  | double      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

❗ DOUBLE : pandas의 float와 유사한 형태(실수)로 부동소수점 타입

  • ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 데이터타입 : 테이블에 컬럼 데이터타입 변경
  • ALTER TABLE 테이블명 CHANGE COLUMN 컬럼명 새컬럼명 새데이터타입 : 테이블에 컬럼명, 데이터타입 변경
  • ALTER TABLE 테이블명 DROP COLUMN 컬럼명 : 테이블에 컬럼 삭제
  • DROP TABLE 테이블명 : 테이블 삭제

⏹️기초 명령어

  • 실습할 테이블 만들기
CREATE TABLE PERSON(
    -> ID INT,
    -> NAME VARCHAR(16),
    -> AGE INT,
    -> SEX CHAR
    -> );
Query OK, 0 rows affected (0.01 sec)
  • 테이블 정보 확인 :DESC 테이블명;
mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
| SEX   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

❗ CHAR : 한글자로 이루어진 데이터타입

INSERT - 데이터 추가

  • 입력한 컬럼 이름의 순서와 값의 순서가 일치하도록 하기.
mysql> CREATE TABLE PERSON(
    -> ID INT,
    -> NAME VARCHAR(16),
    -> AGE INT,
    -> SEX CHAR
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
| SEX   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
  • 방금 추가한 데이터 확인 : SELECT * FROM 테이블명;
mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
+------+--------+------+------+
1 row in set (0.00 sec)
  • 모든 컬럼 값 추가 시엔 column명 생략 가능하나, 데이터를 column 순서에 맞게 입력해야함.
mysql> INSERT INTO PERSON
    -> VALUES (2, '이상순', 48, 'M');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
|    2 | 이상순 |   48 | M    |
+------+--------+------+------+
2 rows in set (0.00 sec)

SELECT - 데이터 조회

  • 'SELECT COLUMN1, COLUMN2, .. FROM TABLENAME; : 테이블 내의 특정 컬럼에 대한 데이터 조회
  • SELECT * FROM TABLENAME; : 테이블 내 모든 컬럼에 대한 데이터 조회

WHERE - 데이터 조건

  • SQL 문에 조건을 추가하며 SELECT 뿐 아니라 UPDATE, DELETE 에도 사용.
  • SELECT COLUMN1, COLUMN2,.. FROM TABLENAME WHERE 조건;
  • 모든 데이터 중 해당되는 조건
    SELECT * FROM TABLENAME WHERE 조건 ;

UPDATE - 데이터 수정

UPDATE 테이블명 SET COLUMN1 = VALUE1, COLUMN2 = VALUE2,...WHERE 조건;

mysql> UPDATE PERSON SET AGE=23 WHERE NAME='이효리';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   23 | F    |
|    2 | 이상순 |   48 | M    |
+------+--------+------+------+
2 rows in set (0.00 sec)

DELETE - 데이터 삭제

DELETE FROM 테이블명 WHERE COLUMN=VALUE;

mysql> DELETE FROM PERSON WHERE NAME='이상순';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   23 | F    |
+------+--------+------+------+
1 row in set (0.00 sec)

ORDER BY - 데이터 정렬

  • SELECT 문에서 데이터를 특정 컬럼을 기준으로 오름차순/ 내림차순 정렬 (default :ASC로 생략가능)
    - ASC : 오름차순 정렬
    - DESC : 내림차순 정렬
    SELECT COLUMN1,..FROM 테이블명 ORDER BY COLUMN1,.. ASC /DESC;

  • 환경 생성

mysql> create table celeb(
    -> ID int not null auto_increment primary key,
    -> NAME varchar(32) not null default '',
    -> BIRTHDAY date,
    -> AGE int,
    -> SEX CHAR,
    -> JOB_TITLE varchar(32),
    -> AGENCY varchar(32)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> select * from celeb;
Empty set (0.00 sec)

mysql> DESC CELEB;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| ID        | int         | NO   | PRI | NULL    | auto_increment |
| NAME      | varchar(32) | NO   |     |         |                |
| BIRTHDAY  | date        | YES  |     | NULL    |                |
| AGE       | int         | YES  |     | NULL    |                |
| SEX       | char(1)     | YES  |     | NULL    |                |
| JOB_TITLE | varchar(32) | YES  |     | NULL    |                |
| AGENCY    | varchar(32) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
INSERT INTO CELEB VALUES(1,'아이유','1993-05-16',29,'F','가수,텔런트','EDAM엔터테이먼트'); 
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 텔런트     | EDAM엔터테이먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
|  3 | 송강   | 1994-04-23 |   28 | M    | 텔런트           | 나무엑터스       |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 텔런트 | YG엔터테이먼트   |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
- celeb 테이블에서 이름과 나이를 나이순으로 조회
select age, name from celeb
order by age (ASC);    

+------+--------+
| age  | name   |
+------+--------+
|   23 | 이수현 |
|   28 | 이미주 |
|   28 | 송강   |
|   29 | 아이유 |
|   41 | 강동원 |
|   48 | 차승원 |
|   50 | 유재석 |
+------+--------+
7 rows in set (0.00 sec)
  • 정렬 조건 추가 시 by 절에 정렬 조건 추가
    - 위 예제에서 나이 오름차순 정렬 후 이름 내림차순으로 정렬 시
    order by age (asc), name desc 입력
profile
데이터분석 스터디노트🧐✍️
post-custom-banner

0개의 댓글