SQL

[MySQL] CRUD / 예약어

SangRok Jung 2022. 3. 29. 22:24
반응형

 

 

Datebase 의 기본적인 CRUD (Create, Read, Up-date, Delete)

이름 SQL 기능
Create CREATE 생성
Read SELECT 읽기
Up-date UPDATE 갱신
Delete DELETE 삭제

 

 

 

 

 

INSERT 문

테이블에 데이터를 삽입하는 명령어

INSERT INTO usertbl VALUES (...);
INSERT usertbl VALUES (...); --INTO는 생략 가능

INSERT [INTO] 테이블명 [(열1, 열2, ...)] VALUES (값1, 값2 ... )

 

* BNF 표기법에 따라 []은 생략이 가능하다.

 

 

 

 

테이블 생성 및 데이터 입력

drop table buytbl;
DROP TABLE usertbl;

CREATE TABLE usertbl -- 회원 테이블
( userID  	CHAR(20) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
  name    	VARCHAR(20) 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(20) NOT NULL, -- 아이디(FK)
   prodName 	VARCHAR(20) 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 usertbl (userID, name, birthyear, addr, mobile1, mobile2, height, mDate) VALUES ('JSR', '정상록', '1998', '서울', '010', '9898989', '180', '2021-03-29');

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);
INSERT buytbl VALUES(NULL, 'JSR', 'I MAC', '전자', '500000', '1');

SELECT * FROM usertbl;
SELECT * FROM buytbl;

[window]

Ctrl + Shift + Enter : 여러줄실행

Ctrl + Enter : 한줄 실행

Ctrl + W : sql창 종료

 

[mac]

Command + R : 선택 라인 실행

 

 

 

 

 

 

▶ Auto Increment

컬럼이 AUTO INCREMENT로 설정되어 있는 경우 해당열의 값이 없다고 여기고 INSERT문을 작성한다.

 

 

* AUTO INCREMENT의 시작값을 0으로 설정한다.

ALTER TABLE topiktbl AUTO_INCREMENT = 0;

 

INSERT member VALUES (NULL, '정성훈,' '서울 동대문구');

AUTO INCREMENT 설정시 주의사항

  • PRIMARY KEY 또는 UNIQUE로 설정해야한다.
  • DataType은 숫자로만 가능하다.
  • Data 입력시 NULL로 지정해야한다.

 

 

* Error Code : 1075가 생기는 이유는 Primary key가 두개 이상 설정되거나 생성 순서에 문제 있을시 발생한다.

 

 

 

Num에 Unique Key를 적용시켜 단독의 Primary key를 형성 시켜주면 해결된다.

CREATE TABLE studenttbl
(
schoolNum		VARCHAR(8) NOT NULL PRIMARY KEY,
name			VARCHAR(20) NOT NULL,
major			VARCHAR(20) NOT NULL,
num				INT AUTO_INCREMENT NOT NULL UNIQUE,
addr			VARCHAR(100),
email			VARCHAR(30) 

);
INSERT INTO studenttbl VALUE ('22032901', '정상록', '컴퓨터공학', NULL, '서울특별시', 'fff@naver.com');
INSERT studenttbl VALUE ('22032902', '정수기', '컴퓨터공학', NULL, '부산광역시', 'sss@naver.com');
INSERT studenttbl VALUE ('22032903', '정산기', '컴퓨터공학', NULL, '광주광역시', 'ggg@naver.com');
SELECT * FROM studenttbl;

 

UPDATE 문

데이터를 수정하기 위한 명령어

UPDATE 테이블명 SET 열=값 WHERE 조건;

 

'name'이 정산기인 'addr'을 수정한다.

UPDATE studenttbl SET addr="울산 광역시" WHERE name = "정산기";

'num'가 3인 'email'을 수정한다.

UPDATE studenttbl SET email="zse@naver.com" WHERE num = "3";

 

 

DELTE 문

데이터를 삭제하기 위한 명령어

num 3인 컬럼을 지운다.

