2024. 2. 20. 15:27ㆍSQL_MySQL&Heidi
어제 학습 한 것 복습으로 강의가 시작되었습니다.
Heidi SQL 에서 실제 가장 많이 사용하는 Keyword
-
SELECT - 검색(질의)
INSERT - 삽입(등록)
UPDATE - 업데이트(수정)
DELETE - 삭제
질의 : SELECT - SQL에서 "질의(Query)"는 데이터베이스로부터 정보를 요청하거나 가져오는 작업을 의미
p.s. 데이터베이스에 저장된 정보를 검색하거나 조작하기 위해 사용되는 SQL 명령어나 질의-문 (질문)
데이터베이스에서 데이터를 관리하고 활용하는 데 핵심적인 역할을 함
SQL 문법에 대하여 알아보았다.
SQL 문법의 종류 3가지 (오라클로 배우는 데이터베이스 개론과 실습 + 위키백과)
데이터 정의 언어 - ( DDL : Data Definition Language )
└ 테이블이나 관계의 구조를 생성하는데 사용하며 CREATE, ALTER, DROP,TRUNCATE 문 등이 있다.
CREATE - 새로운 데이터베이스 관계 (테이블) View, 인덱스 , 저장 프로시저 만들기.
DROP - 이미 존재하는 데이터베이스 관계 ( 테이블 ) , 뷰 , 인덱스 , 저장 프로시저를 삭제한다.
ALTER - 이미 존재하는 데이터베이스 개체에 대한 변경 , RENAME의 역할을 한다.
TRUNCATE - 관계 ( 테이블 )에서 데이터를 제거한다. ( 한번 삭제시 돌이킬 수 없음.)
데이터 조작 언어 - ( DML : Data Manipulation Language )
└ 테이블에 데이터 검색, 삽입, 수정, 삭제하는 데 사용하며 SELECT, UPDATE, DELETE, INSERT문 등이 있다.
SELECT - 검색(질의)
INSERT - 삽입(등록)
UPDATE - 업데이트(수정)
DELETE - 삭제
데이터 제어 언어 - ( DCL : Data Control Language)
└ 데이터의 사용 권한을 관리하는 데 사용하며 GRANT, REVOKE 문 등이 있다.
GRANT - 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 부여한다.
REVOKE - 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 박탈 or 회수 한다.
데이터베이스 사용자에게 GRANT 및 REVOKE로 설정 할 수 있는 권한.
CONNECT - 데이터베이스 or 스키마에 연결하는 권한.
SELECT - 데이터베이스에서 데이터를 검색할 수 있는 권한
INSERT - 데이터베이스에서 데이터를 등록(삽입)할 수 있는 권한
UPDATE - 데이터베이스의 데이터를 업데이트 할 수 있는 권한
DELETE - 데이터베이스의 데이터를 삭제할 수 있는 권한.
USAGE - 스키마 또는 함수와 같은 데이터베이스 개체를 사용할 수 있는 권한
오늘의 학습 내용 : DML.sql - 이론 부분을 수강하였다.
###########################################################
#
# 데이터 조작 언어(DML : Data Manipulation Language)
#
############################################################
* UPDATE
UPDATE 테이블
SET 필드명1=값1, 필드명2=값2, ..., 필드명n=값n
WHERE 조건; # 조건 - 프라이머리 키 = 값
UPDATE kcity SET name='수원', population=1200000 WHERE id=2340;
UPDATE kcity SET name='용인', population=1200000 WHERE id=2362
- ID가 2391 이상인 도시의 인구를 10만 추가
UPDATE kcity SET population=population+1000000 WHERE id>2390;
* INSERT
INSERT INTO 테이블(필드명1, 필드명2, ..., 필드명n)
# 경기도 화성시 의정부시
INSERT INTO kcity
VALUES (default, '화성', 'KOR', 'Kyonggi', 900000)
VALUES (default, '의정부', 'KOR', 'Kyonggi', 200000)
# 강원도 속초시 추가 - default VALUE 활용(auto_increment 포함)
INSERT INTO kcity(name, countrycode, district) VALUES('속초', 'KOR','Kang-won');
# 경기도 광주시 추가 - default VALUE 활용(auto_increment 포함)
날짜 / 시간 조작 - DATE / TIME .sql
################################################################
#
# Date / Time - 날짜/시간 조작
#
################################################################
/*
1. 테이블 생성
*/
create TABLE of not exists dataTable (
id int primary key auto_increment,
regDate DATE default (current_date),
modTime datetime default current_timestamp
);
/*
2. 데이터 입력
*/
INSERT into dataTable values (default, default, default)
INSERT into dataTable(id) values (default)
INSERT into dataTable(regDate, modTime)
values ('2024-01-01', '2024-01-31 10:25:00'), ('2024-02-01', '2024-02-02 10:45:00')
/*
* 3. 데이터 조회
*/
# 2024-02-02 형식
SELECT regDate, DATE_FORMAT(modTime, '%Y-%m-%d') FROM dateTable;
# 10:45:00 AM 형식
SELECT DATE_FORMAT(modTime, '%h:%i:%s %p') FROM dateTable;
# 24-02-02 16:45 형식
SELECT DATE_FORMAT(modTime, '%y-%m-%d %H:%i') FROM dateTable;
# 날짜 조회 함수
SELECT NOW(), CURDATE(), CURTIME();
/*
-- 4. 날짜 수정
*/
UPDATE datetable SET regdate=CURDATE(), modtime=NOW() WHERE id=3;
/*
-- 5. 날짜 계산 _ 날짜 더하기 빼기
*/
SELECT DATE_ADD(NOW(), INTERVAL 40 DAY); // 2024-03-13 11:11:47 - 40일 후
SELECT DATE_ADD(NOW(), INTERVAL 3 month); // 2024-05-02 11:12:24 _ 3개월 더함
SELECT DATE_SUB(CURDATE(), INTERVAL 3 month); // 2023-11-02 _ 3개월 뺌
-- d-day 계산
SELECT TO_DAYS('2024-11-14') - TO_DAYS(CURDATE()); // D- 286 일 남음 (24년 수능일)
-- 요일: 1 - 일요일
SELECT DAYOFWEEK(regDate) FROM datetable;
-- Memorize It!
-- 테이블은 실체가 있고 뷰는 실체가 없다
-- 그래서 테이블에 업데이트를 해야하고 뷰에 하면 안됨
-- 뷰는 단순 조회용이다
CREATE VIEW largeCity AS SELECT * FROM city
WHERE population>8000000;
DDL.sql
################################################################
#
# 데이터 정의 언어 (DDL: Data Definition Language)
#
################################################################
-- 1. 테이블 생성
-- ERMaster 활용
# 주소록 테이블 생성
CREATE TABLE addrBook (
aid int NOT NULL AUTO_INCREMENT,
name varchar(16) NOT NULL,
tel varcha
r(16),
email varchar(32),
birthDay datetime NOT NULL,
PRIMARY KEY (aid)
);
# 사용자 테이블 생성
CREATE TABLE users (
uid varchar(12) NOT NULL,
pwd char(60) NOT NULL,
uname varchar(16) NOT NULL,
email varchar(32),
regDate date DEFAULT (CURRENT_DATE),
isDeleted int DEFAULT 0,
PRIMARY KEY (uid)
);
DESC addrBook; //
-- 2.
-- 테이블 목록 확인 - 데이터베이스내의 테이블 목록
SHOW TABLE;
-- 테이블 구조
DESC users; # describe
-- 3. 테이블 삭제
# largeCity view 삭제
DROP view largeCity;
# dateTable 삭제
DROP TABLE dateTable; // 이거 하고
SHOW TABLES; // 이거 누르면 없어진 거 확인 가능 ㅇㅇ
# kcity 테이블의 모든 데이터 삭제
truncate kcity;
/*
* 4. 테이블 이름 변경
*/
RENAME TABLE kcity TO korCity;
/*
* 5. 테이블 구조 변경
*/
#users 테이블에서 email 뒤에 tel 추가
ALTER talble users;
ADD tel VARCHAR(16) NOT NULL AFTER email;
DESC users;
# users 테이블에서 tel 필드의 not null 제거
ALTER talble users
CHANGE tel tel VARCHAR(16); // 바꾸기 전에는 NULL 이었는데 바꾼 후는 YES 가 됨
JOIN
###########################################################
#
# 테이블 조인(Table join)
#
############################################################
-- 1. 테이블 생성
# song Table
create table if not EXISTS sont (
sid int primary key auto_increment,
title varchar(32) not null,
lyrics varchar(64)
) auto_increment=101; // 시작 번호 지정
DESC song;
# girl_group table
create table if not exists girl_group (
gid int primary key auto_increment,
name varchar(32) not null,
debut DATE NOT NULL,
hit_song_id int
) AUTO_INCREMENT=1001;
DESC girl_group;
-- 2. 데이터 입력
# song tableinsert into song (title, lyrics) // 두 가지의 필드만 채워 넣을 것임 (title, lyrics)
insert into song (title, lyrics) values
('Tell Me', 'tell me tell me tetetete tel me'),
('Gee', 'GEE GEE GEE GEE GEE BABY BABY'),
('미스터', '이름이 뭐야 미스터'),
('Abracadabra', '이러다 미쳐 내가 여리여리'),
('8282', 'Give me a call Baby baby'), ('기대해', '기대해'),
('I Dont care', '다른 여자들의 다리를'),
('Bad Girl Good Girl', '앞에선 한 마디 말도'), ('피노키오', '뉴예삐오'),
('별빛달빛', '너는 내 별빛 내 마음의 별빛'),
('A', 'A 워오우 워오우워 우우우'),
('나혼자', '나 혼자 밥을 먹고 나 혼자 영화 보고'), ('LUV', '설레이나요 '),
('짧은치마', '짧은 치마를 입고 내가 길을 걸으면'),
('위아래', '위 아래 위위 아래'), ('Dumb Dumb', '너 땜에 하루종일');
# girl_group table
insert into girl_group (name, debut, hit_song_id) values
('원더걸스', '2007-02-10', 101),
('소녀시대', '2007-08-02', 102), ('카라', '2009-07-30', 103),
('브라운아이드걸스', '2008-01-17', 104), ('다비치', '2009-02-27', 105),
('2NE1', '2009-07-08', 106), ('f(x)', '2011-04-20', 108),
('시크릿', '2011-01-06', 109), ('레인보우', '2010-08-12', 110),
('애프터 스쿨', '2009-11-25', 120), ('포미닛', '2009-08-28', 121);
SELECT * from girl_group; // 출력
-- 3. inner join
SELECT r.name, r.debut, l.title, l.lyrics FROM song l
INNER JOIN girl_group r
ON l.sid=r.hit_song_id;
# Left outer join
SELECT r.name, r.debut, l.title, l.lyrics FROM song l
LEFT OUTER JOIN girl_group r
ON l.sid=r.hit_song_id;
# Right outer join
SELECT r.name, r.debut, l.title, l.lyrics FROM song l
RIGHT OUTER JOIN girl_group r
ON l.sid=r.hit_song_id;
# Full outer join
SELECT r.name, r.debut, l.title, l.lyrics FROM song l
LEFT OUTER JOIN girl_group r
ON l.sid=r.hit_song_id // 세미콜론 없어야 함
UNION // WITH 가 아니라 UNION 임
SELECT r.name, r.debut, l.title, l.lyrics FROM song l
RIGHT OUTER JOIN girl_group r
ON l.sid=r.hit_song_id;
이하 코드의 개념 설명 - 사진
실상 현장에서 쓰일 일이 없는 부분이다. 가볍게 듣고 PASS.
SELECT r.name, r.debut, l.title, l.lyrics FROM song l
LEFT OUTER JOIN girl_group r
ON l.sid=r.hit_song_id;
- -sample.sql-
SET SESSION FOREIGN_KEY_CHECKS=0;
/* Drop Tables */
DROP TABLE IF EXISTS addrBook;
DROP TABLE IF EXISTS users;
/* Create Tables */
CREATE TABLE addrBook
(
aid int NOT NULL AUTO_INCREMENT,
name varchar(16) NOT NULL,
tel varchar(16),
email varchar(32),
birthDay datetime NOT NULL,
PRIMARY KEY (aid)
);
CREATE TABLE users
(
uid varchar(12) NOT NULL,
pwd char(60) NOT NULL,
uname varchar(16) NOT NULL,
email varchar(32),
regDate datetime DEFAULT CURRENT_DATE,
isDeleted int DEFAULT 0,
PRIMARY KEY (uid)
);
'SQL_MySQL&Heidi' 카테고리의 다른 글
2024.01.24 Heidi SQL(3) (0) | 2024.02.19 |
---|---|
2024.01.23 HeidiSQL(4) (1) | 2024.02.18 |
2024.01.21 Heidi SQL(1) (0) | 2024.02.15 |