sql 복습
기본 문법
select : 보여주고자 하는 column(열/세로값) 값을 선택
from : 테이블 선택.
where : 조건문절. 조건문에 해당하는 row(행/가로) 만 선택.
테이블 만들기
DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db; -- 데이터베이스 생성
USE market_db; -- market_db 선택
CREATE TABLE `member` (
`memberno` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`id` VARCHAR(50),
`name` VARCHAR(50)
);
형식 :
CREATE TABLE 테이블 이름 (
COLUMN 값들
);
선언시 column의 데이터 타입, 허용되는 글자수(자릿수)를 괄호에 넣어 지정해준다.
null값은 기본값으로 허용되고 있으며, 허용하기 싫다면 not null을 명시해주어야 한다.
AUTO_INCREMENT 는 자동적으로 숫자가 증가하도록 하는 예약어이며, PRIMARY KEY는 필수는 아니지만, 만약 선언한다면 테이블에 단 하나 존재할수 있는 유일무이한 값이다. 이를 적용시키면 자동적으로 NOT NULL이 선언된다.
` 문자열 ` : ``(백틱)으로 감싸면 예약어가 아닌 문자열임을 명시할수 있다.
ROW추가하기
INSERT INTO 테이블이름 (컬럼 이름1, 컬럼 이름2) VALUES( 데이터1 );
만약 열의 갯수와 삽입하는 데이터 갯수가 일대일 대응된다면 컬럼 이름을 안적어도 된다.
INSERT INTO 테이블이름 VALUES( 데이터1, 데이터2 );
CREATE TABLE toys1 (
toy_id INT, -- PK (NOT NULL + UNIQUE 제약조건), A.I 추가 안함
toy_name CHAR(4),
age INT
);
INSERT INTO toys1 (toy_id, toy_name, age)
VALUES (1, '우디', 25);
INSERT INTO toys1
VALUES (2, '제시', 20);
논리연산자 AND, OR은 다른 언어와 마찬가지로 작동한다. 사용할때 다른 기호로 나타나지 않고, 직접 영어로 작성한다.
BETWEEN ~ AND ~ : a<b and a>c 처럼 코드가 길어지는 것을 막기 위한 예약어. 두 조건 사이의 값이 선택된다.
IN() 함수 : 조건문에 쓰는 함수. IN내부 값중 하나라도 맞으면 선택된다. OR연산자로 코드가 길어지는 것을 막기 위한 함수
-- BETWEEN AND ~사이 조건식
SELECT *
FROM member
-- WHERE height >= 163 AND height <= 165;
WHERE height BETWEEN 163 AND 165;
-- IN( )함수 : ~중에 하나이면
SELECT mem_name, mem_number
FROM member
-- WHERE mem_number=5 OR mem_number=6 OR mem_number=7;
WHERE mem_number IN( 5, 6, 7 );
LIKE "%a" 또는 LIKE "_a" : 문자열 포함 여부를 확인하기 위한 예약어. %는 a앞에 몇글자가 존재하건 상관없이, 마지막이 a로 끝나는 row를 선택한다. 반면 _는 끝이 a로 끝나고 두글자로 이뤄진 row를 선택한다.
-- 문자열의 일부 검색 : LIKE
-- % : 여러문자열을 대치
-- _ : 한 문자를 대치
-- 멤버명이 우로 시작하는 걸그룹 검색
SELECT *
FROM member
WHERE mem_name LIKE '우%';
-- 멤버명이 걸로 끝나는 걸그룹 검색
SELECT *
FROM member
WHERE mem_name LIKE '%걸';
서브쿼리( )
쿼리문 안에 쿼리문을 또 적어 특정 값을 선택하기 위한 기능.
SELECT * FROM member
WHERE height > ( SELECT height FROM member WHERE mem_name='우리엄마' );
ORDER BY
정렬순서 정하기
기본값은 ASC로 오름차순이며, DESC로 설정하면 내림차순으로 설정된다. 만약 두개 이상으로 정렬하면 먼저 쓴 정렬 방식이 우선순위를 갖는다.
ORDER BY 절은 무조건 WHRER절보다 뒤에 와야 한다.
GROUP BY
같은 열의 값이라면 하나로 줄이는 예약어.
예)
alphabet
A
A
B
B
B
C
와 같이 출력됬을때, ORDER BY alphabet; 과 같이 덧붙이면
A
B
C
로 출력된다.
HAVING절로 집계 조건을 넣어줄수 있다.
DISTINCT 열 이름
해당 열을 중복된 값을 제거하고 집계한다. GROUP BY와 달리 조건은 넣을수 없다.
LIMIT 숫자 : 출력할 ROW의 갯수를 제한한다.
집계함수
SUM() : 합계
AVG() : 평균
MIN() : 최소값
MAX() : 최대값
COUNT() : 행의 개수 반환
COUNT(DISINCT) : 행의 개수(중복은 삭제)