[zerobase_데이터취업스쿨] SQL_CH3_03~7_11_DML명령어, 비교연산자(>,<,<>,=,!=), 논리연산자(AND, OR, NOT, BETWEEN)

DONGYOON KIM·2024년 1월 12일

SQL

목록 보기
2/14

CH3_03: TABLE 변경

TABLE 이름 변경해보기

mysql> ALTER TABLE MYTABLE RENAME PERSON;
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW TABLES;
+--------------------+
| Tables_in_zerobase |
+--------------------+
| person             |
+--------------------+
1 row in set (0.00 sec)

TABLE에 칼럼 추가하기

mysql> ALTER TABLE PERSON ADD COLUMN AGEE DOUBLE;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGEE  | double      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

TABLE의 칼럼의 데이터형 변경하기

mysql> ALTER TABLE PERSON MODIFY COLUMN AGEE INT;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGEE  | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

TABLE의 칼럼의 이름과 데이터형을 모두 변경

mysql> ALTER TABLE PERSON CHANGE COLUMN AGEE AGE INT;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

TABLE의 칼럼 삭제하기

mysql> ALTER TABLE PERSON DROP COLUMN AGE;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

TABLE 삭제하기

mysql> DROP TABLE PERSON;
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW TABLES;
Empty set (0.00 sec)

CH3_04: TABLE 변경 실습

TABLE 이름 변경

mysql> ALTER TABLE MYTABLE RENAME PERSON;
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW TABLES;
+--------------------+
| Tables_in_zerobase |
+--------------------+
| person             |
+--------------------+
1 row in set (0.00 sec)

TABLE에 칼럼 추가

mysql> ALTER TABLE PERSON ADD COLUMN AGEE DOUBLE;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGEE  | double      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

TESTDB데이터 베이스에 있는 ANIMAL 테이블에 AGE(INT)칼럼 추가

mysql> ALTER TABLE ANIMAL ADD COLUMN AGE INT;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ANIMAL;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

ANIMAL 테이블에 OLD칼럼 추가하고 AGE 칼럼을 삭제하기

mysql> ALTER TABLE ANIMAL ADD COLUMN OLD INT;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ANIMAL;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
| OLD   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE ANIMAL DROP COLUMN AGE;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ANIMAL;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| OLD   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

ANIMAL 테이블에 OLD(INT)의 칼럼이름과 데이터형을 SEX(CHAR)로 변경하고 확인

mysql> ALTER TABLE ANIMAL CHANGE COLUMN OLD SEX CHAR;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC ANIMAL;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| SEX   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

CH4_01: DML(데이터조작어) 공부위한 실습환경 생성

PERSON 테이블 생성

mysql> CREATE TABLE PERSON(
    -> ID INT, NAME VARCHAR(16), AGE INT, SEX CHAR);
Query OK, 0 rows affected (0.03 sec)

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
| SEX   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

INSERT 명령어를 통해 ID가 1, 이름이 이효리 나이가 43, 성별이 F인 데이터 입력

  • INSERT INTO TABLENAME (COLUMN1, COLUMN2…) VALUES (1, ‘이효리’, 43, ‘F’)
mysql> INSERT INTO PERSON (ID, NAME, AGE, SEX)
    -> VALUES(1, '이효리', 43, 'F');
Query OK, 1 row affected (0.01 sec)

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
| SEX   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
+------+--------+------+------+
1 row in set (0.00 sec)

INSERT 를 사용해 테이블의 모든 칼럼에 값추가하려면 칼럼이름들을 안써도 됨

mysql> INSERT INTO PERSON
    -> VALUES(2, '이상순', 48, 'M');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
|    2 | 이상순 |   48 | M    |
+------+--------+------+------+
2 rows in set (0.00 sec)

CH4_02: DML공부위한 실습환경 생성 실습

내이름을 PERSON 테이블에 추가해보기

내 나이는 실제랑 다름

mysql> INSERT INTO PERSON
    -> VALUES(3, '김동윤', 20, 'M');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
|    2 | 이상순 |   48 | M    |
|    3 | 김동윤 |   20 | M    |
+------+--------+------+------+
3 rows in set (0.00 sec)

