SQL_1

MR.HAN·2023년 11월 20일

SQL

목록 보기
1/10
post-thumbnail
  • 데이터베이스 생성
# create database dataBaseName default character set characterSetName; 
create database zerobase default character set utf8mb4; # 다국어 지원, 이모지 사용
  • 데이터베이스 확인
show databases;

1. TABLE: 데이터베이스 안에서 실제 데이터가 저장되는 형태이고, 행(Row)과 열(Column)로 구성된 데이터 모음

  • Table 생성 기본 문법
# create table tableName(columnName dataType, columnName dataType ...);
create table mytable(id int, name varchar(16)); # int는 정수형, varchar는 가변 문자형
  • Table 목록 확인 문법
show tables;
  • Table 정보 확인 문법
# desc tableName;
desc mytable;
  • Table 이름 변경 문법
# alter table tableName rename newTableName;
alter table mytable rename person;
  • Table Column 추가 문법
# alter table tableName add column columnName dataType;
alter table person add column agee double; # double은 실수형
  • Table Column 변경 문법 - DataType
# alter table tableName modify column columnName dataType;
alter table person modify colum agee int;
  • Table Column 변경 문법 - Name
# alter table tableName change column oldColumnName newColumnName newDataType;
alter table person change column agee age int; # 데이터형도 동시에 바꿀 수 있음.
  • Table Column 삭제 문법
# alter table tableName drop column columnName;
alter table person drop column age;
  • Table 삭제 문법
# drop table tableName;
drop table person;


2. 데이터 조작언어 : SELECT, INSERT, UPDATE, DELETE

  • 실습 환경 만들기
# 데이터베이스 생성
create database zerobase default character set utf8mb4; # 다국어 지원, 이모지 사용

# 데이터베이스 사용
use zerobase;

# person 테이블 생성
create table person
(
	id int,
    name varchar(16),
    age int,
    sex char
);

# 테이블 정보 확인
desc person;
  • Insert 문법 - 데이터 추가 : 입력한 컬럼 이름의 순서와 값의 순서가 일치하도록 주의
insert into peson (id, name, agem sex)
values (1, '이효리', 43, 'F');

# person 테이블의 모든 데이터 확인
select * from person; 
  • Insert 문법 - 모든 컬럼값을 추가하는 경우 :
    - 모든 컬럼값을 추가하는 경우에는 컬럼 이름을 지정하지 않아도 되지만,
    입력하는 값의 순서가 테이블의 컬럼 순서와 일치하도록 주의
insert into person # 지정하지 않아도 됨.
values (2, '이상순', 48, 'M');

# person 테이블의 모든 데이터 확인
select * from person; 
  • Select 문법 - 데이터 조회 : 테이블 내의 특정 칼럼에 대한 데이터를 조회
select name, age, sex from person;

# 테이블 내의 모든 컬럼에 대한 데이터를 조회
select * from person;
  • Where 문법 - Select : 테이블 내에서 조건을 만족하는 데이터 조회
select * from person where sex='F';
  • Update 문법 - 데이터 수정
# 이효리의 나이를 23세로 수정
update person set age=23 where name='이효리';

# 데이터 확인
select * from person where name='이효리';
  • Delete 문법 - 데이터 행 삭제
# 이상순 데이터 삭제
delete from person where name='이상순';

# 데이터 확인
select * from person;


3. ORDER BY

  • 실습 환경 만들기
# 데이터베이스 생성
create database zerobase default character set utf8mb4; # 다국어 지원, 이모지 사용

# 데이터베이스 사용
use zerobase;

# celeb 테이블 생성
create table celeb
(
	# 대문자 표기 주의!
	ID int NOT NULL AUTO_INCREMENT PRIMARY KEY, # null을 허용하지 않음, 자동 증가, id를 key 값으로 사용
    NAME varchar(32) NOT NULL DEFAULT '', # default는 공백
    BRITHDAY date, # 날짜형 데이터
    AGE int,
    SEX char(1), # 문자
    JOB_TITLE varchar(32), # 문자열
    AGENCY varchar(32)
);

