0820 SeSAC(새싹) 3기 8일차

육은별·2021년 8월 20일
0

SeSAC(새싹)

목록 보기
8/31

https://uncovered-nutmeg-b8e.notion.site/SQL-26c9cc5a40e14decb20f4dc72cbb194d


📚

데이터베이스란? 데이터를 저장하는 곳

DBMS (Database Management System) : mysql
-> 데이터베이스 내 데이터를 접근하고 관리하는 시스템

mySQL

-> mysql -u root (접속)


<데이터베이스 용어>
테이블 : 데이터 요소들의 집합 -> 하나의 데이터베이스에 여러개의 테이블이 있을 수 있다.
컬럼 : 테이블의 열

SQL (Structured Query Language)

1.데이터베이스를 만드는 SQL문
CREATE DATABASE 이름 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

2.데이터베이스를 보기
show databases;

3.데이터베이스 삭제
DROP DATABASE 이름;

=> 테이블 삭제 drop table 테이블명;

4.데이터베이스 이용
USE 이름; ==> 데이터베이스 안으로 들어온 것.

5.테이블 만들기
CREATE TABLE 테이블명(
이름(컬럼명1) 데이터타입,
나이(컬럼명2) 데이터타입,

);

CREATE TABLE member(
이름 varchar(5) not null,
나이 int(3) not null,

)

=> eunum('a','b') a와 b중 하나의 값만 넣을 수 있다.

6.테이블 구성 보기
desc 테이블명;

=> 테이블 구성 '요소' 보기 => select * from member;

7.테이블 구성 요소 관리
CRUD( create read update delete )

1) c - insert (삽입)
INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES (값1,값2);
INSERT INTO member (id, name, birthday) VALUES ('kim', '홍길동', '2021-08-20');

2) u - update
UPDATE 테이블명 SET 컬럼1=값1, (컬럼2=값2) WHERE 컬럼2=조건2;
#컬럼2가 조건2인 데이터의 컬럼1을 값1로 변경한다.

UPDATE member SET name='김미미' WHERE ID='kim';

=> 조건 거는 법 where문 연산자
: WHERE 컬럼명=값

=같다
!= 같지 않다
<> 같지 않다
IN(10,21,40) 이 숫자 안에 있는거를 조건으로
BETWEEN ~ AND ~ 사이
(AGE >= 40 AND AGE <50
AGE AGE BTEWEEN 40 AND 50;)

+검색조건
and
or
not
in

+패턴(LIKE) %_ (1개의 단일문자)
SELECT ~~ FROM 테이블명 WHERE 컬럼 LIKE '김%' #김으로 시작하는건 다 나옴
SELECT * FROM member WHERE name LIKE '%정%' #정이 들어가면 다 나옴

SELECT * FROM member WHERE name LIKE '정_' #정리 정인

3) d - delete
DELETE FROM 테이블명 WHERE 컬럼1=조건1;
DELETE FROM 테이블명;

4) r -select
테이블 구성 '요소' 보기 => select * from member; => 이건 다 보는거
SELECT name, birthday FROM member;

=> 정렬
SELECT * FROM member ORDER BY name ASC; //오름차순
DESC; //내림차순

*가 컬럼이 들어간다.


파일시스템의 단점
1. 데이터 중복
2. 데이터 불일치


#SELECT > FROM > WHERE > ORDER BY > LIMIT (숫자 제한)

SELECT * FROM member ORDER BY name ASC LIMIT 100;


실습

1)

CREATE TABLE sql_practice(id varchar(10) not null, pw varchar(20) not null, name varchar(5) not null, gender enum('female','male') default 'female', birthday date not null);

1.insert문제
hong1234, 8o4bkg, 홍길동, male, 1990-01-31
sexysung, 87awjkdf, 성춘향, female, 1992-03-31
power70, qxur8sda, 변사또, male, 1970-05-02
hanjo, jk48fn4, 한조, male, 1984-10-18
widowmaker, 38ewifh3, 위도우, female, 1986-06-27
dvadva, k3f3ah, 송하나, female, 1994-06-03
jungkrat, 4ifha7f, 정크랫, male, 1975-11-11

INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('hong1234','8o4bkg','홍길동','male','1990-01-31');
INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('sexysung','87awjkdf','성춘향','female','1992-03-31');
 INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('power70','qxur8sda','변사또','male','1970-05-02');
 INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('hanjo', 'jk48fn4','한조','male','1987-10-18');
 INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('widowmaker','38ewifh3','위도우','female','1986-06-03');
INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('davdav','k3f3ah','송하나','female','1994-06-03');
INSERT INTO sql_practice (id,pw,name,gender,birthday) VALUES ('jungkrat','4ifha7f','정크랫','male','1975-11-11');



select * from sql_practice;                                              +------------+----------+-----------+--------+------------+
| id         | pw       | name      | gender | birthday   |
+------------+----------+-----------+--------+------------+
| hong1234   | 8o4bkg   | 홍길동    | male   | 1990-01-31 |
| sexysung   | 87awjkdf | 성춘향    | female | 1992-03-31 |
| power70    | qxur8sda | 변사또    | male   | 1970-05-02 |
| hanjo      | jk48fn4  | 한조      | male   | 1987-10-18 |
| widowmaker | 38ewifh3 | 위도우    | female | 1986-06-03 |
| davdav     | k3f3ah   | 송하나    | female | 1994-06-03 |
| jungkrat   | 4ifha7f  | 정크랫    | male   | 1975-11-11 |
+------------+----------+-----------+--------+------------+

2.모든 회원목록을 가져오되, birthday 컬럼의 값을 기준으로 오름차순 정렬하여 가져오세요.

 SELECT * from sql_practice ORDER BY birthday ASC;
+------------+----------+-----------+--------+------------+
| id         | pw       | name      | gender | birthday   |
+------------+----------+-----------+--------+------------+
| power70    | qxur8sda | 변사또    | male   | 1970-05-02 |
| jungkrat   | 4ifha7f  | 정크랫    | male   | 1975-11-11 |
| widowmaker | 38ewifh3 | 위도우    | female | 1986-06-03 |
| hanjo      | jk48fn4  | 한조      | male   | 1987-10-18 |
| hong1234   | 8o4bkg   | 홍길동    | male   | 1990-01-31 |
| sexysung   | 87awjkdf | 성춘향    | female | 1992-03-31 |
| davdav     | k3f3ah   | 송하나    | female | 1994-06-03 |
+------------+----------+-----------+--------+------------+
  1. gender컬럼의 값이 "male"인 회원목록을 가져오되, birthday컬럼의 값을 기준으로 오름차순 정렬하여 가져오세요.
SELECT * FROM  sql_practice WHERE gender='male' ORDER BY birthday ASC;
+----------+----------+-----------+--------+------------+
| id       | pw       | name      | gender | birthday   |
+----------+----------+-----------+--------+------------+
| power70  | qxur8sda | 변사또    | male   | 1970-05-02 |
| jungkrat | 4ifha7f  | 정크랫    | male   | 1975-11-11 |
| hanjo    | jk48fn4  | 한조      | male   | 1987-10-18 |
| hong1234 | 8o4bkg   | 홍길동    | male   | 1990-01-31 |
+----------+----------+-----------+--------+------------+
  1. birthday컬럼의 값이 199X-XX-XX 인 회원목록을 가져오세요.
SELECT * FROM sql_practice WHERE birthday LIKE '199%-%%-%%';
+----------+----------+-----------+--------+------------+
| id       | pw       | name      | gender | birthday   |
+----------+----------+-----------+--------+------------+
| hong1234 | 8o4bkg   | 홍길동    | male   | 1990-01-31 |
| sexysung | 87awjkdf | 성춘향    | female | 1992-03-31 |
| davdav   | k3f3ah   | 송하나    | female | 1994-06-03 |
+----------+----------+-----------+--------+------------+

5.birthday컬럼의 값이 xxxx-06-xx인 회원목록을 가져오되, birthday의 값을 기준으로 오름차순 정렬하여 가져오세요.

SELECT * FROM sql_practice WHERE birthday LIKE '%%%%-06-%%' ORDER BY birthday ASC;
+------------+----------+-----------+--------+------------+
| id         | pw       | name      | gender | birthday   |
+------------+----------+-----------+--------+------------+
| widowmaker | 38ewifh3 | 위도우    | female | 1986-06-03 |
| davdav     | k3f3ah   | 송하나    | female | 1994-06-03 |
+------------+----------+-----------+--------+------------+

6.gender컬럼의 값이 'male'이고 birthday 컬럼의 값이 199x-xx-xx인 회원목록을 가져오세요.

SELECT * FROM sql_practice WHERE gender='male' and birthday LIKE '199%-%%-%%';
+----------+--------+-----------+--------+------------+
| id       | pw     | name      | gender | birthday   |
+----------+--------+-----------+--------+------------+
| hong1234 | 8o4bkg | 홍길동    | male   | 1990-01-31 |
+----------+--------+-----------+--------+------------+

7.모든 회원목록 중에서 birthday 컬럼의 값을 기준으로 오름차순 정렬하여 가져오되 처음 3개의 레코드만 가져오세요.

