show databases;
use 데이터베이스이름;
show tables;
desc 테이블이름;
select [distinct] *[컬럼이름 [[as] `별칭`] from 테이블이름
[where 검색조건표현식]
[order by 컬럼이름 [ASC|DESC]]
[limit 조회시작위치, 조회할 데이터 수]; // 페이징
비교 연산자
=, !=, <, <=, >, >=
논리 연산자
AND, OR, NOT
컬럼명 between A and B
컬럼에 저장되어 있는 데이터가 A에서 B사이인 데이터를 조회한다.
컬럼명 in (A, B, C, D)
컬럼에 저장되어 있는 데이터가 A, B, C, D중 하나의 일치하는 것들을 조회한다.
예제 코드
mysql> SELECT name, grade, deptno FROM student WHERE deptno IN (102, 201);
+--------+-------+--------+
| name | grade | deptno |
+--------+-------+--------+
| 김진영 | 2 | 102 |
| 오유석 | 4 | 102 |
| 하나리 | 1 | 102 |
| 윤진욱 | 3 | 102 |
| 이동훈 | 1 | 201 |
| 박동진 | 1 | 201 |
| 김진경 | 2 | 201 |
| 조명훈 | 1 | 201 |
+--------+-------+--------+
8 rows in set (0.00 sec)
OR로도 가능하다.
컬럼명 like '%키워드%'
컬럼에 저장되어 있는 데이터가 키워드를 포함하는 데이터들을 조회한다.
컬럼명 is [not] null
null을 포함하거나 그렇지 않은 데이터들을 조회한다.
저장되어 있는 데이터를 가공하기 위하여 제공되는 기능
SELECT date_add(now(), INTERVAL 1 YEAR);
SELECT date_add(now(), INTERVAL -3 MONTH);
SELECT date_add(birthdate, INTERVAL 1 YEAR) FROM student;
SELECT date_format(now(), '%y/%m/%d/ %H:%i:%s');
SELECT date_format(birthdate, '%y/%m/%d %H:%i:%s') FROM student;
날짜 형식 지정은 시스템의 국가 설정에 따라 기본 출력 형태가 다르기 때문에 국가에 상관없이 고정된 형태를 제공하기 위해서 사용
SELECT 컬럼, 집계함수(컬럼), FROM 테이블이름
[WHERE 표현식]
[GROUP BY 컬럼1, 컬럼2 ...]
[HAVING 집계함수(컬럼)에 대한 표현식]
[ORDER BY 컬럼 ...]
두 개 이상의 테이블을 결합하여 필요한 데이터를 조회하는 기능
ex) 교수이름과 학과이름을 같이 불러오고 싶을때 join을 쓴다.
SELECT table1.column, table2.colunmn
FROM table1, table2
WHERE table1.column = table2.column;
SELECT table1.column, table2.column
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
SELECT name, position FROM professor
WHERE position = ( SELECT position FROM professor WHERE name = '전은지');
// 전은지 교수와 같은 직급의 교수에 대한 이름, 직급을 조회
SELECT studno, grade, name FROM student WHERE profno IN (
SELECT profno FROM professor WHERE sal > 300 ) ;
// 급여를 300만원 초과로 받는 교수에게 지도받는 학생들의 학번, 학년, 이름을 조회
테이블에 데이터를 추가하기 위한 구문
INSERT INTO <테이블이름> VALUES (값1, 값2, ... , 값n);
숫자형식의 데이터는 홑따옴표를 사용하지 않는다.
그 밖의 형식 (문자열, 날짜) 값은 홑따옴표로 감싼다.
값을 나열할때는 테이블 구조에서 정의하고 있는 컬럼의 순서에 맞게 명시하여야한다.
(귀찮겠다 실수도 자주 발생할듯)
→ DESC 테이블이름; 의 구문으로 테이블 정의를 확인할 수 있다.
INSERT INTO <테이블이름> (컬럼1, 컬럼2, ..., 컬럼n)
VALUES (값1, 값2, ... , 값n);
UPDATE <테이블이름> SET 컬럼1= 값1, 컬럼2=값2, ..., 컬럼n=값n
[WHERE 검색조건]; // 필수다. 없으면 모든 값에 업데이트가 되어버린다...
DELETE FROM <테이블이름> [WHERE 검색조건];
INSERT INTO <테이블이름> VALUES (함수이름(값), 함수이름(값)...);
UPDATE <테이블이름> SET 컬럼1= 함수이름(값1), 컬럼2=함수이름(값2), ...,
컬럼n=함수이름(값n) [WHERE 함수가 적용된 검색조건];
DELETE FROM <테이블이름> [WHERE 함수가 적용된 검색조건];
CREATE DATABASE `데이터베이스이름` [default charset `utf8`];
CREATE TABLE `테이블이름` (
`컬럼이름` 데이터타입 [NOT NULL | NULL] [AUTO_INCREMENT],
`컬럼이름` 데이터타입 [NOT NULL | NULL] [AUTO_INCREMENT],
`컬럼이름` 데이터타입 [NOT NULL | NULL] [AUTO_INCREMENT], ...
[, PRIMARY KEY (`기본키컬럼이름`)] // 컬럼 바로 옆에다가 입력할수도 있다.
) [ENGINE = InnoDB] [DEFAULT CHARSET = `utf8`];
DROP DATABASE `데이터베이스이름`;
테이블 구조를 변경하는 구문이다.
ALTER TABLE `테이블이름` 명령어;
설정된 기본키 속성을 해제하려면 우선 AUTO_INCREMENT 속성을 제거해야한다.
ALTER TABLE `테이블명` CHANGE `컬럼A` `컬럼A` INT NOT NULL;
// AUTO_INCREMENT속성 언급을 안함으로써 제거했다. (컬럼에 종속)
DROP PRIMARY KEY를 사용하여 기본키를 해제한다.
ALTER TABLE `테이블명` DROP PRIMARY KEY;
// 기본키는 테이블에 종속되어 있으므로 상위 개념인 DROP을 쓴다.
<설정방법>
CREATE TABLE `테이블이름` (
`컬럼이름` 데이터타입 [NOT NULL | NULL] [AUTO_INCREMENT],
`컬럼이름` 데이터타입 [NOT NULL | NULL] [AUTO_INCREMENT],
`컬럼이름` 데이터타입 [NOT NULL | NULL] [AUTO_INCREMENT], ...
[, PRIMARY KEY (`기본키컬럼이름`)]
[, FOREIGN KEY (`참조키컬럼이름`)
REFERENCES `대상테이블명` (`대상테이블의 컬럼명`) ]
) [ENGINE = InnoDB] [DEFAULT CHARSET = `utf8`];
<제한>