9장. SELECT명령문 : WHERE 절 개요, 2. 관계연산자를 사용하는 조건

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
변수와 조건문 빛나리 36 호 박승운. 파이썬 쉽게 사용하기 Python IDLE 사용 FILE - New File 로 파일 만들기 Run – Run Module 로 실행하기.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
WDSF ID Card 발급이유 ◆여권 등 다른 신분증 없이 WDSF ID Card 만으로 대회 등록이 가능.( 평생 한번 발급 ) ◆모든 대회의 안티 도핑 양식을 쓸 필요 없음. ◆대회 결과에 정확한 영문이름 노출. ◆ WDSF World Ranking List 포인트.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
Excel 일차 강사 : 박영민.
Chapter 7. 조건문.
8장 서브 쿼리.
MySQL 및 Workbench 설치 데이터 베이스.
18장. 뷰(View) 뷰의 생성 뷰의 열 이름 뷰의 변경 : WITH CHECK OPTION 뷰 테이블의 정보와 네비게이터
기본적인 SELECT문 작성.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
6장 그룹 함수.
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
09 서브쿼리(Subquery) 서브쿼리의 개념 서브쿼리의 종류 데이터베이스 실무에서 서브쿼리 사용시 주의 사항.
Heesang kim PL/SQL 3 Heesang kim.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
19장. 트랜잭션과 락(LOCK) 트랜잭션이란? MySQL의 트랜잭션 락(LOCK) 쉽게 배우는 MySQL 5.x
21장. 데이터베이스 설계지침 테이블과 열에 대한 지침 중복 데이터의 포함 열에 대한 자료형의 선택
MYSQL 설치 SQL언어 SQL언어의 활용 웹과 SQL언어와의 연동
5장 Mysql 데이터베이스 한빛미디어(주).
11장. 1차원 배열.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
2장. 학사관리 예제 DATABASE 학사 데이터베이스의 해설 테이블의 내용 무결성 규칙 쉽게 배우는 MySQL 5.x
4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업
MATLAB
JA A V W. 03.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
2015학년도 PHP 기말 레포트 로그인 홈페이지 제작.
12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬
Visual Basic .NET MDI 만들기.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
Restricting and Sorting Data
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
연산자 (Operator).
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
10장. SELECT명령문 : 통계함수 모든 열 선택(*) 2. SELECT 절의 수식
에어 조건문.
14장. 부속 질의어 부속 질의어 규칙 열의 범위 상호 관련부속 질의어 복합키의 사용 쉽게 배우는 MySQL 5.x
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
3강. 컴퓨터와의 기본적인 소통수단 - I 연산자란? 컴퓨터와 소통하기 위한 다양한 방법들
문성우 SQL 실습 Part Ⅰ 문성우.
Database Relational DML SQL.
학습목표 학습목표 관계 데이터베이스에서 데이터 조작에 사용되는 명령어(DML)는 삽입(INSERT), 삭제(DELETE), 수정(UPDATE), 검색(SELECT) 이 있는데 이 중 사용 빈도가 가장 높은 것이 데이터의 검색에 사용되는 SELECT문 이며 이 명령문은 다양한.
Chapter08 JavaScript 시작하기
20장. SQL명령문의 최적화 1. OR연산자의 사용을 피하라. 2. 불필요한 UNION연산자의 사용을 피하라.
에어 PHP 입문.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
1장. 서 론 데이터베이스의 개요 모델의 종류 관계형 모델과 객체 지향형 데이터베이스 SQL이란 무엇인가?
SPL3D Printer If 조건문.
Chapter 10 데이터 검색1.
1장. 서 론 데이터베이스의 개요 모델의 종류 관계형 모델과 객체 지향형 데이터베이스 SQL이란 무엇인가?
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
제 22 강 논리식 및 논리 값 shcho.pe.kr.
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
이산수학(Discrete Mathematics)  술어와 한정기호 (Predicates and Quantifiers)
수치해석 ch3 환경공학과 김지숙.
 6장. SQL 쿼리.
8장. SELECT명령문 : FROM 절 FROM 절에서 테이블 명세 열 명세 다중 테이블 명세 가명 FROM절의 다양한 예제
13. 포인터와 배열! 함께 이해하기.
Report #2 (기한: 3/16) 데이터 구조 과목의 수강생이 50명이라고 가정한다. 이 학생(학번은 2016????으로 표현됨)들의 중간 시험(0~100), 기말 시험(0~100) 성적을 성적 파일에 작성하라(프로그램을 통해서 또는 수작업으로). 성적 파일을 읽어들여서.
fastestslowest 실제 질의문에서 사용 타입 추천 인덱스 SELECT list Default
6 객체.
Presentation transcript:

9장. SELECT명령문 : WHERE 절 개요, 2. 관계연산자를 사용하는 조건 개요, 2. 관계연산자를 사용하는 조건 3. AND, OR, NOT을 사용한 다중 조건 4. BETWEEN 연산자, 5. IN 연산자 6. LIKE 연산자, 7. NULL 연산자 8. 부속질의어에서 IN 연산자 9. 부속질의어에서 관계 연산자 10. ALL과 ANY 연산자 11. EXISTS 연산자, 12. 부정조건 2019-04-13 쉽게 배우는 MySQL 5.x

