MySQL

[ MySQL ] 03. 테이블 생성, 데이터 추가 ,데이터 조회

변쌤() 2024. 6. 3. 15:08
반응형

테이블 생성, 데이터 추가, 데이터 조회

 

 

  • 테이블 생성: CREATE TABLE로 테이블 구조 정의
  • 데이터 추가: INSERT INTO로 데이터를 삽입
  • 데이터 조회: SELECT로 테이블 데이터를 확인

 

# 테이블 생성

 

문법 

CREATE TABLE table_name (
    column1 datatype [constraints],
    column2 datatype [constraints],
    ...
);

 

테이블명 규칙 

1. 알파벳과 숫자, 언더스코어(_) 사용:

  • 테이블명은 알파벳(a-z, A-Z), 숫자(0-9), 언더스코어(_)만을 사용할 수 있습니다.
  • 테이블명은 알파벳 또는 언더스코어로 시작해야 하며 숫자로 시작할 수 없습니다.

2. 대소문자 구분:

  • MySQL은 기본적으로 테이블명에서 대소문자를 구분합니다. 하지만 운영 체제에 따라 달라질 수 있으므로, 일관된 대소문자 사용을 권장합니다.
  • 예: Users와 users는 다른 테이블로 인식될 수 있습니다.

3. 예약어 사용 금지:

  • SQL 예약어(예: SELECT, INSERT, TABLE 등)를 테이블명으로 사용하면 안 됩니다. 만약 예약어를 사용해야 하는 경우, 백틱(`)으로 감싸야 하지만, 권장되지 않습니다.
  • 예: select라는 테이블명을 사용하려면 `select`로 감싸야 합니다.

4. 특수 문자 및 공백 사용 금지:

  • 공백, 하이픈(-), 슬래시(/) 등의 특수 문자는 사용할 수 없습니다.

5. 길이 제한:

  • MySQL의 테이블명은 최대 64자까지 허용됩니다. 너무 긴 이름을 피하고, 가능한 한 간결하고 의미 있는 이름을 사용하는 것이 좋습니다.

6. 명명 규칙 컨벤션:

  • 단수형 사용: 테이블명은 단수형을 사용하는 것이 좋습니다. 예: User (좋음) vs. Users (비추천).
  • 스네이크 케이스: 단어 간 구분이 필요한 경우, 언더스코어(_)를 사용하여 스네이크 케이스로 작성합니다. 예: user_profile.
  • 프리픽스 사용: 필요한 경우, 테이블명에 프리픽스를 사용하여 테이블 그룹을 구분할 수 있습니다. 예: app_user, app_order.

7. 의미 있는 이름 사용:

  • 테이블명은 해당 테이블이 나타내는 데이터를 명확하게 설명할 수 있어야 합니다. 예: 사용자 데이터를 저장하는 테이블은 User 또는 UserProfile과 같이 명명합니다

 

예시)

1. 단수형 & 스네이크 케이스 예시:

  • user : 사용자 정보를 저장하는 테이블.
  • user_profile : 사용자 프로필 정보를 저장하는 테이블.
  • order : 주문 정보를 저장하는 테이블.
  • product : 상품 정보를 저장하는 테이블.
  • order_item : 주문에 포함된 각 상품을 저장하는 테이블.
  • category : 상품 카테고리 정보를 저장하는 테이블.
  • payment_transaction : 결제 트랜잭션 정보를 저장하는 테이블.

2. 프리픽스 활용 예시:

  • app_user : 애플리케이션 사용자를 관리하는 테이블.
  • app_user_role : 사용자의 역할을 관리하는 테이블.
  • ecom_order : 전자 상거래 주문 정보를 저장하는 테이블.
  • ecom_cart : 장바구니 정보를 저장하는 테이블.

3. 다양한 목적에 따른 테이블명 예시:

  • blog_post : 블로그 게시물 정보를 저장하는 테이블.
  • blog_comment : 블로그 게시물에 달린 댓글 정보를 저장하는 테이블.
  • invoice : 청구서 정보를 저장하는 테이블.
  • shipment : 배송 정보를 저장하는 테이블.
  • inventory : 재고 정보를 저장하는 테이블.
  • employee : 직원 정보를 저장하는 테이블.
  • attendance : 직원 출근 기록을 저장하는 테이블.

 

 

예)

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    age INT,
    hire_date DATE DEFAULT CURRENT_DATE
);

 

 

CREATE TABLE employee (
    emp_id CHAR(5) NOT NULL PRIMARY KEY,
    phone CHAR(13) NOT NULL,
    UNIQUE KEY phone (phone)
);

 

 

  • UNIQUE:
    • 이 제약조건은 중복된 값을 허용하지 않습니다. 즉, phone 컬럼에 입력되는 모든 값은 고유해야 합니다. 두 개 이상의 레코드에서 같은 값이 있을 수 없습니다.
  • KEY:
    • UNIQUE 제약조건은 사실상 인덱스와 유사하게 동작합니다. UNIQUE KEY는 해당 컬럼에 고유 인덱스를 생성하여, 중복된 값이 입력될 때 오류를 발생시킵니다. 이를 통해 중복 값이 입력되는 것을 막을 수 있습니다.
  • phone (phone):
    • 이 부분은 phone 컬럼에 대해 고유 제약을 설정하는 것을 의미합니다. phone 필드는 직원의 전화번호를 나타내는 필드인데, 전화번호는 중복되지 않아야 하기 때문에 UNIQUE KEY로 지정합니다. 따라서 데이터베이스에서 동일한 전화번호가 두 번 이상 입력될 수 없습니다.

 

 

 

 

# 데이터 추가

INSERT INTO 테이블명 (컬럼명, 컬럼명) 
VALUES ('값', '값');

 

INSERT INTO 테이블명 (컬럼명, 컬럼명) 
VALUES 
('값', '값'),
('값', '값'),
('값', '값'),
('값', '값');

 

INSERT INTO 테이블명
VALUES 
('값', '값'),
('값', '값'),
('값', '값'),
('값', '값');

 

 

예)

-- 단일 행 삽입
INSERT INTO employees (name, email, age) VALUES ('John Doe', 'john.doe@example.com', 30);

-- 다중 행 삽입
INSERT INTO employees (name, email, age) VALUES 
('Jane Smith', 'jane.smith@example.com', 25),
('Mark Johnson', 'mark.johnson@example.com', 40);

 

 

#  데이터 조회

 

1. 전체 조회하기 

 

테이블에 추가된 데이터를 확인하려면 SELECT 문을 사용합니다.

SELECT * FROM 테이블;
SELECT * FROM employees;

 

 * 은  애스터리스크 라고 읽습니다.

 

조회 속도가 상대적으로 느리기 때문에  실무에서는 거의 사용하지 않습니다.

 

 

2. 원하는 데이터만 조회하기

컬럼명을 명시할 경우 조회를 원하는 컬럼만 명시할 수 있습니다.

컬럼 나열 순서를 필요에 따라 변경할 수 있습니다.

 

select 컬럼1, 컬럼2, ..., 컬럼n from <테이블이름>;

 

 

3. 중복행 제거 조회하기 ( SELECT DISTINCT ) 

DISTINCT는 중복된 행을 제거하고 고유한 값을 조회할 때 사용

단일 컬럼을 조회하는 SELECT 구문에서 distinct 키워드 사용

select distinct  컬럼1, 컬럼2, ..., 컬럼n from <테이블이름>;

 

 

4. 컬럼에 별칭 

 select 컬럼1 `별칭1`, 컬럼2 `별칭2`, ..., 컬럼n `별칭n` 
   from <테이블이름>;

 

 select 컬럼1 as `별칭1`, 컬럼2 as `별칭2`
   from <테이블이름>;

 

 

5. 컬럼에 산술연산자 정의

연산 결과는 새 컬럼을 생성하거나 계산된 값을 조회하는 데 유용하게 사용

 

SELECT 컬럼1 (+, -, *, /, %) 컬럼2
FROM <테이블명>;

 

 

 

6. 조건 조회 

select [distinct] { * | 컬럼이름 [as `별칭`] … } 
from <테이블이름>
[where 검색조건];

 

 

비교 연산자 

연산자 설명
= 같다 SELECT * FROM students WHERE grade = 3;
!= 또는 <> 다르다 SELECT * FROM students WHERE grade != 3;
> 크다(초과) SELECT * FROM students WHERE age > 20;
< 작다(미만) SELECT * FROM students WHERE age < 20;
>= 크거나 같다 (이상 ) SELECT * FROM students WHERE age >= 18;
<= 작거나 같다 (이하) SELECT * FROM students WHERE age <= 18;
BETWEEN 값이 두 값 사이  SELECT * FROM students WHERE age BETWEEN 18 AND 22;
IN 값이 특정 목록에 포함  SELECT * FROM students WHERE grade IN (1, 2, 3);
LIKE 값이 특정 패턴과 일치  SELECT * FROM students WHERE name LIKE 'J%';
IS NULL 값이 NULL인지 확인 SELECT * FROM students WHERE birthdate IS NULL;

 

논리연산자 

연산자 설명 예시
AND 모든 조건이 참일 때 SELECT * FROM students WHERE grade = 3 AND age > 18;
OR 하나 이상의 조건이 참일 때 SELECT * FROM students WHERE grade = 3 OR age > 18;
NOT 조건을 부정 SELECT * FROM students WHERE NOT grade = 3;

 

1-1)

SELECT 컬럼이름
FROM 테이블이름
WHERE 조건1 OR 조건2;

 

1-2)

SELECT 컬럼이름
FROM 테이블이름
WHERE 조건1 and 조건2;

 

1-3)

SELECT 컬럼이름
FROM 테이블이름
WHERE ( 조건1 and 조건2 ) or 조건3;

 

1-4)

SELECT 컬럼이름
FROM 테이블이름
WHERE 컬럼이름 BETWEEN A AND B;

 

1-5)

SELECT 컬럼이름
FROM 테이블이름
WHERE 컬럼이름 in ( 값, 값,값.. )

 

1-6)

select * | 컬럼이름 from <테이블이름> 
  where 컬럼이름 is [not] null;

 

LINK 

문자열 패턴을 검색할 때 사용되는 연산자

%: 0개 이상의 문자를 대체

_: 정확히 1개의 문자를 대체

 

SELECT 컬럼이름 
FROM 테이블명
WHERE 컬럼이름 LIKE 'J%';

 

SELECT 컬럼이름 
FROM 테이블명
WHERE 컬럼이름 LIKE 'J_';

 

%젠 : 젠으로 끝나는 모든 내용 

이% : 이로 시작하는 모든 내용 

%사% : 앞뒤 구별없이 사가 포함되어 있는 모든 내용

 

# null

 

MySQL에서 **NULL**은 데이터베이스에서 "값이 없음" 또는 **"알 수 없는 값"**을 나타내는 특별한 값입니다. NULL은 값이 없는 상태를 의미하며, 숫자 0이나 빈 문자열('')과는 다릅니다. 이 값은 데이터가 존재하지 않거나 정의되지 않았음을 나타낼 때 사용됩니다. 

  1. 값이 존재하지 않음:
    • NULL은 특정 필드에 값이 존재하지 않거나, 그 값이 아직 입력되지 않은 상태를 의미합니다.
    • 예를 들어, 사용자의 email 필드가 있고, 사용자가 이메일을 입력하지 않은 경우 그 필드는 NULL이 될 수 있습니다.
  2. 0이나 빈 문자열과 다름:
    • NULL은 숫자 0이나 빈 문자열('')과는 완전히 다른 개념입니다.
    • 0은 숫자 값이지만 NULL은 값이 없음을 의미합니다.
    • 빈 문자열('')은 문자열이지만 값이 없는 문자열이고, NULL은 아예 값이 존재하지 않음을 나타냅니다.
  3. NULL과의 비교
    • NULL과의 비교는 항상 주의가 필요합니다. NULL은 그 자체로 알 수 없는 값을 나타내므로, = 연산자로 비교할 수 없습니다.
    • NULL과의 비교는 IS NULL 또는 IS NOT NULL을 사용해야 합니다.

 

IS NULL 은 특정 컬럼의 값이 NULL인지 확인할 때 사용

IS NOT NULL 은 특정 컬럼의 값이 NULL이 아닌지 확인할 때 사용

 

 

# ORDER BY

 

SELECT 컬럼이름1, 컬럼이름2, ...
FROM 테이블이름
where 검색조건
ORDER BY 컬럼이름 [ASC|DESC], 컬럼이름 [ASC|DESC], ...;

 

 

  • column1, column2: 정렬 기준이 될 컬럼.
  • ASC: 오름차순(기본값, 작은 값에서 큰 값으로 정렬).
  • DESC: 내림차순(큰 값에서 작은 값으로 정렬).

문자값: 알파벳순 출력, 한글은 가나다 순으로 출력

숫자값: 가장 작은 값부터 먼저 출력

날짜값: 과거의 날짜부터 출력

 

 

# LIMIT 

SELECT column1, column2, ...
FROM table_name
LIMIT  [offset_value], [row_count] ;

 

 

  • row_count: 가져올 행(row)의 개수입니다.
  • offset_value: (선택사항) 몇 번째 행부터 가져올지를 지정합니다. 기본값은 0이며, 이는 첫 번째 행부터 데이터를 반환한다는 의미입니다

 

 

# 연산자 우선순위

     
1 () 괄호 (우선순위 강제 지정)
10 =, <= ,>, >=, >, <=, < , BTWEEN,IN,LIKE,IS NULL 비교 연산자 , SQL 연산자 
13 NOT 논리 NOT
14 AND 논리 AND
15 OR 논리 OR

 

 

# case 

조건에 따라 다른 값을 반환하거나 특정 작업을 수행할 때 사용하는 제어 흐름 구문입니다. 마치 프로그래밍 언어의 if-else 문처럼 작동하며, 여러 조건을 처리할 때 유용합니다.

CASE문을 사용하면 쿼리문 안에서 조건에 따른 처리 (값연산, 반환등)을 수행 할수 있음

 

CASE WHEN 조건1 THEN 값1
     WHEN 조건2 THEN 값2
     WHEN 조건3 THEN 값3
    ...
    ELSE 값N END

 

SELECT name, salary,
    CASE 
        WHEN salary > 7000 THEN 'High Bonus'
        WHEN salary BETWEEN 5000 AND 7000 THEN 'Medium Bonus'
        WHEN salary < 5000 THEN 'Low Bonus'
        ELSE 'No Bonus'
    END AS bonus
FROM employees;

 

  • salary가 7000보다 크면 'High Bonus', 5000과 7000 사이면 'Medium Bonus', 5000 미만이면 'Low Bonus'를 반환합니다.
  • 그 외의 값은 ELSE 절의 'No Bonus'를 반환합니다.

 

# if 

IF(조건, 참, 거짓)

 

IF(조건1, 참 , IF(조건, 참, 거짓) )
반응형