SQL 01.

yoong·2023년 5월 26일
0

7. SQL

목록 보기
1/5

01.Database

1.Database 정의

1) 데이터 베이스 : 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데티터의 집합체
a. 관계형 데이터 베이스(RDB:Relational Database): 서로간에 관계가 있는 데이터 테이블들을 모아둔 데이터 저장공간 ex)mySQL
b. 비관계형 데이터 베이스: 데이터 저장만을 위함

2. SQL(Structured Query Language)

1.SQL 정의

: 데이터베이스에서 데이터를 정의,조작,제어하기 위해 사용하는 언어

2.SQL 구성

  • 데이터 정의 언어(DDL:Data Definition Language)
    : CREATE,ALTER,DROP등의 명령어
  • 데이터 조작 언어(DML:Data Manipulation Language)**
    : INSERT,UPDATE,DELETE,SELECT 등의 명령어
  • 데이터 제어 언어(DCL:Data Control Language)
    : GRANT,REVOKE,COMMIT,ROLLBACK 등의 명령어

3.SQL 접속

%mysql -u root -p
Enter password:

3.Database 관리기능

1) SHOW DATABASES;

: 현재 database 목록 확인

SHOW DATABASES;

2) CREATE DATABASE dbname;

: 현재 database 이름 지정해서 생성

CREATE DATABASE dbname;

3) USE dbname;

: 해당 database 이동(사용)

USE dbname;

4) DROP DATABASE dbname;

: 해당 database 삭제

DROP DATABASE dbname;

4.User 관리기능

1) User 조회

: 사용자 정보는 mysql에서 관리하므로 일단 mysql 데이터베이스로 이동후 조회

use mysql;
SELECT host, user FROM user;

2) User 생성

:host가 다른 동일한이름의 user는 가능함

사용자 a. 현재 pc에서만 접속 가능한 사용자(localhose)

CREATE USER 'username'@'localhost' identified by 'password';

사용자 b. 외부에서 접속가능한 사용자 (-%)

CREATE USER 'username'@'%' identified by 'password';

3) User 삭제

:접근 범위에 따라 같은 이름의 사용자여도 별도로 삭제해야함

DROP USER 'username'@'localhost'
DROP USER 'username'@'%'

5.User 권한관리

1. 실습환경 만들기

# Database(testdb)생성
CREATE DATABASE testdb;

# 권환 관리를 위한 사용자 생성 
CREATE USER 'noma'@'localhost' identified by '1234';

2. 권한 목록 확인

:사용자에게 부여된 모든 권한 목록 확인

SHOW GRANTS FOR 'username'@'localhost';

localhost 권환 확인

SHOW GRANTS FOR 'noma'@'loaclhost';

3. 권한 부여

: 사용자에게 특정 데이터베이스의 모든 권한 부여

GRANT ALL ON dbname.* to 'username'@'localhost';

[참고] 새로고침

FLUSH PRIVILEGES;

4. 권한 삭제

: 사용자에게 특정 데이터베이스의 모든 권한 삭제
'username'의 'dbname'에 대한 모든 권한을 삭제

REVOKE ALL ON dbname.* from 'username'@'localhost';

5.Table 사용하기

1. 실습환경 만들기

# Database(testdb)생성(utf9mb4:: 다국어+이모지)
CREATE DATABASE testdb DEFAULT CHARACTER SET utf9mb4;

2. Table

:데이터베이스 안에서 실제 데이터가 저장되는 형태이고 행(row)와 열(column)로 구성된 데이터 모음

1. Table 생성문법

CREATE TABLE tablename
(
	columnname datatype,
    columnname datatype,
    ...
)

1) id(int)와 name(varchar(16))칼럼을 가지는 mytable이라는 이름의 테이블 생성(varchar:가변문자형 판다스 object와 비슷 )

CREATE TABLE mytable(id int, name varchar(16));

2. Table 보기

SHOW TABLES;

3. Table 정보 확인

DESC tablename;

4. Table 변경

a. 테이블 이름 변경

ALTER TABLE tablename
RENAME new_tablename;

b. 칼럼추가