9.1 개요 SQL은 FROM 절의 중간 결과에 나타난 각 행을 WHERE 조건이 참이면 WHERE 절의 중간 결과 테이블로 이동 WHERE 절에서 사용할 수 있는 조건과 연산자 ∙관계 연산자 ∙AND, OR, NOT과 결합된 조건 ∙BETWEEN 연산자 ∙IN 연산자 ∙LIKE 연산자 ∙NULL 연산자 ∙부속 질의어 함께 사용되는 IN 연산자 ∙부속 질의어 함께 사용되는 관계 연산자 ∙ANY와 ALL 연산자 ∙EXISTS 연산자 2019-04-13 쉽게 배우는 MySQL 5.x

9.2 관계 연산자를 사용하는 조건 관계 연산자의 좌변과 우변에 있는 값을 비교하여 조건의 결과는 참, 거짓 관계 연산자 9.2 관계 연산자를 사용하는 조건 관계 연산자의 좌변과 우변에 있는 값을 비교하여 조건의 결과는 참, 거짓 관계 연산자 의 미 = 같다. < 작다. > 크다. <= 작거나 같다. >= 크거나 같다. <> 같지 않다. (NOT =  사용) 다른 SQL 제품에서 관계 연산자 중 <> 연산자는 !=, ^=, # 등으로 사용됨 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-1] 성별이 여자인 학생의 학번과 이름, 주민등록번호를 출력하라. mysql> select stu_no, stu_name, id_num     -> from student     -> where substring(id_num, 8,1) = 2; +----------+----------+----------------+ | stu_no   | stu_name | id_num         | | 20041002 | 김유미   | 830207-2629715 | | 20041007 | 정인정   | 830315-2351225 | | 20061014 | 고혜진   | 870307-2638759 | | 20071300 | 유하나   | 880921-2573717 | | 20071307 | 김문영   | 880418-2121623 | | 20071405 | 최차영   | 881003-2581516 | 6 rows in set (0.00 sec) substring( ) 함수는 주민등록번호(id_num) 문자열의 8번째 자리 1자리를 추출 조건이 SUBSTRING(ID_NUM, 8, 1) = 2이기 때문에 여자인 행만 출력 2019-04-13 쉽게 배우는 MySQL 5.x

[예제9-2] 야간인 학생들의 학번과 이름을 출력하라. mysql> select stu_no, stu_name     -> from student     -> where juya='야'; +----------+----------+ | stu_no   | stu_name | | 20001001 | 김유신   | | 20041033 | 연개소문 | | 20061048 | 김영호   | | 20071010 | 홍길동   | | 20071022 | 이순신   | | 20071307 | 김문영   | [예제 9-3] 학번이 20071405인 학생의 학번과 이름을 출력하라.     -> where stu_no = '20071405'; | 20071405 | 최차영   | 2019-04-13 쉽게 배우는 MySQL 5.x

[예제9-4]휴대폰을 가지고 있는 학생의 학번과 이름, 휴대폰 번호를 출력하라. mysql> select stu_no, stu_name, phone_no     -> from student     -> where phone_no = phone_no; +----------+----------+---------------+ | stu_no   | stu_name | phone_no      | | 20001001 | 김유신   | 011-617-1290  | | 20001015 | 박도준   | 011-611-9884  | | 20041002 | 김유미   | 010-617-1290  | | 20041007 | 정인정   | 016-605-7837  | | 20041033 | 연개소문 | 018-641-9304  | | 20061011 | 박정인   | 017-3142-1294 | | 20061048 | 김영호   | 017-614-7575  | | 20071010 | 홍길동   | 010-6425-9245 | | 20071022 | 이순신   | 010-7141-1860 | | 20071300 | 유하나   | 019-651-0707  | | 20071307 | 김문영   | 019-4624-0460 | 11 rows in set (0.00 sec) -PHONE_NO = PHONE_NO 휴대폰번호가 동일하기 때문에 PHONE_NO 열이 채워져 있는 모든 행이 출력 -만약 PHONE_NO 열이 채워져 있지 않다면 조건은 알 수 없는 값으로 평가 -NULL 값이 나타나면 조건의 값은 알 수 없는 것으로 평가되어 출력 안함 2019-04-13 쉽게 배우는 MySQL 5.x

-관계 연산에서 수식은 비교할 수 있는 데이터를 가지고 있어야 한다. -조건의 값 24는 자동적으로 문자수치 데이터로 변환되기 때문에 비교가 허용 WHERE STU_NAME = 24 -DATE 열은 날짜(DATE) 자료형을 가지고 있지만 수치 24는 수치 값이므로 비교가 허용되지 않는다. WHERE DATE = 24 어떤 영수치 값이 다른 문자 수치 값에 비하여 영문자의 ASCII 코드 값 보다 더 적다면 다른 값 보다 적다고 할 수 있다. 조건  값 'Jim' < 'Pete' TRUE 'Truck' >= 'Trek' 'Jim' = 'JIM' FALSE '1985/12/08' < '1985/12/09' '1980/05/02' > '1979/12/31' 2019-04-13 쉽게 배우는 MySQL 5.x

