추가요청)MySQL

김태성·2024년 2월 21일
0

내실 다지기

목록 보기
4/11
post-thumbnail

시작

데이터를 꺼내서 쓸 수 있게 하려고 '파일'을 만들었다.
파일은 편의성, 보안 등의 한계가 있는데 그 한계를 뛰어넘기 위해 고안된 것이 database 다.

데이터베이스를 사용하면 편하고 빠르게 파일을 관리할 수 있다.

데이터베이스의 본질

데이터 베이스의 본질은 입력과 출력이다.
여기서 입력과 출력도 쪼갤 수 있는데

입력

  • create
  • update
  • delete

출력

  • read

이를 합쳐서 CRUE 라고 한다.

File vs Database

File은 정보를 가지고 있는 하나의 데이터이다.
File의 숫자가 많아지면 관리하기도 힘들어진다.

이런 파일들을 관리하기 위해서 만든 보조 애플리케이션이
spread sheet , 즉 스프레드 시트 이다.(스프레드 시트는 데이터베이스가 아니다)
스프레드 시트는 사람이 인지하기 힘든 양의 파일들을
조건을 정하여 관리 , 변형 할 수 있게 된다.

그리고 이러한 스프레드 시트를 사람의 손이 아닌
프로그래머가 자동으로/명령어로 입력/출력을 할 수 있으며,
이것을 데이터베이스라고 한다.

즉 '데이터베이스란, 전자적으로 저장된 체계적인 데이터의 모음'
이라고 할 수 있다.

SQL vs NoSQL

  • SQL = 관계형 데이터베이스
    구조화 쿼리언어를 사용하며, 스키마가 있다.
    수직적 확장이 가능하다
    테이블 기반이다.
    다중 행 트랜잭션에 적합하다.

  • NoSQL = 비관계형 데이터베이스
    구조화되지 않은 데이터를 위한 동적 스키마
    수평적 확장이 가능
    문서,키/값,그래프 또는 와이드 컬럼 스토어
    문서나 JSON과 같은 비정형 데이터에 적합

MySQL의 구조

크게 테이블/데이터베이스(스키마)/데이터베이스 서버 로 나눈다.

  • 테이블 : 관계형 데이터베이스, MySQL의 가장 작은 데이터베이스 단위

  • 데이터베이스 : 테이블을 한 곳으로 모은 것

  • 데이터베이스 서버 : 데이터베이스를 하나로 묶은 것

스키마

  • 데이터베이스 에서 데이터 구조와 표현법, 자료 간의 관계를 '형식언어'로 정의한 것.
    (형식언어 = 구조 , 범위 등이 명확하게 규정되어 있는 언어)

데이터베이스 스키마는 데이터베이스 내에서 데이터가 어떤 구조로 저장되었는지를 나타낸다. 스키마는 데이터사전에 저장되어 추상화 모델링 과정을 통해서 만들어진다.
스키마는 DBMS에서 사용하는 안시/스파크(ANSI/SPARC)모델의 3층 스키마 구조에 따라 외부스키마/개념스키마/내부스키마로 구분된다.

  • 외부스키마 : 사용자 관점의 스키마

  • 개념스키마 : 사용자/DB관리자 관점의 스키마
    데이터베이스에 어떤 데이터가 저장되어있고, 데이터간의 관계를 정의하는 스키마로 접근권한, 보안, 무결성 등의 정의를 포함

  • 내부스키마 : 저장장치/DB 설계자/개발자 관점의 스키마
    개념 스키마를 물리적 저장장치에 구현하는 방법을 저장하는데 사용되고 물리적 구조 및 내부 레코드의 물리적 순서 등을 표현

