SQL 기초 구문

O_K·2022년 2월 4일
6

SQL

목록 보기
1/1
post-thumbnail

TABLE

TABLE 생성 (스키마)

PRIMARY KEY(PK)가 반드시 필요한 것은 아님
PK를 따로 지정해주지 않은 경우, rowid 로 접근이 가능하다
구문이 끝나는 마지막에 ; 를 사용해준다

CREATE TABLE users (
id INTEGER PRIMARY KEY, 
name TEXT
);

TABLE 삭제

DROP TABLE users;

ALTER TABLE

1) table 이름 변경

ALTER TABLE <기존 table> RENAME TO <변경하고 싶은 table>;

2) 새로운 column추가

ALTER TABLE <table> ADD COLUMN <추가할 column> <column 타입> <옵션>;

이 때 column 옵션을 NOT NULL로 설정 시
column 생성 전, 이미 테이블 내에 레코드가 존재했다면 해당 값이 NULL로 되어 에러 발생

해결방법
1. NOT NULL 설정 없이 추가
2. 기본 값(default) 설정해서 추가

3) column 이름 변경

ALTER TABLE <table> RENAME COLUMN <기존 column> TO <변경하고 싶은 column>;

DB 조작

데이터 삽입 (INSERT)

INSERT INTO users (name, age) VALUES ('홍길동', 23);

table의 column에 있는 모든 VALUE를 넣을때에는 column명을 적어주지 않아도 됨
ex ) table column이 name, age, address인 경우

INSERT INTO users VALUES ('홍길동', 30 '서울');



column 선택 조회 (SELECT)

전체 테이블 *

rowid 까지 보고 싶을 때

SELECT rowid, * FROM users;

rowid  name  age  address
-----  ----  ---  -------
1      홍길동   30   서울
2      김하나   26   대전
3      가나다   23   부산

원하는 column을 선택

* 말고 특정 column값 특정해주면 그 값만 출력됨

SELECT rowid,name FROM users;

rowid  name
-----  ----
1      홍길동
2      김하나
3      가나다

LIMIT

위에서 N 개의 데이터

// N=2

SELECT rowid,name FROM users LIMIT 2;

rowid  name
-----  ----
1      홍길동
2      김하나

OFFSET

앞에 N 개 제거

// N=2 (2개 제거하고 한 개 출력)
SELECT rowid,name FROM users LIMIT 1 OFFSET 2;

rowid  name
-----  ----
3      가나다

WHERE

특정 값을 가지는 레코드 선택

SELECT rowid,name FROM users WHERE address='서울';

rowid  name
-----  ----
1      홍길동

DISTINCT

특정 값을 중복 없이 조회

SELET DISTINCT age FROM users;

age
---
30
26
23



레코드 삭제 (DELETE)

DELETE FROM users WHERE rowid=2;
SELECT rowid, * FROM users;

rowid  name  age  address
-----  ----  ---  -------
1      홍길동   30   서울
3      가나다   23   부산



레코드 수정 (UPDATE)

UPDATE users SET name="홍길동", address="제주도" WHERE rowid='3'
SELECT rowid, * FROM users;

rowid  name  age  address
-----  ----  ---  -------
1      홍길동   30   서울
3      홍길동   23   제주도

그 외

기타 함수 (aggregate function)

  • COUNT : 선택한 행의 레코드 갯수 조회
// users 테이블 전체 레코드 갯수

SELECT COUNT(*) FROM users;
  • AVG : 평균
// 30살 이상인 사람들 나이의 평균

SELECT AVG(age) FROM users WHERE age>=30;
  • MAX : 가장 높은 값
// 나이가 가장 많은 사람과 그 나이를 조회

SELECT name, MAX(age) FROM users;

wildcards (% , _ )

%

이 자리에 문자열이 존재할 수도 아닐 수도 있다

_

무조건 단일 문자 들어가야 한다

SELECT * FROM 테이블 WHERE 컬럼 LIKE '와일드카드패턴';

// 이름이 '동'으로 끝나는 사람만 조회
SELECT * FROM users WHERE name LIKE '%동';

Order by

SELECT * FROM 테이블 ORDER BY <컬럼> <정렬기준>;

정렬기준

  • 오름차순 (ASC)
    = ORDER BY 1;
  • 내림차순 (DESC)
    = ORDER BY 1 DESC;



Group by

그룹화해서 보여줌
DISTINCT를 사용한 것과 같은 중복제거 효과를 볼 수 있다
WHERE 절이 사용되면 무조건 그 뒤에 작성

// users에서 각 나이마다 몇개의 레코드가 있는지 조회
SELECT age, COUNT(*) FROM users GROUP BY age;

age  COUNT(*)
---- --------
30    1
23    1
profile
즐거운 개발자가 목표

2개의 댓글

comment-user-thumbnail
2022년 2월 4일

도움이 되었습니다 ^^ ~

답글 달기
comment-user-thumbnail
2022년 2월 6일

많이 배우고 갑니다 ^^~

답글 달기