*이 포스팅은 이미 MySQL을 이미 설치하고 그 다음부터 명령 프롬포트로 SQL을 실행하였습니다.*
명령어 팁: cd\ 루트로 이동 cd 하위 폴더로(앞으로) cd .. 상위 폴더로(뒤로 가기)
employees라는 데이터 소스를 이미 다운 받았고, 환경설정은 끝났다.(데이터소스를 다운을 받고, source 폴더명.sql 하면 끝난다.)
cd “데이터소스 폴더”에서 파일을 읽기 -:> mysql -u root -p 입력 하고 -> Enter password
u는 username p는 password이다. 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 | a와 b 사이의 데이터를 출력한다. (a, b값 포함) |
IN (list) | list 의 값 중 어느 하나와 일치하는 데이터를 출력한다. |
LIKE | 문자 형태로 일치하는 데이터를 출력한다. (%_사용) |
IS NULL | NULL값을 가진 데이터를 출력한다. |
NOT BETWEEN a AND b | a와 b사이에 있지 않은 데이터를 출력한다. (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;
'멀티캠퍼스 풀스택 과정 > 데이터베이스' 카테고리의 다른 글
데이터베이스2-2 데이터의 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) (0) | 2022.01.19 |
---|---|
데이터베이스2-1 JDBC로 JAVA와 DB의 연동(SELECT문) (0) | 2022.01.19 |
데이터베이스1-4 내장함수와 그룹함수 (0) | 2022.01.18 |
데이터베이스1-2 데이터베이스 모델링과 구조, DBMS 언어(DDL, DML, DCL, TCL) (0) | 2022.01.16 |
데이터베이스1-1 DB, DBMS, SQL (0) | 2022.01.16 |