9.3 AND, OR, NOT을 사용한 다중 조건 [예제9-5]1985년 이후에 출생한 여학생의 학번, 이름, 주민등록번호를 출력하라. mysql> select stu_no, stu_name, id_num           mysql> select stu_no, stu_name, id_num      -> from student                                  -> from student     -> where substring(id_num, 8,1) = 2              -> where substring(id_num, 8,1) = 2     -> and substring(id_num,1,2) > 85;               -> and birth_year > '1985'; +----------+----------+----------------+ | stu_no   | stu_name | id_num         | | 20061014 | 고혜진   | 870307-2638759 | | 20071300 | 유하나   | 880921-2573717 | | 20071307 | 김문영   | 880418-2121623 | | 20071405 | 최차영   | 881003-2581516 | -여학생인 조건 : 주민등록번호 8번째 1자리가 2인 학생 where = substring(id_num, 8,1) = 2  -1985년 이후에 태어난 학생의 조건 : ① 좌측은 주민등록번호 1번째 자리에서 2자리가 85보다 큰 학생 출력 : substring(id_num, 1,2) > 85 ② 우측의 where 조건절은 출생년도(birth_year)가 1985년 보다 큰 모든 행을 출력 : birth_year > ‘1985’ 2019-04-13 쉽게 배우는 MySQL 5.x

[예제9-6]휴대폰 번호가 016, 018, 019로 시작하는 휴대폰을 소지한 학생의 학번과 이름, 휴대폰번호를 나타내어라. mysql> 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'; +----------+----------+---------------+ | stu_no   | stu_name | phone_no      | | 20041007 | 정인정   | 016-605-7837  | | 20041033 | 연개소문 | 018-641-9304  | | 20071300 | 유하나   | 019-651-0707  | | 20071307 | 김문영   | 019-4624-0460 | 조건의 substring(phone_no, 1,3) 은 휴대폰 번호에서 1째 자리에서 3자리만 추출하여 ‘016’, ‘018’, ‘019’중에서 동일한 것만 비교해야 되므로 or 연산자를 사용하였다. 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-7] 성별이 남자가 아닌 학생의 학번, 이름을 나타내어라. [예제 9-7]  성별이 남자가 아닌 학생의 학번, 이름을 나타내어라. mysql> select stu_no, stu_name     -> from student     -> where substring(id_num, 8, 1) <> 1; +----------+----------+ | stu_no   | stu_name | | 20041002 | 김유미   | | 20041007 | 정인정   | | 20061014 | 고혜진   | | 20071300 | 유하나   | | 20071307 | 김문영   | | 20071405 | 최차영   | 위의 예제를 다음과 같이 작성하여도 동일한 결과를 출력한다. SELECT STU_NO, STU_NAME FROM  STUDENT WHERE NOT SUBSTRING(ID_NUM, 8, 1) = 1; 2019-04-13 쉽게 배우는 MySQL 5.x

위의 결과처럼 1988년에 태어난 남자(20071010, 홍길동) 학생은 출력되지 않는다. [예제 9-8] 성별이 남자이거나 1988년에 출생한 학생의 학번, 이름, 주민등록번호를 나타내어라. 그러나 1988년도에 출생한  남학생은 제외한다. mysql> 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); +----------+----------+----------------+ | stu_no   | stu_name | id_num         | | 20001001 | 김유신   | 811007-1632013 | | 20001015 | 박도준   | 780116-1580715 | | 20001021 | 이상길   | 750819-1227014 | | 20041033 | 연개소문 | 810615-1633111 | | 20061011 | 박정인   | 830403-1635213 | | 20061048 | 김영호   | 860811-1548758 | | 20071001 | 장수인   | 890209-1616822 | | 20071022 | 이순신   | 890222-1218818 | | 20071300 | 유하나   | 880921-2573717 | | 20071307 | 김문영   | 880418-2121623 | | 20071405 | 최차영   | 881003-2581516 | 11 rows in set (0.02 sec) 위의 결과처럼 1988년에 태어난 남자(20071010, 홍길동) 학생은 출력되지 않는다. 2019-04-13 쉽게 배우는 MySQL 5.x

9.4 BETWEEN 연산자 [예제 9-9] 81년부터 87년 사이에 출생한 각 학생의 학번과 이름, 출생년도를 출력하라. [예제 9-9]  81년부터 87년 사이에 출생한 각 학생의 학번과 이름, 출생년도를 출력하라. mysql> select stu_no, stu_name, birth_year     -> from student     -> where birth_year >= 1981     -> and birth_year <= 1987; +----------+----------+------------+ | stu_no   | stu_name | birth_year | | 20001001 | 김유신   | 1981       | | 20041002 | 김유미   | 1983       | | 20041007 | 정인정   | 1983       | | 20041033 | 연개소문 | 1981       | | 20061011 | 박정인   | 1983       | | 20061014 | 고혜진   | 1987       | | 20061048 | 김영호   | 1986       | BETWEEN 연산자를 사용하여 다음과 같이 작성하면 동일한 결과 출력     -> where birth_year between 1981 and 1987; 2019-04-13 쉽게 배우는 MySQL 5.x

