1. MySQL을 터미널(CMD) 창에서 조작할 때, SELECT문을 어떻게 사용하는지 정리할 것이다.
2. 설명
2-1. SELECT ?? FROM ??
원하는 데이터를 가져오는 기본적인 구문이다.
필자의 데이터베이스에 있는 db1의 테이블은 3개다.
그 중, student 테이블의 데이터를 가져와보려 한다.
DESC 테이블명; 이란 명령어로 테이블의 구성이 어떻게 되어있는지 확인할 수 있다.
student 테이블은 이름과 학과라는 열을 가지고 있다.
select 구문으로 정보를 가져오려면
select 원하는 열 from 테이블명;
으로 데이터를 가져올 수 있고, 원하는 열에 *을 집어넣으면 모든 열을 가져온다.
select 앞에 name만 적는다면, 김아무개와 박아무개라는 이름만 가져올 수 있다.
한 열이 아닌, 여러 열을 가져오고 싶으면 열이름 뒤에 콤마(,)를 붙이고, 다른 열을 적으면 된다.
여러 열을 적을 경우, 적은 순서대로 출력된다.
2-2. SELECT ?? FROM ?? WHERE ??
where 절은 조건을 추가하는 것이다.
만약, student 테이블에서 전산과 학생만 찾고싶다면
SELECT * FROM STUDENT WHERE dept = '전산과'; 라는 명령어를 입력해주면 된다.
만약 특정한 이름을 찾고싶다면 name = '원하는 이름' 으로 바꾸면 된다.
그리고 where 절에서 여러 조건을 적용시킬 수 있다.
OR의 경우, 두 조건 중 하나만 충족되면 데이터를 가져오는 조건이다.
AND의 경우, 두 조건 모두 충족되는 데이터만 가져오는 조건이다.
select * from student where name = '박아무개' OR dept = '전산과';
이름이 '박아무개' 거나 학과가 '전산과', 둘 중하나만 맞으면 데이터를 가져온다.
select * from student where name = '박아무개' AND dept = '전산과';
이름이 '박아무개'이고, 학과가 '전산과' 인 데이터만 가져온다.
이 외에도, 조건 연산자 (=, <, >, <=, >=, <>, 등)를 사용해서 특정 테이블에서 나이가 20살이상인 사람을
찾아라, 등의 명령문을 만들 수 있다.
2-3. where문 심화
만약, data란 테이블에서 키가 175~180인 사람을 찾고싶다면
SELECT * FROM data WHERE height BETWEEN 175 AND 180;
이란 명령어로 특정 숫자 안에 있는 데이터를 찾을 수 있다.
그 외에도 IN()을 사용해서 특정 범위안에 있는 데이터를 찾을 수 있다.
학과가 '전산과', '컴공과', '전기과' 인 학생을 찾으려 할 때,
SELECT * FROM student WHERE dept IN('전산과', '컴공과', '전기과');
라는 명령어로 해당되는 학생들의 데이터를 가져올 수도 있다.
그리고 특정 문자열이 포함된 결과를 찾을 경우, LIKE 를 사용해서 찾을 수 있다.
이름이 '김'으로 시작하는 학생을 찾을 경우,
SELECT * FROM student WHERE name LIKE '김%';
이름이 '김' 으로 시작하는 학생을 찾을 수도 있다.
2-4. 서브쿼리
데이터를 검색할 때, 다른 테이블에서 조건을 가져올 수도 있다.
data라는 테이블이 있고, data라는 테이블엔 학생들의 키, 몸무계같은 정보가 들어있다고 치자.
'박아무개' 라는 학생보다 키가 큰 학생을 찾고싶을 경우,
SELECT * FROM data WHERE height > (SELECT height FROM data WHERE name = '박아무개');
라는 형태로 박아무개의 키를 가져와서(서브쿼리), 비교하는 방법도 있다.
SELECT * FROM data WHERE height > ANY(SELECT height FROM data WHERE dept = '전산과');
서브쿼리 앞에 ANY를 붙이게 되면, 서브쿼리의 결과 중 하나만 만족해도 데이터를 가져온다.
즉 data 테이블에 있는 학생 중, 전산과에 있는 학생 중 아무나 한명 보다 키가 큰 사람이 있으면 데이터를 다 가져온다.
SELECT * FROM data WHERE height > ALL(SELECT height FROM data WHERE dept = '전산과');
서브쿼리 앞에 ALL을 붙이게 되면, 모든 조건이 만족되어야 데이터를 가져온다.
이 경우, 전산과에서 가장 큰 사람보다 키가 커야만 데이터를 가져온다. 위의 코드는 예시라 상당히 비효율적이지만
그냥 써봤다.
2-5. ORDER BY
정렬하는 절이다.
- 결과물에 영향을 끼치지 않고, 출력되는 순서를 정렬한다.
- WHERE이 없으면 FROM 뒤, WHERE이 있으면 WHERE 뒤에 "ORDERY BY 원하는 열" 의 형태로 사용한다.
- 기본적으로 오름차순(ASCENDING, 작은 거 먼저) 정렬이다.
- 내림차순(DESCENDING)으로 정렬하려면, 정렬하려는 열 뒤에 DESC 를 붙여야 한다.
- 정렬하는 기준은 하나가 아니어도 된다. (키 순서대로 하지만, 키가 같을 경우, 학번 순서대로 정렬하는 등)
SELECT * FROM data ORDER BY height DESC, id ASC;
이런 식으로도 사용 가능하다. (오름차순이라 디폴트라 ASC는 꼭 붙일 필요 없다.)
2-6. 옵션
말 그대로 명령문 뒤에 붙이는 옵션이다.
2-6-1. DISTINCT
- 중복되는 게 있다면 하나만 표시한다.
- SELECT DISTINCT 열이름 FROM 테이블이름; 형태로 사용한다.
- 테이블 크기가 크면 클수록 효율적이다.
2-6-2. LIMIT
- 불러오는 데이터의 갯수를 지정하는 것이다.
- SELECT 열이름 FROM 테이블이름 LIMIT 숫자; 형태로 사용한다.
- DB가 크면 속도를 향상시키는데 도움된다.
2-6-3. 테이블 복사
CREATE TABLE 테이블이름 (SELECT 복사할 열 FROM 복사할 테이블명)
table55를 생성할 때, student 테이블의 내용을 그대로 복사할 수 있다.
그런데 기본키(Primary Key)나 외래키(Foreign Key)같은 제약 조건은 복사되지 않는다.
그리고 특정 열만 복사하는 것도 된다.
'데이터베이스' 카테고리의 다른 글
MySQL 문법정리 5. 내장 함수(수학, 시간 함수) (0) | 2022.04.19 |
---|---|
MySQL 문법정리 4. 변수, 내장 함수(조건문, 문자열 함수) (0) | 2022.04.18 |
MySQL 문법 정리 3. 명령어 종류(DCL, DML, DCL), INSERT, UPDATE, DELETE문 정리 (0) | 2022.04.17 |
MySQL 문법 정리 2. SELECT문 (GROUP BY, HAVING, 집계함수) (0) | 2022.04.16 |
4주차 3, 몽고DB 사용법 (0) | 2022.01.15 |
댓글