본문 바로가기
멀티캠퍼스 풀스택 과정/데이터베이스

데이터베이스1-3 기본 명령어와 SELECT문 및 연산자와 기본문제

by 이쟝 2022. 1. 16.

*이 포스팅은 이미 MySQL을 이미 설치하고 그 다음부터 명령 프롬포트로 SQL을 실행하였습니다.*

명령어 팁: cd\ 루트로 이동 cd 하위 폴더로(앞으로) cd .. 상위 폴더로(뒤로 가기)

 

 

더보기

employees라는 데이터 소스를 이미 다운 받았고, 환경설정은 끝났다.(데이터소스를 다운을 받고, source 폴더명.sql 하면 끝난다.)

cd “데이터소스 폴더에서 파일을 읽기 -:> mysql -u root -p 입력 하고 -> Enter password

uusername ppassword이다. username은 바꿀 필요가 없고, p는 쉽게!


[기본 명령어]

*세미콜론 중요*,  *스펠링 중요*,  * ;(세미콜론)없이 enter를 치면 문장이 길 때 유용*

 

작업 명령어
현재 계정의 DB 목록 확인 show databases;
사용할 DB 선택 use Database_name;
선택한 DB table 목록 확인 show tables;
테이블을 선택해서 레코드 보여주기
(보여줄 데이터 개수를 제한)
select * from table_name;  (전부 다 선택)
select * from table_name limit number for showing;
해당 테이블의 컬럼, 컬럼크기 등 테이블의 정보 desc table_name  (description)
더보기

 

show databeses; 를 해서 현재 DBMS에 있는 DB들을 보여준다.

 

 

use employees DB중에서 employees라는 DB를 선택한다.

show tables employees라는 DB에 있는 Table들을 보여준다.

 

 

   Tables중에서 employees라는 Table를 선택해서 그 중에 5개만 보여준다.

 

 

 

employees Table의 정보를 보여준다.

emp_no int 숫자형
birth_date, hire_date date 날짜형
first_name varchar 문자형(문자 14글자까지)
NULL -> NO Null 을 허용하지 않는다.
Default -> NULL Default 값이 없다.

 

 


[SQL 작성 방법]

- 문자열“ “ 쌍따옴표가 아닌 ‘ ‘ 싱글따옴표

- 대소문자 구별 하지 않음 ‘Test’ ‘test’ ‘TEST’ 다 같음

- SQL 문장은 한 줄 또는 여러 줄에 입력될 수 있다. ( 세미콜론을 찍으면 문장 끝! )

- 일반적인 키워드는 대문자로 입력하고, 다른 모든 단어, 즉 테이블 이름, 열 이름은 소문자로 입력(권장)

- 가장 최근의 명령어 1개가 SQL buffer에 저장됨(화살표로 위아래 이동가능)


SELECT(DML에 속함) 및 연산자

- SELECT문은 데이터베이스로부터 저장되어 있는 데이터를 검색하는데 사용한다.

 

<DML>

SQL 내용
INSERT 데이터베이스 객체에 데이터를 입력한다. ( C -> create )
DELETE 데이터베이스 객체의 데이터를 삭제한다. ( Delete ) 레코드를 삭제한다.
UPDATE 기존에 존재하는 데이터베이스 객체의 데이터를 수정한다. ( Update )
SELECT 데이터베이스 객체로부터 데이터를 검색한다. ( Read )

 

 

[ ] 생략 가능함, 생략할 수 없는 부분: SELECT , FROM , table_name
{ } 이 괄호안에 있는 것들 중 한 개는 꼭 선택(1개 이상 선택)
* 테이블의 모든 column을 출력한다.
alias 해당 column에 대해서 다른 이름을 부여할 때 사용한다.
table_name 질의 대상 테이블명
WHERE 조건을 만족하는 행들만 검색
condition column, 표현식 상수 및 비교 연산자 -> 조건식
ORDER BY 질의 결과 정렬을 위한 옵션(ASC: 오름차순(Default), DESC: 내림차순)

 

예제1) 사번과 사원의 이름을 employees테이블명에서 10명만 선택(사번은 emp_no, 사원이름은 first_name, 테이블명은 employees)

 

 

예제2) 사번과 사원이름을 각각 사번과 성명이라는 컬럼 별칭(alias)만들어 출력(5명만 선택)

-> alias를 사용할 때 as라는 키워드를 사용해도 되고, 생략할 수도 있음

 

 


[연산자]

1. 산술 연산자 : +, -, *, /

2. 비교 연산자 : =. !=, < >, ^=, >, <, >=, <=

3. 논리 연산자 : AND 또는 &&, OR 또는 ||, NOT

4. WHERE절에 사용될 수 있는 SQL 연산자

 