위의 결과는 출생년도 오름차순으로 정렬된 점이다. [예제 9-10] 출생연도가 1981년부터 1987년 사이에 태어난 학생의 학번과 이름, 출생년도를 출력하라. 단, 출생년도 오름차순으로 출력하라. mysql> select stu_no, stu_name, birth_year     -> from student     -> where birth_year between 1981 and 1987     -> order by birth_year; +----------+----------+------------+ | stu_no   | stu_name | birth_year | | 20001001 | 김유신   | 1981       | | 20041033 | 연개소문 | 1981       | | 20041002 | 김유미   | 1983       | | 20041007 | 정인정   | 1983       | | 20061011 | 박정인   | 1983       | | 20061048 | 김영호   | 1986       | | 20061014 | 고혜진   | 1987       | 7 rows in set (0.00 sec) 위의 결과는 출생년도 오름차순으로 정렬된 점이다. 2019-04-13 쉽게 배우는 MySQL 5.x

9.5 IN 연산자 [예제 9-11] 우편번호가 150-051, 540-170, 550-260에 해당되는 각 학생의 학번, 이름, 현주소의 우편번호를 출력하라. mysql> select stu_no, stu_name, post_no     -> from student     -> where post_no = '150-051'     -> or post_no = '540-170'     -> or post_no = '550-260'; +----------+----------+---------+ | stu_no   | stu_name | post_no | | 20061011 | 박정인   | 150-051 | | 20071022 | 이순신   | 540-170 | | 20071300 | 유하나   | 550-260 | | 20071307 | 김문영   | 540-170 | IN 연산자를 사용하여 다음과 같이 작성하면 동일한 결과 출력     -> where post_no in('150-051', '540-170', '550-260'); 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-12] 81, 83, 87년에 출생한 각 학생의 학번과 주민등록번호를 출력하라. mysql> select stu_no, id_num     -> from student     -> where substring(id_num, 1, 2) in (81, 83, 87); +----------+----------------+ | stu_no   | id_num         | | 20001001 | 811007-1632013 | | 20041002 | 830207-2629715 | | 20041007 | 830315-2351225 | | 20041033 | 810615-1633111 | | 20061011 | 830403-1635213 | | 20061014 | 870307-2638759 | IN 연산자 다음에 사용되는 수식에 적용되는 규칙 -수식의 자료형을 비교할 수 있어야 한다. -통계 함수는 수식으로 사용할 수 없다. 2019-04-13 쉽게 배우는 MySQL 5.x

9.6 LIKE 연산자 LIKE 연산자는 특별한 패턴이나 마스크를 가지는 영수치 값을 선택할 때 사용 [예제 9-13] 영문이름이 문자 P 로 시작하는 학생의 학번과 이름, 영문이름을 나타내어라. mysql> select stu_no, stu_name, stu_ename     -> from student     -> where stu_ename like 'P%'; +----------+--------------+ | stu_no   | stu_ename    | | 20001015 | Park Do-Jun  | | 20061011 | Park Jung-In | 2 rows in set (0.00 sec) LIKE 연산자 다음에 사용되는 퍼센트 기호(%)는 특별한 의미를 가지고 있는데, 이를 패턴(pattern) 또는 마스크(mask)라 한다. -퍼센트 기호(%) : 0 또는 임의의 모든 문자를 의미(dos명령어 *과 동일) -밑줄(_) : 0 또는 임의의 문자 1개를 의미(dos명령어 ?과 동일) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제9-14]영문이름의 끝에 문자g를 가지고 있는 학생의 학번과 이름을 나타내어라. mysql> select stu_no, stu_ename     -> from student     -> where stu_ename like '%g'; +----------+-----------------+ | stu_no   | stu_ename       | | 20041007 | Jeung Yin-Jeung | | 20071010 | Hong Gil-Dong   | | 20071307 | Kim Moon-Young  | | 20071405 | Choi Cha-Young  | [예제 9-15]영문이름의 끝에서 두 번째 문자가 u인 학생의 학번과 이름을 나타내어라.     -> where stu_ename like '%u_'; +----------+-------------+ | stu_no   | stu_ename   | | 20001015 | Park Do-Jun | 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-16] 영문이름이 문자 K 로 시작하지 않는 학생의 학번과 이름을 나타내어라. mysql> select stu_no, stu_ename     -> from student     -> where not (stu_ename like 'K%'); +----------+------------------+ | stu_no   | stu_ename        | | 20001015 | Park Do-Jun      | | 20001021 | Lee Sang-Gil     | | 20041007 | Jeung Yin-Jeung  | | 20041033 | Yean Gae-So-Moon | | 20061011 | Park Jung-In     | | 20071001 | Jang Soo-In      | | 20071010 | Hong Gil-Dong    | | 20071022 | Lee Sun-Shin     | | 20071300 | Yoo Ha-Na        | | 20071405 | Choi Cha-Young   | 10 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

