"SQL"
1.DML : SELECT, INSERT, UPDATE, DELETE
2.DDL : CREATE, DROP, ALTER
3.DCL : GRANT
WHERE 조건 이용
SELECT를 사용할 때 조건을 이용하고 싶으면 "WHERE"을 이요하면 된다!
SELECT *
FROM userTBL
WHERE userName = '김경호';
- 1970년 이후에 출생하고 키가 182 이상인 사람의 아이디와 이름을 조회
SELECT userID, userName
FROM userTBL
WHERE (birthYear >= 1970) AND (userHeight >= 182);
- 1970년 이후에 출생하거나 키가 182 이상인 사람의 아이디와 이름을 조회
SELECT userID, userName
FROM userTBL
WHERE birthYear >= 1970 OR userHeight >= 182;
SELECT userID, userName
FROM userTBL
WHERE userHeight >= 180 AND userHeight <= 183;
SELECT userID, userName
FROM userTBL
WHERE userHeight BETWEEN 180 AND 183;
- 주소가 경남, 전남, 경북 인 사람의 아이디와 이름을 출력
SELECT userID, userName
FROM userTBL
WHERE userAddr = '경남' OR userAddr = '전남' OR userAddr = '경북';
SELECT userID, userName
FROM userTBL
WHERE userAddr IN ('경남','전남','경북');
- 많이 사용되는 기능 중 하나가 패턴 매칭이다
- 예를들어 성이 '김'씨인 사람을 조회 한다고 치자
- 해당 문제를 해결하기 위해선 와일드 카드 문자를 이용해야 한다
- 와일드카드 문자 => %, _ 가 있다.
- % : 0개 이상의 글자를 의미
- _ : 1개의 글자를 의미
- 예를들어 '_용%' 이렇게 패턴을 와일드카드를 이용해 정했다 치면
- '김용' => OK
- '홍용호호호호호 => OK
- '사용해 주셔서 감사합니다' => OK
- 그렇담 성이 '김'인 사람의 패턴은 == '김%'
SELECT userName, userHeight
FROM userTBL
WHERE userName LIKE '김%';
- 김경호보다 키가 크거나 같은 사람의 이름과 키를 조회
SELECT userHeight
FROM userTBL
WHERE userName = '김경호';
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= 177;
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= (
SELECT userHeight
FROM userTBL
WHERE userName = '김경호');
- 예시를 하나 더 들어 보자
- 주소가 '경남'인 사람들의 키보다 키가 크거나 같은 사람을 조회
SELECT userName, userHeight
FROM userTBL
WHERE userAddr = '경남';
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= (
SELECT userHeight
FROM userTBL
WHERE userAddr = '경남');
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= ANY(
SELECT userHeight
FROM userTBL
WHERE userAddr = '경남');
sql문은 정렬도 가능하다!
- 회원가입일이 빠른 순으로 모든 회원의 이름, 아이디, 가입일을 출력하세요.
- 작은값이 앞에 혹은 위에 위치하는게 오름차순, 큰값이 앞에 혹은 위에 위치하는게 내림차순.
- 정렬의 기본은 당연히 오름차순 정렬.
- 명시적으로 오름차순, 내림차순을 표현하려면.. ASC(오름차순), DESC(내림차순)을 이용.
- 정렬을 활용하려면 ORDER BY를 이용한다!
SELECT userName, userID, userDate
FROM userTBL
ORDER BY userDate DESC;
- 모든 회원의 이름과 키를 출력하세요. 단, 키에 대한 내림차순으로 출력하세요!
SELECT userName, userHeight
FROM userTBL
ORDER BY userHeight DESC;
- 앗..동률이 있어요! 동률이 존재할 경우 동률에 대해서만 2차 정렬을 할 수 있어요!
SELECT userName, userHeight
FROM userTBL
ORDER BY userHeight DESC, userName ASC;
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= 170
ORDER BY userHeight DESC, userName ASC;
중복된 값 배제
- 중복된 값을 배제하려면 어떻게 해야하나?
- DISTINCT 를 이용한다!
SELECT userAddr
FROM userTBL;
SELECT DISTINCT userAddr
FROM userTBL;
LIMIT
- SELECT 에서 가져온 결과 레코드 집합(Result Set, result Grid)중 일부분만 가져오려면 LIMIT를 이용하면 된다!
SELECT *
FROM userTBL
LIMIT 3;
SELECT *
FROM userTBL
LIMIT 2,5;
- 테이블 복사도 한번 알아보자
- 하나의 테이블의 컬럼명, 데이터 타입, 들어가있는 데이터를 복사해서 새로운 테이블을 생성해보자
CREATE TABLE tmpTBL (
SELECT * FROM userTBL
);
SELECT *
FROM tmpTBL;
DESC tmpTBL;
- 복사한 테이블의 명세를 살펴보아요!
- 즉, 키(PK, FK는 복사되지 않아요!)