SELECT * FROM sql_practice ORDER BY birthday ASC LIMIT 3;
+------------+----------+-----------+--------+------------+
| id         | pw       | name      | gender | birthday   |
+------------+----------+-----------+--------+------------+
| power70    | qxur8sda | 변사또    | male   | 1970-05-02 |
| jungkrat   | 4ifha7f  | 정크랫    | male   | 1975-11-11 |
| widowmaker | 38ewifh3 | 위도우    | female | 1986-06-03 |
+------------+----------+-----------+--------+------------+

8.gender컬럼의 값이 female이거나 birthday 컬럽의 값이 199x-xx-xx인 회원목록을 가져오세요.

SELECT * FROM sql_practice WHERE gender='female' or birthday LIKE '199%-%%-%%';
+------------+----------+-----------+--------+------------+
| id         | pw       | name      | gender | birthday   |
+------------+----------+-----------+--------+------------+
| hong1234   | 8o4bkg   | 홍길동    | male   | 1990-01-31 |
| sexysung   | 87awjkdf | 성춘향    | female | 1992-03-31 |
| widowmaker | 38ewifh3 | 위도우    | female | 1986-06-03 |
| davdav     | k3f3ah   | 송하나    | female | 1994-06-03 |
+------------+----------+-----------+--------+------------+

9.id컬럼의 값이 hong1234인 레코드의 pw컬럼의 값을 12345678로 변경하세요.

UPDATE sql_practice SET pw='12345678' WHERE id='hong1234';
 
Query OK, 1 row affected (0.00 sec)

 select * from sql_practice where id='hong1234';
+----------+----------+-----------+--------+------------+
| id       | pw       | name      | gender | birthday   |
+----------+----------+-----------+--------+------------+
| hong1234 | 12345678 | 홍길동    | male   | 1990-01-31 |
+----------+----------+-----------+--------+------------+
  1. id컬럼의 값이 "jungkrat"인 레코드를 삭제하세요.
mysql> DELETE FROM sql_practice WHERE id='jungkrat';
Query OK, 1 row affected (0.02 sec)

mysql> select * from sql_practice;
+------------+----------+-----------+--------+------------+
| id         | pw       | name      | gender | birthday   |
+------------+----------+-----------+--------+------------+
| hong1234   | 12345678 | 홍길동    | male   | 1990-01-31 |
| sexysung   | 87awjkdf | 성춘향    | female | 1992-03-31 |
| power70    | qxur8sda | 변사또    | male   | 1970-05-02 |
| hanjo      | jk48fn4  | 한조      | male   | 1987-10-18 |
| widowmaker | 38ewifh3 | 위도우    | female | 1986-06-03 |
| davdav     | k3f3ah   | 송하나    | female | 1994-06-03 |
+------------+----------+-----------+--------+------------+

ORM의 역할 : SQL을 직접 작성하지 않아도 데이터베이스로 접근해 CRUD(조회/추가/수정/삭제)가 가능하게 해준다.

class User(models.Model): # 여기서 모델의 이름은 User이다.
	GENDERS = ( ('M','남성(Man)'),('W','여성(Woman)') )
	userid=models.CharField(max_length=64, verbose_name='아이디')
	username=models.CharField(max_length=64, verbose_name='사용자명')
	password=models.CharField(max_length=64, verbose_name='비밀번호')
	gender=models.CharField(max_length=1, verbose_name='성별', choices=GENDERS)
	registered=models.DateTimeField(auto_now_add=True, verbose_name='등록')
    
    class User(models.Model):
    userid = models.CharField(max_length=64, verbose_name='아이디')
    #CharField는 문자열 필드
    #max_length 최대 길이, 길이 제한
    #verbose_name은 별칭같은 것
    username = models.CharField(max_length=64, verbose_name='사용자명')
    registerd = models.DateTimeField(auto_now_add=True, verbose_name='등록')
    #auto_now_add 현재 시간을 자동으로 넣겠다.

    #enum('M', 'W') M 뒤에 남성은 관리자페이지에서 볼 수 있는 별칭같은 것
    GENDERS = (('M', '남성(Mam)'), ('W', '여성(Woman)'))
    gender.models.CharField(max_length=1, verbose_name='성별', choices=GENDERS)
    

장고 관리자
root
qa2213886*


model.py 수정할 때마다 마이그레이션 및 마이그레이트 계속 해야되나요?
-> 안전빵으로..
python3 manage.py makemigrations
python3 manage.py migrate

profile
Front-end Engineer, Web Developer & UX/UI Design

0개의 댓글

관련 채용 정보