제로베이스 9주차 학습노트

김정인·2023년 4월 30일
0

데이터스쿨13기

목록 보기
17/17
post-thumbnail

SQL

# 터미널에서 sql실행하기
mysql -u root -p
#Enter password : 패스워드 입력

Database 관리

# 데이터목록보기
show databases;

# 데이터 생성
create database testdb;

# 데이터 접속
use testdb;

# 데이터 삭제
drop database testdb;

User 관리

# 현재 host와 user정보
select host, user form user;.

# localhost zerobase유저 생성
create user 'zerobase'@'localhost' identified by '1234';

# 외부접속가능 zerobase유저 생성
create user 'zerobase'@'%' identified by '5678';

# 유저 삭제
drop user 'zerobase'@'localhost';
drop user 'zerobase'@'%';

User 권한 관리

# 권한 목록 확인
SHOW GRSNTS FOR 'username'@'localhost';

# 사용자에게 특정 데이터베이스의 모든 권한을 부여
GRANT ALL ON dbname.* to 'username'@'localhost';

#참고 - 수정내용이 적용이 되지 않는 경우 새로고침
FLUSH PRIVILEGES

# dbname의 모든 권한 제거
REVOKE ALL ON dbname.* from 'username'@'localhost';

Table 생성

# zerobase 라는 이름의 데이터베이스 생성
CREATE DATABASE zerobase DEFAULT CHARACTER SET ut8mb4;

# Table 생성 문법
CREATE TABLE tablename
(
	columnname datatype,
    columnname datatype,
    ...
)

# Table 목록 확인 문법
SHOW TABLE;

# Table 정보 호가인 문법
DESC mytable;

Table 변경

# table 이름 변경 문법
ALTER TABLE tablename
RENAME new_tablename;

# table Column 추가 문법
ALTER TABLE tablename
ADD COLUMN columnname dataype;

# table Column DataType변경
ALTER TABLE tablename
MODIFY COLUMN columnname dataype;

# table Column Name변경
ALTER TABLE tablename
CHANGE COLUMN old_columnname new_columnname new_dataype;

# table Column 삭제 문법
ALTER TABLE tablename
DROP COLUMN columnname;

# Table 삭제
DROP TABLE tablename;

INSERT 문법

INSERT INTO tablename(column1, column2,...)
VALUES (value1, value2,...);

# 모든 컬럼값을 추가하는 경우
INSERT INTO tablename
VALUES (value1, value2,...);

SELECT 문법

# 테이블 내의 특정 칼럼에 대한 데이터 조회
SELECT column1, column2,...
FROM tablename;

# 테이블 내의 모든 컬럼에 대한 데이터를 조회
SELECT *
FROM tablename;

where-조건

SQL문에 조건을 추가하며 SELECT뿐만 아니라 UPDATE와 DELETE에도 사용

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

UPDATE 문법

  • 데이터를 수정하는 명령어
UPDATE tablename
SET column1 = value1, column2 = value2, ...
WHERE condition;

DELETE 문법

DELETE FROM tablename
WHERE condition;

ORDER BY

  • SELECT 문에서 데이터를 특정 컬럼을 기준으로 오름차순 혹은 내림차순 정렬
  • ASC(Ascending):오름차순으로 정렬
  • DESC(Descending):내림차순으로 정렬
SELECT column1, column2,...
FROM tablename
ORDER BY column1, column2,...ASC/DESC;
# 여러컬럼 정렬을 다르게 할 경우
ORDER BY column1 ASC/DESC, column2 ASC/DESC; 

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가 같지 않은

Logical Operators(논리연산자)

AND 조건을 모두 만족하는경우 TRUE
OR  하나의 조건이라도 만족하는 경우
NOT  조건을 만족하지 않는 경우
BETWEEN  조건값이 범위 사이에 있으면
IN 조건값이 목록에 있으면
LIKE  조건값이 패턴에 맞으면
  • AND
SELECT column1, colum2,...
FROM tablename
WHERE condition1 AND codition2 AND codintion3 ...;
  • OR
SELECT column1, colum2,...
FROM tablename
WHERE condition1 OR codition2 OR codintion3 ...;
  • NOT
SELECT column1, colum2,...
FROM tablename
WHERE NOT condition1;

// WHERE condtion1 AND NOT condition2
// WHERE (condtion1 AND NOT condition2) 
	  OR (condtion3 AND NOT condition4)
  • BETWEEN
SELECT column1, colum2,...
FROM tablename
WHERE column1 BETWEEN value1 AND value2;
ex) 나이 컬럼에서 20세에서 40세 사이
-> WHERE age BETWEEN 20 AND 40;
-> WHERE age>=20 AND age<=40;
  • IN
SELECT column1, colum2,...
FROM tablename
WHERE column1 IN (value1, value2);
ex) 나이 컬럼에서 20세, 40세 중 하나인 데이터
-> WHERE age IN (20, 40);
-> WHERE age=20 OR age=40;
  • LIKE
SELECT column1, colum2,...
FROM tablename
WHERE column1 LIKE pettern;
ex) '엔터테이먼트'로 끝나는 소속사 이름을 가진 데이터를 검색
-> WHERE agency Like '%엔터테이먼트';
ex ) 직업명에 '가수'가 포함된 데이터를 검색
-> WHERE job_title Like '%가수%';
ex ) 이름의 두번째 글자가 '동'인 데이터를 검색
-> WHERE name Like '_동%'; (세번쨰면 _언더바를 하나 더 넣어줌)
ex ) 직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 검색
-> WHERE job_title Like '가____%';

ex ) 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 
-> SELECT * FROM celeb
   WHERE job_title Like '%,%'
   AND NOT (job_title Like '%영화배우%' OR job_title Like '%탤런트%')
   

UNION

  • 여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어주는 방법
    (*주의 컬럼의 개수가 같아야함)
UNION : 중복된 값을 제거하여 알려줌
UNION ALL : 중복된 값도 모두 보여줌

SELECT column1, column2, ... FROM tableA
UNION/UNION ALL
SELECT column1, column2, ... FROM tableB;

JOIN

두 개 이상의 테이블을 결합하는 것

  • INNER JOIN : 교집합
  • FULL OTER JOIN : 합집합
  • LEFT JOIN : 공통된 데이터 외에 왼쪽데이터 공통되지 않은 데이터까지
  • RIGHT JOIN : 공통된 데이터 외에 오르쪽데이터 공통되지 않은 데이터까지
  • SELF JOIN : INNER JOIN과 같은 효과
# INNER JOIN
SELECT column1, column2, ...
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.colum         #ON으로 기준을 정해줌
WHERE condition;

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

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

# FULL OUTER JOIN (mysql에서는 지원하지 않음)
SELECT column1, column2, ...
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.colum 
WHERE condition;
------------
#MySQL에서 다음 쿼리로 같은 결과를 만들 수 있음
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.colum 
UNION
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.colum
WHERE condition;

#SELF JOIN
SELECT column1, column2, ... 
(*동일한 칼럼명이 없는경우 칼럼명만 입력가능, 동일칼럼명 있는 경우 에러발생)
FROM tableA, tableB, ...
WHERE conditon;

CONCAT

문자 조합

ALIAS

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

# 칼럼 별칭
SELECT column as alias
RROM tablename;

# 테이블 별칭
SELECT column1, column2, ...
RROM tablename as alias;

DISTINCT

검색한 결과의 중복 제거

SELECT DISTINCT column1, column2, ...
FROM tablename;

LIMIT

검색결과를 정렬된 순으로 주어진 숫자만큼만 조회

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

0개의 댓글