CH4_03: SELECT, WHERE 문 공부

PERSON 테이블 내의 이름, 나이 ,성별 조회

mysql> SELECT ID, NAME, SEX FROM PERSON;
+------+--------+------+
| ID   | NAME   | SEX  |
+------+--------+------+
|    1 | 이효리 | F    |
|    2 | 이상순 | M    |
|    3 | 김동윤 | M    |
+------+--------+------+
3 rows in set (0.00 sec)

PERSON 테이블에서 성별이 여자인 데이터 조회

mysql> SELECT * FROM PERSON WHERE SEX = 'F';
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
+------+--------+------+------+
1 row in set (0.00 sec)

CH4_04 SELECT, WHERE 실습

PERSON 테이블에 유재석과 이미주 추가하고 NAME, SEX, AGE 칼럼만 조회하기

mysql> INSERT INTO PERSON
    -> VALUES(4,'유재석', 50, 'M');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO PERSON
    -> VALUES(5,
    -> '이미주', 20, 'F');
Query OK, 1 row affected (0.01 sec)

mysql> DESC PERSON;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int         | YES  |     | NULL    |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
| AGE   | int         | YES  |     | NULL    |       |
| SEX   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> SELECT NAME, AGE, SEX FROM PERSON;
+--------+------+------+
| NAME   | AGE  | SEX  |
+--------+------+------+
| 이효리 |   43 | F    |
| 이상순 |   48 | M    |
| 김동윤 |   20 | M    |
| 유재석 |   50 | M    |
| 이미주 |   20 | F    |
+--------+------+------+
5 rows in set (0.00 sec)

WHERE로 조회해보기 성별이 여자인 데이터만 조회하기

mysql> SELECT * FROM PERSON WHERE SEX = 'F';
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   43 | F    |
|    5 | 이미주 |   20 | F    |
+------+--------+------+------+
2 rows in set (0.00 sec)

PERSON테이블에서 나이가 50세인 데이터만 조회하기

mysql> SELECT * FROM PERSON WHERE AGE = 50;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    4 | 유재석 |   50 | M    |
+------+--------+------+------+
1 row in set (0.00 sec)

CH4_05 UPDATE, DELETE 명령어 실습

UPDATE TABLENAME SET COL1 = VAL1, COL2=VAL2 WHERE 조건

UPDATE 사용하여 이효리 나이를 23세로 수정해보기

mysql> UPDATE PERSON SET AGE=23 WHERE NAME='이효리';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

DELETE 사용하여 이상순 데이터 삭제

mysql> DELETE FROM PERSON WHERE NAME='이상순';
Query OK, 1 row affected (0.01 sec)

CH4_06 UPDATE, DELETE 실습

PERSON 테이블에서 ID가 3번인 데이터 이름을 이미주로 수정 하기

mysql> UPDATE PERSON SET NAME='이미주' WHERE ID=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    1 | 이효리 |   23 | F    |
|    3 | 이미주 |   20 | M    |
|    4 | 유재석 |   50 | M    |
|    5 | 이미주 |   20 | F    |
+------+--------+------+------+
4 rows in set (0.00 sec)

성별이 여자인 데이터 삭제

mysql> DELETE FROM PERSON WHERE SEX='F';
Query OK, 2 rows affected (0.01 sec)

mysql> SELECT * FROM PERSON;
+------+--------+------+------+
| ID   | NAME   | AGE  | SEX  |
+------+--------+------+------+
|    3 | 이미주 |   20 | M    |
|    4 | 유재석 |   50 | M    |
+------+--------+------+------+
2 rows in set (0.00 sec)

CH5_01~: ORDER BY 공부하기 위해 실습환경 만들기

CELEB 테이블 생성 하기

  • AUTO_INCREMENT는 ID가 자동으로 증가하는것
mysql> CREATE TABLE CELEB(
    -> ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> NAME VARCHAR(32) NOT NULL
    -> DEFAULT '',
    -> BIRTHDAY DATE, AGE INT, SEX CHAR(1), JOB_TITLE VARCHAR(32),
    -> AGENCY VARCHAR(32));
Query OK, 0 rows affected (0.05 sec)

