데이터베이스론 [3] SQL종합

김병훈·2021년 9월 9일
0

데이터베이스론

목록 보기
3/11

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에서만 수행이 된다.
    • USE database_name
  • 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로 시작하는 도시이름이 뭘까?
-> _(언더바)와 다르게 %는 무엇이든 허용한다.]
profile
블록체인 개발자의 꿈을 위하여

0개의 댓글