[Data Base] SQL 문법

Jae ·2021년 11월 15일
0

Data Base

목록 보기
5/7

기본적인 SQL 문법 알아보기


mysql을 실행하고 접속했다면, 이제 SQL 문법을 이용해 기본적인 데이터 처리 기능인
Create(생성), Read(읽기), Update(갱신), Delete(삭제)가 가능하다. 데이터베이스를 설계하기 위한 기본적인 문법을 알아보자.

SQL 기본 쿼리문


다음은 SQL 사용에 필요한 기본 문법이다.

  • Select
  • Select Distinct
  • Where
  • And, Or, Not
  • Order By
  • Insert Into
  • Null Values
  • Update
  • Delete
  • Count
  • Like
  • Wildcards
  • Aliases
  • Joins
    • Inner Join
    • Left Join
    • Right Join
  • Group By

SQL 데이터베이스 관련 용어

  • SQL Create DB
  • SQL Drop DB
  • SQL Create Table
  • SQL Drop Table
  • SQL Alter Table
  • SQL Not Null
  • SQL Unique
  • SQL Primary Key
  • SQL Foreign Key
  • SQL Default
  • SQL Auto Increment
  • SQL Dates

SQL 데이터베이스 관련 명령어


데이터베이스 생성

CREATE DATABASE DB이름;

데이터베이스 실행

USE DB이름;

테이블 생성

USE 를 이용해 데이터베이스를 선택했다면, 이제 테이블을 만들 수 있다. 다음은 user라는 테이블을 만드는 예제다. 테이블은 필드(표의 열)와 함께 만들어야 한다. 다음과 같은 필드 조건이 있다고 가정해보자.

필드이름필드타입그 외 속성
id숫자Primary key이면서 자동 증가하도록 설정
name문자열(최대 255개)
email문자열(최대 255개)
CREATE TABLE user (
 id int PRIMARY KEY AUTO_INCREMENT,
 name varchar(255),
 email varchar(255)
);

SQL 콘솔에서 Enter 키를 이용해 여러 줄의 코드를 입력할 수 있다. 위와 같이 입력하고, 다음에서 설명할 DESCRIBE 명령어를 이용해 테이블 정보를 확인할 수 있다.

테이블 정보 확인

아래 명령어를 통해 테이블 정보를 확인할 수 있다.

DESCRIBE user;

입력하면 아래와 같은 user 테이블의 정보를 확인할 수 있다.

mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
| email | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

자주 쓰이는 SQL 명령어


MySQL에서 자주 사용하는 명령어 몇 가지를 간략하게 살펴보자.

SELECT

  • SELECT는 데이터셋에 포함될 특성을 특정한다.
일반 문자열
SELECT 'hello wolrd'
숫자
SELECT 2
간단한 연산
SELECT 15 + 3

FROM

  • 테이블과 관련한 작업을 할 경우 반드시 입력해야 한다. FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시한다.
특정 특성을 테이블에서 사용
SELECT 특성_1
FROM 테이블_이름
몇 가지의 특성을 테이블에서 사용
SELECT 특성_1, 특성_2
FROM 테이블_이름
테이블의 모든 특성을 선택
SELECT *
FROM 테이블_이름

=> * 는 와일드카드 (wildcard) 로 전부 선택할 때에 사용된다.

WHERE

  • 필터 역할을 하는 쿼리문입니다. WHERE은 선택적으로 사용할 수 있다.
특정 값과 동일한 데이터 찾기

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"
특정 값을 제외한 값을 찾기

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 <> "특정 값"
특정 값보다 크거나 작은 데이터를 필터할 때에는 '<', '>', 비교하는 값을 포함하는 '이상', '이하' 값은 '<=', '>=' 을 사용한다.

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 > "특정 값"

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 <= "특정 값"
문자열에서 특정 값을 포함한 값들을 필터할 때에는 'LIKE''\%' 혹은 '\*' 를 사용한다.

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"
값이 없는 경우 'NULL' 을 찾을 때에는 'IS' 와 같이 사용한다.

SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL
값이 없는 경우를 제외할 때에는 'NOT' 을 추가해 이용한다.

SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL

ORDER BY

  • 돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정한다. ORDER BY는 선택적으로 사용할 수 있다.
기본 정렬은 오름차순이다.

SELECT *
FROM 테이블_이름
ORDER BY 특성_1
내림차순으로 정렬하기

SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC

LIMIT

  • 결과로 출력할 데이터의 개수를 정할 수 있다. LIMIT은 선택적으로 사용할 수 있다. 그리고 쿼리문에서 사용할 때에는 가장 마지막에 추가한다.
데이터 결과를 200개만 출력한다.

SELECT *
FROM 테이블_이름
LIMIT 200

DISTINCT

  • 유니크한 값을 받고 싶을 때에는 SELECT DISTINCT 를 사용할 수 있다.
특성_1을 기준으로 유니크한 값들만 선택한다.


SELECT DISTINCT 특성_1
FROM 테이블_이름
특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택한다.

SELECT
  DISTINCT
    특성_1
    ,특성_2
    ,특성_3
FROM 테이블_이름

INNER JOIN

  • INNER JOIN 이나 JOIN으로 실행할 수 있다.
둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결합니다.

SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

OUTER JOIN

  • OUTER JOIN 은 다양한 선택지가 있다.
* LEFT OUTER JOIN 으로 LEFT INCLUSIVE을 실행한다.

SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
* RIGHT OUTER JOIN 으로 RIGHT INCLUSIVE을 실행한다.

SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

여러가지 쿼리문 사용하기

  • 아래 예시 코드는 Brazil에서 온 고객을 도시별로 묶은 뒤에, 각 도시 수에 따라 내림차순 정렬한다. 그리고 CustomerId에 따라 오름차순으로 정렬한 3개의 결과만 요청하는 예시다.
여러 쿼리문을 한 번에 써보기

SELECT c.CustomerId, c.FirstName, count(c.City) as 'City Count'
FROM customers AS c
JOIN employees AS e ON c.SupportRepId = e.EmployeeId
WHERE c.Country = 'Brazil'
GROUP BY c.City
ORDER BY 3 DESC, c.CustomerId ASC
LIMIT 3

0개의 댓글