# 테이블 정보 확인
desc celeb;

# 실습할 데이터 추가 (여기부터 문법 대문자로 표기하겠음.)
INSERT INTO celeb VALUES (1, '아이유', '1993-05-16', 29, 'F', '가수, 텔런트', 'EDAM엔터테이먼트');
INSERT INTO celeb VALUES (2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트');
INSERT INTO celeb VALUES (3, '송강', '1994-04-23', 28, 'M', '텔런트', '나무엑터스');
INSERT INTO celeb VALUES (4, '강동원', '1981-01-18', 41, 'M', '영화배우, 텔런트', 'YG엔터테이먼트');
INSERT INTO celeb VALUES (5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
INSERT INTO celeb VALUES (6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트');
INSERT INTO celeb VALUES (7, '이수현', '1999-05-04', 23, 'F', '가수', 'YG엔터테이먼트');

# 테이블 데이터 확인;
SELECT * FROM celeb;
  • ORDER BY - 데이터 정렬 : Select문에서 데이터를 특정 컬럼을 기준으로 오름차순 혹은 내림차순 정렬
    - ASC(Ascending) : 오름차순으로 정렬(default)
    DESC(Descending) : 내림차순으로 정렬
# celeb 테이블에서 이름과 나이를 나이순으로 조회
SELECT age, name
FROM celeb
ORDER BY age ASC;

# celeb 테이블에서 이름과 나이를 나이와 이름순으로 정렬하여 조회
SELECT age, name
FROM celeb
ORDER BY age, name;

# celeb 테이블에서 이름과 나이를 나이의 역순으로 정렬한 뒤 이름순으로 정렬하여 조회
SELECT age, name
FROM celeb
ORDER BY age DESC, name ASC;


4. 비교 연산자 (Comparison Operators)

  • 실습 환경 만들기
# 데이터베이스 생성
CREATE DATABASE zerobase DEFAULT CHARACTER SET utf8mb4; # 다국어 지원, 이모지 사용

# 데이터베이스 사용
USE zerobase;

# 테이블 정보 확인
DESC celeb;
  • 비교 연산자 (Comparison Operators)
    - A = B : A와 B가 같은
    A > B : A가 B보다 큰 (초과)
    A < B : A가 B보다 작은 (미만)
    A >= B : A가 B보다 크거나 같은 (이상)
    A <= B : A가 B보다 작거나 같은 (이하)
    A <> B : A가 B보다 크거나 작은 (같지 않은)
    A != B : A와 B가 같지 않은
# 나이가 29세인 데이터 검색
SELECT name, age FROM celeb WHERE age=29;

# 나이가 29세가 아닌 데이터 검색
SELECT name, age FROM celeb WHERE age!=29;
SELECT name, age FROM celeb WHERE age<>29;

# 나이가 29세보다 큰 데이터 검색, 나이 순으로 정렬
SELECT name, age FROM celeb WHERE age>29 ORDER BY age;

# 나이가 29세보다 작거나 같은 데이터 검색, 나이 순으로 정렬
SELECT name, age FROM celeb WHERE age<=29 ORDER BY age;


4. 논리 연산자 (Logical Operators)

  • 실습 환경 만들기
# 데이터베이스 생성
CREATE DATABASE zerobase DEFAULT CHARACTER SET utf8mb4; # 다국어 지원, 이모지 사용

# 데이터베이스 사용
USE zerobase;

# 테이블 정보 확인
SELECT * FROM celeb;
  • 논리 연산자 (Logical Operators)
    - AND : 조건을 모두 만족하는 경우 TRUE
    - OR : 조건을 하나라도 만족하는 경우 TRUE
    - NOT : 조건을 만족하지 않는 경우 TRUE
    - BETWEEN : 조건값이 범위 사이에 있으면 TRUE
    - IN : 조건값이 목록에 있으면 TRUE
    - LIKE : 조건값이 패턴에 맞으면 TRUE

  • AND 문법 : 조건을 모두 만족하는 경우 TRUE

# 나이가 29세이고 성별이 여성인 데이터 검색
SELECT * FROM celeb WHERE age=29 AND sex='F';

# 성별이 남자이고 나이가 40세보다 큰 데이터를 이름의 역순으로 정렬하여 검색
SELECT * FROM celeb WHERE sex='M' AND age>40 ORDER BY name DESC;

  • OR 문법 : 하나의 조건이라도 만족하는 경우 TRUE
# 나이가 25세보다 작거나 30세보다 큰 데이터 검색(나이 순으로 정렬)
SELECT * FROM celeb WHERE age<25 OR age>30 ORDER BY age;

# 나이가 29세보다 작고 여자이거나, 나이가 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
SELECT * FROM celeb
WHERE (age<29 AND sex='F') OR (age>30 AND sex='M') # 그냥 섞이면 AND가 우선순위 OR보다 높음.
ORDER BY age, sex;

# YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세보다 작은 데이터를 검색
SELECT * FROM celeb
WHERE (agency='YG엔터테이먼트' OR agency='나무엑터스') AND age<30;

# celeb 테이블에서 아이디가 홀수이면서 성별이 남자거나, 
# 아이디가 짝수면서 소속사가 YG엔터테이먼트인 데이터를 나이순으로 정렬하여 검색
SELECT * FROM celeb
WHERE ((id%2) = 1 AND sex='M') OR ((id%2) = 0 AND agency='YG엔터테이먼트')
ORDER BY age;

  • NOT 문법 : 조건을 만족하지 못하는 경우 TRUE
# 성별이 여자가 아닌 데이터 검색
SELECT * FROM celeb WHERE NOT sex='F';

# 소속사가 YG엔터테이먼트이면서 남자가 아니거나
# 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색
SELECT * FROM celeb
WHERE (agency='YG엔터테이먼트' AND NOT sex='M') 
	OR (job_title='가수' AND NOT agency='YG엔터테이먼트');

# 생일이 1990년 이후이면서 여자가 아니거나,
# 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
SELECT * FROM celeb
WHERE (birthday>19891231 AND NOT sex='F')
	OR (birthday<19800101 AND NOT agency='안테나');

# celeb 테이블에서 소속사가 YG엔터테이먼트가 아니고 나이가 40세 이하인 데이터를 
# 이름순으로 정렬하여 조회
SELECT * FROM celeb
WHERE NOT agency='YG엔터테이먼트' AND age<=40
ORDER BY name;

# celeb 테이블에서 직업이 가수가 아니면서 성별이 여자이거나,
# 나이가 40보다 작지 않으면서 아이디가 홀수인 데이터를 조회
SELECT * FROM celeb
WHERE (NOT job_title='가수' AND sex='F')
	OR (NOT age<40 AND (id%2)=1); 

  • BETWEEN 문법 : 조건값이 범위 사이에 있으면 TRUE
# 나이가 20세에서 40세 사이의 데이터 검색
# 1
SELECT * FROM celeb WHERE age BETWEEN 20 AND 40;
# 2
SELECT * FROM celeb WHERE age>=20 AND age<=40;

# 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나,
# 소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색
SELECT * FROM celeb
WHERE (NOT birthday BETWEEN 19800101 AND 19951231 AND sex='F')
	OR (agency='YG엔터테이먼트' AND NOT age BETWEEN 20 AND 45);

# celeb 테이블에서 나이가 30세에서 60세 사이가 아니거나
# YG엔터테이먼트 소속인 데이터를 나이의 역순으로 정렬하여 조회
SELECT * FROM celeb
WHERE NOT age BETWEEN 30 AND 60 OR agency='YG엔터테이먼트' 
ORDER BY age DESC; 

# celeb 테이블에서 아이디가 1에서 5사이의 값이면서 성별이 여자이거나,
# 아이디가 홀수이면서 성별이 남자이면서 나이가 20세에서 30세 사이인 데이터를 조회
SELECT * FROM celeb
WHERE (id BETWEEN 1 AND 5 AND sex='F')
	OR ((id%2)=1 AND sex='M' AND age BETWEEN 20 AND 30);

  • IN 문법 : 목록 안에 조건이 존재하는 경우 TRUE
# 나이가 28세, 48세 중 하나인 데이터 검색
SELECT * FROM celeb WHERE age IN (28, 48);
SELECT * FROM celeb WHERE age=28 OR age=48;

# 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 
# 성별이 여자거나 나이가 45세 이상인 데이터 검색
SELECT * FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테이먼트')
AND (sex='F' OR age>=45);

# celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에 소속사가 '나무엑터스'인 데이터 조회
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '유재석', '송강')
AND agency = '나무엑터스';

# celeb 테이블에서 아이유, 송강, 강동원, 차승원 중에 YG엔터테이먼트 소속이 아니거나,
# 나이가 40세에서 50세 사이인 사람
SELECT * FROM celeb
WHERE name IN ('아이유', '송강', '강동원', '차승원') 
AND (NOT agency='YG엔터테이먼트' OR age BETWEEN 40 AND 50);

  • LIKE 문법 : 조건값이 패턴에 맞으면 TRUE
# 소속사 이름이 'YG엔터테이먼트'인 데이터를 검색
SELECT * FROM celeb WHERE agency LIKE 'YG엔터테이먼트';
SELECT * FROM celeb WHERE agency='YG엔터테이먼트';

# 'YG'로 시작하는 소속사 이름을 가진 데이터를 검색
SELECT * FROM celeb WHERE agency LIKE 'YG%';

# '엔터테이먼트'로 끝나는 소속사 이름을 가진 데이터를 검색
SELECT * FROM celeb WHERE agency LIKE '%엔터테이먼트';

# 직업명에 '가수'가 포함된 데이터를 검색
SELECT * FROM celeb WHERE job_title LIKE '%가수%';

# 소속사 이름의 두번째 글자가 G인 데이터를 검색
SELECT * FROM celeb WHERE agency LIKE '_G%'; # 세번째이면 '__G%'

# 직업명이 '가'로 시작하고 최소 2글자 이상인 데이터 검색
SELECT * FROM celeb WHERE job_title LIKE '가_%'; # 최소 5글자 '가____%'

# 직업명이 '영'으로 시작하고 '모델'로 끝나는 데이터 검색
SELECT * FROM celeb WHERE job_title LIKE '영%모델';

# 영화배우와 텔런트를 병행하는 연예인 검색
SELECT * FROM celeb
WHERE job_title LIKE '%영화배우%' AND job_title LIKE '%텔런트%';

# 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
SELECT * FROM celeb
WHERE job_title LIKE '%,%'
AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%텔런트%');

# celeb 테이블에서 직업중 가수가 포함되어 있고 성이 이씨인 데이터 조회
SELECT * FROM celeb
WHERE job_title LIKE '%가수%' AND name LIKE '이%';

# celeb 테이블에서 성별이 남자 이거나 
# 직업명이 ‘텔런트’ 로 끝나면서 최소 5글자 이상인 데이터를 조회
SELECT * FROM celeb
WHERE sex='M' OR job_title LIKE '%__텔런트';

# celeb 테이블에서 이름이 두글자인 데이터를 조회
SELECT * FROM celeb
WHERE name LIKE '__';

# celeb 테이블에서 나이가 30세 이상 50세 이하면서 개그맨이 아닌 데이터를 조회
SELECT * FROM celeb
WHERE age BETWEEN 30 AND 50 AND NOT job_title LIKE '%개그맨%'; # NOT LIKE 도 가능

# celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에 
# 소속사 이름이 ‘나무’로 시작하는 데이터를 조회
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '유재석', '송강')
AND agency LIKE '나무%';

# celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에 
# 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 사람
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '송강', '이수현')
AND (job_title LIKE '가수' OR (NOT job_title LIKE '%가수%' AND job_title LIKE '%텔런트%'));

0개의 댓글