1) 데이터 베이스 : 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데티터의 집합체
a. 관계형 데이터 베이스(RDB:Relational Database): 서로간에 관계가 있는 데이터 테이블들을 모아둔 데이터 저장공간 ex)mySQL
b. 비관계형 데이터 베이스: 데이터 저장만을 위함
: 데이터베이스에서 데이터를 정의,조작,제어하기 위해 사용하는 언어
%mysql -u root -p
Enter password:
: 현재 database 목록 확인
SHOW DATABASES;
: 현재 database 이름 지정해서 생성
CREATE DATABASE dbname;
: 해당 database 이동(사용)
USE dbname;
: 해당 database 삭제
DROP DATABASE dbname;
: 사용자 정보는 mysql에서 관리하므로 일단 mysql 데이터베이스로 이동후 조회
use mysql;
SELECT host, user FROM user;
:host가 다른 동일한이름의 user는 가능함
사용자 a. 현재 pc에서만 접속 가능한 사용자(localhose)
CREATE USER 'username'@'localhost' identified by 'password';
사용자 b. 외부에서 접속가능한 사용자 (-%)
CREATE USER 'username'@'%' identified by 'password';
:접근 범위에 따라 같은 이름의 사용자여도 별도로 삭제해야함
DROP USER 'username'@'localhost'
DROP USER 'username'@'%'
# Database(testdb)생성
CREATE DATABASE testdb;
# 권환 관리를 위한 사용자 생성
CREATE USER 'noma'@'localhost' identified by '1234';
:사용자에게 부여된 모든 권한 목록 확인
SHOW GRANTS FOR 'username'@'localhost';
localhost 권환 확인
SHOW GRANTS FOR 'noma'@'loaclhost';
: 사용자에게 특정 데이터베이스의 모든 권한 부여
GRANT ALL ON dbname.* to 'username'@'localhost';
[참고] 새로고침
FLUSH PRIVILEGES;
: 사용자에게 특정 데이터베이스의 모든 권한 삭제
'username'의 'dbname'에 대한 모든 권한을 삭제
REVOKE ALL ON dbname.* from 'username'@'localhost';
# Database(testdb)생성(utf9mb4:: 다국어+이모지)
CREATE DATABASE testdb DEFAULT CHARACTER SET utf9mb4;
:데이터베이스 안에서 실제 데이터가 저장되는 형태이고 행(row)와 열(column)로 구성된 데이터 모음
CREATE TABLE tablename
(
columnname datatype,
columnname datatype,
...
)
1) id(int)와 name(varchar(16))칼럼을 가지는 mytable이라는 이름의 테이블 생성(varchar:가변문자형 판다스 object와 비슷 )
CREATE TABLE mytable(id int, name varchar(16));
SHOW TABLES;
DESC tablename;
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;
DROP TABLE person;
# zerobase Database 사용하기
use zerobase;
#person 테이블 생성
create table person(id int, name varchar(16), age int,sex CHAR);
:데이터를 조회하는 명령어
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";
INSERT INTO tablename (column1,column2,...)#columns생략가능
VALUES (value1,value2,...);
:데이터를 수정하는 명령어
UPDATE tablename
SET column1 = value1, column2 =value2, ...
WHERE condition;
#ex
update person set age = 23 where name='가나다';
DELETE FROM tablename
WHERE condition;
#실습환경 만들기
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;
: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;
use zerobase;
SELECT name,age FROM celb WHERE age=29 ORDER BY age;
: 조건을 모두 만족하는 경우 TRUE
SELECT column1, column2,...
FROM tablename
WHERE condition1 AND condition2 AND condition3...;
#ex
SELECT * FROM celab WHERE age=29 AND sex='F';
: 하나의 조건이라도 만족하는 경우 TRUE
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;
:조건을 만족하지 않는 경우 TRUE
SELECT column1, column2,...
FROM tablename
WHERE NOT condition;
:조건값이 범위 사이에 있으면 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)
:목록 안에 조건이 존재하는 경우 TRUE
SELECT column1, column2,...
FROM tablename
WHERE column IN(value1,value2,...)
#예시
select * from celeb where not agency IN("나무엑터스","안테나) AND sex="F"
:조건값이 패턴에 맞으면 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 '%__탤런트');
:여러개의 sql문을 합쳐서 하나의 sql문으로 만들어주는 방법(단, 칼럼의 개수가 같아야함) ,수직결합방식
SELECT column1, column2, ... FROM tableA
UNION | UNION ALL
SELECT column1,column2,... FROM tableB;
:수평결합방식
: 두 테이블의 교집합을 결합하는 조인 방식
SELECT column1, column2, ...
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
: 두 테이블의 교집합 포함 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column #기준점
WHERE condition;
: 두 테이블의 교집합 포함 오른쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column #기준점
WHERE condition;
: 두 테이블의 합집합을 결합하는 조인 방식
#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;
: 두 테이블의 교집합을 결합하는 조인 방식(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;
: 여러 문자열을 하나로 합치거나 연결
SELECT CONCAT('concat','','test');
#예시
select concat('이름:',name) from celeb;
: 칼럼이나 테이블 이름에 별칭 생성
SELECT column as alias
FROM tablename;
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;
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;
- 이글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었음.