기능 : 구축이 완료된 테이블에서 데이터 추출능 : 구축이 완료된 테이블에서 데이터 추출
기본 형식 : SELECT(+열 이름)~FROM(+테이블 이름)~WHERE(+조건식)
SELECT문 실행하기 위해서는 사용할 데이터베이스 지정해야함.
USE 데이터베이스_이름;
SELECT 열 이름 FROM 테이블_이름 WHERE 조건식 GROUP BY 열_이름 HAVING 조건식 ORDER BY 열_이름 (결과 정렬) LIMIT 숫자 (결과 개수 제한)
📖 SELECT * FROM MEMBER
MEMBER 테이블에서 모든 열의 내용을 가져오기
SELECT~FROM은 대부분 WHERE과 함께 사용함.
SELECT(+열 이름)~FROM(+테이블 이름)~WHERE(+조건식)
관계 연산자, 논리 연산자 사용 가능
범위 값의 경우 BETWEEN ~ AND 사용
문자 데이터의 경우 IN() 사용
SELECT MEM_MEMBER,ADDR
FROM MEMBER
WHERE ADDR IN('경기','전남','경남');
문자열 일부 글자 검색 시 LIKE 사용
예시) MEM_NAME의 첫 글자가 '우'로 시작하는 회원 검색하기
SELECT *
FROM MEMBER
WHERE MEM_NAME LIKE '우%';
한 글자 매치하기 위해서 언더바 (_) 사용
예시) MEM_NAME의 앞 두 글자는 상관없고 뒤는 '핑크'인 회원 검색하기
SELECT *
FROM MEMBER
WHERE MEM_NAME LIKE '__핑크';
SELECT 문 안에 SELECT문
예시) MEM_NAME이 '에이핑크'인 회원의 평균 키보다 큰 회원 검색하기
select HEIGHT FROM MEMBER WHERE MEM_NAME = '에이핑크'; SELECT MEM_NAME, height FROM MEMBER WHERE height>164;에이핑크 평균 키 구한 뒤, 평균 키인 164보다 큰 회원 조회
두 SQL을 하나의 SQL문으로 만들면SELECT MEM_NAME, height FROM MEMBER WHERE height>(select HEIGHT FROM MEMBER WHERE MEM_NAME = '에이핑크');
결과의 값이나 개수에 영향을 미치지 않지만 결과가 출력되는 순서를 조절
SELECT MEM_ID, MEM_NAME, debut_date FROM MEMBER ORDER BY debut_date;
-- 데뷔 날짜가 빠른 순서대로 출력
ASC는 오름차순 / DESC는 내림차순
기본적으로 ORDER BY는 오름차순으로 설정되어있음
ORDER BY는 WHERE 절과 함께 사용 가능. 하지만 WHERE이 먼저 나와야 함 !!
ORDER BY가 선행될 경우, 오류 발생
SELECT MEM_ID, MEM_NAME, debut_date, HEIGHT
FROM MEMBER
WHERE HEIGHT >= 164
ORDER BY HEIGHT DESC;
정렬 기준은 여러 개의 열로 지정 가능 ! (,) 사용하기 !!
전체 중 N건만 조회하기
SELECT *
FROM MEMBER
LIMIT 3;
대부분, 먼저 정렬한 뒤 추출함. ORDER BY와 함께 사용!
SELECT *
FROM MEMBER
ORDER BY debut_date
LIMIT 3;
시작 개수 지정 가능
SELECT *
FROM MEMBER
ORDER BY debut_date
LIMIT 3,2;
SELECT distinct ADDR FROM MEMBER;
중복된 데이터를 1개만 남기고 모두 삭제
그룹으로 묶어주는 역할을 함.
❗ 함께 사용하는 집계 함수
SELECT MEM_ID, SUM(AMOUNT) FROM BUY group by MEM_ID;
SELECT MEM_ID, SUM(PRICE*AMOUNT) FROM BUY group by MEM_ID;
--SUM()을 통해 계산도 가능함
집계 함수에서는 WHERE을 사용할 수 없음! 따라서 WHERE 대신 HANING절을 사용함!
꼭 GROUP BY절 뒤에 나와야 함
SELECT MEM_ID"회원 아이디", SUM(PRICE*AMOUNT)"총 구매 개수"
FROM BUY
group by MEM_ID
having SUM(PRICE*AMOUNT) > 1000
order by SUM(PRICE*AMOUNT) DESC;
INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)
열을 정의할 때 1부터 증가하는 값을 입력. INSERT에서는 해당 열이 없다고 생각하고 입력
❗주의 사항 : AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해야 함. 자동 증가하는 값은 NULL 값으로 채워 넣기
CREATE TABLE HH2( TOY_ID INT AUTO_INCREMENT PRIMARY KEY, TOY_NAME CHAR(4), AGE INT); INSERT INTO HH2 VALUES(NULL, 'HHDD', 25); INSERT INTO HH2 VALUES(NULL, 'HHDDDD', 23335); INSERT INTO HH2 VALUES(NULL, 'HHDDDDDDD', 222225);실행해보면 ID 값은 자동으로 1부터 채워짐을 확인할 수 있음!
만일, ID의 시작 번호와 증가 값을 변경하고 싶다면!!!???
CREATE TABLE HH2( TOY_ID INT AUTO_INCREMENT PRIMARY KEY, TOY_NAME CHAR(4), AGE INT); ALTER TABLE HH2 AUTO_INCREMENT=1000; -- 시작 값을 1000으로 설정 SET @@AUTO_INCREMENT_INCREMENT-3; -- 증가 값은 3으로 지정 INSERT INTO HH2 VALUES(NULL, 'HHDD', 25),(NULL, 'HHDDDD', 23335),(NULL, 'HHDDDDDDD', 222225);❗ALTER TABLE은 테이블을 변경하라는 의미! 테이블의 열 이름, 변경, 새로운 열 정의, 열 삭제 등의 작업 진행
이렇게 코드를 작성하고 실행해보면 ID 값이 1000으로 시작하며 1003->1006으로 증가함을 확인할 수 있음 @~@
INSERT INTO 테이블_이름 (열1, 열2, ...) SELECT 문;
❗주의 사항 : SELECT문의 열 개수는 INSERT할 테이블의 열 개수와 동일해야 함.
기존에 입력되어 있는 값을 수정하는 명령
UPDATE 테이블_이름 SET 열1=값1, 열2=값2, ... WHERE 조건;예시)
UPDATE CITY_POPUL SET CITY_NAME = '서울', POPULATION= WHERE CITY_NAME='SEOUL'; SELECT * FROM CITY_POPUL WHERE CITY_NAME ='서울';
❗주의 사항 : WHERE절을 생략하면 테이블의 모든 행의 값이 변경됨! 즉, 전체 행의 값이 변경됨으로 주의
DELETE FROM 테이블이름 WHERE 조건;
만일 대용량의 데이터를 삭제하고 싶다면!?
DELETE문은 삭제가 오래 걸림! 따라서 다른 방법을 이용해야 함!
정리하자면 DROP은 테이블 자체를 삭제하고 DELETE와 TRUNCATE은 빈 테이블을 남긴다.
그렇다면 TRUNCATE만 쓰면 되는거 아닌교!? DELETE는 의미없는거 아님? 이라고 방금 내가 생각함 ㅎㅎ
이 둘의 차이가 존재하는데
조건 없이 테이블 구조만 남기고 싶다면 TRUNCATE를 쓰시오 ~@~@