연산자 설명
BETWEEN a AND b ab 사이의 데이터를 출력한다. (a, b값 포함)
IN (list) list 의 값 중 어느 하나와 일치하는 데이터를 출력한다.
LIKE 문자 형태로 일치하는 데이터를 출력한다. (%_사용)
IS NULL NULL값을 가진 데이터를 출력한다.
NOT BETWEEN a AND b ab사이에 있지 않은 데이터를 출력한다. (a, b값 미포함)
NOT IN (list) list의 값과 일치하지 않는 데이터를 출력한다.
NOT LIKE 문자 형태와 일치하지 않는 데이터를 출력한다.
IS NOT NULL NULL값을 갖지 않는 데이터를 출력한다.

1) IN, NOT IN 연산자

IN연산자: 연산자 OR연산의 결과를 보여준다.

 

예제1) 사번이 10005번과 10009번인 사원의 사번과 성명을 출력

 

NOT IN 연산자

예제2) 사번이 10005번과 10009번이 아닌 사원의 사번과 성명을 5명만 출력

 

예제3) last_name Ranta, Bonifati, lisaka인 사원을 5명만 선택(레코드는 모두)

더보기
mysql> SELECT * FROM employees WHERE last_name='Ranta' || last_name='Bonifati' || last_name='lisaka' LIMIT 5; mysql> SELECT * FROM employees WHERE last_name in ('Ranta', 'Bonifati','lisaka') LIMIT 5;

왼쪽은 || (OR)연산자를 사용 오른쪽은 In 키워드 사용 

 <출력값>


2) BETWEEN 연산자

연산자(AND를 이용해 두 조건을 결합한 검색과 같은 결과값을 보여준다.

 

예제1) 비교연산자로 사원번호가 10001 ~ 10010번인 사원번호, 사원명을 출력 (and 대신에 && 가능)

 

예제2) BETWEEN 연산자로 사원번호가 10001 ~ 10010번인 사원번호, 사원명을 출력

더보기

 

mysql> select * from employees where emp_no>=10100 && emp_no<=10200 mysql> select * from employees where emp_no between 10100 and 10200

 

예제3) 사원테이블(employees)에서 사원번호, 입사일, 성별을 선택한다. 단 사원번호가 40001~40010사이인 사원의 레코드만 선택하라(employees에는 emp_no, birth_date, first_name, last_name, gender, hire_date 필드가 있다.)


3) LIKE 연산자

- 검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE연산자를 사용한다.(문자값 비교)

- % : 여러 개의 문자열을 나타내는 와일드 카드

- _ : 단 하나의 문자를 나타내는 와일드 카드

- ESCAPE : 와일드 카드 문자를 일반문자처럼 사용하고 싶은 경우 사용

 

구분 설명
LIKE ‘A%’ 컬럼이 ‘A’로 시작하는 데이터들만 검색한다.
LIKE ‘%A’ 컬럼이 ‘A’로 끝나는 데이터들만 검색한다.
LIKE ‘%KIM%’ 컬럼에 ‘KIM’ 문자가 있는 데이터들만 검색한다.
LIKE ‘%K%I%’ 컬럼에 ‘K’문자와 ‘I’문자가 있는 데이터들만 검색한다.
LIKE ‘_A%’ 컬럼에 ‘A’문자가 두 번째 위치한 데이터들만 검색한다.

 

- ‘%’를 이용한 LIKE 검색

예제1)  사원명(first-name)에서 K가 포함하는 이름만 사원번호, 사원명을 5명 출력

 

- ‘ _ ‘ 를 이용한 LIKE 검색

예제2) 사원명(first_name)에서 i가 두번째로 포함되는 이름만 사원번호, 사원명을 5명 출력

 

예제3) 5월에 입사한 사원의 필드명을 출력(5개)

 

예제4) 사번이 10100~10200번 사이인 사원 중 성별이 남자인 사원을 선택하되 필드는 사번, 생년월일, 이름(frist_name), 입사일을 선택

더보기

mysql> SELECT emp_no, birth_date, first_name, last_name, hire_date From employees

    -> WHERE emp_no BETWEEN 10100 and 10200 && gender = 'm'


4) ORDER BY(정렬, 오름차순, 내림차순)

(1) 오름차순

예제) 여자이면서, 이름 두번째가 T인 직원의 번호와 이름을 10(번호 오름차순) 출력

더보기

 

mysql>
 SELECT emp_no, first_name FROM employees
> WHERE gender = 'f' && first_name LIKE '_T%'
> ORDER BY emp_no LIMIT 10;
오름차순은 default값이라서 ASC 생략 가능

 

(2) 내림차순

예제) 여자이면서, 이름 두번째가 T인 직원의 번호와 이름을 10개(번호 내림차순) 출력


[연도, 월, 일 추출]

(1) 연도 추출

mysql> SELECT * FROM (데이터베이스.테이블명) WHERE YEAR(컬럼명) = '1953'; // 1953 추출

mysql> SELECT * FROM employees WHERE YEAR(birth_date) = '1953';   // 1953도 가능

-> employees라는 테이블에서 birth_date 안에 들어있는 년도가 1953년인 애들만 추출해라!

 

(2) 월 추출

