[26일차] DBMS 개요 & SQL 실습 & SELECT
2023. 1. 30. 17:32ㆍ데이터 엔지니어링 과정/MySQL
목차
1. DBMS 개요
2. 데이터베이스 필수 용어
3. MySQL 전체 운영 실습
4. 특정한 조건의 데이터만 조회하는 <SELECT ··· FROM ··· WHERE>
1. DBMS 개요
1. 데이터베이스의 정의와 특징
- 데이터베이스 : 데이터의 집합
- 여러 명의 사용자나 응용 프로그램이 공유하고 동시에 접근 가능
- 데이터의 저장 공간 자체
- DBMS : 데이터베이스를 관리·운영하는 역할을 하는 소프트웨어의 개념특징
- 여러 명의 사용자나 응요 프로그램이 이 DBMS가 관리하는 데이터에 동시에 접속하고 데이터 공유하게 됨
➡ 데이터가 집중적으로 관리됨
- 여러 명의 사용자나 응요 프로그램이 이 DBMS가 관리하는 데이터에 동시에 접속하고 데이터 공유하게 됨
- 데이터베이스 & DBMS 특징
- 데이터의 무결성
: 데이터에 오류가 있어서는 안되기 때문에 제약 조건이라는 특성을 가짐 - 데이터의 독립성
: 데이터베이스의 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용 프로그램은 영향 받지 않아야 함 - 보안
: 데이터를 소유한 사람이나 데이터에 접근이 허가된 사람만 접근 가능 - 데이터 중복의 최소화
: 동일한 데이터가 여러 개 중복되어 저장되는 것 방지 - 응용 프로그램 제작 및 수정이 쉬워짐
- 데이터의 안정성 향상
: 대부분의 DBMS가 제공하는 백업, 복업 기능을 이용함으로써, 데이터가 깨지는 문제가 발생할 경우에 복원 혹은 복구하는 방법이 명확해짐
- 데이터의 무결성
3. DBMS 분류
- 계층형 DBMS
- 망형 DBMS
- 관계형 DBMS
- 모든 데이터는 테이블에 저장되므로 테이블이라는 구조가 가장 기본적이고 중요함
- 테이블
- 데이터를 효율적으로 저장하기 위한 구조
- 여러 개의 테이블로 나누어서 저장함으로써 불필요한 공간의 낭비를 줄이고 데이터 저장의 효율성 보장
- 테이블의 관계를 기본 키와 외래 키를 사용해서 맺어 줌으로써, 두 테이블을 부모와 자식의 관계로 묶을 수 있음
- 테이블
- 모든 데이터는 테이블에 저장되므로 테이블이라는 구조가 가장 기본적이고 중요함
2. 데이터베이스 필수 용어
- 데이터 : 정보는 있으나 아직 체계화 되지 못한 상태인 단편적인 정보
- 테이블 : 표 형태로 표현한 것
- 데이터베이스 DB : 테이블이 저장되는 저장소
- DBMS : 데이터베이스를 관리하는 시스템 또는 소프트웨어
- 열 : 각 테이블은 열로 구성됨
- 열 이름 : 각 열을 구분하기 위한 이름. 각 테이블 내에서 중복되지 않고 고유해야 함
- 데이터 형식 : 열의 데이터 형식. 테이블을 생성할 때 열 이름과 함께 지정
- 행 : 실질적인 데이터
- 기본 키 (Primary Key) 열 : 각 행을 구분하는 유일한 열. 중복되어서는 안되고 비어 있어서도 안됨.
- 외래 키 (Foreign Key) 필드 : 두 테이블의 관계를 맺어주는 키
- SQL : 사람과 DBMS가 소통하기 위한 말
❗대소문자 구분 안해욥❗
3. MySQL 전체 운영 실습
1. 데이터 베이스& 테이블 설정, 데이터 입력
2. 데이터 활용
- 제품 테이블의 모든 데이터 조회 SELECT
SELECT * from productTBL;
- 회원 테이블 중 이름과 주소만 출력
SELECT memberName,memberAddress from memberTBL;
- "지운이"에 대한 정보 추출
- WHERE 절을 사용하면 조건 지정 가능
Select * From memberTBL where membername= "지운이";
- 새로운 테이블 생성 CREATE
- ❗주의❗
중간에 공백이 있는 개체의 이름을 사용할 때는 백틱`으로 묶어줘야 함
- ❗주의❗
CREATE TABLE `my TestTBL` (id INT);
- 테이블 삭제 DROP
DROP TABLE `my TestTBL`;
4. SELECT문
1. USE 구문
: 현재 사용하는 데이터베이스를 지정 또는 변경하는 구문
2. 데이터베이스에서 찾아서 조회
🔎 fist_name과 gender을 찾아보자
- 현재 서버에 있는 데이터 베이스 있는지 조회
SHOW DATABASES;
- 사용할 데이터 베이스 지정
USE employees;
- 현재의 데이터베이스에 있는 테이블 정보 조회
SHOW TABLE STATUS;
- 테이블의 열 확인
DESCRIBE employees;
- 최종적으로 데이터 조회
SELECT first_name, gender FROM employees;
- 열 이름 별칭 붙여서 조회 AS
- AS는 생략 가능
SELECT first_name AS 이름, gender 성별, hire_date `회사 입사일` FROM employees;
3. 데이터베이스와 테이블 생성
- DB만들기
DROP DATABASE IF EXITS sqldb;
CREATE DATABASE sqldb;
- 테이블 만들기
USE sqldb;
CREATE TABLE usertbl -- 회원 테이블
( userID CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
name VARCHAR(10) NOT NULL, -- 이름
birthYear INT NOT NULL, -- 출생년도
addr CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
mobile1 CHAR(3), -- 휴대폰의 국번(011, 016, 017, 018, 019, 010 등)
mobile2 CHAR(8), -- 휴대폰의 나머지 전화번호(하이픈제외)
height SMALLINT, -- 키
mDate DATE -- 회원 가입일
);
CREATE TABLE buytbl -- 회원 구매 테이블(Buy Table의 약자)
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
userID CHAR(8) NOT NULL, -- 아이디(FK)
prodName CHAR(6) NOT NULL, -- 물품명
groupName CHAR(4) , -- 분류
price INT NOT NULL, -- 단가
amount SMALLINT NOT NULL, -- 수량
FOREIGN KEY (userID) REFERENCES usertbl(userID)
);
혹은
- 데이터 입력
INSERT INTO usertbl VALUES('LSG', '이승기', 1987, '서울', '011', '1111111', 182, '2008-8-8');
INSERT INTO usertbl VALUES('KBS', '김범수', 1979, '경남', '011', '2222222', 173, '2012-4-4');
INSERT INTO usertbl VALUES('KKH', '김경호', 1971, '전남', '019', '3333333', 177, '2007-7-7');
INSERT INTO usertbl VALUES('JYP', '조용필', 1950, '경기', '011', '4444444', 166, '2009-4-4');
INSERT INTO usertbl VALUES('SSK', '성시경', 1979, '서울', NULL , NULL , 186, '2013-12-12');
INSERT INTO usertbl VALUES('LJB', '임재범', 1963, '서울', '016', '6666666', 182, '2009-9-9');
INSERT INTO usertbl VALUES('YJS', '윤종신', 1969, '경남', NULL , NULL , 170, '2005-5-5');
INSERT INTO usertbl VALUES('EJW', '은지원', 1972, '경북', '011', '8888888', 174, '2014-3-3');
INSERT INTO usertbl VALUES('JKW', '조관우', 1965, '경기', '018', '9999999', 172, '2010-10-10');
INSERT INTO usertbl VALUES('BBK', '바비킴', 1973, '서울', '010', '0000000', 176, '2013-5-5');
INSERT INTO buytbl VALUES(NULL, 'KBS', '운동화', NULL , 30, 2);
INSERT INTO buytbl VALUES(NULL, 'KBS', '노트북', '전자', 1000, 1);
INSERT INTO buytbl VALUES(NULL, 'JYP', '모니터', '전자', 200, 1);
INSERT INTO buytbl VALUES(NULL, 'BBK', '모니터', '전자', 200, 5);
INSERT INTO buytbl VALUES(NULL, 'KBS', '청바지', '의류', 50, 3);
INSERT INTO buytbl VALUES(NULL, 'BBK', '메모리', '전자', 80, 10);
INSERT INTO buytbl VALUES(NULL, 'SSK', '책' , '서적', 15, 5);
INSERT INTO buytbl VALUES(NULL, 'EJW', '책' , '서적', 15, 2);
INSERT INTO buytbl VALUES(NULL, 'EJW', '청바지', '의류', 50, 1);
INSERT INTO buytbl VALUES(NULL, 'BBK', '운동화', NULL , 30, 2);
INSERT INTO buytbl VALUES(NULL, 'EJW', '책' , '서적', 15, 1);
INSERT INTO buytbl VALUES(NULL, 'BBK', '운동화', NULL , 30, 2);
- 데이터 확인
Select * from usertbl;
Select * from buytbl;
4. 특정한 조건의 데이터만 조회하는 <SELECT ··· FROM ··· WHERE>
1. 기본적인 WHERE
- 조회하는 결과에 특정한 조건을 줘서 원하는 데이터만 보고 싶을 때 사용
ex) "김경호" 이름 찾기
SELECT * FROM usertbl WHERE name ="김경호"
2. 관계 연산자의 사용
- 1970년 이후 출생, 신장 182 이상인 사람의 아이디와 이름 조회
SELECT userID, Name FROM usertbl WHERE birthYear>=1970 AND height>=182;
- 1970년 이후 출생 or 신장 182 이상
SELECT userID, Name FROM usertbl WHERE birthYear>=1970 OR height>=182;
3. BETWEEN ··· AND와 IN() 그리고 LIKE
- 연속적인 값의 범위를 구할 때 BETWEEN AND
ex) 키가 180에서 183 사이
SELECT name, height FROM usertbl WHERE height BETWEEN 180 and 183;
- 연속적인 값인 아닌 이산적인 값을 구할 때 IN()
ex) 지역이 경남, 전남, 경북인 사람의 정보
SELECT name, addr FROM usertbl WHERE addr IN ('경남', '전남', '경북');
- 문자열의 내용 검색 LIKE
- % 뒤에 무엇이든 허용
- _ 한 글자만 허용
- 성이 김씨인 사람
SELECT name FROM usertbl WHERE name LIKE '김%';
- 이름이 종신인 사람
SELECT name FROM usertbl WHERE name LIKE '_종신';
'데이터 엔지니어링 과정 > MySQL' 카테고리의 다른 글
[29일차] JOIN & 데이터베이스 (0) | 2023.02.02 |
---|---|
[27일차] SELECT, INSERT, WITH (0) | 2023.01.31 |