또한 데이터베이스 스키마는 DB의 논리적 구조나 물리적 구조가 변경되어도 응용프로그램과 데이터가 서로 영향을 미치지 않고 종속되지 않도록 다음과 같은 데이터 독립성을 보장한다.

  • 논리적 독립성 : 외부스키마와 개념스키마 사이의 독립성.
    응용프로그램에 영향을 주지 않고 DB의 논리적 구조(개념스키마)를 변경할 수 있다.

  • 물리적 독립성 : 개념스키마와 내부 스키마 사이의 독립성.
    응용프로그램이나 DB의 논리적 구조에 영향을 주지 않고 DB의 물리적구조(내부스키마)를 변경하고 관리할 수 있다.

테이블구조

  • 열(Column)
    세로칸을 열이라고 한다.
    열은 필드(field) 또는 속성(attribute)라고 한다.

  • 행(row)
    가로칸을 행이라고 한다.
    행은 튜플(tuple)또는 레코드(record)라고도 한다.

  • 값(value)
    행과 열에 대응하는 데이터를 값이라고 한다.

  • 키(key)
    행의 식별자로 이용되는 열을 키(key)ㄷ또는 기본키(primary key)라고 한다.

MySQL 쿼리 기본 구문


CREATE DATABASE[데이터베이스 명]
데이터베이스를 새로 생성할 때 사용

DROP
데이터베이스 자체를 삭제할때 사용
테이블 삭제할때도 가능

DROP DATABASE[데이터베이스명]
DROP TABLE[테이블명]

ALTER
테이블에 컬럼을 추가 및 삭제할때 사용

ALTER TABLE[테이블명] ADD[추가할 컬럼 이름]데이터형(데이터크기)컬럼속성
ALTER TABLE[테이블명] DROP COLUMN[삭제할컬럼이름]

ALTER TABLE Persons
ADD Birthday DATE;
//Persons라는 테이블에 Birthday라는 컬럼을 만듬 이때 속성은 DATE임.

ALTER TABLE Persons
DROP COLUMN Birthday;
//Persons라는 테이블의 Birthday라는 컬럼을 날려버림.

TRUNCATE
테이블에 있는 데이터를 한번에 제거
테이블을 처음 만들었을 때의 상태로 만듬

TRUNCATE TABLE[테이블명]

CREATE TABLE
데이터베이스에 테이블을 새롭게 추가할 때 사용
CREATE DATABASE로 데이터베이스를 생성한 후, use [데이터베이스]로 해당 데이터 베이스를 사용한다고 선언한 후 CREAT TABLE [테이블명]을 이용하여 테이블을 만듬

즉, 원하는 데이터베이스를 선택하고 테이블명을 만들어야된다.

CREATE TABLE[테이블명]

SELECT
데이터셋에 포함될 특성을 특정함

SELECT DISTINCT Country FROM Customers;
//Customers 테이블에서 Country라는 필드만 중복없이 출력해라

SELECT* FROM Customers;
//Customers 테이블에서 모든 필드를 다 출력해라

FROM
테이블과 관련한 작업을 할 경우 반드시 입력해야됨.
FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블 명시

DISTINC
데이터 중복을 제거

SELECT DISTINCT Country FROM Customers;
//Customers 테이블에서 Country라는 필드만 중복없이 출력해라

WHERE
key값을 기준으로 필터역할을 함.

SELECT * FROM Customers 
WHERE City= 'Berlin';
//Customers라는 테이블에서 City라는 필드명에 'Berlin'이라는 값이 들어가 있는것의 row를 전부다 출력하라.

ORDER BY
데이터 결과를 어떤기준으로 정렬하여 출력할지 결정. 선택적 사용
ACS = 오름차순 , DESC = 내림차순
여러번 사용해 줄 수 있으며 이럴경우 쉼표(,)로 구분해야됨

SELECT * FROM Customers
ORDER BY City ;
//Customer라는 테이블에서 City라는 필드명의 값이 있는것들을 오름차순으로 출력

INSERT
테이블에 데이터를 추가
INSERT 다음엔 INTO가 따라옴