9.7 NULL 연산자 NULL 연산자는 특정한 열이 값을 가지고 있지 않는 행을 선택할 때 사용 [예제9-17]휴대폰을 가지고 있는 학생의 학번과 이름, 휴대폰 번호를 나타내어라. mysql> select stu_no, stu_name, phone_no     -> from student     -> where phone_no is not null; +----------+----------+---------------+ | stu_no   | stu_name | phone_no      | | 20001001 | 김유신   | 011-617-1290  | | 20001015 | 박도준   | 011-611-9884  | | 20041002 | 김유미   | 010-617-1290  | | 20041007 | 정인정   | 016-605-7837  | | 20041033 | 연개소문 | 018-641-9304  | | 20061011 | 박정인   | 017-3142-1294 | | 20061048 | 김영호   | 017-614-7575  | | 20071010 | 홍길동   | 010-6425-9245 | | 20071022 | 이순신   | 010-7141-1860 | | 20071300 | 유하나   | 019-651-0707  | | 20071307 | 김문영   | 019-4624-0460 | 11 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제9-18] 휴대폰을 가지고 있지 않은 학생의 학번과 이름, 휴대폰 번호가 NULL인 경우에는 “휴대폰없음”을 나타내어라. mysql> select stu_no, stu_name, ifnull(phone_no, '휴대폰없음')     -> from student     -> where phone_no is null; +----------+----------+--------------------------------+ | stu_no   | stu_name | ifnull(phone_no, '휴대폰없음') | | 20001021 | 이상길   | 휴대폰없음                     | | 20061014 | 고혜진   | 휴대폰없음                     | | 20071001 | 장수인   | 휴대폰없음                     | | 20071405 | 최차영   | 휴대폰없음                     | 4 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-19] 학생의 휴대폰번호(PHONE_NO)가 017이 아닌 모든 학생의 학번과 이름, 휴대폰번호를 출력하라 mysql> select stu_no, stu_name, phone_no              -> from student     -> where substring(phone_no, 1, 3) <> '017'     -> or phone_no is null; +----------+----------+---------------+ | stu_no   | stu_name | phone_no      | | 20001001 | 김유신   | 011-617-1290  | | 20001015 | 박도준   | 011-611-9884  | | 20001021 | 이상길   | NULL          | | 20041002 | 김유미   | 010-617-1290  | | 20041007 | 정인정   | 016-605-7837  | | 20041033 | 연개소문 | 018-641-9304  | | 20061014 | 고혜진   | NULL          | | 20071001 | 장수인   | NULL          | | 20071010 | 홍길동   | 010-6425-9245 | | 20071022 | 이순신   | 010-7141-1860 | | 20071300 | 유하나   | 019-651-0707  | | 20071307 | 김문영   | 019-4624-0460 | | 20071405 | 최차영   | NULL          | 13 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

