본문 바로가기
데이터 베이스/mysql 문제

8 where 절

by 인생여희 2017. 11. 14.
반응형

이번장의 내용

and, or, not 과 결합된 조건

between 연산자

in 연산자

like 연산자

null 연산자

부속 질의어와 함께 사용되는 in 연산자

부속 질의어와 함께 사용되는 관계 연산자

any와 all 연산자

exists 연산자

관계 연산자를 사용하는 조건

성별이 여자인 학생의 학번과 이름, 주민등록번호를 출력하라

"select * 

from student

where 2 = substring(id_num,8,1);"

야간인 학생들의 학번과 이름을 출력하라

"select * 

from student

where juya = '야';"


학번이 20071405인 학생의 학번과 이름을 나타내어라

"select stu_no, stu_name 

from student

where stu_no = '20071405';"

휴대폰을 가지고 있는 학생의 학번과 이름, 휴대폰 번호를 나타내어라

"

select stu_no, stu_name, phone_no

from student

where phone_no is not null;"

관계 연산에서 수식은 비교할 수 있는 데이터를 가지고 있어야 한다.

예를 들면, 수치 수식과 문자 수식은 비교하는 것은 언제나 허용되는 것은 아니다.

다음의 조건에서 값24는 자동적으로 문자수치 데이터로 변환되기 때문에 비교가 허용된다.

where stu_name = 24

그러나 다음의 조건에서 date 열은 날짜 자료형을 가지고 있지만 수치 24는 수치 값이므로 비교가 허용되지 않는다.

where date = 24

문자자 수치 값에서 어떤 영수치 값이 다른 문자 수치 값에 비하여 영문자의 ASCII 코드 값보다 더 적다면 다른 값 보다 적다고 할 수 있다.

Jim < pete TRUE

truck >= trek TRUE

jim = JIM FALSE

날짜 자료형에서 어떤 날짜 값이 다른 날짜 값보다 이전의 값이라면 더 적다고 할 수 있다.

1985/1208 < 1985/12/09 TRUE

1980/05/02 > 1979/12/31 TRUE

AND, OR, NOT을 이용한 다중 조건

1985년 이후에 출생한 여학생의 학번, 이름, 주민등록번호를 출력하라

"select stu_no, stu_name

from student

where 2 = substring(id_num,8,1)

and birth_year > 1985;

"


휴대폰번호가 016, 018, 019로 시작하는 휴대폰을 소지한 학생의 학번과 이름, 휴대전화번호를 나타내어라            

"select stu_no, stu_name, phone_no

from student 

where substring(phone_no, 1,3) in (016,018,019)

"

"select stu_no, stu_name, phone_no

from student 

where substring(phone_no, 1,3) = '016'

or substring(phone_no, 1,3) = '018'

or substring(phone_no, 1,3) = '019';

"


성별이 남자가 아닌 학생의 학번 이름을 나타내어라


select stu_no, stu_name

from student 

where 2 = substring(id_num, 8,1);



select stu_no, stu_name

from student 

where 1 <> substring(id_num, 8,1)


성별이 남자이거나 1988년에 출생한 학생의 학번, 이름, 주민번호를 나타내어라. 그러나 1988년도에 출생한 남학생은 제외 한다.

"

select stu_no, stu_name, id_num

from student 

where (substring(id_num,8,1) =1 or substring(id_num,1,2) = 88)

and not(substring(id_num,8,1) =1 and substring(id_num,1,2) = 88);


"


between 연산자

주어진 값의 범위에 어떤 값이 포함되어 있는 지를 결정하도록 하는 연산자

81년부터 87년 사이에 출생한 각 학생의 학번과 이름, 출생년도를 출력하라

select * 

from student 

where birth_year >= 1981 

and birth_year <= 1987;



select * 

from student 

where birth_year between 1981 and 1987

"


출생년도가 1981년부터 1987년 사이에 태어난 학생의 학번과 이름, 출생년도를 출력하라, 단 출생년도는 오름차순으로 출력하라

"select * 

from student 

where birth_year between 1981 and 1987

