2022-01-27-Database3

yyj·2022년 2월 2일
0

.

목록 보기
8/21

"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;
  • 키가 180~183인 사람을 조회
SELECT userID, userName
FROM userTBL
WHERE userHeight >= 180 AND userHeight <= 183;
-- - BETWEEN~AND를 이용하여서도 표현할 수 있다!
SELECT userID, userName
FROM userTBL
WHERE userHeight BETWEEN 180 AND 183;
  • 주소가 경남, 전남, 경북 인 사람의 아이디와 이름을 출력
SELECT userID, userName
FROM userTBL
WHERE userAddr = '경남' OR userAddr = '전남' OR userAddr = '경북';
-- 해당 조건을 IN을 사용하여 표현 할 수도 있다!
SELECT userID, userName
FROM userTBL
WHERE userAddr IN ('경남','전남','경북');

  • 많이 사용되는 기능 중 하나가 패턴 매칭이다
  • 예를들어 성이 '김'씨인 사람을 조회 한다고 치자
  • 해당 문제를 해결하기 위해선 와일드 카드 문자를 이용해야 한다
    • 와일드카드 문자 => %, _ 가 있다.
    • % : 0개 이상의 글자를 의미
    • _ : 1개의 글자를 의미
    • 예를들어 '_용%' 이렇게 패턴을 와일드카드를 이용해 정했다 치면
      • '김용' => OK
      • '홍용호호호호호 => OK
      • '사용해 주셔서 감사합니다' => OK
      • 그렇담 성이 '김'인 사람의 패턴은 == '김%'
  • 사용예시
SELECT userName, userHeight
FROM userTBL
WHERE userName LIKE '김%';

  • 조건이 여러개면 서브쿼리를 이용할 수 있다!
  • 김경호보다 키가 크거나 같은 사람의 이름과 키를 조회
-- 1. 김경호의 키를 먼저 알아내야 해요!
SELECT userHeight
FROM userTBL
WHERE userName = '김경호';   -- 177
-- 2. 이렇게 알아낸 키를 이용해서 다른 사람의 이름과 키를 조회해요!
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= 177;
-- SubQuery(서브쿼리)를 이용하면 다음과 같이 출력 할 수 있다!
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= (
      SELECT userHeight
      FROM userTBL
      WHERE userName = '김경호');
  • 예시를 하나 더 들어 보자
  • 주소가 '경남'인 사람들의 키보다 키가 크거나 같은 사람을 조회
-- 1. 주소가 경남이 사람들의 이름과 키를 일단 알아보아요!
SELECT userName, userHeight
FROM userTBL
WHERE userAddr = '경남';     

-- Error Code: 1242. Subquery returns more than 1 row 오류가 발생한다! 두가지를 return할수 없기 때문!
SELECT userName, userHeight
FROM userTBL
WHERE userHeight >= (
      SELECT userHeight
      FROM userTBL
      WHERE userAddr = '경남');

-- ANY()와 ALL()을 이용하여 조회 할 컬럼의 수를 조절 할 수있다!
-- ANY() : 여러개중의 하나
-- ALL() : 모두 
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;
-- ORDER BY 순서데로 정렬이 진행된다!
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;   -- LIMIT OFFSET,가져올개수
-- 즉, 2번째부터 5개를 가져온다!
  • 테이블 복사도 한번 알아보자
  • 하나의 테이블의 컬럼명, 데이터 타입, 들어가있는 데이터를 복사해서 새로운 테이블을 생성해보자
CREATE TABLE tmpTBL (
    SELECT * FROM userTBL
);

SELECT *
FROM tmpTBL;

DESC tmpTBL;
  • 복사한 테이블의 명세를 살펴보아요!
  • 즉, 키(PK, FK는 복사되지 않아요!)

profile
초보개발자

0개의 댓글