이번장의 내용
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 |
댓글