ALTER TABLE tablename
ADD COLUMN columnname datatype;

c. 칼럼수정(데이터타입변경)

ALTER TABLE tablename
MODIFY COLUMN columnname datatype;

#예시(person테이블의 agee컬럼의 데이터 타입을 int로 변경)
alter table person modify column agee int

d. 칼럼수정(이름 변경)

ALTER TABLE tablename
CHANGE COLUMN old_columnname new_columnname new_datatype;

#예시(person테이블의 agee컬럼의 컬럼 이름을 age로 변경)
alter table person change column agee age int;

e. 칼럼삭제

ALTER TABLE person
DROP COLUMN age;

5. Table 삭제

DROP TABLE person;

6.Select,Insert,Update Delete

1. 실습환경 만들기

# zerobase Database 사용하기
use zerobase;

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

2. Select 문법

:데이터를 조회하는 명령어

1) 기본

SELECT column1,column2 FROM tablename;

#ex : person 테이블 내의 이름,나이,성별 데이터를 조회
select name,age,sex From person;

2)전체 컬럼 가지고 오고 싶을때,

SELECT * FROM tablename;

3) Where 문법

SELECT column1, column2, ...
FROM tablename
WHERE condition;

#ex: person테이블에서 성별이 여자인 데이터만 조회
select * from person where sex="F";

3. Insert 문법

INSERT INTO tablename (column1,column2,...)#columns생략가능
VALUES (value1,value2,...);

4. Update 문법

:데이터를 수정하는 명령어

UPDATE tablename
SET column1 = value1, column2 =value2, ...
WHERE condition;

#ex
update person set age = 23 where name='가나다';

5. Delete 문법

DELETE FROM tablename
WHERE condition;

7. Order by 문법

1. 실습환경 만들기

#실습환경 만들기
use zerobase;

#ex
CREATE TABLE celeb
(
ID int not null auto_invrement primary key,
name varchar(32) not null default '',
birthday date,
age int,
sex char(1),
job_title varchar(32),
agency varchar(32)
);

desc celeb;

2. Order by

:SELECT문에서 데이터를 특정 컬럼을 기준으로 오름차순(ASC) 혹은 내림차순(DESC)으로 정렬

SELECT column1, column2,...
FROM tablename
ORDER BY column1, column2 ...ASC|DESC;
# 예시
select age,name from celab order by age DESC, name ASC;

8. 비교연산자 문법

use zerobase;

SELECT name,age FROM celb WHERE age=29 ORDER BY age; 

9. 논리연산자 문법

1.AND 문법

: 조건을 모두 만족하는 경우 TRUE

SELECT column1, column2,...
FROM tablename
WHERE condition1 AND condition2 AND condition3...;

#ex
SELECT * FROM celab WHERE age=29 AND sex='F';

2.OR 문법

: 하나의 조건이라도 만족하는 경우 TRUE

  • and 와 or 이 섞인 경우 and먼저 처리됨
SELECT column1, column2,...
FROM tablename
WHERE condition1 OR condition2 OR condition3...;

#ex
SELECT * FROM celab WHERE age=29 OR sex='F';
SELECT * FROM celeb WHERE (age<29 AND sex='F') OR (age>30 AND sex='M');

select * from celeb
where ((id%2) =1 and sex=“M”) or((id%2)=0 and agency=“YG엔터테인먼트”) order by age asc;

3.not 문법

:조건을 만족하지 않는 경우 TRUE

SELECT column1, column2,...
FROM tablename
WHERE NOT condition;

4.Between 문법

:조건값이 범위 사이에 있으면 TRUE

SELECT column1, column2,...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;

select * from celeb where birthday between 19800101 and 19951231;

select * from celeb where not agency in ("나무","안테나","울림") and (sex="F" or age >=45)

5.IN 문법

:목록 안에 조건이 존재하는 경우 TRUE

SELECT column1, column2,...
FROM tablename
WHERE column IN(value1,value2,...)

