DB/mysql

mysql-기본 쿼리문

STUFIT 2021. 9. 12. 23:43
반응형

안녕하세요. 오늘부터 본격적으로 mysql을 입문하려 합니다.

사실 mysql은 전에도 조금 배우긴 했었지만 짧게 배우고 한동안 사용할 일이 없어서 완전 놓고 있었는데....

취업을 하고 프로젝트를 맡으면서 백앤드 쪽으로 일을 하다보니 db의 중요성을 새삼 느끼게 되서 늦었지만 지금부터라도 차근차근 공부해보려 합니다. ㅎㅎ

저는 '데이터베이스 개론과 실습' 이라는 교재를 베

2021.09.12 - [빅데이터분석가/mysql] - mysql-기본 쿼리문

이스로 공부를 진행할 예정이고 다른 인강들을 통해 db관련된 내용들을 블로그에 남겨보려 해요.

개론적인 내용도 담을테지만 아마 쿼리문 위주로 주석 설명을 달아서 업로드하는게 전부일 수도 있지만 하루하루 공부를 했다는 것을 목표로 하는 것이기 때문에 만약 이 블로그를 보시고 도움이 된다면 정말 좋겠네요 ㅎㅎ

저처럼 현업에서 사용하기 위해, 혹은 취미, 공부하기 위해 등등 다른 목적, 목표를 가지고 계시겠지만 어쨌든 저처럼 차근차근 다 같이 기초부터 진행하면서 실력을 키워나갈 수 있는 그런 계기가 되면 좋겠습니다.

 

먼저, 실습을 위해 아래의 쿼리문을 실행시켜 database에 table들을 생성시키도록 하겠습니다.

/* 이름: demo_madang.sql */
/* 설명 */
 
/* root 계정으로 접속, madang 데이터베이스 생성, madang 계정 생성 */
/* MySQL Workbench에서 초기화면에서 +를 눌러 root connection을 만들어 접속한다. */

/* 비밀번호가 정책때문에 비밀번호 정책에 만족시킬수 없다는 에러가 뜨면 아래 쿼리를 통해 확인 후 변경해야한다 */
show variables like 'validate_password%';
/* 비밀번호 정책 low로 바꾸는 쿼리문 */
set GLOBAL validate_password.policy=LOW;
set GLOBAL validate_password.check_user_name=OFF;
set GLOBAL validate_password.length=6;
/* 마당이란 데이터베이스 있으면 날리고 유저랑 데이터베이스 만들어주자 */
DROP DATABASE IF EXISTS  madang;
DROP USER IF EXISTS  madang@localhost;
create user madang@localhost identified WITH mysql_native_password  by "madang";
create database madang;
grant all privileges on madang.* to madang@localhost with grant option;
commit;

/* madang DB 자료 생성 */
/* 이후 실습은 MySQL Workbench에서 초기화면에서 +를 눌러 madang connection을 만들어 접속하여 사용한다. */
 
USE madang;

CREATE TABLE Book (
  bookid      INTEGER PRIMARY KEY,
  bookname    VARCHAR(40),
  publisher   VARCHAR(40),
  price       INTEGER 
);

CREATE TABLE  Customer (
  custid      INTEGER PRIMARY KEY,  
  name        VARCHAR(40),
  address     VARCHAR(50),
  phone       VARCHAR(20)
);

CREATE TABLE Orders (
  orderid INTEGER PRIMARY KEY,
  custid  INTEGER ,
  bookid  INTEGER ,
  saleprice INTEGER ,
  orderdate DATE,
  FOREIGN KEY (custid) REFERENCES Customer(custid),
  FOREIGN KEY (bookid) REFERENCES Book(bookid)
);

INSERT INTO Book VALUES(1, '축구의 역사', '굿스포츠', 7000);
INSERT INTO Book VALUES(2, '축구아는 여자', '나무수', 13000);
INSERT INTO Book VALUES(3, '축구의 이해', '대한미디어', 22000);
INSERT INTO Book VALUES(4, '골프 바이블', '대한미디어', 35000);
INSERT INTO Book VALUES(5, '피겨 교본', '굿스포츠', 8000);
INSERT INTO Book VALUES(6, '역도 단계별기술', '굿스포츠', 6000);
INSERT INTO Book VALUES(7, '야구의 추억', '이상미디어', 20000);
INSERT INTO Book VALUES(8, '야구를 부탁해', '이상미디어', 13000);
INSERT INTO Book VALUES(9, '올림픽 이야기', '삼성당', 7500);
INSERT INTO Book VALUES(10, 'Olympic Champions', 'Pearson', 13000);

INSERT INTO Customer VALUES (1, '박지성', '영국 맨체스타', '000-5000-0001');
INSERT INTO Customer VALUES (2, '김연아', '대한민국 서울', '000-6000-0001');
INSERT INTO Customer VALUES (3, '장미란', '대한민국 강원도', '000-7000-0001');
INSERT INTO Customer VALUES (4, '추신수', '미국 클리블랜드', '000-8000-0001');
INSERT INTO Customer VALUES (5, '박세리', '대한민국 대전',  NULL);