9.8 부속질의어에서 IN 연산자 등록을 한 각 학생의 학번, 이름을 출력하라. 단, 중복된 값을 사용할 필요는 없으므로 distinct를 사용한다. mysql> select distinct stu_no     -> from fee; +----------+ | stu_no   | | 20001015 | | 20061011 | | 20071001 | | 20071010 | | 20071022 | | 20071300 | | 20071307 | | 20071405 | 8 rows in set (0.05 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-20] 등록을 한 각 학생의 학번, 이름을 출력하라. (in연산자를 이용) mysql> select stu_no, stu_name                                     -> from student     -> where stu_no IN (20001015, 20061011, 20071001, 20071010,                         20071022, 20071300, 20071307, 20071405); +----------+----------+ | stu_no   | stu_name | | 20001015 | 박도준   | | 20061011 | 박정인   | | 20071001 | 장수인   | | 20071010 | 홍길동   | | 20071022 | 이순신   | | 20071300 | 유하나   | | 20071307 | 김문영   | | 20071405 | 최차영   | 8 rows in set (0.13 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-21] 부속질의어를 이용하여 등록을 한 각 학생의 학번, 이름을 출력하라. mysql> select stu_no, stu_name     -> from student     -> where stu_no in     ->       (select stu_no     ->        from fee); +----------+----------+ | stu_no   | stu_name | | 20001015 | 박도준   | | 20061011 | 박정인   | | 20071001 | 장수인   | | 20071010 | 홍길동   | | 20071022 | 이순신   | | 20071300 | 유하나   | | 20071307 | 김문영   | | 20071405 | 최차영   | 8 rows in set (0.13 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-22] 적어도 한 번의 장학금을 받았던 학생의 학번과 이름을 출력하라 [예제 9-22] 적어도 한 번의 장학금을 받았던 학생의 학번과 이름을 출력하라. mysql> select stu_no, stu_name     -> from student     -> where stu_no in     -> (select stu_no     -> from fee     -> where jang_total > 0); +----------+----------+ | stu_no   | stu_name | | 20001015 | 박도준   | | 20061011 | 박정인   | | 20071001 | 장수인   | | 20071010 | 홍길동   | | 20071022 | 이순신   | | 20071300 | 유하나   | | 20071307 | 김문영   | | 20071405 | 최차영   | 8 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-23] “20061011”인 학생이 가입한 동아리를 제외한 다른 동아리에 적어도 한 번 가입을 한 학생의 학번과 이름, 주민등록번호를 출력하라. mysql> select stu_no, stu_name, id_num     -> from student     -> where stu_no in     -> (select stu_no     -> from circle     -> where cir_name not in     -> (select cir_name     -> where stu_no = '20061011')); +----------+----------+----------------+ | stu_no | stu_name | id_num | | 20001015 | 박도준 | 780116-1580715 | | 20001021 | 이상길 | 750819-1227014 | | 20041007 | 정인정 | 830315-2351225 | | 20071001 | 장수인 | 890209-1616822 | 4 rows in set (0.05 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-24] 휴대폰을 가지고 있는 학생을 출력하라.(단, 휴대폰이 있어도 야간인 학생은 제외한다.) mysql> select stu_no, stu_name, phone_no     -> from student     -> where phone_no not in     -> (select phone_no     -> where juya = '야'); +----------+----------+---------------+ | stu_no   | stu_name | phone_no      | | 20001015 | 박도준   | 011-611-9884  | | 20041002 | 김유미   | 010-617-1290  | | 20041007 | 정인정   | 016-605-7837  | | 20061011 | 박정인   | 017-3142-1294 | | 20071300 | 유하나   | 019-651-0707  | 5 rows in set (0.00 sec) 학번 “20001015” 박도준 학생은 주간 학생이므로 출력, “20041033”번 연개소문은 야간이므로 제외되었다.  휴대폰이 없는 “20061014” 고혜진 학생도 제외되었고, 휴대폰을 가지고 있고 주간인 학생만 최종 결과에 포함 2019-04-13 쉽게 배우는 MySQL 5.x

9.9 부속질의어에서 관계 연산자 [예제 9-25] 수강신청을 한 학생의 학번과 이름을 출력하라. 9.9 부속질의어에서 관계 연산자 [예제 9-25] 수강신청을 한 학생의 학번과 이름을 출력하라. mysql> select stu_no, stu_name     -> from student     -> where stu_no in     -> (select stu_no     -> from attend     -> where att_div = 'Y'); +----------+----------+ | stu_no   | stu_name | | 20061011 | 박정인   | | 20071300 | 유하나   | 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-26]김유미(1983년생) 보다 나이가 더 많은 각 학생의 학번과 이름, 주 민등록번호를 출력하라. mysql> select stu_no, stu_name, id_num     -> from student     -> where substring(id_num,1,2) <     -> (select substring(id_num, 1,2)     -> where stu_name = '김유미'); +----------+----------+----------------+ | stu_no   | stu_name | id_num         | | 20001001 | 김유신   | 811007-1632013 | | 20001015 | 박도준   | 780116-1580715 | | 20001021 | 이상길   | 750819-1227014 | | 20041033 | 연개소문 | 810615-1633111 | 4 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

9.10 ALL과 ANY 연산자 [예제 9-27] 가장 나이가 많은 학생의 학번, 이름 , 출생년도를 출력하라. (단, 가장 나이가 많은 학생은 다른 학생의 출생년도보다 출생년도가 더 적거나 같은 출생년도를 가진 학생이다.) mysql> select stu_no, stu_name, birth_year     -> from student     -> where birth_year <= all     -> (select birth_year     -> from student); +----------+----------+------------+ | stu_no   | stu_name | birth_year | | 20001021 | 이상길   | 1975       | 1 row in set (0.02 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-28] 가장 나이가 많은 학생을 제외한 나머지 모든 학생의 학번, 이름, 주민등록번호를 출력하라 . mysql> select stu_no, stu_name, id_num     -> from student     -> where birth_year > any     -> (select birth_year     -> from student); +----------+----------+----------------+ | stu_no   | stu_name | id_num         | | 20001001 | 김유신   | 811007-1632013 | | 20001015 | 박도준   | 780116-1580715 | | 20041002 | 김유미   | 830207-2629715 | | 20041007 | 정인정   | 830315-2351225 | | 20041033 | 연개소문 | 810615-1633111 | | 20061011 | 박정인   | 830403-1635213 | | 20061014 | 고혜진   | 870307-2638759 | | 20061048 | 김영호   | 860811-1548758 | | 20071001 | 장수인   | 890209-1616822 | | 20071010 | 홍길동   | 880402-1850838 | | 20071022 | 이순신   | 890222-1218818 | | 20071300 | 유하나   | 880921-2573717 | | 20071307 | 김문영   | 880418-2121623 | | 20071405 | 최차영   | 881003-2581516 | 14 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-29] 학번 20001015인 학생이 등록한 등록금의 납부총액보다 더 많은 등록금을 낸 학생의 학번을 출력하라 [예제 9-29] 학번 20001015인 학생이 등록한 등록금의 납부총액보다 더 많은 등록금을 낸 학생의 학번을 출력하라.이때 20001015번은 결과에서 제외한다. mysql> select distinct stu_no          -> from fee     -> where stu_no <> '20001015'     -> and fee_pay > any     -> (select fee_pay     -> where stu_no = '20001015'); +----------+ | stu_no   | | 20061011 | | 20071001 | | 20071010 | | 20071022 | | 20071300 | | 20071307 | | 20071405 | 7 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

