KDT/DB

231103 DB - SELECT, 비교연산자, 정렬, WHERE 1

001cloudid 2023. 11. 3. 13:59
728x90

※MySQL에서 문자 데이터 값 검색 시 대소문자를 구분하지 않음.

 

데이터 조회 SELECT

select * from 테이블명 [where 조건문];

-- 예시
select * from members;
select * from products;
select * from orders;

 

select 컬럼1, 컬럼2,... from 테이블명 [where 조건문];

-- 예시
select member_id, member_name from members;
select company, prod_name, price from products;
select orde_num, order_date from orders;

 

※데이터 조회 시 컬럼 순서와 테이블의 컬럼 순서와 같을 필요가 없다. 출력하고 싶은 컬럼을 순서대로 작성하면 작성한 순서대로 나온다.

 

Where 작성 방법

  • 테이블로부터 특정 행 조회하기 위해서는 where 조건문이 필요
  • 좌변 비교연산자 우변 →비교할 컬럼명 비교연산자 비교할 값(숫자,'문자','날짜')
  • 문자나 날짜는 작은 따옴표 안에 쓰되 날짜는 년-월-일 순으로 작성

 

비교연산자

그림 1. 비교연산자
그림 1. 비교연산자

 

--members 테이블에서 member_id가 105인 회원 정보를 출력
select * from members where member_id = 105;


-- members 테이블에서 이름이 '홍길동'인 회원 정보 출력
select * from members where member_name='홍길동';


-- members 테이블에서 직업이 회사원이 아닌 회원 정보를 출력
select * from members where job<>'회사원'; 
select * from members where job!='회사원';


--member_id컬럼명만, 생년월일이 2000년이후 출생인 회원 정보를 출력
select * from members where birth > '2000-01-01';

-- products 테이블에서 가격이 300 이상인 제품의 이름과 가격을 출력
select prod_name, price from products where price>=300;

-- members 테이블에서 생년월일이 1990년 이전인 회원의 이름, 생년월일, 전화번호를 출력
select member_name, birth, phone from members where birth < '1990-01-01';


조건문은 여러 개가 들어갈 수 있다. and, or의 논리연산자로 나열 where 조건1 and/or 조건2,...;

 

-- products 테이블에서 상품가격이 300이상 500이하인 상품만 출력
select * from products where 300<=price<=500;

-- members 테이블에서 생년월일이 1990년 이전이거나 1991년 이후인 회원만 출력
select * from members where birth>'1991-12-31' or birth<'1990-01-01';

-- products 테이블로부터 LG 제품 중 가격이 300이상인 상품만 출력
select * from products where company='LG' and price >= 300;

-- where에 조건문이 여러개 작성되었을 경우에 and 와 or가 함께 사용된 경우 우선순위는 and>>or
select * from products where company='lg' or company='삼성' and price<=300;
-- company='삼성' and price<=300이를 작업한 후 이것의 결과 res와  company='lg' or res;
-- 단, 괄호를 해주면 괄호 먼저
select * from products where (company='lg' or company='삼성') and price<=300;

 

테이블로부터 데이터 조회 시 정렬하기

select * / 컬럼명1, 컬럼명2,... from 테이블명 [where 조건문] [order by 컬럼명 asc/desc];

 

-- 숫자컬럼을 기준으로 정렬하기
select * from products order by price;
select * from products order by price desc;
select * from orders order by member_id; -- 같은 값일 경우 저장된 순서대로 출력
select * from orders order by member_id desc;

-- 날짜컬럼을 기준으로 정렬하기 null값은 가장 작은 값으로 판단(오름차순 위, 내림차순 아래)
select * from products order by make_date; -- 오래된 날짜부터 최신날짜 순.
select * from products order by make_date desc; -- 최신날짜부터 오래된 날짜 순.

-- 문자 컬럼을 기준으로 정렬하기 // 영어-한글 순
select * from members order by member_name;
select * from products order by prod_name;
select * from products order by prod_name desc;

-- 여러 컬럼을 기준으로 정렬하기
select * from orders order by member_id, orde_num;
select * from orders order by member_id, orde_num desc;
select * from orders order by member_id desc, orde_num;
select * from orders order by member_id desc, orde_num desc;
select * from products order by company, price desc;

 

select 구문을 사용한 데이터 검색

※ use hr; -- use db; db를 사용한다 혹은 들어간다.

테이블 구조 조회하기 : desc[ribe] 테이블명;
테이블 리스트 조회하기 : show 테이블명;