mysql> SELECT * FROM (데이터베이스.테이블명) WHERE MONTH(컬럼명) = "6" ;  // 6월 추출

mysql> SELECT * FROM employees WHERE MONTH(birth_date) = "6";   // 06, 6도 가능

-> employees라는 테이블에서 birth_date 안에 들어있는 월이 6월인 애들만 추출해라!

 

(3) 일 추출

mysql> SELECT * FROM (데이터베이스.테이블명) WHERE DAYOFMONTH(컬럼명) = '11';  // 11월 추출

mysql> SELECT * FROM employees WHERE DAYOFMONTH(birth_date) = '11';  // 11도 가능

-> employees라는 테이블에서 birth_date 안에 들어있는 일이 11일인 애들만 추출해라!


[연습문제] 

1. EMPLOYEES테이블의 레코드 중 사원번호, 사원명, 입사일, 성별을 선택하라.

더보기

1. mysql> SELECT emp_no, first_name, hire_date, gender FROM employees;

 

 

2. EMPLOYEES테이블의 레코드 중 사원번호, 사원명, 입사일을 선택하라. (단, 사원명을 오름차순으로 정렬하여 선택)

더보기

2. mysql> SELECT emp_no, first_name, hire_date FROM employees ORDER BY first_name ASC;

 

 

3. EMPLOYEES테이블의 레코드 중 6월, 12월에 입사한 사원의 사원번호, 사원명, 입사일을 선택하라.

더보기

mysql> SELECT emp_no, first_name, hire_date FROM employees

    -> hire_date LIKE '_____06%' || hire_date LIKE '_____12%';

 

mysql> SELECT emp_no, first_name, hire_date FROM employees
    -> WHERE MONTH(hire_date) = 6 || MONTH(hire_date) = 12;

 

mysql> SELECT emp_no, first_name, hire_date FROM employees
    -> WHERE MONTH(hire_date) IN (6, 12);

 

 

4. EMPLOYEES테이블의 레코드 중 사원명에 ‘A’로 시작하고 생일이 1950년~1959년 사이인 사원을 나이 가 많은 순으로 선택하라.

더보기

mysql> SELECT * FROM employees WHERE first_name LIKE 'A%' AND

     -> birth_date BETWEEN '1950-01-01' AND '1959-12-31' ORDER BY birth_date ASC;

 

mysql> SELECT * FROM employees WHERE birth_date BETWEEN '1950-01-01' AND '1959-12-31' AND
      -> first_name LIKE 'A%' ORDER BY birth_date ASC;

 

mysql> SELECT * FROM employees WHERE first_name LIKE 'A%' AND

     -> birth_date BETWEEN '1950-01-01' AND '1959-12-31' ORDER BY birth_date;

 

 

5. EMPLOYEES테이블의 레코드 중 1960년도에 태어난 남자사원을 선택하라.

더보기

mysql> SELECT * FROM employees WHERE gender = 'm' AND birth_date LIKE '1960%';

 

mysql> SELECT * FROM employees WHERE YEAR(birth_date) = 1960 AND gender = 'M';

 

 

6. EMPLOYEES테이블의 사원 중 1월에 태어난 여자 사원의 이름을 오름차순으로 선택하라.

더보기

mysql> SELECT * FROM employees WHERE birth_date LIKE '_____01%' AND gender = 'f' ORDER BY first_name ASC;

 

mysql> SELECT * FROM employees WHERE gender = 'F' AND MONTH(birth_date) = 01 ORDER BY first_name;

 

 

7. EMP테이블의 사원 입사일이 1990-01-01이후인 사원과 이름에 B가 포함된 사원을 입사일 기준 내림 차순으로 정렬하여 선택하라.

더보기

mysql> SELECT * FROM employees WHERE hire_date>='1990-01-01' OR first_name LIKE '%B%' ORDER BY hire_date DESC;

 

mysql> SELECT * FROM employees WHERE first_name LIKE '%B%' || YEAR(hire_date) >= 1990 ORDER BY hire_date DESC;

 

 

8. 현재 데이터베이스의 테이블 목록을 확인하는 쿼리문을 작성하라.

더보기

mysql> show tables;

 

 

9. EMPLOYEES테이블의 사원 중 이름, 생년월일, 입사일을 이름은 오름차순, 사원번호는 내림 차순으로 정렬하여 선택하라.

더보기

mysql> SELECT emp_no, first_name, birth_date, hire_date FROM employees ORDER BY first_name ASC, emp_no DESC'; 

 

mysql> SELECT emp_no, first_name, birth_date, hire_date FROM employees ORDER BY first_name, emp_no DESC'; 

 

mysql> SELECT emp_no, first_name, birth_date, hire_date FROM employees ORDER BY emp_no DESC, first_name ASC; 

 

 

 

10. EMPLOYEES테이블의 구조를 확인하는 쿼리문을 작성하라.

더보기

mysql> desc employees;

 

 

11. 현재 계정의 데이터베이스의 목록을 확인하는 쿼리문을 작성하라.

더보기

mysql> show databases;