상세 컨텐츠

본문 제목

[MySQL] SELECT 구문과 조건절

MySQL/MySQL 기본

by 미로910 2024. 6. 4. 17:22

본문

-- student 샘플 데이터 
INSERT INTO student (student_id, name, grade, major)
VALUES
  (2, '박영희', 2, '경영학과'),
  (3, '이민수', 4, '전자공학과'),
  (4, '홍길동', 1, '디자인학과'),
  (5, '임성민', 3, '컴퓨터공학과'),
  (6, '한지원', 2, '경영학과'),
  (7, '박준형', 4, '전자공학과'),
  (8, '김민지', 1, '디자인학과'),
  (9, '이현수', 3, '컴퓨터공학과'),
  (10, '정미경', 2, '경영학과'),
  (11, '김성진', 4, '전자공학과'),
  (12, '임승환', 1, '디자인학과');

조건절이란 (WHERE)

MySQL에서 WHERE 절은 SELECT, UPDATE, DELETE, INSERT 문에서 조건을 지정하여 해당하는 데이터를 선택하거나 수정하거나 삭제할 때 사용하는 절이다.

WHERE 절은 기본적으로 조건식을 포함하며, 조건식은 연산자와 피연산자로 이루어져 있다.

연산자는 비교 연산자(=, <>, <, <=, >, >=)나 논리 연산자(AND, OR, NOT) 등이 있으며, 피연산자는 컬럼명, 상수값, 서브쿼리 등이 올 수 있다.

예를 들어, 아래의 SELECT 문에서는 WHERE 절에 "age >= 20" 이라는 조건식을 포함하고 있다.

SELECT * FROM users WHERE age >= 20;

이렇게 WHERE 절을 사용하여 쿼리를 작성하면 해당하는 조건을 만족하는 데이터만 선택되어 결과로 반환 된다.

WHERE 절을 사용하지 않으면 모든 데이터가 선택되어 반환 된다.

또한, WHERE 절은 여러 조건식을 조합하여 사용할 수도 있다. 이때 논리 연산자인 AND나 OR, NOT을 사용하여 조건식들을 연결한다.

예를 들어, 아래의 SELECT 문에서는 WHERE 절에 "age >= 20 AND gender = 'M'" 이라는 두 개의 조건식을 AND로 연결하여 사용하고 있다.

AND 그리고는 논리 곱 —> 두개 조건 식 전부 true 이여 한다.

OR 또는 → 논리 합 → 둘 중 하나라도 참이면 true 입니다.

SELECT * FROM users WHERE age >= 20 AND gender = 'M';

이렇게 WHERE 절을 사용하여 쿼리를 작성할 때는 조건식을 명확하게 지정해야 하며, 잘못된 조건식을 사용하면 의도하지 않은 결과가 나올 수 있다.

따라서 조건식을 작성할 때는 문법적인 오류를 방지하기 위해 괄호를 사용하거나, 필요한 경우에는 서브쿼리를 사용하여 복잡한 조건식을 작성할 수도 있다.

조건절에서 사용할 수 있는 대표 연산자

  • = (equal)
  • (greater than)
  • < (less than)
  • = (greater than or equal to)
  • <= (less than or equal to)
  • <> or != (not equal to)
  • BETWEEN (between a range of values)
  • LIKE (search for a pattern) → 서울%
  • IN (search for multiple values) —> 여러 조건을 한번에 선택할 때 사용 가능 → age in (10, 13, 15)
select * from student; 


INSERT INTO student (student_id, name, grade, major)
VALUES
  (2, '박영희', 2, '경영학과'),
  (3, '이민수', 4, '전자공학과'),
  (4, '홍길동', 1, '디자인학과'),
  (5, '임성민', 3, '컴퓨터공학과'),
  (6, '한지원', 2, '경영학과'),
  (7, '박준형', 4, '전자공학과'),
  (8, '김민지', 1, '디자인학과'),
  (9, '이현수', 3, '컴퓨터공학과'),
  (10, '정미경', 2, '경영학과'),
  (11, '김성진', 4, '전자공학과'),
  (12, '임승환', 1, '디자인학과');
  
  
  select student_id, name
  from student
  where major = '컴퓨터공학과';
  
  
  -- 1. grade가 3인 학생들 조회 하기 (특정 데이터를 지정하지 않으면 전부 출력 - 컬럼)
  
  
  -- 2. 이름이 홍길동인 학생 조회 하기 
  
  
  -- 3. 학번이 1부터 10까지인 학생들 조회하기 (between )
  
  
  -- 4. 학과가 컴퓨터 공학과 그리고, 학년이 2학년인 학생들만 조회 해줘 
  
  
  -- 5. 학과가 컴퓨터공학과 이거나(또는) 학년이 2학년인 학생들을 조회 해주세요
  
  
  -- 6. 학생 이름이 홍길동이 아닌 학생들을 조회해주세요
  
  
  -- 7. 학생들의 학년이 2학년 이상인 사람들을 조회 
  
  
  -- 8. 학생들의 학년이 2학년 미만인 사람들을 조회 
  
  -- 9. 학년이 1학년 이거나 3학년인, 4학년 학생들 조회하기 
  -- IN 으로 사용