INSERT INTO Orders VALUES (1, 1, 1, 6000, STR_TO_DATE('2014-07-01','%Y-%m-%d')); 
INSERT INTO Orders VALUES (2, 1, 3, 21000, STR_TO_DATE('2014-07-03','%Y-%m-%d'));
INSERT INTO Orders VALUES (3, 2, 5, 8000, STR_TO_DATE('2014-07-03','%Y-%m-%d')); 
INSERT INTO Orders VALUES (4, 3, 6, 6000, STR_TO_DATE('2014-07-04','%Y-%m-%d')); 
INSERT INTO Orders VALUES (5, 4, 7, 20000, STR_TO_DATE('2014-07-05','%Y-%m-%d'));
INSERT INTO Orders VALUES (6, 1, 2, 12000, STR_TO_DATE('2014-07-07','%Y-%m-%d'));
INSERT INTO Orders VALUES (7, 4, 8, 13000, STR_TO_DATE( '2014-07-07','%Y-%m-%d'));
INSERT INTO Orders VALUES (8, 3, 10, 12000, STR_TO_DATE('2014-07-08','%Y-%m-%d')); 
INSERT INTO Orders VALUES (9, 2, 10, 7000, STR_TO_DATE('2014-07-09','%Y-%m-%d')); 
INSERT INTO Orders VALUES (10, 3, 8, 13000, STR_TO_DATE('2014-07-10','%Y-%m-%d'));

-- 여기는 3장에서 사용되는 Imported_book 테이블
CREATE TABLE Imported_Book (
  bookid      INTEGER,
  bookname    VARCHAR(40),
  publisher   VARCHAR(40),
  price       INTEGER 
);

INSERT INTO Imported_Book VALUES(21, 'Zen Golf', 'Pearson', 12000);
INSERT INTO Imported_Book VALUES(22, 'Soccer Skills', 'Human Kinetics', 15000);
commit;

오늘은 기본적으로 select문구, where문구를 학습하려 합니다.

기본적으로 db나 table을 만들 때에는 create문을 사용합니다.

<데이터베이스 생성> 

create database 원하는DB이름;

<테이블 생성>

create table 원하는table이름 (
컬럼1 int(5),
컬럼2 varchar(20),
);

테이블을 생성할 때에는 int, varchar, primary key 등의 속성값들을 지정해서 테이블을 생성해주시면 됩니다.

아래에는 select 와 where 등을 사용한 기본적인 쿼리문들 입니다.

/* ---------------------------------------------------- */
select * from Book;   /* Book 테이블 모든 컬럼 및 로우 확인 */
select bookname from Book; /* Book 테이블에서 특정 컬럼 값만 확인 */
select * from Book where bookname='축구의 역사';  /* where절을 사용하여 특정 값의 모든 컬럼들 뽑아내기 */
select phone from Customer c where name='김연아'; /* where절을 사용하여 특정 컬럼 값의 특정 컬럼 값만 뽑아내기 */
select DISTINCT publisher from Book; /* 중복을 제거하고 싶을 때에는 DISTINCT 를 사용하여 중복값을 제거한다. */

/* where절에는 비교(=,<>,<,<=,>,>=),범위(BETWEEN),집합(IN,NOT IN),패턴(LIKE),NULL(IS NULL,IS NOT NULL),복합조건(AND,OR,NOT) 이 올수 있다. */
select bookname, publisher from Book where price >= 10000; /* 10,000원 이상인 도서의 이름과 출판사를 보이시오 */
select * from Book where price <20000; /* 가격이 20000원 이상인 도서를 검색 */
select * from Book where price BETWEEN 10000 and 20000; /* 가격이 10000원 이상 20000 이하인 도서를 검색. */
select * from Book where publisher IN ('굿스포츠','대한미디어'); /* 출판사가 굿스포츠 혹은 대한미디어인 도서를 검색 */
select * from Book b where publisher Not in ('굿스포츠','대한미디어'); /* 출판사가 굿스포츠 혹은 대한미디어가 아닌 도서를 검색 */
select bookname , publisher from Book b where bookname like '축구의 역사'; /* 축구의 역사를 출간한 출판사를 검색 */
SELECT bookname, publisher from book where bookname like '%축구%'; /* 도서 이름에 축구 가 포함된 출판사를 검색 */
select * from book where bookname like '_구%'; /* 이름이 2글자일 때 뒤에가 구로 끝나는 도서이름의 도서를 검색 */
/* 와일드 문자 : +(문자열을 연결, '골프'+'바이블' : '골프 바이블'), %(0개 이상의 문자열과 일치, '%축구%':축구를 포함하는 문자열),[](1개의 문자와 일치, '[0-5]%': 0-5 사이 숫자로 시작하는 문자열), _(특정위치의 1개의 문자와 일치) */
select * from Book b where bookname like '%축구%' and price >=20000; /* 축구에 관한 도서 중 가격이 20000원 이상인 도서를 검색 */
select * from Book b where publisher ='굿스포츠' or publisher='대한미디어'; /* 출판사가 굿스포츠 혹은 대한미디어인 도서를 검색 ( IN 과 똑같음) */

오늘은 처음 올리는거라 대충(?) 올려보는데 글을 쓰다보면 좀 더 가독성있도록 정리하도록 할게요 ㅎㅎ

반응형