SQL의 분류
DML( Date Manipulation Language)
- 데이터 조작 언어이고 , 데이터를 조작( 선택, 삽입 수정, 삭제) 하는데 사용된다.
- DML 구문이 사용되는 대상은 테이블의 행 (column? row?)
- DML을 사용하기 위해서는 꼭 그 이전의 테이블이 정의 되어 있어야 한다.
- 내가 이해한 바로는, 번개로 모든 구문을 실행시켜서 테이블을 생성시킨 후에, DML구문으로 데이터를 조작한다는 것으로 이해하였다.
SQL
문 중, SELECT, INSERT, UPDATE, DELETE
가 이 구문에 해당된다.
- Transaction이 발생하는 SQL도 이 DML에 속한다.
- 테이블의 데이터를 변경( 입력, 수정, 삭제 ) 할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는 것이다.
- 취소 가능하다.
DDL (Date Definition Language)
- 데이터 정의 언어이고, DB,Tabel,View,Index 등의 데이터베이스 개체를 생성, 삭제, 변경하는 역할을 한다.
CREATE, DROP, ALTER
구문을 사용한다.
- DDL은 트랜잭션을 발생시키지 않는다.
- ROLLBACK이나 COMMIT 사용 불가하다.
- DDL문은 실행 즉시, MySQL에 적용된다.
DCL (Data Control Language)
- 데이터 제어 언어이고, 사용자에게 어떤 권한을 부여하거나 빼앗을 때 주로 사용하는 구문이다.
GRANT, REVOKE
등이 있다.
현재 서버에 어떤 DB가 있는지 확인하기.
- 번개클릭 또는 맥 (command + enter) , window (ctrl + enter)
- 현재 MySQL 서버에 이러한 DB들이 존재한다.
USE
- 사용할 DB를 지정할 때 사용한다
- 지정해 놓은 후 특별히 다시 USE문 사용하거나, 다른 DB를 사용하겠다고 명시하지 않는 이상, 모든 SQL문은 지정한 DB에서만 수행이 된다.
- Wockbench에서 직접 선택하여 사용할 수도 있다.
[Navigator]-> [SCHEMAS]-> 데이터베이스 선택
SHOW TABLE;
- USE 한 DB의 테이블 이름 보기
- ex)
- city, country, countrylanguage
SHOW TABLE STATUS;
- 지정한 DB의 테이블 정보를 조회할 수 있다.
- 뭐 무슨엔진을사용하고 row는 몇개고 등등에 대한 정보를 얻을 수 있다.
DESCRIBE(DESC)
- city table에 무슨 열이 있는지 체크한다면?
DESCRIBE city;
or DESC city;
- city라는 테이블에 지금 어떤 컬럼들이 있고, 컬럼의 타입이 무엇이고, NULL인지 아닌지의 그 각각의 열에대한 정보를 얻을 수 있다. 즉,
테이블에 대한 속성 정보를 의미한다.
test1. country, countrylanguage 정보도 함께 보려면?
DESCRIBE city;
DESC country;
DESC countrylanguage;
SELECT
- DB에서 가장 많이 사용하는 구문이다.
<SELECT ... FROM>
- 요구하는 데이터를 가져오는 구문이다.
- 위에서 말했듯이, 일반적으로 가장 많이 사용되는 구문이다.
- DB 내 테이블에서 원하는 정보를 추출할 수 있다.
- SELECT 구문 형식
SECECT select_expr
[FROM table_reference]
[WHERE where_condition]
[GROUP BY {col_name | expr | position]
[HAVING where_condition]
[ORDER BY {col_name | expr | position]
그리고
SELECT * FROM city;
- city table에 있는 전체 row들 (전체 데이터들)을 보여달라는 것이다.
- SELECT를 통해서 각 테이블에 대한 전체 데이터들을 볼 수 있다.
여기서 *
가 뭘까?
- 모든것을 의미한다. 그래서 위에 코드는 city 라는 테이블에 있는 전체 column 에 대해서 보여달라는 의미이다.
SELECT Name FROM city;
- 이렇게 하면 도시의 이름만 볼 수 있다.
SELECT 열 이름
- 테이블에서 필요로 하는 열만 가져올 수 있다.
- 여러 개의 열을 가져오고 싶을 때는 콤마로 구분하면 된다.
SELECT Name, Population FROM city;
- 열 이름의 순서는 출력하고 싶은 순서대로 배열 할 수 있다.
SELECT FROM WHERE
기본적인 WHERE 절
- 조회하는 결과에 특정한 조건으로 원하는 데이터만 보고싶을 때 사용한다.
SELECT fieldName(필드이름) FROM tableName(테이블이름) WHERE 조건식
- 조건이 없는 경우, 테이블의 크기가 클수록 찾는 시간과 노력이 증가된다.
SELECT *
FROM city
WHERE Population > 8000000
[인구 수가 800만 초과인 도시들만 보여줘]
관계 연산자의 사용
- OR연산자
- AND 연산자
- 조건 연산자 (=, <, >, <=, >=, <>, !=) 등
- 관계 연산자 (NOT, AND, OR) 등
- 연산자의 조합으로 데이터를 효율적으로 추출한다.
SELECT *
FROM city
WHERE Population < 8000000
AND Population > 7000000
[인구 수가 700만 초과 그리고(두 조건 모두 충족) 800만 미만인 도시들만 보여줘]
한국에 있는 도시
- 우선
DESC city;
로 table을 먼저 보면, ID,Name, CountryCode, District, Population
5개의 coulumn으로 구성되어있다.
SELECT *
FROM city
WHERE CountryCode = 'KOR';
미국에 있는 도시
SELECT *
FROM city
WHERE CountryCode = 'USA';
한국에 있는 도시인데, 인구수가 100만 이상인 도시
SELECT *
FROM city
WHERE CountryCode = 'KOR';
AND Population >= 1000000;
BETWEEN
- 데이터가 숫자로 구성되어 있어 연속적인 값은
BETWEEN ... AND
로 사용할 수 있다.
SELECT *
FROM city
WHERE Population BETWEEN 7000000 AND 8000000
[인구 수가 700만 800만 사이에 있는 도시들을 보여줘]
IN
- 이산적인 (Discrete) 값의 조건에서는
IN()
사용할 수 있다.
- 수치가 아니라 name 과 같은 도시 이름을 볼 때,
SELECT *
FROM city
WHERE Name IN('Seoul', 'New York', 'Tokyo')
[Name이 이러한 도시만 보여줘]
한국, 미국 , 일본 만 보기
SELECT *
FROM city
WHERE CountryCode In('KOR', 'USA', 'JPN')
[한국 미국 일본에 있는 도시만 보여줘]
LIKE
- 문자열의 내용을 검색하기 위해 LIKE 연산자를 사용한다.
- 문자 뒤에 %-무엇이든(%)허용
- 한 글자와 매치하기 위해서는
_
사용한다.
SELECT *
FROM city
WHERE CountryCode LIKE 'KO_'
[이 문자열(KO)에 어떤 글자가 올 수 있지만,
하나만 매칭해서 쓸 때 언더바를 쓴다.]
SELECT *
FROM city
WHERE Name LIKE 'Tel %'
[tel로 시작하는 도시이름이 뭘까?
-> _(언더바)와 다르게 %는 무엇이든 허용한다.]