INSERT INTO Customers // table
(
CustomerName,  // column
Address, 
City, 
PostalCode,
Country
)
VALUES(
'Hekkan Burger',
'Gateveien 15',
'Sandnes',
'4306',
'Norway'
)
;
//CustomerName이라는 column에 'Hekkan Buger'를 추가 
//나머지도 동일, 

NULL
내가 보려고 하는 필드의 값이 NULL인지 확인
NULL인지 아닌지 확인하려면 IS NULL 사용
아닌지만 확인하려면 IS NOT NULL 사용

SELECT * FROM Customers
WHERE PostalCode IS NULL;
//PostalCode라는 필드에 NUll이 있다면 해당 row를 모두 출력

SELECT * FROM Customers
WHERE PostalCode IS NOT NULL;
//PostalCode라는 필드의 값이 NULL이 아니라면 해당 row를 모두 출력

UPDATE
테이블에 데이터를 수정할 때 사용
보통 UPDATE와 SET는 하나의 세트임

UPDATE Customers
SET City = 'Oslo';
//Customers라는 테이블의 City라는 column의 모든값을 Oslo로 바꾼다.

DELETE
테이블에서 행을 제거하기 위해 DELETE사용
WHERE로 지정하지 않는다면 모든 행을 다 삭제해버림

DELETE FROM Customers
WHERE Country = 'Norway';
//Country가 Norway인 행을 삭제.

DELETE FROM Customers;
//Customers의 테이블에서 모든 행을 삭제.

MIN
매개변수로 주어진 column 내에서 가장 작은값을 반환
주로 SELECT 구문과 함께 사용

SELECT MIN(Price)
FROM Products;
//Price column중 가장 낮은 값을 반환

MAX
min과 같음

COUNT
테이블 전체의 행 숫자를 알고 싶다면 COUNT(*)
특정 column의 숫자를 확인하려면 COUNT(column 이름)
칼럼의 값이 null이 있다면 count 하지 않음.

SELECT * FROM Products
WHERE Price = 18.00;
//Products 테이블에서 Price가 18.00인것을 반환

SELECT COUNT(*) FROM Products
WHERE Price = 18.00;
//Products 테이블에서 Price가 18.00인 행의 숫자를 알려줌 이때 column명은 COUNT(*)

AVG
평균 계산

SELECT AVG(Price)
FROM Products;
//Products테이블의 Price 컬럼의 모든 값의 평균을 냄 이때 컬럼명은 AVG(price)

SUM
특정 컬럼의 합을 계산


SELECT SUM(Price)
FROM Products;
//products테이블의 price컬럼의 모든 값을 더한 결과를 알려줌 이때 컬럼명은 SUM(Price)

LIKE
WHERE절에 주로 사용, 부분적으로 일치하는 컬럼을 찾을때 이용
A%(A로 시작하는 문자) , %A%(A를 포함하는 문자) , %A(A로 끝나는 문자) , A_(A로 시작하는 두글자 문자)

SELECT * FROM Customers
WHERE City LIKE 'a%';
//City라는 컬럼에서 a로 시작하는 열을 반환

SELECT * FROM Customers
WHERE City LIKE '%a';
//City라는 컬럼에서 a로 끝나는 열을 반환

SELECT * FROM Customers
WHERE City LIKE '%a%';
//City라는 컬럼에서 a를 포함하는 열을 반환

SELECT * FROM Customers
WHERE City LIKE 'a%b';
//City라는 컬럼에서 a로 시작하로 b로 끝나는 열을 반환

SELECT * FROM Customers
WHERE City NOT LIKE 'a%';
//City라는 컬럼에서 a이외의 알파뱃으로 시작하는 열을 반환

SELECT * FROM Customers
WHERE City LIKE '_a%';
//City의 두번째 글자가 a인 열을 반환

SELECT * FROM Customers
WHERE City LIKE '[acs]%';
//City의 첫번째 글자가 a or c or s 인 열을 반환

