출처 | 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
SELECT 필드이름 FROM 테이블이름 WHERE '조건식'
Ex
SELECT* FROM usertbl where name = '김경호';
키가 180~183인 사람을 조회해보자.
SELECT name... height FROM usertbl where height >= AND height <= 183;
SELECT name...height FROM usertbl WHERE height BETWEEN 180 AND 183;
SELECT name... addr FROM usertbl WHERE addr IN('경남','전남','경북')
SELECT name... FROM usertbl where name LIKE '김%';
서브쿼리란 간단히 얘기하면 쿼리문 안에 또 쿼리문이 들어 있는 것을 얘기한다.
예로 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력하려면 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보다 크거나 같은 사람만 해당된다.
SELECT DISTINCT addr FROM usertbl;
SELECT name,height FROM employees
ORDER BY name ASC
LIMIT 0,5; -- LIMIT 5
[형식]
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;
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;
WHERE로는 원하는 결과를 얻지 X [실행 X]
ORDER BY 추가