SQL(2) select, where 절 등 문법 연습해보기

이건홍·2023년 1월 26일
0

SQL

목록 보기
2/6

SQL문

1. show

  • 테이블을 검색할 때 사용
  • 문법 : show 테이블이름

show tables;


2. select

  • 테이블 안 데이터를 검색할 때 사용
  • 문법 : select 필드이름 from 테이블이름

select * from users;

*은 모든 것을 뜻함, 즉 users 테이블에 있는 모든 필드의 데이터를 검색하라는 뜻

특정 필드를 검색 할 때는 필드의 이름을 직접 써준다.

select created_at, updated_at, name from users;


3. where

  • 특정 조건에 해당하는 데이터를 검색할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where (조건: 필드이름과 값)

select * from orders
where payment_method = "kakaopay";

payment_method 필드의 값이 "kakaopay"인 데이터만 검색한다는 뜻


3-1. and

  • 두 가지 이상의 조건을 만족하는 데이터를 검색할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where (조건: 필드이름과 값) and (조건: 필드이름과 값)

select * from orders
where course_title = "앱개발 종합반" and payment_method = "kakaopay";

course_title 필드의 값이 "앱개발 종합반"이면서 payment_method 필드의 값이 "kakaopay"인 데이터를 검색한다는 뜻


3-2. or

  • 여러가지의 조건중 하나 이상의 조건이 만족하면 데이터를 검색
  • 문법 : select 필드이름 from 테이블이름
          where (조건: 필드이름과 값) or (조건: 필드이름과 값)

select * from orders
where course_title = "웹개발 종합반" or payment_method = "CARD";

course_title 필드의 값이 "웹개발 종합반"이거나 payment_method 필드의 값이 "kakaopay"인 데이터를 검색한다는 뜻


3-3. !=

  • 어떠한 조건을 제외한 데이터를 검색할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where (조건: 필드이름 != 값)

select * from orders
where course_title != "웹개발 종합반";

!는 부정을 뜻함, 즉 ! 같지 않음을 뜻함, 그러므로 course_title필드의 값이 "웹개발 종합반"이 아닌 데이터를 검색한다는 뜻


3-4. between

  • 범위 조건(두개의 수 안에 있는 값)으로 데이터를 검색할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where 필드이름 between (조건: 필드이름과 값) and (조건: 필드이름과 값)

select * from orders
where created_at between "2020-07-13" and "2020-07-15";

created_at 필드의 값이 2020-07-13에서 2020-07-15안에 있는 데이터들을 검색한다.

3-5. in

  • 포함 조건(조건에 해당하는 값)으로 데이터를 겁색할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where 필드이름 in ()

select * from checkins
where week in (1, 3);

week 필드의 값이 "1"과 "3"인 데이터를 검색한다는 뜻


3-6. like

  • 패턴 조건(문자열의 규칙)으로 데이터를 겁색할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where 필드이름 like ""

select * from users
where email like "%@daum.net";

%는 모든 문자을 뜻함, 즉 email 필드의 값이 "@daum.net"으로 끝나는 데이터를 찾는다

이밖의 표현들

  • %: 모든 문자, 어떤 문자, 문자열이 와도 상관 없음
    ex1) where email like "%@daum.net"
         @daum.net으로 끝나는 값
         => test@daum.net

    ex2) where email like "@daum%.net"
         @daum으로 시작하고 .net으로 끝나는 값
         => @daumtest.net

    ex3) where email like "@daum.net%"
         @daum.net으로 시작하는 값
         => @daum.nettest

  • _ : 한글자, 무조건 한글자만 와야됨
    ex1) where email like "_@daum.net"
         한 문자로 시작하고 @daum.net으로 끝나는 값
         => t@daum.net

    ex2) where email like "@daum_.net"
         @daum으로 시작하고 중간에 한 문자가 있고 .net으로 끝나는 값
         => @daumt.net

    ex3) where email like "@daum.net_"
         @daum.net으로 시작하고 한 문자로 끝나는 값
         => @daum.nett


3-7. Limit

  • 일부 데이터만 겁색 할 때 사용
  • 문법 : select 필드이름 from 테이블이름
          where (조건: 필드이름과 값)
          limit

select * from orders
where payment_method = "kakaopay"
limit 5;

너무 많은 데이터가 나올 경우 limit를 사용하여 검색되는 데이터의 수를 줄여줄 수 있음


4. distinct

  • 중복을 제거 할 때 사용
  • 문법 : select distinct(필드이름) from 테이블이름

select distinct(payment_method) from orders;


5. count

  • 중복을 제거 할 때 사용
  • 문법 : select count(필드이름) from 테이블이름

select count(*) from orders;


[응용]distinct와 count를 같이 쓰기**

스파르타 회원 분들의 성(family name)씨가 몇개인지 궁금하다면?

users 테이블에서 name 필드가 성씨에 해당한다. 성씨가 몇 개인지 구하기 전 distinct를 사용하여 중복을 제거해준다.

select distinct(name) from users

중복을 제거했으므로, count를 사용하여 개수를 구해준다.

select count(distinct(name)) from users;


ex1) 포인트가 20000보다 많은 유저만 뽑아보기!

select * from point_users
where point > 20000;

문제에서 포인트, 즉 point 필드의 값이 20000보다 많은 유저를 원하므로 코드는 위와 같이 된다.

이 밖의 표현들

  • point > 20000
    포인트가 20000보다 큼

  • point < 20000
    포인트가 20000보다 작음

  • point = 20000
    포인트는 20000

  • point >= 20000
    포인트가 20000이상

  • point <= 20000
    포인트가 20000이하


ex2) 성이 황씨인 유저만 뽑아보기

select * from users
where name = "황**";

문제에서 성이 황씨인 유저, 즉 name필드의 값이 "황**"인 유저를 찾으므로 코드는 위와 같이 된다.


ex3) 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!

select * from orders
where course_title = "웹개발 종합반" and payment_method = "CARD";


0개의 댓글