DELETE FROM studenttlb WHERE num = "3";

 

데이터를 조회한다는것은 데이터를 보는 관점이 달라진다는 것이고

그것의 끝은 가격비교 사이트다. (다나와)

 

데이터의 조회

SELECT 문

  • 원하는 데이터를 조회하는 명령어
  • 가장 많이 이용하며 복잡한 구조를 가지고 있다.
SELET   열이름  FROM 테이블이름 WHERE 조건
SELECT userID FROM usertbl WHERE userID="JYP";

TIME : 명령을 실행한 시간

Action : 실행된 명령

Message : SELECT 문이 조회된 행의 개수

Duration : SQL문이 실행되는 시간

Fetch : 데이터를 가져오는데 걸린 시간

 

※ Duration이 오래걸리는 경우는 query가 복잡하게 설계된 경우다.

  [WHERE where_condition]
    [GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
    [HAVING where_condition]
    [WINDOW window_name AS (window_spec)
        [, window_name AS (window_spec)] ...]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]

 

 

USE 문

Database를 지정하는 명령어

USE 데이터베이스 이름;
USE testdb;

 

 

Column의 선택

userID, name Column 조회한다.

SELECT userID, name FROM usertbl;

 

user 테이블에 id, name을 가지고 새로운 결과 테이블을 만든다.

SELECT id, name AS user_name FROM usertbl;

 

 

 

 

 

Where 절 

SELECT등의 명령어에 대한 조건을 정의한 식.

원본 Table의 row를 사용하는것.

원본 테이블만 참조가 가능하다.

▶ 예제

userID가 'KBS'인 Column의 모든 정보를 가져와라.

SELECT * FROM usertbl WHERE userID="KBS";

birthYear가 '1972'인 Column의 userID, name의 정보를 가져와라.

SELECT userID, name FROM usertbl WHERE birthYear='1972';

1970년 이후에 출생하 height이 182 이상인 Column의 모든 정보를 가져와라.

SELECT * FROM usertbl WHERE birthYear >= '1972' AND height >= '182';

height이 180이상 190보다 이하인 Column의 모든 정보를 가져와라.

SELECT * FROM usertbl WHERE height BETWEEN '180' AND '190';

 

addr이 경기, 경남, 경북인 Column의 모든 정보를 가져와라.

SELECT * FROM usertbl WHERE addr IN ('경기', '경남', '경북');

mobile1이 011인 Column 의 userID를 가져와라. 

SELECT userID, name FROM usertbl WHERE mobile1='011';

1970년 이후태어나거나 height이 182인 Column의 userID를 가져와라.

SELECT userID, name FROM usertbl WHERE birthYear >= '1970' OR height = '182';

addr이 서울이고 moblie1이 010, 011인 Column의 모든 정보를 가져와라.

SELECT * FROM usertbl WHERE addr IN ('서울') AND mobile1 IN ('010', '011');

price가 100보다 작은 Column의 prodname을 가져와라.

SELECT prodName FROM buytbl WHERE price < '100';

 

 

 

 

 

LIKE 검색 (문자열 검색)

특정 문자 또는 문자열을 포함하고 있는 값을 검색하고 싶을 때 사용한다.

문자 의미
% 0개 이상의 문자열과 대치
_ 임의의 한 개의 문자와 대치

 

▷ userID가 _B로 시작하는  Column의 정보를 가져와라.

SELECT * FROM usertbl WHERE userID LIKE ('_B%');

 

▷ userID가 B로 시작하는 Column의 정보를 가져와라.

SELECT * FROM usertbl WHERE userID LIKE ('B%');

 

▷ userID가 B로 끝나는 Column의 정보를 가져와라.

SELECT * FROM usertbl WHERE userID LIKE ('%B');

 

▷ userID에서 문자 J가 들어가는 Column의 정보를 가져와라.

SELECT * FROM usertbl WHERE userID LIKE ('%J%');

 

※ Column : 핼열의 열

 

 

 

 

 

 

 

반응형