order by birth_year;

"

in 연산자

우편번호가 135-794, 150-051, 550-260에 해당되는 각 학생의 학번, 이름, 현주소의 우편번호를 출력하라

"

select stu_no, stu_name, post_no

from student 

where post_no = '135-794' 

or  post_no = '150-051'

or post_no = '550-260';

"

"

select stu_no, stu_name, post_no

from student 

where post_no in ( '135-794', '150-051', '550-260')

"

81, 83, 87 년에 출생한 각 학생의 학번과 주민등록번호를 출력하라

"

select stu_no, id_num 

from student 

where substring(id_num,1,2) in (81 ,83,87);

"

규칙

수식의 자료형을 비교할 수 있어야 한다.

통계 함수는 수식으로 사용할 수 없다.

like 연산자

영문이름이 문자 p로 시작하는 학생의 학번과 이름, 영문이름을 나타내어라

"

select * 

from student 

where stu_ename like 'P%';

"

영문이름의 끝에서 두 번째 문자가 u인 학생의 학번과 이름을 나타내어라

"select * 

from student 

where stu_ename like '%u_';

"

영문이름이 문자 K로 시작하지 않는 학생의 학번과 이름을 나타내어라

"select * 

from student 

where NOT (stu_ename like 'K%');"

null 연산자

null 연산자는 특정한 열이 값을 가지고 있지 않은 행을 선택할 때 사용한다


휴대폰을 가지고 있는 학생의 학번과 이름, 휴대폰 번호를 나타내어라

"

select * 

from student 

where phone_no is not null;

"


휴대폰을 가지고 있지 않은 학생의 학번과 이름, 휴대폰 번호가 null 인 경우에는 '휴대폰 없음' 나타내어라

"select stu_no, stu_name, ifnull(phone_no,""폰없음"") 

from student 

where phone_no is null;"

학생의 휴대폰 번호가  017이 아닌 모든 학생의 학번과 이름, 휴대폰 번호를 출력하라

단 , 휴대폰이 없는 학생도 포함되어 출력되어야 한다.

"select stu_no, stu_name, ifnull(phone_no,""폰없음"") 

from student 

where phone_no <> 017 

or phone_no is null;

"

부속질의어에서 in 연산

이러한 방법은 매우 조잡하다 또한 fee 테이블이 서로 다른 많은 학생의 학번을 가지고 있다면 적절하지 못하다

등록을 한 각 학생의 학번, 이름을 출력하라 (in 연산자 이용) 따라서 이러한 문제점을 적절히 다룰 수 있도록 sql은 명령문 내부에 select 명령문을 포함할 수 있는 기능을 제공한다.

"select stu_no, stu_name

from student 

where stu_no in (학번들~~~~)"


부속질의어를 이용하여 등록을 한 각 학생의 학번, 이름을 출력하라

"select stu_no, stu_name

from student 

where stu_no in (select distinct stu_no from student)"

적어도 한 번의 장학금을 받았던 학생의 학번과 이름을 출력하라

"select stu_no, stu_name

from student 

where stu_no in (

select distinct stu_no from fee 

where jang_total is not null

);

"

20061011 인 학생이 가입한 동아리를 제외한 다른 동아리에 적어도 한 번 가입을 한 학생의 학번과 이름을 출력하라.

"select stu_no, stu_name 

from circle 

where cir_name not in (select cir_name 

from circle 

where stu_no = 20061011);

"

휴대폰을 가지고 있는 학생을 출력하라 ( 단 , 휴대폰이 있어도 야간인 학생은 제외한다.)

"select stu_no, stu_name 

from student 

where phone_no is not null 

and juya not in ('야');

"

반응형

'데이터 베이스 > mysql 문제' 카테고리의 다른 글

10 연습문제  (0) 2017.11.15
9 mysql 서브쿼리 부속질의  (0) 2017.11.14
7 from 절에서 테이블 명세  (0) 2017.11.13
6 select 절  (0) 2017.11.13
5 mysql 함수 & 문제  (0) 2017.11.10

댓글