mysql> DESC CELEB;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| ID        | int         | NO   | PRI | NULL    | auto_increment |
| NAME      | varchar(32) | NO   |     |         |                |
| BIRTHDAY  | date        | YES  |     | NULL    |                |
| AGE       | int         | YES  |     | NULL    |                |
| SEX       | char(1)     | YES  |     | NULL    |                |
| JOB_TITLE | varchar(32) | YES  |     | NULL    |                |
| AGENCY    | varchar(32) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

CELEB 테이블에 데이터 추가하기

mysql> INSERT INTO CELEB
    -> VALUES(1, '아이유', '1993-05-16', 29, 'F', '가수, 탤런트', 'EDAM엔터테이먼트');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO CELEB
    -> VALUES(2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO CELEB
    -> VALUES(3, '송강', '1994-04-23', 28, 'F', '가수', '나무엑터스');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO CELEB
    -> VALUES(4, '강동원', '1981-01-18', 41, 'M', '영화배우, 탤런트', 'YG엔터테이먼트');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO CELEB
    -> VALUES(5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO CELEB
    -> VALUES(6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO CELEB
    -> VALUES(7, '이수현', '1999-05-04', 23, 'F', '가수','YG엔터테이먼트');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM CELEB;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테이먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
|  3 | 송강   | 1994-04-23 |   28 | F    | 가수             | 나무엑터스       |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트   |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
7 rows in set (0.00 sec)

CH5_03~: ORDER BY

주의점: 오타나서 송강의 성별을 F로 입력해버렸다.

CELEB 테이블에서 이름, 생년월일, 소속사 데이터를 소속사 순으로 정렬하여 조회

mysql> SELECT NAME, BIRTHDAY, SEX, AGENCY FROM CELEB
    -> ORDER BY AGENCY ASC;
+--------+------------+------+------------------+
| NAME   | BIRTHDAY   | SEX  | AGENCY           |
+--------+------------+------+------------------+
| 아이유 | 1993-05-16 | F    | EDAM엔터테이먼트 |
| 강동원 | 1981-01-18 | M    | YG엔터테이먼트   |
| 차승원 | 1970-06-07 | M    | YG엔터테이먼트   |
| 이수현 | 1999-05-04 | F    | YG엔터테이먼트   |
| 송강   | 1994-04-23 | F    | 나무엑터스       |
| 유재석 | 1972-08-14 | M    | 안테나           |
| 이미주 | 1994-09-23 | F    | 울림엔터테이먼트 |
+--------+------------+------+------------------+
7 rows in set (0.00 sec)

CELEB 테이블에서 전체 칼럼을 소속사, 이름 순으로 정렬하고 조회하기

mysql> SELECT * FROM CELEB
    -> ORDER BY AGENCY ASC, NAME ASC;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테이먼트 |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트   |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  3 | 송강   | 1994-04-23 |   28 | F    | 가수             | 나무엑터스       |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
+----+--------+------------+------+------+------------------+------------------+

CELEB 테이블에서 이름, 나이, 직업, 소속사 데이터를 소속사 순, 나이 역순으로 정렬후 조회

  • ORDER BY AGENCY, AGE DESC; 인데 AGENCY를 우선적으로 오름차순으로 정렬하고 같은 AGENCY의 값들에 대해서 AGE의 역순으로 정렬된다
mysql> SELECT NAME, AGE, JOB_TITLE, AGENCY FROM CELEB
    -> ORDER BY AGENCY ASC, AGE DESC;
+--------+------+------------------+------------------+
| NAME   | AGE  | JOB_TITLE        | AGENCY           |
+--------+------+------------------+------------------+
| 아이유 |   29 | 가수, 탤런트     | EDAM엔터테이먼트 |
| 차승원 |   48 | 영화배우, 모델   | YG엔터테이먼트   |
| 강동원 |   41 | 영화배우, 탤런트 | YG엔터테이먼트   |
| 이수현 |   23 | 가수             | YG엔터테이먼트   |
| 송강   |   28 | 가수             | 나무엑터스       |
| 유재석 |   50 | MC, 개그맨       | 안테나           |
| 이미주 |   28 | 가수             | 울림엔터테이먼트 |
+--------+------+------------------+------------------+
7 rows in set (0.00 sec)

CH6_01: 비교연산자 실습환경 생성

나이가 30세 이상인 데이터를 나이 역순으로 정렬 후 조회 하기

mysql> SELECT NAME, AGE FROM CELEB
    -> WHERE AGE >= 30
    -> ORDER BY AGE DESC;
+--------+------+
| NAME   | AGE  |
+--------+------+
| 유재석 |   50 |
| 차승원 |   48 |
| 강동원 |   41 |
+--------+------+
3 rows in set (0.00 sec)

나이가 29세와 같지않은 데이터를 ID의 역순으로 정렬하고 ID,NAME,AGE,JOB_TITLE칼럼을 조회하기

mysql> SELECT ID, NAME, AGE, JOB_TITLE FROM CELEB
    -> WHERE ID <> 29
    -> ORDER BY ID DESC;
+----+--------+------+------------------+
| ID | NAME   | AGE  | JOB_TITLE        |
+----+--------+------+------------------+
|  7 | 이수현 |   23 | 가수             |
|  6 | 차승원 |   48 | 영화배우, 모델   |
|  5 | 유재석 |   50 | MC, 개그맨       |
|  4 | 강동원 |   41 | 영화배우, 탤런트 |
|  3 | 송강   |   28 | 탤런트           |
|  2 | 이미주 |   28 | 가수             |
|  1 | 아이유 |   29 | 가수, 탤런트     |
+----+--------+------+------------------+
7 rows in set (0.00 sec)

CH6_02 비교연산자 실습

CELEB 테이블에서 나이가 30세 이하인 데이터의 이름과 나이를 나이 오름차순 으로 조회

mysql> SELECT NAME, AGE FROM CELEB
    -> WHERE AGE <= 30
    -> ORDER BY AGE;
+--------+------+
| NAME   | AGE  |
+--------+------+
| 이수현 |   23 |
| 이미주 |   28 |
| 송강   |   28 |
| 아이유 |   29 |
+--------+------+
4 rows in set (0.00 sec)

CELEB테이블에서 이름이 아이유인 데이터의 이름과 나이 성별 직업 소속사 조회하기

mysql> SELECT NAME, AGE, SEX, JOB_TITLE, AGENCY FROM CELEB
    -> WHERE NAME = '아이유'
    -> ;
+--------+------+------+--------------+------------------+
| NAME   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+--------+------+------+--------------+------------------+
| 아이유 |   29 | F    | 가수, 탤런트 | EDAM엔터테이먼트 |
+--------+------+------+--------------+------------------+
1 row in set (0.00 sec)

CELEB 테이블에서 소속사가 YG엔터테이먼트가 아닌 데이터의 이름, 직업, 소속사를 소속사 순으로 정렬 후 조회

mysql> SELECT NAME, JOB_TITLE, AGENCY FROM CELEB
    -> WHERE AGENCY <>
    -> 'YG엔터테이먼트'
    -> ORDER BY AGENCY;
+--------+--------------+------------------+
| NAME   | JOB_TITLE    | AGENCY           |
+--------+--------------+------------------+
| 아이유 | 가수, 탤런트 | EDAM엔터테이먼트 |
| 송강   | 탤런트       | 나무엑터스       |
| 유재석 | MC, 개그맨   | 안테나           |
| 이미주 | 가수         | 울림엔터테이먼트 |
+--------+--------------+------------------+
4 rows in set (0.00 sec)

CELEB 테이블에서 성별이 남자인 데이터의 이름, 성별, 소속사 정보를 나이의 역순으로 정렬한 뒤 소속사 순으로 정렬하여 조회하기

mysql> SELECT NAME, SEX, AGENCY FROM CELEB
    -> WHERE SEX = 'M'
    -> ORDER BY AGE DESC, AGENCY ASC;
+--------+------+----------------+
| NAME   | SEX  | AGENCY         |
+--------+------+----------------+
| 유재석 | M    | 안테나         |
| 차승원 | M    | YG엔터테이먼트 |
| 강동원 | M    | YG엔터테이먼트 |
+--------+------+----------------+
3 rows in set (0.00 sec)

CELEB 테이블에서 나이가 50세 미만인 데이터의 성별, 소속사 ,이름, 나이를 성별 순으로 정렬한 뒤 소속사 역순으로 정렬하고 마지막으로 이름 순으로 정렬하여 조회하기

mysql> SELECT SEX, AGENCY, NAME, AGE FROM CELEB
    -> WHERE AGE < 50
    -> ORDER BY SEX, AGENCY DESC, NAME;
+------+------------------+--------+------+
| SEX  | AGENCY           | NAME   | AGE  |
+------+------------------+--------+------+
| F    | 울림엔터테이먼트 | 이미주 |   28 |
| F    | 나무엑터스       | 송강   |   28 |
| F    | YG엔터테이먼트   | 이수현 |   23 |
| F    | EDAM엔터테이먼트 | 아이유 |   29 |
| M    | YG엔터테이먼트   | 강동원 |   41 |
| M    | YG엔터테이먼트   | 차승원 |   48 |
+------+------------------+--------+------+
6 rows in set (0.00 sec)

CH7_01 AND 실습

AND 연산자: 나이가 29세이고 성별이 여성인 데이터 검색

mysql> SELECT * FROM CELEB
    -> WHERE AGE = 29 AND SEX = 'F';
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테이먼트 |
+----+--------+------------+------+------+--------------+------------------+
1 row in set (0.00 sec)

AND 연산자: 성별이 남자이고 나이가 40세보다 큰 데이터를 이름의 역순으로 정렬하여 검색

mysql> SELECT * FROM CELEB
    -> WHERE SEX = 'M' AND AGE > 40
    -> ORDER BY NAME DESC;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
+----+--------+------------+------+------+------------------+----------------+
3 rows in set (0.00 sec)

CH7_03 AND 실습 이어서

CELEB 테이블에서 성별이 남자이고 소속사가 YG엔터테이먼트인 데이터를 소속사 순으로 정렬하여 조회

mysql> SELECT * FROM CELEB
    -> WHERE SEX = 'M' AND AGENCY = 'YG엔터테이먼트'
    -> ORDER BY AGENCY;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
+----+--------+------------+------+------+------------------+----------------+
2 rows in set (0.00 sec)

CELEB 테이블에서 나이가 30세 이상이고 성별이 남자인 데이터 나이순으로 정렬하여 조회하기

mysql> SELECT * FROM CELEB
    -> WHERE AGE >= 30 AND SEX = 'M'
    -> ORDER BY AGE;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
+----+--------+------------+------+------+------------------+----------------+
3 rows in set (0.00 sec)

CH7_04~05: OR연산자

나이가 25세보다 작거나 30세보다 큰 데이터 나이 역순으로 조회

mysql> SELECT * FROM CELEB
    -> WHERE AGE < 25 OR AGE > 30
    -> ORDER BY AGE DESC;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트 |
+----+--------+------------+------+------+------------------+----------------+
4 rows in set (0.00 sec)

나이가 29세보다 작고 여자이거나 나이가 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색

  • 여기서 (AGE < 29 AND SEX = 'F') OR (AGE > 30 AND SEX = 'M') 처럼 괄호를 굳이 안해줘도 되는데 왜냐하면 비교연산자의 우선순위에서 AND가 OR보다 높기 때문이다
mysql> SELECT * FROM CELEB
    -> WHERE AGE < 29 AND SEX = 'F' OR
    -> AGE > 30 AND SEX = 'M'
    -> ORDER BY AGE ASC, SEX ASC;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
|  3 | 송강   | 1994-04-23 |   28 | F    | 탤런트           | 나무엑터스       |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
+----+--------+------------+------+------+------------------+------------------+
6 rows in set (0.00 sec)

YG엔터테이먼트 소속이거나 나무엑터스 소속 연예인 중, 나이가 30세보다 작은 데이터를 검색

mysql> SELECT * FROM CELEB
    -> WHERE (AGENCY = 'YG엔터테이먼트' OR AGENCY = '나무엑터스') AND AGE < 30;
+----+--------+------------+------+------+-----------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE | AGENCY         |
+----+--------+------------+------+------+-----------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | F    | 탤런트    | 나무엑터스     |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테이먼트 |
+----+--------+------------+------+------+-----------+----------------+
2 rows in set (0.00 sec)

CH7_06 OR 문제풀이 [주의사항: 여기서 송강의 성별은 왜인지는 모르겠으나(아마 CELEB 테이블 생성시에 오타친듯) F로 설정되어있다 강의에서는 M으로 설정되어있음]

CELEB 테이블에서 소속사가 YG엔터테이먼트 이거나 안테나인 데이터를 소속사 순으로 정렬하기

mysql> SELECT * FROM CELEB
    -> WHERE AGENCY = 'YG엔터테이먼트' OR AGENCY = '안테나'
    -> ORDER BY AGENCY;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
+----+--------+------------+------+------+------------------+----------------+
4 rows in set (0.00 sec)

CELEB 테이블에서 남자이면서 YG엔터테이먼트 소속이거나 나이가 30세보다 작은 데이터를 나이, 소속사 순으로 정렬하여 검색하기

mysql> SELECT * FROM CELEB
    -> WHERE SEX = 'M' AND AGENCY = 'YG엔터테이먼트' OR AGE < 30
    -> ORDER BY AGE, AGENCY;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
|  3 | 송강   | 1994-04-23 |   28 | F    | 탤런트           | 나무엑터스       |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테이먼트 |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트   |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
6 rows in set (0.00 sec)

CELEB 테이블에서 아이디가 홀수이면서 성별이 남자거나, 아이디가 짝수이면서 소속사가 YG엔터테이먼트인 데이터를 나이순으로 정렬하여 검색하기

mysql> SELECT * FROM CELEB
    -> WHERE ID%2 <> 0 AND SEX = 'M' OR ID%2 = 0 AND AGENCY = 'YG엔터테이먼트'
    -> ORDER BY AGE;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
+----+--------+------------+------+------+------------------+----------------+
3 rows in set (0.00 sec)

CH7_07~8: NOT연산자 이론[여기부터 다시 송강 성별을 M으로 수정하였다]

소속사가 YG엔터테이먼트이면서 남자가 아니거나 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색

mysql> SELECT * FROM CELEB
    -> WHERE AGENCY = 'YG엔터테이먼트' AND NOT SEX ='M' OR
    -> JOB_TITLE = '가수' AND NOT AGENCY = 'YG엔터테이먼트';
+----+--------+------------+------+------+-----------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE | AGENCY           |
+----+--------+------------+------+------+-----------+------------------+
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수      | 울림엔터테이먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수      | YG엔터테이먼트   |
+----+--------+------------+------+------+-----------+------------------+
2 rows in set (0.00 sec)

생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색

mysql> SELECT * FROM CELEB
    -> WHERE (BIRTHDAY > 19891231 AND NOT SEX = 'F') OR
    -> (BIRTHDAY <19800101 AND NOT AGENCY = '안테나');
+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트         | 나무엑터스     |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테이먼트 |
+----+--------+------------+------+------+----------------+----------------+
2 rows in set (0.00 sec)

CH7_09: NOT 연산자 문제풀이

CELEB 테이블에서 소속사가 YG엔터테이먼트가 아니고 나이가 40세 이하인 데이터를 이름순으로 정렬하여 조회하기

mysql> SELECT * FROM CELEB
    -> WHERE NOT AGENCY = 'YG엔터테이먼트' AND AGE <= 40
    -> ORDER BY NAME;
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트       | 나무엑터스       |
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테이먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수         | 울림엔터테이먼트 |
+----+--------+------------+------+------+--------------+------------------+
3 rows in set (0.00 sec)

CELEB 테이블에서 성별이 남자가 아니거나 나이가 30세 이상인 데이터를 나이의 역순으로 정렬하여 조회하기

mysql> SELECT * FROM CELEB
    -> WHERE NOT SEX = 'M' OR AGE >= 30
    -> ORDER BY AGE DESC;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나           |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트   |
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테이먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
6 rows in set (0.00 sec)

CELEB 테이블에서 직업이 가수가 아니면서 성별이 여자이거나 나이가 40보다 작지 않으면서 아이디가 홀수인 데이터를 조회하기

mysql> SELECT * FROM CELEB
    -> WHERE (NOT JOB_TITLE = '가수' AND SEX = 'F')
    -> OR (AGE >= 40 AND (ID % 2) <> 0);
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테이먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨   | 안테나           |
+----+--------+------------+------+------+--------------+------------------+
2 rows in set (0.00 sec)

CH7_10: BETWEEN 명령어 이론

**주의: BETWEEN에서 양 끝 값은 이상과 이하이다

생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나, 소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색

mysql> SELECT * FROM CELEB
    -> WHERE (BIRTHDAY NOT BETWEEN 19800101 AND 19951231 AND SEX = 'F') OR
    -> (AGENCY = 'YG엔터테이먼트' AND AGE NOT BETWEEN 20 AND 45);
+----+--------+------------+------+------+----------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE      | AGENCY         |
+----+--------+------------+------+------+----------------+----------------+
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델 | YG엔터테이먼트 |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수           | YG엔터테이먼트 |
+----+--------+------------+------+------+----------------+----------------+
2 rows in set (0.00 sec)

CH7_11: BETWEEN 문제풀이

CELEB 테이블에서 나이가 30세에서 60세 사이이고 성별이 남자인 데이터를 나이순으로 정렬하여 조회하기

mysql> SELECT * FROM CELEB
    -> WHERE (AGE BETWEEN 30 AND 60) AND SEX = 'M'
    -> ORDER BY AGE ASC;
+----+--------+------------+------+------+------------------+----------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY         |
+----+--------+------------+------+------+------------------+----------------+
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트 |
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트 |
|  5 | 유재석 | 1972-08-14 |   50 | M    | MC, 개그맨       | 안테나         |
+----+--------+------------+------+------+------------------+----------------+
3 rows in set (0.00 sec)

CELEB 테이블에서 나이가 30세에서 60세 사이가 아니거나 YG엔터테이먼트 소속인 데이터를 나이의 역순으로 정렬하여 조회하기

mysql> SELECT * FROM CELEB
    -> WHERE (AGE NOT BETWEEN 30 AND 60)
    -> OR AGENCY = 'YG엔터테이먼트'
    -> ORDER BY AGE DESC;
+----+--------+------------+------+------+------------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE        | AGENCY           |
+----+--------+------------+------+------+------------------+------------------+
|  6 | 차승원 | 1970-06-07 |   48 | M    | 영화배우, 모델   | YG엔터테이먼트   |
|  4 | 강동원 | 1981-01-18 |   41 | M    | 영화배우, 탤런트 | YG엔터테이먼트   |
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트     | EDAM엔터테이먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수             | 울림엔터테이먼트 |
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트           | 나무엑터스       |
|  7 | 이수현 | 1999-05-04 |   23 | F    | 가수             | YG엔터테이먼트   |
+----+--------+------------+------+------+------------------+------------------+
6 rows in set (0.00 sec)

CELEB 테이블에서 아이디가 1에서 5사이의 값이면서 성별이 여자이거나 ,아이디가 홀수이면서 성별이 남자이면서 나이가 20세에서 30세 사이인 데이터를 조회하시오

mysql> SELECT * FROM CELEB
    -> WHERE (ID BETWEEN 1 AND 5 AND SEX = 'F')
    -> OR (ID%2 <> 0 AND SEX = 'M' AND (AGE BETWEEN 20 AND 30));
+----+--------+------------+------+------+--------------+------------------+
| ID | NAME   | BIRTHDAY   | AGE  | SEX  | JOB_TITLE    | AGENCY           |
+----+--------+------------+------+------+--------------+------------------+
|  1 | 아이유 | 1993-05-16 |   29 | F    | 가수, 탤런트 | EDAM엔터테이먼트 |
|  2 | 이미주 | 1994-09-23 |   28 | F    | 가수         | 울림엔터테이먼트 |
|  3 | 송강   | 1994-04-23 |   28 | M    | 탤런트       | 나무엑터스       |
+----+--------+------------+------+------+--------------+------------------+
3 rows in set (0.00 sec)

0개의 댓글