9.11 EXISTS 연산자 [예제 9-30] 등록을 한 학생의 학번과 이름을 출력하라. mysql> select  stu_no, stu_name     -> from student     -> where stu_no in     -> (select stu_no     -> from fee); +----------+----------+ | stu_name | stu_no   | | 박도준   | 20001015 | | 박정인   | 20061011 | | 장수인   | 20071001 | | 홍길동   | 20071010 | | 이순신   | 20071022 | | 유하나   | 20071300 | | 김문영   | 20071307 | | 최차영   | 20071405 | EXISTS 연산자를 사용하여 다음과 같이 작성하면 동일한 결과 출력 mysql> select stu_no, stu_name      -> from student      -> where exists      -> (select * from fee      -> where stu_no = student.stu_no); 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-31] 등록하지 않은 학생의 학번과 이름을 출력하라. mysql> select stu_no, stu_name     -> from student     -> where not exists     -> (select *     -> from fee     -> where stu_no = student.stu_no); +----------+----------+ | stu_no   | stu_name | | 20001001 | 김유신   | | 20001021 | 이상길   | | 20041002 | 김유미   | | 20041007 | 정인정   | | 20041033 | 연개소문 | | 20061014 | 고혜진   | | 20061048 | 김영호   | EXISTS 연산자를 사용하여 다음과 같이 작성하면 동일한 결과 출력     -> (select 'Nothing' 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-32] 학적 테이블에서 학번, 이름, 휴대폰번호, 우편번호를 출력하라. mysql> select stu_no, stu_name, phone_no, post_no from student; +----------+----------+---------------+---------+ | stu_no   | stu_name | phone_no      | post_no | | 20001001 | 김유신   | 011-617-1290  | 556-820 | | 20001015 | 박도준   | 011-611-9884  | 540-130 | | 20001021 | 이상길   | NULL          | 451-800 | | 20041002 | 김유미   | 010-617-1290  | 545-800 | | 20041007 | 정인정   | 016-605-7837  | 540-850 | | 20041033 | 연개소문 | 018-641-9304  | 550-130 | | 20061011 | 박정인   | 017-3142-1294 | 150-051 | | 20061014 | 고혜진   | NULL          | 500-170 | | 20061048 | 김영호   | 017-614-7575  | 506-040 | | 20071001 | 장수인   | NULL          | 545-080 | | 20071010 | 홍길동   | 010-6425-9245 | 550-160 | | 20071022 | 이순신   | 010-7141-1860 | 540-170 | | 20071300 | 유하나   | 019-651-0707  | 550-260 | | 20071307 | 김문영   | 019-4624-0460 | 540-170 | | 20071405 | 최차영   | NULL          | 540-310 | 15 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-33] 각각의 도시에 거주하는 모든 학생에 대하여 휴대폰을 가지고 있는 학생의 학번과 이름 우편번호, 휴대폰 번호를 나타내어라.(단, 휴대폰이 있는 학생과 휴대폰이 없는 학생의 우편번호 앞 3자리가 동일한 학생은 제외시킨다) mysql> select stu_no, stu_name, post_no, phone_no -> from student s1 -> where not phone_no in -> (select phone_no -> from student s2 -> where substring(s1.post_no, 1, 3) = substring(s2.post_no, 1, 3) -> and phone_no is null); +----------+----------+---------+---------------+ | stu_no | stu_name | post_no | phone_no | | 20001001 | 김유신 | 556-820 | 011-617-1290 | | 20041033 | 연개소문 | 550-130 | 018-641-9304 | | 20061011 | 박정인 | 150-051 | 017-3142-1294 | | 20061048 | 김영호 | 506-040 | 017-614-7575 | | 20071010 | 홍길동 | 550-160 | 010-6425-9245 | | 20071300 | 유하나 | 550-260 | 019-651-0707 | 6 rows in set (0.00 sec) 위의 실행결과는 휴대폰이 없는 학생과  휴대폰이 있어도 휴대폰이 없는 학생의 우편번호 앞 3자리가 같으면 제외되었다.  휴대폰 없는 최차영 학생의 우편번호(540-310)과 장수인 학생의 우편번호(545-080) 중 앞 3자리가 똑같아 김문영, 김유미 학생은 휴대폰이 있지만 제외되었다. 2019-04-13 쉽게 배우는 MySQL 5.x