‼ 풀이 ‼

-- 1. grade가 3인 학생들 조회 하기 (특정 데이터를 지정하지 않으면 전부 출력 - 컬럼)
select * from student where grade = 3;


-- 2. 이름이 홍길동인 학생 조회 하기 
select * from student where name = '홍길동';


-- 3. 학번이 1부터 10까지인 학생들 조회하기 (between )
select * from student where student_id between 1 AND 10; 


-- 4. 학과가 컴퓨터 공학과 그리고, 학년이 2학년인 학생들만 조회 해줘 
select * from student where major = '디자인학과' and grade = 1; 



-- 5. 학과가 컴퓨터공학과 이거나(또는) 학년이 2학년인 학생들을 조회 해주세요
select * from student where major = '컴퓨터공학과' or grade = 2; 


-- 6. 학생 이름이 박영희 아닌 학생들을 조회해주세요
select * 
from student
where name != '박영희';

select * 
from student
where name <> '박영희';

-- 7. 학생들의 학년이 3학년 이상인 사람들을 조회 
select * from student where grade >= 3;



-- 8. 학생들의 학년이 2학년 미만인 사람들을 조회 
select * from student where grade < 2;


-- 9. 학년이 1학년 이거나 3학년인, 4학년 학생들 조회하기 
-- IN 으로 사용 
select * from student where grade in(1, 3, 4);
select * from student where grade != 2;

샘플 데이터

CREATE TABLE subject (
  subject_id INT AUTO_INCREMENT PRIMARY KEY,
  subject_name VARCHAR(50) NOT NULL,
  credit INT NOT NULL,
  department VARCHAR(50) NOT NULL,
  professor VARCHAR(50) NOT NULL
);


CREATE TABLE customer (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50),
  address VARCHAR(100) NOT NULL
);

-- subject 테이블 샘플 데이터 

INSERT INTO subject (subject_id, subject_name, credit, department, professor)
VALUES
(1, '영어회화', 3, '외국어학과', '김영희'),
(2, '프로그래밍 기초', 3, '컴퓨터공학과', '박철수'),
(3, '데이터베이스 개론', 3, '컴퓨터공학과', '이승호'),
(4, '컴퓨터 시스템 개론', 3, '컴퓨터공학과', '홍길동'),
(5, '선형대수학', 3, '수학과', '김영수'),
(6, '미적분학', 3, '수학과', '박순영'),
(7, '국어문학사', 3, '국어국문학과', '최지혜'),
(8, '국어문법론', 3, '국어국문학과', '이상호'),
(9, '일본어회화', 3, '외국어학과', '김현진'),
(10, '중국어학', 3, '외국어학과', '최영식'),
(11, '미국사', 3, '사학과', '박영진');


-- customer 샘플 데이터 

INSERT INTO customer (id, name, email, address) VALUES
(1, '김철수', 'kim@example.com', '서울시 강남구'),
(2, '박영희', 'park@example.com', '서울시 서초구'),
(3, '이민수', NULL, '경기도 성남시 분당구'),
(4, '최영진', 'choi@example.com', '서울시 송파구'),
(5, '한미영', 'han@example.com', '경기도 수원시 장안구'),
(6, '강종현', 'kang@example.com', '서울시 강서구'),
(7, '신영수', 'shin@example.com', '경기도 의정부시'),
(8, '유승환', 'yoo@example.com', '경기도 부천시'),
(9, '서민지', 'seo@example.com', '서울시 종로구'),
(10, '임진우', 'lim@example.com', '경기도 안양시 동안구');

 

 

🔔도전 