SELECT * FROM Customers
WHERE City LIKE '[a-f]%';
//City의 첫번째 글자가 a~f인 경우 해당 열을 반환

SELECT * FROM Customers
WHERE City LIKE '[!acf]%';
//City의 첫번째 글자가 a,c,f가 아닌경우 해당 열을 반환

IN
WHERE절 내에서 특정값 여러개를 선택하는 SQL 연산자
괄호 안의 값 중 일치하는 것이 있으면 true

SELECT * FROM Customers
WHERE Country IN ('Norway','France');
//Country의 값이 Norway이거나, France인 값이 있는 열을 반환 둘중에 하나라도 있으면 반환

SELECT * FROM Customers
WHERE Country NOT IN('Norway', 'France');
//Country의 값이 Norway, France가 아닌 열을 반환 

BETWEEN
특정한 범위나 값 사이에 있는것을 반환

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
//Price라는 컬럼중 10~20사이에 있는 값을 반환해라 이때 1과 20도 포함

SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
//Price라는 컬럼에서 10~20사이에 있지 않은 열을 반환 

SELECT * FROM Products
WHERE ProductName BETWEEN 'Geitost' AND 'Pavlova';
//productName에서 이름이 Geitost와 Pavlova사이에 있는 열을 반환 (오름차순)

ALIAS(AS)
특정 값에 별칭을 주어 별칭 형태로 접근할 수 있게 한것.
보통 알아보기 힘든 칼럼에 AS를 붙임

SELECT CustomerName,
Address,
PostalCode AS Pno
FROM Customers;
//기존 컬럼이 PostalCode이지만 간결하고 알기쉽게 하기위해 Alias를 사용하여 Pno로 변경 아래 사진 참조하면 이해가 더 간결

SELECT * FROM Customers AS Consumers;
//FROM도 Customers라고 쓰기 싫으니 Consumers로 변경해서 사용이 가능.

JOIN
둘 이상의 테이블을 연결해서 데이터를 검색하는 방법
연결하려면 하나 이상의 공통 컬럼이 있어야됨.

이해가 힘드니 블로그 글을 참고
https://pearlluck.tistory.com/46

SELECT *
FROM Orders LEFT JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
//Orders를 기준으로 Customers와 Left조인을 하였으며 이때 기준은 각각의 CustomerID라는 컬럼임. 최종적으로는 Orders와 JOIN이 공통적으로 가지고 있는것과 Orders가 독자적으로 가지고 있는것만 합친 후 반환 합쳐질때 customers에만 독자적으로 있는 부분은 null처리됨.

SELECT *
FROM Orders INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
//INNER조인으므로 Orders와 Customers의 CustomerID가 공통으로 들어가 있는것만 합친 후 반환

SELECT *FROM Orders
RIGHT JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
//LEFT 조인과 반대

GROUP BY
그룹화 하여 데이터 조회
Count 함수로 데이터를 조회할 경우 전체 개수만 가져오게 되는데
유형별로 개수를 알고 싶을때 사용

SELECT Count(CustomerID),Country
FROM Customers GROUP BY Country;
//customers라는 테이블의 customerID라는 컬럼의 수를 Count로 나타내고 GROUP BY를 사용하여 동일한 Country가 몇개씩 있는지를 나타냄. 여기서 추가로 SELECT Country를 하는 이유는 사용하지 않으면 어느나라가 몇번씩 Count가 되었는지 눈으로 확인하기 어렵기 때문.

SELECT COUNT(CustomerID),Country
FROM Customers
GROUP BY Country
ORDER BY 
COUNT(CustomerID) DESC;
//위와 동일하지만 Order BY를 사용해서 Count가 가장 많은 것부터 내림차순으로 정렬하게끔 수행

SQL 릴레이션 , 튜플 , 속성 , 도메인

두부이걸다줘

profile
닭이 되고싶은 병아리

0개의 댓글

관련 채용 정보