-- 예시
desc employees;
desc departments;
desc locations;

 

테이블로부터 데이터 검색하기

select *(모든 컬럼) | 컬럼명1, 컬럼명2, ... from 테이블명;

-- 예시
select * from employees;
select * from departments;
select department_id, location_id from departments;

 

select 구문에 산술식( 산술연산자가 활용된 계산식. 산술연산자 : +, - ,*, / )이 사용 가능하며,

산술식 결과가 DB에 저장되지 않는다.

select employee_id, last_name, salary, 12*salary+100, 12*(salary+100) from employees;

 

null
null값? 알 수 없는 값, 아직 정의 되지 않은 값,...
null은 0(숫자),공백(문자)과는 다른 특수한 값. 모든 데이터 타입에 사용 가능. 

데이터를 삽입할 때 정해지지 않는 값에는 null 값으로 설정. 

산술식에 null 값이 포함된 경우 결과는 무조건 null이 발생한다.

 

Column Alias

산술식으로 조회했을 경우 식이 그대로 노출되며 명확히 무엇을 나타내는지 바로 이해하기 어려울 수 있다.

그때 사용하는 것이 Column Alias를 사용한다.

Column Alias는 컬럼명이나 산술식으로 작성된 컬럼의 제목을 원하는 이름으로 출력하는 방법이다.

영문, _, $ 가 포함된 컬럼명은 큰따옴표로 붙히지 않아도 됨. 나머지는 큰 따옴표로 붙혀야한다.
테이블명, 컬럼명은 호환성 때문에 한글을 사용하지 않음.

컬럼명 as alias | 컬럼명 alis | 컬럼명 [as] "공백|(_,#,$를 제외한)특수문자(한글포함)"

-- 예시
select EMPLOYEE_ID, LAST_NAME,SALARY, SALARY*12 as "연봉(커미션제외)"
from employees;

select EMPLOYEE_ID as emp_number, LAST_NAME as "이름",SALARY "급여", COMMISSION_PCT "수당 비율"
from employees;

MySQL에서 큰따옴표, 작은따옴표를 동일 시한다.


distinct
컬럼에서 중복값을 제거하고, 한 번만 출력해주는 키워드 

select distinct 컬럼명1, 컬럼명2,... from 테이블명

-- 예시
-- employees 테이블에서 사원들이 소속된 부서의 종류(부서리스트)를 출력
select department_id from employees;
select distinct department_id from employees;

-- employees 테이블에서 사원들의 부서 내 담당업무종류를 출력
select DEPARTMENT_ID, JOB_ID from employees;
select distinct DEPARTMENT_ID "부서번호", JOB_ID "업무" from employees;

 

-- 연습문제1
select EMPLOYEE_ID "Emp #", LAST_NAME "Employee",JOB_ID "Job",HIRE_DATE "Hire Date" from employees;

-- 연습문제2
select distinct JOB_ID from employees;

 

where절과 order by 절

use hr;

 

조건문(where절)

select 컬럼명1, 컬럼명2,... | * from 테이블명 where 좌변(컬럼명) 비교연산자 우변(비교할 값);

비교할 값은 값은 숫자, '문자', '날짜'일 수 있다.
비교연산자에는 단일행 비교연산자(우변에 단일 값이 올 수 있는 연산자. 종류로는 = > < <> != 등)가 온다.

 

-- where절 예시
select EMPLOYEE_ID, LAST_NAME,JOB_ID,DEPARTMENT_ID from employees where DEPARTMENT_ID = 90;

-- MySQL에서 문자 데이터 값 검색 시 대소문자를 구분하지 않음.
select LAST_NAME,JOB_ID,SALARY,DEPARTMENT_ID from employees where LAST_NAME = 'whalen';

-- MySQL에서 날짜 데이터 값 검색 시 '년-월-일' 순서로 작성해야함.
select EMPLOYEE_ID, LAST_NAME, HIRE_DATE from employees where HIRE_DATE='1996-02-17';

select EMPLOYEE_ID, LAST_NAME,SALARY,DEPARTMENT_ID from employees where SALARY<=30000;

 

728x90

'KDT > DB' 카테고리의 다른 글

231115 DB - ERD, JOIN 1  (0) 2023.11.17
231108 DB - WHERE 2, ORDER BY  (0) 2023.11.08
231101 DB - CRUD  (0) 2023.11.01
231027 DB - MySQL 설치 및 설정  (0) 2023.10.31
231026 DB - DB와 DBMS  (0) 2023.10.31