9.11 부정 조건 -SQL에서 자주 발생하는 오류는 부정 조건을 가지고 있는 오류 9.11 부정 조건 -SQL에서 자주 발생하는 오류는 부정 조건을 가지고 있는 오류 -부정 조건은 긍정 조건 앞에 NOT을 위치시킴으로써 만듬 [예제 9-34] “Java길라잡이” 동아리에 가입한 학생의 학번과 이름을 출력하라. mysql> select stu_no, stu_name     -> from circle     -> where cir_name = 'Java길라잡이'; +----------+----------+ | stu_no   | stu_name | | 20071001 | 장수인   | | 20041007 | 정인정   | | 20001015 | 박도준   | 3 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-35] “Java길라잡이” 동아리에 가입하지 않은 학생의 학번과 이름을 출력하라. mysql> select stu_no, stu_name, cir_name     -> from circle     -> where cir_name <> 'Java길라잡이'; +----------+----------+-------------+ | stu_no   | stu_name | cir_name    | | 20061011 | 고혜진   | 컴맹탈출    | | 20071300 | 유하나   | 컴맹탈출    | | 20071307 | 김문영   | 컴맹탈출    | | 20001021 | 이상길   | PHP길라잡이 | 4 rows in set (0.00 sec) NOT = 연산자를 사용하여 다음과 같이 작성하면 동일한 결과 출력     -> where not cir_name = 'Java길라잡이'; 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-36] 등록테이블에서 장학코드가 ‘11’ 학생의 학번과 장학코드, 장학금 총액을 출력하라. mysql> select stu_no, jang_code, jang_total     -> from fee     -> where jang_code = 11; +----------+-----------+------------+ | stu_no   | jang_code | jang_total | | 20001015 | 11        |    2000000 | | 20061011 | 11        |    2000000 | | 20071300 | 11        |    2000000 | 3 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-37] 등록테이블에서 장학코드가 ‘11’이 아닌 학생의 학번과 장학코드, 장학금총액을 출력하라. mysql> select stu_no, jang_code, jang_total     -> from fee     -> where jang_code <> 11; +----------+-----------+------------+ | stu_no   | jang_code | jang_total | | 20001015 | 2         |    1000000 | | 20001015 | 10        |    2500000 | | 20061011 | 1         |     500000 | | 20061011 | 10        |    2500000 | | 20061011 | 21        |     800000 | | 20071001 | 1         |     500000 | | 20071010 | 1         |     500000 | | 20071022 | 1         |     500000 | | 20071300 | 1         |     500000 | | 20071307 | 1         |     500000 | | 20071405 | 1         |     500000 | | 20071405 | 10        |    2500000 | 17 rows in set (0.00 sec) 장학코드가 11이거나, NULL인 경우가 제외 되어 원하는 결과 값이 아니다. 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-38] 등록테이블에서 장학코드가 ‘11’이 아닌 학생의 학번과 장학코드, 장학금총액을 출력하라.(NOT IN 이용) mysql> select stu_no, jang_code, jang_total     -> from fee     -> where jang_code not in     -> (select jang_code     -> where jang_code in (11)); +----------+-----------+------------+ | stu_no   | jang_code | jang_total | | 20001015 | 2         |    1000000 | | 20001015 | 10        |    2500000 | | 20061011 | 1         |     500000 | | 20061011 | 10        |    2500000 | | 20061011 | 21        |     800000 | | 20071001 | 1         |     500000 | | 20071010 | 1         |     500000 | | 20071022 | 1         |     500000 | | 20071300 | 1         |     500000 | | 20071307 | 1         |     500000 | | 20071405 | 1         |     500000 | | 20071405 | 10        |    2500000 | 장학코드가 11이거나, NULL인 경우가 제외 되어 원하는 결과 값이 아니다. 2019-04-13 쉽게 배우는 MySQL 5.x

[예제 9-39] 등록테이블에서 장학코드가 ‘11’이 아닌 학생의 학번과 장학코드, 장학금총액을 출력하라 [예제 9-39] 등록테이블에서 장학코드가 ‘11’이 아닌 학생의 학번과 장학코드, 장학금총액을 출력하라.(단, NOT IN 이용하고 장학코드가 NULL인 학생도 포함하여 출력하라.) mysql> select stu_no, jang_code, jang_total     -> from fee     -> where jang_code not in     -> (select jang_code     -> where jang_code in(11))     -> or jang_code is null; +----------+-----------+------------+ | stu_no   | jang_code | jang_total | | 20001015 | 2         |    1000000 | | 20001015 | 10        |    2500000 | | 20061011 | 1         |     500000 | | 20061011 | 10        |    2500000 | | 20061011 | 21        |     800000 | | 20071001 | 1         |     500000 | | 20071001 | NULL      |       NULL | | 20071010 | 1         |     500000 | | 20071010 | NULL      |       NULL | | 20071022 | 1         |     500000 | | 20071022 | NULL      |       NULL | | 20071300 | 1         |     500000 | | 20071307 | 1         |     500000 | | 20071307 | NULL      |       NULL | | 20071405 | 1         |     500000 | | 20071405 | 10        |    2500000 | 21 rows in set (0.00 sec) 2019-04-13 쉽게 배우는 MySQL 5.x