SQL

송영석·2023년 5월 21일
0

데이터스쿨 14기

목록 보기
16/18

Database

Database

  • 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합처

DBMS(Database Mangement System)

  • 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어

관계형 데이터베이스

  • 서로 간에 관계가 있는 데이터 테이블들을 모아둔 데이터 저장공간

SQL

  • 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어
  • 데이터 정의 언어 (DDL: Data Definition Language)
    - CREATE, ALTER, DROP 등의 명령어
  • 데이터 조작 언어 (DML: Data Manipulation Language)
    - INSERT, UPDATE, DELETE, SELECT 등의 명령어
  • 데이터 제어 언어 (DCL: Data Control Language)
    - GRANT, REVOKE, COMMIT, ROLLBACK 등의 명령어

MySQL

Database 관리

현재 Database 목록확인

show databases;
;의 경우, 즉시 실행 의미

Database 이름 지정 및 생성

create database dbname;

해당 Database로 이동(사용)

use dbname;

해당 Database 삭제

drop datbase dbname;


User 관리

User 조회

사용자 정보는 mysql에서 관리하므로 mysql 데이터베이스로 이동 후 조회

use mysql;
select host, user from user;

User 생성 - localhost

  • 호스트 정보가 다른 유저 이름의 경우, 중복가능하다.
현재 PC에서만 접속가능한 사용자를 비밀번호와 함께 생성

create user 'username'@'localhost' identified by 'password';

외부에서 접속가능한 사용자를 비밀번호와 함께 생성

create user 'username'@'%' identified by 'password';

User 삭제

접근 범위에 따라 같은 이름의 사용자라도 별도 삭제해야 함

drop user 'username'@'localhost'
drop user 'username'@'%'

실습


User 권한 관리

Database 만들기

Database(testdb) 생성

create database dbname;

User 만들기

권한 관리를 실습하기 위한 사용자 생성

create user 'username'@'localhost' identified by '1234';

User 권한 확인

사용자에게 부여된 모든 권한 목록 확인

show grants for 'username'@'localhost';

User 권한 부여

사용자에게 특정 데이터베이스의 모든 권한을 부여

grant all on dbname.* to 'username'@'localhost';
* : 모든 것을 의미
새로고침 : flush privileges;

User 권한 제거

사용자에게 특정 데이터베이스의 모든 권한을 삭제

revoke all on dbname.* from 'username'@'localhost';

실습


Table

Table

  • 데이터베이스 안에서 실제 데이터가 저장되는 형태
  • row와 column으로 구성된 데이터 모음

Table 생성

데이터베이스 생성

zerobase에서 사용할 기본 자료형은 다국어를 지원하고 이모지 문자를 사용을 의미

create database zerobase default character set utf8mb4;

Table 생성문법

create table tablename
(
	columnname datatype,
    columnname datatype,
    ...
);

Table 목록확인 문법

show tables;

Table 정보확인 문법

desc tablename;
varchar : pandas에서 object와 비슷

실습


Table 변경&삭제

Table 이름변경 문법

alter table tablename rename new_tablename;

Table column추가 문법

alter table tablename add column columnname datatype;

Table column Datatype변경 문법

alter table tablename modify column columnname datatype;

Table column 이름변경 문법

alter table tablename change column old_columnname new_columnname new_datatype;

위 명령어의 경우 데이터 이름과 데이터타입을 동시에 변경이 가능하다.

Table column삭제 문법

alter table tablename drop column columnname;

Table 삭제 문법

drop table tablename;

실습


INSERT 추가

insert 문법

insert into tablename (column1, column2, ...)
values (value1, value2, ...);

- columns 순서와 values 순서가 일치해야 함
	- 단, 모든 columns를 추가하는 경우에는 컬럼 이름을 지정하지 않아도 됨
- select * from tablename : tablename 안에 있는 모든 데이터 보기

실습


SELECT, WHERE

  1. SELECT
select column1, column2, ... from tablename; (특정컬럼)
select * from tablename; (모든 컬럼)
  1. WHERE
특정 조건을 만족하는 데이터를 가져오기, 갱신하기, 삭제하기
select column1, column2, ... from tablename where condition;

실습


UPDATE, DELETE

  1. UPDATE
update tablename 
set column1 = value1, column2=value2, ... 
where condition;
  1. DELETE
delete from tablename 
where condition;

실습


ORDER BY

order by

  • SELECT 문에서 데이터를 특정 column을 기준으로 오름차순 혹은 내림차순 정렬
select column1, column2, ... 
from tablename (where condition) 
order by column1, column2, ... ASC | DESC;

- order by column1, column2 인 경우, column1, column2 순으로 정렬하여 조회
- ASC : 오름차순 정렬 (ASC를 생략해도 기본은 오름차순 정렬)
- DESC : 내림차순 정렬
- order by column1 ASC, column2 DESC 또한 가능함
	- column1은 오름차순, column2는 내림차순 정렬

실습


Comparison Operators (비교 연산자)

