MySQL

1rock·2025년 1월 16일

MySQL은 데이터베이스 소프트웨어입니다. 일반적으로 데이터를 추가하거나 검색, 추출하는 기능을 모두 포함해서 데이터베이스라고 부릅니다.

MySQL은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
MySQL은 PHP스크립트 언어와 상호 연동이 잘되면서 오픈소스로 개발된 무료 프로그램입니다.
그래서 홈페이지나 쇼핑몰(워드프레스, Cafe24, 제로보드, 그누보드)등 일반적인 웹 개발에 널리 사용하고 있습니다.

1.MySQL 설치

mamp다운로드

https://www.mamp.info/en/downloads/

2.MySQL 로그인

sudo ./mysql -uroot -p

3.데이터베이스

데이터베이스 생성

create database "이름";

데이터베이스 보기

show databases;

데이터베이스 삭제

drop database "이름" ;

데이터 베이스 사용하기

use 데이터베이스명

3. 테이블

테이블은 데이터베이스 내에 정보를 담는 역할

테이블 생성하기

create "데이터베이스이름" "테이블명"(
필드명,데이터형, 필드 설명
)인코딩 설정 테이블 설명

// 회원의 일련번호
// 회원의 아이디
// 회원의 이름
// 회원의 비밀번호
// 회원의 휴대전화 번호
// 회원의 이메일
// 회원의 생일
// 회원의 성별
// 회원의 가입시기

create table Member(
myMemberID int unsigned auto_increment comment '고객의 고유번호',
useID varchar(15) not null comment '고객 아이디',
uName varchar(10) not null comment '고객명',
uPassword varchar(30) not null comment '고객 비밀번호',
Email varchar(30) not null comment '고객의 이메일 주소',
BirthDay char(10) not null comment '고객의 생일',
Gender enum('m','w','x') default 'x' comment '고객 성별 m은 남성 w은 여성 x는 선택하지 않음',
regTime datetime not null comment '회원가입 시간',
primary key(myMemberID))
charset=utf8 comment='고객 정보 테이블';

테이블 목록 보기

show tables

테이블 보기

desc 테이블명

테이블 삭제하기

drop table 테이블명

테이블 초기화

TRUNCATE 테이블명

TRUNCATE mymember;

4. 테이블 필드 수정하기

필드 추가하기

ALTER TABLE 테이블명 ADD 추가할 옵션들 설정
//필드 위치 설정
ALTER TABLE 테이블명 ADD 추가할 옵션 설정 AFTER 위치

ALTER TABLE mymember3 ADD phone varchar(13) not null comment '고객의 연락처'

//위치 
ALTER TABLE mymember3 ADD phone varchar(13) not null comment '고객의 연락처' AFTER useID;

필드 삭제하기

ALTER TABLE 테이블명 DROP 삭제할 필드명

ALTER TABLE mymember3 DROP phone

필드 수정하기

ALTER TABLE 테이블명 MODIFY 벼녀경할 옵션들 설정

ALTER TABLE mymember3 MODIFY upassword varchar(15) not null comment '패스워드'

5. 테이블 데이터 입력하기

데이터 입력하기

INSERT INTO 테이블명(필드명) VALUES(입력할 데이터)

INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('1rrock','원락','1234','zxcv1685@naver.com','1996-03-02','m',now());
Query OK, 1 row affected (0.00 sec)
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('yein','예인','1234','sscv1@naver.com','1999-03-22','w',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('areum','아름','1234','jangar6621@gmail.com','2020-12-28','w',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('hong','홍기영','123456','hgy@naver.com','2019-12-28','m',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('paneoy','hyunseo','1234','paneoy@gmiall.com','1996-04-18','w',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthday, gender, regTime) VALUES('kjw911108','지원','1234','kimjiwon911108@gmail.com','1991-11-08','w',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('park','상현','1234','park@naver.com','1999-02-03','m',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthday, gender, regTime) VALUES('limnangman', '임낭만', '1234', 'limnangman96@naver.com', '1996-06-03', 'w', now());
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('heemwon','힘원','1234','heemwon@gmail.com','1994-06-03','w',now());
INSERT INTO mymember5(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('min','민','1234','min@naver.com','1997-03-11','w',now());

데이터 불러오기

SELECT 필드명 FROM 테이블명

//전체 불러오기
SELECT * FROM mymember

//이름, 아이디
SELECT uname, useID FROM mymember4;

SELECT 필드명 FROM 테이블명 WHERE 조건식

//회원아이디 1번정보 검색하기
SELECT * FROM mymember4 WHERE myMemberID = 1;

//회원 아이디중 naver가 있는 메일 검색하기
SELECT * FROM mymember4 WHERE email LIKE '%naver%';

SELECT * FROM mymember4 WHERE email LIKE '%naver';

SELECT * FROM mymember4 WHERE email LIKE 'naver%';

//회원 아이디가 1번부터 5번까지 불러오기
SELECT * FROM mymember4 WHERE myMemberID >=1 AND myMemberID <=5;

//회원 이름중에 첫 글자가 '웹'이거 '홍'인 사람만 검색
SELECT * FROM mymember4 WHERE uname LIKE '웹%' OR uname LIKE '홍%';

6. 테이블 데이터 수정하기

데이터 값 변경하기

UPDATE 테이블명 SET 필드명,조건

//회원 아이디1번 핸드폰 번호 변경
UPDATE mymember SET phone = '010-9999-2222' WHERE myMemberID = 1;

//회원 아이디5번 핸드폰 번호, 아이디 변경
UPDATE mymember SET phone = '010-9999-2222', useID = 'min555' WHERE myMemberID = 1;

//데이터 일괄적으로 변경하
UPDATE mymember SET phone = '010-9999-2222';

데이터 값 삭제하기(레코드 삭제)

DELETE FROM 테이블명 조건

DELETE FROM mymember WHERE myMemberID = 11;

//IN()
DELETE FROM mymember WHERE myMemberID IN(1,2,3);

7. 테이블 합치기(Join)

create table member(
memberID int unsigned auto_increment comment '고객의 고유번호',
userID varchar(15) not null comment '고객 아이디',
userName varchar(10) not null comment '고객명',
userPassword varchar(30) not null comment '고객 비밀번호',
userEmail varchar(30) not null comment '고객의 이메일 주소',
userBirthDay char(10) not null comment '고객의 생일',
userGender enum('m','w','x') default 'x' comment '고객 성별 m은 남성 w은 여성 x는 선택하지 않음',
regTime datetime not null comment '회원가입 시간',
primary key(memberID))
charset=utf8 comment='고객 정보 테이블';
create table review(
reviewID int unsigned auto_increment comment '리뷰 고유번호',
memberID int unsigned comment '리뷰를 작성한 회원번호',
reviewContent tinytext comment '리뷰내용',
regTime datetime not null comment '리뷰 작성 시간',
primary key(reviewID))
charset=utf8 comment='상품 리뷰 테이블';
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('yein','예인','1234','sscv1@naver.com','1999-03-22','w',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('areum','아름','1234','jangar6621@gmail.com','2020-12-28','w',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('hong','홍기영','123456','hgy@naver.com','2019-12-28','m',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('paneoy','hyunseo','1234','paneoy@gmiall.com','1996-04-18','w',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('kjw911108','지원','1234','kimjiwon911108@gmail.com','1991-11-08','w',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('park','상현','1234','park@naver.com','1999-02-03','m',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('limnangman', '임낭만', '1234', 'limnangman96@naver.com', '1996-06-03', 'w', now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('heemwon','힘원','1234','heemwon@gmail.com','1994-06-03','w',now());
INSERT INTO member(userID, userName, userPassword, userEmail, userBirthDay, userGender, regTime) VALUES('min','민','1234','min@naver.com','1997-03-11','w',now());

INSERT INTO review(memberID, reviewContent, regTime) VALUES(2, '이 신발 너무 이쁩니다.', now());
INSERT INTO review(memberID, reviewContent, regTime) VALUES(3, '이 신발 사지마세요.', now());
INSERT INTO review(memberID, reviewContent, regTime) VALUES(4, '이 신발 너무 비쌉니다.', now());
INSERT INTO review(memberID, reviewContent, regTime) VALUES(5, '이 신발 별로네요', now());
INSERT INTO review(memberID, reviewContent, regTime) VALUES(6, '이 신발 신을만 하네요~', now());

JOIN문 사용하기

SELECT 필드명 FROM 테이블명 엘리어스 JOIN 연결할 테이블명 엘리어스 ON

SELECT m.userName, r.reviewContent, r.regTime
FROM member m JOIN review r
ON (m.memberID = r.memberID);

필드명을 변경하여 표시하기

SELECT 필드명 AS 출력할 필드명 FROM 테이블명

SELECT m.userName, r.reviewContent, r.regTime
AS reviewDate
FROM member m JOIN review r
ON (m.memberID = r.memberID);

LEFT JOIN

SELECT m.userName, r.reviewContent, r.regTime
FROM member m LEFT JOIN review r
ON (m.memberID = r.memberID);

8. 집계함수

CREATE TABLE CodingRecord (
codingID int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '학생 점수',
class tinyint unsigned comment '소속 클래스',
html tinyint unsigned NOT NULL comment 'html 점수',
css tinyint unsigned NOT NULL comment 'css 점수',
javascript tinyint unsigned NOT NULL comment '자바스크립트 점수',
jquery tinyint unsigned NOT NULL comment '제이쿼리 점수',
react tinyint unsigned NOT NULL comment '리액트 점수',
PRIMARY KEY (codingID))
charset=utf8 comment='코딩 성적';
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(90, 85, 5, 10, 100);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(20, 5, 15, 20, 10);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(50, 100, 50, 10, 100);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(80, 80, 10, 60, 40);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(40, 30, 30, 10, 100);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(20, 80, 45, 50, 70);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(5, 60, 70, 10, 50);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(90, 80, 60, 40, 80);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(70, 10, 5, 10, 10);
INSERT INTO CodingRecord(html, css, javascript, jquery, react) VALUES(90, 80, 80, 30, 100);

집계함수의 종류

종류설명
count()레코드 수(null은 포함되지 않음)
count(*)레코드 수(null을 포함)
sum()합계
avg()평균
max()최댓값
min()최솟값
//레코드 갯수 구하기
SELECT count(class) FROM CodingRecord;
SELECT count(*) FROM CodingRecord;

//html 점수 합계
SELECT sum(html) FROM CodingRecord;

//1번부터 5번까지 CSS 점수 평균
SELECT avg(css) FROM CodingRecord WHERE codingID >= 1 AND codingID <=5;

//javascript 가장 높은 점수
SELECT max(javascript) FROM CodingRecord;

//javascript 가장 낮은 점수
SELECT min(javascript) FROM CodingRecord;

그룹별 집계

그룹별 집계는 특정 집단의 집계함수를 이용하여 값을 표시하는 방법입니다.

SELECT 필드명 FROM 테이블명 GROUP BY 필드명

GROUP BY

SELECT class, avg(react) FROM CodingRecord WHERE class IN(1,2,3,4) GROUP BY class;

HAVING

//리액트 점수가 80점 이상만 출력
SELECT class, sum(react) FROM CodingRecord 
WHERE class IN(1,2,3,4) GROUP BY class 
HAVING sum(react) >= 80;

ORDER BY

SELECT 필드명 FROM 테이블명 ORDER BY 정렬 DESC / ASC

SELECT codingID, css FROM CodingRecord ORDER BY css DESC;
//내림차순
SELECT codingID, css FROM codingRecrod ORDER BY css DESC;

//오름차순
SELECT codingID, css FROM codingRecrod ORDER BY css ASC;

//반별
SELECT class, sum(javascript) FROM CodingRecord
WHERE class IN(1,2,3) GROUP BY class
ORDER BY sum(javascript) DESC;

LIMIT

SELECT 필드명 FROM 테이블명 LIMIT 3;

//제한
SELECT * FROM CodingRecord LIMIT 3;

SELECT * FROM CodingRecord ORDER BY html DESC LIMIT 5;

SELECT 필드명 FROM 테이블명 LIMIT 순번, 불러올 갯수

SELECT * FROM CodingRecord LIMIT 3    //첫 번째 페이지
SELECT * FROM CodingRecord LIMIT 3, 3 //두 번째 페이지
SELECT * FROM CodingRecord LIMIT 6, 3 //세 번째 페이지
profile
FRONT_END_DEVELOMENT

0개의 댓글