customer 테이블과 입력되어 있는 데이터를 활용해서 문제를 직접 만들어보고 쿼리 구문을 작성 해주세요
문제는 최소 5개 이상입니다.
🔔 문제
1. 강남 3구 사는 사람들을 조회(서초구,송파구,강남구)
2. email을 입력하지 않은 사람의 데이터를 출력하세요
3. id가 5이상이며 주소가 서울시에 거주하는 사람 이름을 검색해라 단, 서울시는 다음과 같은 주소가 있다 강남구, 서초구, 송파구, 강서구 종로구
4. email이 NULL인 사람을 조회하는 쿼리 (IS NULL 을 사용해보세요)
5. 이메일이 NULL 이 아니고 주문 번호가 2번이 넘으며 종로구에 사시는분은
6. 주소가 '서울'이면서 id가 5이하인 고객 조회하는 쿼리
7. 서울시에 사는 고객들을 조회하는 쿼리 (LIKE 사용해보기)
8. 아이디가 3에서 8까지의 사람 중 '경기도 의정부'에 거주하고 있는 사람 중 이메일을 입력한 사람을 출력하시오
-- drop table customer;
-- drop table subject;

CREATE TABLE subject (
  subject_id INT AUTO_INCREMENT PRIMARY KEY,
  subject_name VARCHAR(50) NOT NULL,
  credit INT NOT NULL,
  department VARCHAR(50) NOT NULL,
  professor VARCHAR(50) NOT NULL
);


CREATE TABLE customer (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50),
  address VARCHAR(100) NOT NULL
);

-- subject 테이블 샘플 데이터 

INSERT INTO subject (subject_id, subject_name, credit, department, professor)
VALUES
(1, '영어회화', 3, '외국어학과', '김영희'),
(2, '프로그래밍 기초', 3, '컴퓨터공학과', '박철수'),
(3, '데이터베이스 개론', 3, '컴퓨터공학과', '이승호'),
(4, '컴퓨터 시스템 개론', 3, '컴퓨터공학과', '홍길동'),
(5, '선형대수학', 3, '수학과', '김영수'),
(6, '미적분학', 3, '수학과', '박순영'),
(7, '국어문학사', 3, '국어국문학과', '최지혜'),
(8, '국어문법론', 3, '국어국문학과', '이상호'),
(9, '일본어회화', 3, '외국어학과', '김현진'),
(10, '중국어학', 3, '외국어학과', '최영식'),
(11, '미국사', 3, '사학과', '박영진');


-- customer 샘플 데이터 
INSERT INTO customer (id, name, email, address) VALUES
(1, '김철수', 'kim@example.com', '서울시 강남구'),
(2, '박영희', 'park@example.com', '서울시 서초구'),
(3, '이민수', NULL, '경기도 성남시 분당구'),
(4, '최영진', 'choi@example.com', '서울시 송파구'),
(5, '한미영', 'han@example.com', '경기도 수원시 장안구'),
(6, '강종현', 'kang@example.com', '서울시 강서구'),
(7, '신영수', 'shin@example.com', '경기도 의정부시'),
(8, '유승환', 'yoo@example.com', '경기도 부천시'),
(9, '서민지', 'seo@example.com', '서울시 종로구'),
(10, '임진우', 'lim@example.com', '경기도 안양시 동안구');


select * from customer; 
select * from subject; 


-- 1. 강남 3구에 사는 사람들을 조회(서초구, 송파구, 강남구)
select * 
from  customer
where address in('서울시 강남구', '서울시 서초구', '서울시 송파구');


-- 2. email을 입력하지 않은 사람의 데이터를 출력하시오
-- null 찾을 때 사용 방법  --> 공백 데이터 이고 빈 문자열도 데이터 이다. 
select * 
from customer 
where email is null;


-- 3. ID가 5이상이며 주소가 서울시에 거주하는 사람 이름을 검색해라
select *  
from customer
where id >= 5 
      AND address in('서울시 강남구', '서울시 서초구', '서울시 송파구', '서울시 강서구'); 

select *  
from customer
where id >= 5 
      AND address like '서울시%'; 

-- 4. 이메일이 NULL이 아니고 주문번호가 2번이 넘으며 종로구에 사는 분을 검색해보자
select * 
from customer
where email is not null 
      AND id > 2 AND address = '서울시 종로구';


-- 5. 주소가 '서울'이면서 id가 5 이하인 고객 조회하는 쿼리
select * 
from customer
where address like '서울%' and id <= 5;


-- 6. 아이디가 3에서 8까지의 사람 중 '경기도 의정부'에 거주하고 있는 사람 중 이메일을 입력한 사람을 출력하시오.
select * 
from customer
where (id between 3 and 8) 
	 and address = '경기도 의정부시' and email is not null;	
     
     
-- 7. email이 NULL인 사람을 조회하는 쿼리 (IS NULL 을 사용해보세요)
select * 
from customer
where email is null;

-- 8. 서울시에 사는 고객들을 조회하는 쿼리 (LIKE 사용해보기) 
select * 
from customer
where address like '서울시%';

 

관련글 더보기