#예시
select * from celeb where not agency IN("나무엑터스","안테나) AND sex="F"

6.LIKE 문법

:조건값이 패턴에 맞으면 TRUE

SELECT column1, column2,...
FROM tablename
WHERE column LIKE pattern;
#소속사 이름이 'yg엔터테이먼트'인 데이터 검색
select * from celeb where agency like 'YG엔터테이먼트';

#소속사 이름이 '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%';

#직업명이 '가'로 시작하고 최소 2글자 이상인 데이터 검색
select * from celeb where job_title like '가_%';

#직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 검색(이상 %)
select * from celeb where job_title like '가____%';

#직업명이 '영'으로 시작하고 '모델'로 끝나는 데이터 검색
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 테이블에서 성별이 남자이거나 직업명이 '탤런트'로 끝나면서 최소 5글자 이상인 데이터 조회
select * from celeb where sex = "M" or job_title like '%__탤런트');

10.Union

:여러개의 sql문을 합쳐서 하나의 sql문으로 만들어주는 방법(단, 칼럼의 개수가 같아야함) ,수직결합방식

  • UNION: 중복된 값을 제거하여 알려줌.
  • UNION ALL : 중복된 값도 모여줌
SELECT column1, column2, ... FROM tableA
UNION | UNION ALL
SELECT column1,column2,... FROM tableB;

11.Join

:수평결합방식

1. Inner Join

: 두 테이블의 교집합을 결합하는 조인 방식

SELECT column1, column2, ...
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

2. left Join

: 두 테이블의 교집합 포함 왼쪽 테이블의 다른 데이터를 포함하는 조인방식

SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column #기준점
WHERE condition;

3. Right Join

: 두 테이블의 교집합 포함 오른쪽 테이블의 다른 데이터를 포함하는 조인방식

SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column #기준점
WHERE condition;

4. FULL OUTER JOIN

: 두 테이블의 합집합을 결합하는 조인 방식

#mysql에서는 지원하지 않는 문법 다른 데이터베이스는 이대로 하면됨.
SELECT column1, column2, ...
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column #기준점
WHERE condition;
#mysql에서 full outer join 대신 사용하는 방법 
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB on tableA.column = tableB.column
UNION
SELECT column1,colum2,...
FROM tableA
RIGHT JOIN tableB on tableA.column = tableB.column
WHERE condition;

5. SELF JOIN Join

: 두 테이블의 교집합을 결합하는 조인 방식(inner join과 같은효과 but where절에 기준을 명시함)

SELECT column1, column2, ...
FROM tableA,tableB, ...
WHERE condition;

#예시

if 동일한 칼럼명이 있는 경우 테이블명을 꼭 표시해주어야함

# if celeb,snl_show둘다 id칼럼이 있는경우 
seelct snl_show.id,season,episode,name,job_title
from celeb,snl_show
where name = host;

12.CONCAT

: 여러 문자열을 하나로 합치거나 연결

SELECT CONCAT('concat','','test');

#예시
select concat('이름:',name) from celeb;

13.ALIAS

: 칼럼이나 테이블 이름에 별칭 생성

SELECT column as alias
FROM tablename;

1. 칼럼 별칭생성

SELECT column1 as alias;
FROM tablename
#예제 1
select name as '이름',agency as '소속사' from celeb;


#예제 2 concat 함께사용
select concat(name, ':',job_title) as profile from celeb;

2. 테이블 별칭생성

SELECT column1,column2,...
FROM tablename as alias; #as생략가능

``
#예제 테이블 별칭
select s.season, s.episode, c.name,c.job_title
from celeb as c, snl_show as s
where c.name=s.host;


![](https://velog.velcdn.com/images/y00ng/post/1842ef83-e8c8-4b76-81d3-132a58b88cbc/image.png)


## 14.DISTINCT
: 검색한 결과의 중복 제거

SELECT DISTINCT column1, column2, ...
FROM tablename


## 15.LIMIT
: 검색한 결과를 정렬된 순으로 주어진 숫자만큼만 조회

SELECT column1,column2,...
FROM tablename
WHERE condition
LIMIT number;





- 이글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었음.
profile
데이터와 이미지로 세상을 공부하는 중입니다 :)

0개의 댓글

관련 채용 정보