데이터베이스 - sqlDB생성,where절

지환·2023년 8월 18일
0

Mysql

목록 보기
3/17
post-thumbnail

출처 | https://velog.io/@ong_hh/SELECT-FROM%EB%AC%B8 https://www.youtube.com/watch?v=xKYeJxBTt2E&list=PLVsNizTWUw7Hox7NMhenT-bulldCp9HP9

샘플데이터

작성

DROP DATABASE IF EXISTS sqldb; -- 만약 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), -- 휴대폰의 국번(010,011 등)
  mobile2 	CHAR(8), -- 휴대폰의 나머지 전화번호(하이픈제외)
  height 	SMALLINT, -- 키
  mDate 	DATE -- 회원 가입일
);

NOT NULL : 입력을 반드시 해야함
VARCHAR(10) : 최대10자지만 내부적으로는 입력한 글자수 대로

CREATE TABLE buytbl -- 회원 테이블
( num	INT AUTO_INCREMENT NOT NULL PRIBARY KEY, -- 순번(PK)
  userID		CHAR(8) NOT NULL, -- 아이디(FK)
  prodName 		CHAR(6) NOT NULL, -- 물품명
  groupName 		CHAR(6), -- 분류
  price 	INT NOT NULL, -- 단가
  amount 	SMALLINT NOT NULL, -- 수량
  FOREIGN KEY (userID) REFERENCES usertbl(userID)
);

AUTO_INCREMENT : 자동으로 입력
FOREIGN KEY (userID) REFERENCES usertbl(userID) : userID열을 FOREIGN KEY로 잡아러 얘가 참조하는 레퍼런스는 usertbl의 userID이다.

INSERT INTO usertbl VALUES('LSG','이승기',1987,'서울','011','11111111',182,'2008-8-8'); -- 데이터 입력
INSERT INTO buytbl VALUES(NULL,'LSG','운동화',NULL,30,2); -- 첫 번째 인자는 자동으로 증가해야 하므로  NULL

where절

SELECT 필드이름 FROM 테이블이름 WHERE '조건식'

Ex

SELECT* FROM usertbl where name = '김경호';

BETWEEN... AND와 IN() 그리고 LIKE

키가 180~183인 사람을 조회해보자.

SELECT name... height FROM usertbl where height >= AND height <= 183; 

BETWEEN AND

SELECT name...height FROM usertbl WHERE height BETWEEN 180 AND 183;

IN( )-연속적인 값이 아닌 이산적인 값 사용

SELECT name... addr FROM usertbl WHERE addr IN('경남','전남','경북')

LIKE

SELECT name... FROM usertbl where name LIKE '김%';

ANY/ALL/SOME 서브쿼리(하위쿼리)

  • 서브쿼리란 간단히 얘기하면 쿼리문 안에 또 쿼리문이 들어 있는 것을 얘기한다.

  • 예로 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력하려면 WHERE 조건에 김경호의 키를 직접 써야한다.

SELECT name,height FROM usertbl WHERE height > 177;

여기서 177이라는 키를 직접 쓰는게 아니라 쿼리를 통해서 사용하려는 것이다.

SELECT name, height FROM usertbl 
	where height > (SELECT height FROM usertbl WHERE Name = '김경호');

이번에는 지역이 '경남' 사람의 키보다 키가 크거나 같은 사람을 추출해보자.

SELECT name,height FROM usertbl
	WHERE height >= (SELECT height FROM usertbl WHERE addr = '경남');

이 쿼리문은 오류가 발생한다. 경남 지역에 사는 사람이 1명이 아니기 때문이다. 하위 쿼리가 둘 이상의 값을 반환하기 때문이다.

이럴땐 ANY 구문을 사용하면 된다.

SELECT name,height FROM usertbl
	WHERE height >= ANY(SELECT height FROM usertbl WHERE addr = '경남');

키가 173보다 크거나 같은 사람 또는 키가 170보다 크거나 같은 사람이 모두 출력된다. (둘 다 가능)

all로 바꾼다면 키가 170보다 크거나 같아야하고 173보다 크거나 같아야 한다. 결국 키가 173보다 크거나 같은 사람만 해당된다.

ORDER BY

  • 원하는 순서대로 정렬하여 출력한다. [ASE/DESC]
  • 성능 저하의 원인이 된다.

DISTINCT

  • 중복된 것은 하나만 남긴다.
SELECT DISTINCT addr FROM usertbl;

LIMIT

  • 출력하는 개수를 제한한다.
SELECT name,height FROM employees
ORDER BY name ASC
LIMIT 0,5; -- LIMIT 5

CREATE TABLE ... SELECT

[형식]

CREATE TABLE 새로운테이블 (SELECT 복사할열 FROM 기존테이플)

예시

USE sqldb;
CREATE TABLE buytbl2 (SELECT* FROM buytbl);
SELECT* FROM buytbl2;

지정한 일부 열만 복사할 수 있다.

CREATE TABLE buytbl3 (SELECT userID,prodName FROM buytbl);
SELECT * FROM buytbl3;

GRUOP BY절

SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;

집계함수

HAVING

WHERE로는 원하는 결과를 얻지 X [실행 X]

ORDER BY 추가

profile
아는만큼보인다.

0개의 댓글