A = B
A > B
A < B
A >= B
A <= B
A <> B (A가 B보다 크거나 작은, 같지않은)
A != B

  • 비교연산자의 경우 WHERE에 넣어야 함
select column1, column2, ... 
from tablename 
where 비교연산자 
order by column1, column2, ... ASC | DESC;

실습


Logical Operations (논리 연산자)

AND : 조건을 모두 만족하는 경우 TRUE
OR : 하나의 조건이라도 만족하는 경우 TRUE
NOT : 조건을 만족하지 않은 경우 TRUE
BETWEEN : 조건값이 범위 사이에 있으면 TRUE
IN : 조건값이 목록에 있으면 TRUE
LIKE : 조건값이 패턴에 맞으면 TRUE

AND

select column1, column2, ... 
from tablename
where condition1 AND condition2 AND condition3 ...
(order by ASC|DESC);

실습

OR

select column1, column2, ...
from tablename
where condition1 OR condition2 OR condition3 ...
(order by ASC|DESC);

- AND 와 OR 중 우선순위는 AND 이다.

실습

NOT

select column1, column2, ...
from tablename
where NOT condition
(order by ASC|DESC);

실습

BETWEEN

select column1, column2, ...
from tablename
where column1 BETWEEN value1 AND value2
(order by ASC|DESC);

실습

IN

select column1, column2, ...
from tablename
where column1 IN (value1, value2, ...)
(order by ASC|DESC);

실습

LIKE

select column1, column2, ...
from tablename
where column1 (not) LIKE pettern
(order by ASC|DESC);

- YG% : 'YG'로 시작하고 뒤에는 어떠한 문자도 와도 상관없다.
- %엔터테이먼트 : '엔터테이먼트'로 끝나는 데이터를 찾는다.
- %가수% : '가수'가 포한된 데이터를 찾는다.
- _G% : 두번째 글자가 'G'인 데이터를 찾는다.
- 가_% : '가'로 시작하고 최소 2글자 이상인 데이터를 찾는다.
- 영%모델 : '영'으로 시작하고 '모델'로 끝나는 데이터를 찾는다.
- column like '%영화배우%' and column like '%탤런트%' 
	: '영화배우'와 '탤런트'를 병행하는 데이터를 찾는다.
- %,% : 찾고자 하는 값이 2개 이상인 경우 

실습


Union

정의

  • 여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어 주는 방법
    - 단 columns의 개수가 같아야 함
  • UNION : 중복된 값을 제거하여 알려줌
  • UNION ALL : 중복된 값도 모두 보여줌
select column1, column2, ... from tableA
UNION | UNION ALL
select column1, column2, ... from tableB;

실습


Join

정의

  • 두 개 이상의 테이블을 결합하는 것
  • INNER JOIN : 공통된 부분
  • FULL OUTER JOIN : 공통된 부분 + 공통되지 않는 부분
  • LEFT JOIN : 공통된 부분 + 왼쪽 테이블의 공통되지 않는 부분
  • RIGHT JOIN : 공통된 부분 + 오른쪽 테이블의 공통되지 않는 부분

INNER JOIN

  • 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식
select column1, column2, ...
from tableA
INNER JOIN tableB
ON tableA.column = tableB.column
where condition
(order by ASC|DESC);

LEFT JOIN

  • 두 개의 테이블에서 공통영역을 포함하고 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
select column1, column2, ...
from tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
where condition
(order by ASC|DESC);

RIGHT JOIN

  • 두 개의 테이블에서 공통영역을 포함하고 오른쪽 테이블의 다른 데이터를 포함하는 조인방식
select column1, column2, ...
from tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
where condition
(order by ASC|DESC);

FULL OUTER JOIN

  • 두 개의 테이블에서 공통영역을 포함하고 양쪽 테이블의 다른영역을 모두 포함하는 조인 방식
  • mySQL은 지원하지 않음
[기본]
select column1, column2, ...
from tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column
where condition
(order by ASC|DESC);

[mySQL]
select column1, column2, ...
from tableA
LEFT JOIN tableB ON tableA.column = tableB.column
UNION
select column1, column2, ...
from tableA
RIGHT JOIN tableB ON tableA.column = tableB.column
where condition
(order by ASC|DESC);

SELF JOIN

select column1, column2, ...
from tableA, tableB, ...
where condition (where절에 기준을 설정)
(order by ASC|DESC);

실습


Concat

CONCAT

  • 여러 문자열을 하나로 합치거나 연결
select CONCAT('string1', string2, ..) from tablename;

ALIAS

  • columns이나 tablename에 별칭 생성
select column AS alias
from tablename;

select column1, column2, ...
from tablename AS alias;

- AS 생략이 가능함

실습

DISTINCT

  • 검색한 결과의 중복 제거
select DISTINCT column1, column2, ...
from tablename;

실습

LIMIT

  • 검색결과를 정렬된 순으로 주어진 숫자만큼만 조회
select column1, column2, ....
from tablename
where condition
LIMIT number;

실습

자료출처: 제로베이스 데이터스쿨

profile
매일매일 작성!!

0개의 댓글