greatsangho의 이야기

캠프 9일차 - SQL 기본 본문

프로그래밍/SK AI 캠프

캠프 9일차 - SQL 기본

greatsangho 2024. 8. 30. 20:28

sql 쿼리(명령어)는 대소문자를 구분하지 않는다

가독성을 높이기 위해 구분하여 적을 수 있다

항상 마지막에 세미콜론(;)을 붙여준다

주석은 --로 표기한다

 

기본문법

 

Select ~ from 데이터 읽기

select * from exampletbl;

다음과 같이 select ~ from 구문을 사용한다

* 은 행 전체를 의미하고 DB안 table에서 가져온다는 의미이다

하나씩 가져오기 위해서는 * 대신 열 이름을 ,로 구분해서 적는다

 

https://dev.mysql.com/doc/refman/8.4/en/select.html

 

MySQL :: MySQL 8.4 Reference Manual :: 15.2.13 SELECT Statement

15.2.13 SELECT Statement SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr] ... [into_option] [FROM table_referenc

dev.mysql.com

select는 다음과 같은 규칙이 있으며

순서는

select

~ from

~ where

~ group by

~ having

~ order by

의 순서를 지켜서 사용해야 한다

 

특정 조건을 추가하기 위해 where 문이 붙는다

select * from bookstoretbl where bookname = 'SQLD';

다양한 연산자와 and or not을 이용할 수 있다

해당 값이 있는지 확인하기 위해 where ~ in ~을 사용할 수 있다.

 

like 연산자의 경우 문자열에 해당 단어가 있는지 확인할 수 있게 도와준다

select id, name from testtbl where name like '김%';

김% - 김으로 시작하는 단어

%김% - 김이 들어가는 단어

%김 - 김으로 끝나는 단어

 

뷰 - 가상의 테이블로 테이블을 링크해 놓아 실체가 없는 테이블이지만 실제 테이블과 같이 작동한다

데이터베이스 아래 탭에 Views 탭에 생성되고 기본 테이블을 이용하듯이 사용하면 된다

create view v_testtbl
as
	select testname testaddr from testtbl;

과 같이 만들 수 있다

 

Use  db사용

use exampleDB;

 

Show tables 테이블 이름 볼 때

show tables;

 

열 이름에 별칭을 붙일 때는 as를 사용한다

 

Create 만들 때

create table peopletbl
(
	id int auto_increment not null primary key,
    name varchar(3) not null,
    height smallint,
    birthInfo date null
);

auto_increment는 자동으로 db추가에 따라 숫자를 증가시켜준다

not null은 null 값이 저장될 수 없음을,

primary key는 중복되지 않는 key 값을 의미한다.

 

삭제에는 drop 구문을 사용한다

drop database if exists bookrental;  -- db를 삭제할 때
drop table if exists testtbl;  -- 테이블을 삭제할 때

if 문을 붙여 db가 있을 때에만 삭제할 수 있다

 

db는 여러 테이블 간 관계가 중요하다

개념적 모델링, 논리적 모델링, 물리적 모델링 순으로 db 모델링이 진행된다

고객이 방문하여 물건을 샀을 때 두 테이블을 연관 지으면

고객이 물건을 소유하기에 고객 테이블이 부모 테이블, 물건 테이블이 자식 테이블이 된다

 

이를 ERD(Entity Relationship Diagram)으로 나타낼 수 있다.

고객이 여러 종류의 물건으 살 수 있으므로 1:N 관계로 이어준다

 

ERD은 File 탭의 New Model에서 Add Diagram으로 만들 수 있다.

왼쪽에서 표 모양인 Place new table을 클릭해서 배치하고

table안에 열이름을 추가하면 된다.

PK는 primary key,

NN은 not null,

AI는 auto increment 이다.

 

서브쿼리

퀴리 안 쿼리

 

Order by ~ DESC/(ASC)

select ~ from ~ order by ~

구문으로 기본이 오름차순, DESC가 붙으면 내림차순이다.

 

Distinct

테이블 값 중 중복되는 것을 제거한다

select distinct ~ from ~

 

limit

출력 개수 제한

 

create table newtbl (select * from testtbl);

테이블 복사

 

group by <열이름>

데이터의 그룹화

 

집계 함수(Aggregaet function)

주로 group by와 함께 사용, 데이터를 집계한다

avg(), min(), max(), count(), count(distinct), stdev(), var_samp()

 

As ~

col 이름을 바꾸어 보여준다

 

Having <집계함수> <조건>

집계 함수를 사용할 때 조건은 where가 아닌 having을 group by 뒤에 적는다

 

with roll up

group by로 묶인 항목들에 대한 각각의 합계 및 총합 표시

 

 

SQL문의 분류

DML - 데이터 조작, select, insert, update, delete, 트랜잭션 발생

DDL - 개체를 변경, create, drop, alter, 트랜잭션 없이  바로 적용

DCL - 권한 부여, grant, revoke, deny

 

insert into <tableName> values ('a',10,...);

데이터 삽입

 

auto_increment

데이터 자동 증가

 

update <tableName>

set 열 = 값

where 조건;

데이터 수정

 

delete from <tableName> where 조건;

데이터 삭제

 

with 절

임시 테이블 만들어 활용, 만들어진 테이블은 쿼리 실행 후 사라짐

With <tableName>(열 이름1, ...)

as

(

    <쿼리>

)

select <열이름> from <tableName>

 

with문을 여러개 작성할 경우 처음만 with문을 사용한다

반응형