02 . Mysql 기초 조작 및 삭제 수정

33433 단어
SQL 소개SQL(Structured Query Language ) SQL 、 、 ,SQL IBM 。
SQL문 4대 분류
SQL    3   :
    DDL            (Create,Alter,Drop,DECLARE)
    DML            (Select,Delete,Update,Insert)
    DCL            (GRANT,REVOKE,COMMIT,ROLLBACK) 
    DQL            (select)

DML(data manipulation language):
             , 4                     
DDL(data definition language):
                   ,    ,                ,          
DCL(Data Control Language):
                           ,     ,  sysadmin,dbcreator,db_owner db_securityadmin         

SQL 문의 고려 사항
# 1.   SQL       ;     ,     \G       .(  use  )
# 2. SQL            (         )
# 3.                \#
# 4.                \c  
# 5.           ,    \q   exit,ctrl+d
# 6.           sql  ,   mysql -e  
# mysql -e "show databases \G"    shell 

# 7.       SQL        help  

#  :help create
#            ,      help  
#  :help create database

MySQL 라이브러리 작업
시스템 자체 데이터베이스
#      
information_schema:      
#    ,      ,                  ,      ,   ,    ,     

performance_schema:     
#                

mysql: 
#    ,             

test:                                  
#    ,       ,Mysql             

sys:                                   
#         ,  DBA          ,                

공통 라이브러리 작업
    # create database      character set = 'utf8' collate=utf8_general_ci;    
    #        :
        # 1 >      ,  ,   ,@,#,$
        # 2 >      
        # 3 >    
        # 4 >         create select
        # 5 >         
        # 6 >   128 
        
    #      
    use      ;
    
    #      
    select database();
    # OR
    status;
    
    #      
    drop database database_name;
#                      :          gb2312 gbk: utf8        
show character set;                         #   Mysql      
show collation;                             #           ,utfs-generic          
create database db character set = 'utf8mb4' collate=utf8_general_ci; 
#                     
show create database db\G;                   #   db       
alter database db character set = latin1     #           

데이터베이스 스토리지 엔진
데이터베이스 하단에 위치하고 하부 구성 요소에 속하며 DBMS는 저장 엔진을 통해 삭제 수정 작업을 하고 서로 다른 저장 엔진은 서로 다른 기능을 가진다.서로 다른 인덱스, 서로 다른 저장 방식 등을 지원하며 mysql 핵심에 속합니다 mysql
mysql> show engines\G;
*************************** 1. row ***************************
      Engine: InnoDB			#    
     Support: DEFAULT			# mysql        
     Comment: Supports transactions, row-level locking, and foreign keys
     			# mysql        
Transactions: YES				#       
          XA: YES				#          
  Savepoints: YES				#           
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
9 rows in set (0.00 sec)

스토리지 엔진
데이터 저장소에 속하는 형식, 서로 다른 저장 엔진의 기능이 같지 않고, 차지하는 공간이 같지 않으며, 읽기 성능이 같지 않으며, 표마다 하나의 저장 엔진에 대응한다.
MyISAM
# MyISAM       
(1) 5.5          , 5.5    lnnoDB  
(2)     ,     ,     ,      ,     
(3)      
(4)            

# MyISAM    
(1)         
(2)             
(3)     。        
(4)         

InnoDB
# InnoDB  
(1)     ,             ,   **     **(              )   , mysql5.5        
(2)     、                   ,          ,   
(3)         ,         
(4)   InnoDB           10MB     ibdata1          5MB     ib_logfile0 ib_logfile1     
ibdata1	      innodb              

# InnoDB    
(1)          ,      	      							
(2)            	    										
(3)             	    ,  					

Memory
# (1) Memory                  ,           
# (2) Memory  hash btree  ,   blob text    
# (3)     Memory      ,                ,      

Mysql에서 흔히 볼 수 있는 데이터 형식
Mysql 데이터베이스 관리 시스템에서 저장 엔진을 통해 표의 유형을 결정할 수 있다. 또한 Mysql 데이터베이스 관리 시스템도 데이터 유형을 제공하여 표에 저장된 데이터의 유형을 결정한다. 수치 유형이 클수록 메모리의 소모가 많고 적당한 데이터 유형은 어느 정도에 데이터베이스의 효율을 높일 수 있다.
Mysql 데이터베이스 관리 시스템에서 제공하는 데이터 형식
# 1.     :       TINYINT  SMALLINT  MEDIUMINT  INT  BIGINT
# 2.      :      FLOAT           (7    )  DOUBLE   (15 )
# 3.      :      CHAR   VARCHAR
# 4.        :   DATE   TIME  DATETIME   TIMESTAMP  YEAR
# 5.     :        ENUM
#6.     :         SET

데이터 형식의 상용 장면
사용자의 나이, 게임을 저장하는 데 사용되는 Level, 경험치 등.기호 있음(기본값)과 기호 없음으로 나뉘어 있음
사용자의 키, 몸무게, 월급 등을 저장하는 데 쓰인다.부동 소수점 유형은 이름 뒤에 덧셈(M, D)을 사용하여 모두 소수점 뒤의 자릿수를 나타내는 M자리 숫자(정수 자리 + 소수 자리)를 나타낼 수 있으며, M과 D는 정밀도와 눈금이라고도 부른다.
사용자의 등록 시간, 온라인 시간, 기사 게시 시간, 직원의 입사 시간 등을 저장할 수 있습니다.date
하이픈을 사용하여 구분 기호로 구분하기 (년 월 일 표시)time
짝퉁을 구분자로 사용하고 따옴표를 붙여야 하거나 구체적인 숫자를 직접 사용해야 한다(시간 표시 분초)year
년과 관련된 시간의 경계선이 있는 것은 1970년이다. 0069 범위 내의 값을 20002069 범위 내로 바꾸고 7099 범위 내의 값을 19701999 이내로 바꾸면 이런 현상이 발생하지 않도록 완전하게 쓰는 것이 가장 좋다.datetime timestamp
현재 날짜와 시간을 포함하는 시간 스탬프를 저장하는 데 사용됩니다
필드에 값이 없거나 비어 있을 때 타임스탬프는 현재 시스템 시간을 타임스탬프로 사용하고datetime는 NULL만 표시합니다.
이미 필드 업데이트가 있을 때datetime 형식에 대응하는 시간은 변하지 않으며,timestamp 형식에 대응하는 시간은 최신 시간으로 업데이트됩니다.
사용자의 이름, 취미, 게시 글 등을 저장하는 데 쓰인다
# 1. char:     ,                 ,       0-255
# 2. varchar:     ,                 ,       0-65535
ENUM SET
# 1.     :      ,          ,       
# 2. set  :    ,              ,       ,  set    64 。

MySQL의 테이블 작업
Mysql 테이블의 기본 관리
MySQL 테이블에는 실제 데이터가 저장됩니다.
표는 대체적으로 표두와 표체로 나눌 수 있는데 한 장의 표는 단지 하나의 표두, 즉 한 줄의 데이터만 있고 이 줄의 데이터의 매 열의 값은 필드가 된다.
표체는 여러 줄의 데이터로 구성될 수 있고 각 줄은 표현하고자 하는 실제 대상을 대표한다.
모든 필드는 하나의 데이터에 그 속성이 있다는 것을 대표한다. 예를 들어 한 학생의 정보를 저장하려면 이름, 나이, 학번 등이 필요하다.
이러한 속성에 대해 당신은 그것들이 서로 다른 유형의 데이터라는 것을 발견할 수 있다. 예를 들어 이름은 일반적인 텍스트, 즉 문자열, 나이는 숫자, 즉 정형이다.
이러한 데이터를 데이터베이스에 저장할 때 유형의 오류가 발생하지 않아 나중에 사용에 영향을 미치지 않도록 하기 위해 표를 만들 때 각 필드에 데이터를 저장할 데이터 유형을 지정해야 한다.
id
name
age
phone
1
youmen
18
13143234323
2
flying
19
12823486853
3
zhou
20
13123345568
4
jian
21
15723427563
Mysql 테이블 작업
테이블(TABLE)의 구조, 데이터 유형, 테이블 간의 링크와 제약 등을 정의하거나 바꾸는 초기화 작업에 사용되는 이들은 대부분 테이블을 만들 때 사용한다.
DDL은 commit이 필요하지 않습니다 (DDL은 모두 은밀하게 제출되며 DDL 문장에 ROLLBACK 명령을 사용할 수 없습니다)
# CREATE        ,        
# ALTER         ,       (    )
# DROP          ,         
# TRUNCATE          (    )
# COMMENT      (         )
# RENAME         (    )
mysql> show tables;
+------------------+
| Tables_in_youmen |
+------------------+
| student          |
| student2         |
+------------------+
2 rows in set (0.00 sec)
desc    ;

# OR
desc   .  ;

delete from       /*         ,    where   */
truncate table     /*         1   */

/*         ,         */
delete from tb1;

/*         ,                   ,         */
delete  from  tb1   where id < 20;
mysql> drop table   ,  ;  
mysql> drop table IF EXISTS student2;        #         ,        ,        
#     / 
delete FROM    [where condtion];
mysql> alter table student2 drop id;
mysql> delete from student2;  
mysql> delete from mysql.user where authentication_string='';  #                   
mysql> delete from student2 where id=2 and name='flying';   #    id=2  name=flying       

테이블 생성
create  table    (
           1      [(  )    ]
           2      [(  )    ]
        ...
)[         ];
  
#   :       ,           ,         ;
#                ,           ,                 ,       。

create table   (
                  ,
                  
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#                          .
# ENGING=InnoDB DEFAULT CHARSET=utf8


#    ,           ,             ,        
create table tb1(
    id int not null,                                                   
    age int not null default 2
)
#     ,null   ,        
not null    #    ,          
null        #   (          )

메인 키
#   ,       ,       ,       

#   :
#             primary key
create table tb1(
    id int   primary key,
    age int null
)
# OR
create table tb1(
    id int not null,
    age int not null,
    primary key(id,age)
)

#   
# 1.         ,         ,        ,     ,        .

#           ,        ,            ,        .

# [constraint    ]	foreign key (       ) references     (     )

#   :                 

# constraint     foreign key (       ) references     (     )
Example1
create table student(
    nid int  auto_increment primary key,
    name varchar(12) not null,
    age int not null,
    phone char(11)
);

create table student2(
    id int auto_increment primary key,
    class_id int,
    foreign key(class_id) REFERENCES student(nid)
);


#        
# 1.                    
# 2.      ,          
# 3.                      
# 4.     
# 5.        innodb     ,    ,         

#                truncate table     delete      

 

#         ,              ,                                 ,          

#                       ,               
#   ,          ,             ,     (          )
create table tb1(
    id int auto_increment primary key,
    age int not null
)

show variables like '%auto_increment_%';
auto_increment_increment | 1    #            
auto_increment_offset    | 1    #        
set auto_increment_increment=2;
create table student(
    id1 int  auto_increment primary key,
    name varchar(12) not null,
    age int not null,
    phone char(11)
);

create table student2(
    id int auto_increment primary key,
    class_id int,
    foreign key(class_id) REFERENCES student(id1)
);

테이블 구조 수정
alter table student1 rename student2;

#   to                
alter table tb10 rename to test1.tb10;
alter table tb10 modify name int(10);

alter table student modify column age varchar(10);
alter table student change age ages int(20);
alter table    add      

#   :
alter table stadent add gender Enum(" ", " ");
alter table stadent add hobby set("girl","car","yacht");
update student set hobby = "girl,car";
alter table    drop column   
alter table    add primary key(  );
alter table students add id int not null auto_increment, add primary key (id);
alter table    drop primary key;
#       ,      

alter table     modify     int, drop primary key;
alter table student2 modify column email varchar(32) unique;
#         ,         。
alter table    modify column id int AUTO_INCREMENT;
#                ,              ,      。

#     :
alter table    add constraint     (  :FK_  _  ) foreign key   (     ) references   (    );

#     :
alter table    drop foreign key     

#   
#                       
#      :
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

#      :
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

테이블 데이터 삽입DML( ) DML ,DML commit. mysql , , commit
#  school.student1
                       
id       name     sex     age
1        tom      male     23       
2        jack     male     21       
3        alice    female   19       

#    
create table student1
(id int,name varchar(50),sex enum('male','female'),age int);


#   : 
#       1.           ,             ,                   ;
#       2.   " "  ,"  " “ ”      
#       3.      :       ,          ,       ,      
#       4.  auto_increment,timestamp       

#   : insert  into    (  1,  2...)  values(     ...)
#         ,       ,         id  ,                ;
mysql> insert into student1 values
     (1,'tom','male',23),
     (2,'jack','male',21),
     (3,'alice','female',19);


# 1.      (    )  
#    :  insert into   (  1,  2,  3..  n) values( 1, 2, 3);  
#    :  insert into     values ( 1, 2, 3.. n);  
# 2.          
#    :  insert into   (  1,  2) values ( 1, 2);  
# 3.              
#    :  insert into    values( 1, 2, 3),( 1, 2, 3.. n),( 1, 2, 3 );  
# 4.        
#    :  insert into  1(  1,  2,  3...  n)  
# select (  1,  2,  3) FROM  2 WHERE ...;

Mysql 데이터베이스 조회
테이블 보기
mysql> show table;   
#           
  
#        
mysql> desc student1;  
mysql> show create table student1;  
  
#             
mysql> select id,name,sex from student1\G;  
  
mysql> select * from student1;   
#           ,         ,             

#     
#             ,    SQL   count()    ~~~~
select count(*) from students;

인스턴스 테이블 생성
#   employee    :
create table employee 
( e_no int(11) not null unique,
  e_name varchar(50) not null, 
  e_gender char(2),
 dept_no int(11) not null,
  e_job varchar(50) not null, 
  e_salary int(11) not null,
  hiredate date not null,primary key (dept_no,e_no)); 
  
#     
insert into employee values
(1001,'SMITH','m',20,'CLERK',800,'2005/11/12'),
(1002,'ALLEN','f',30,'SALESMAN',1600,'2003/5/12'),
(1003,'WARD','f',30,'SALESMAN',1250,'2003/5/12'),
(1004,'JONES','m',20,'MANAGER',2975,'1998/5/18'),
(1005,'MARTIN','m',30,'SALESMAN',1250,'2001/6/12'),
(1006,'BLAKE','f',30,'MANAGER',2850,'1997/2/15'),
(1007,'CLARK','m',10,'MANAGER',2450,'2002/9/12'),
(1008,'SCOTT','m',20,'ANALYSE',3000,'2003/5/12'),
(1009,'KING','f',10,'PRESIDENT',5000,'1995/1/1'),
(1010,'TURNER','f',30,'SALESMAN',1500,'1997/10/12'),
(1011,'ADAMS','m',20,'CLERK',1100,'1999/10/5'),
(1012,'JAMES','f',30,'CLERK',950,'2008/6/15');

#   dept    :
create table dept 
	(d_no int(11) primary key not null unique auto_increment, 
 	d_name varchar(50) not null, 
 	d_location varchar(100));
 	
#     
insert into dept values
(10,'ACCOUNTING','ShangHai'),
(20,'RESEARCH','BeiJing'),
(30,'SALES','ShenZhen'),
(40,'OPERATIONS','FuJian');

단표 조회
# 1.  employee  ,       e_no,e_name e_salary   

mysql>select e_no,e_name,e_salary from employee;
+------+--------+----------+
| e_no | e_name | e_salary |
+------+--------+----------+
| 1007 | CLARK  |     2450 |
| 1009 | KING   |     5000 |
| 1001 | SMITH  |      800 |
| 1004 | JONES  |     2975 |
| 1008 | SCOTT  |     3000 |
| 1011 | ADAMS  |     1100 |
| 1002 | ALLEN  |     1600 |
| 1003 | WARD   |     1250 |
| 1005 | MARTIN |     1250 |
| 1006 | BLAKE  |     2850 |
| 1010 | TURNER |     1500 |
| 1012 | JAMES  |      950 |
+------+--------+----------+

# 2、 employee  ,  dept_no  10 20     
mysql> select * from employee where dept_no =10 or dept_no=20;

+------+--------+----------+---------+-----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job     | e_salary | hiredate   |
+------+--------+----------+---------+-----------+----------+------------+
| 1007 | CLARK  | m        |      10 | MANAGER   |     2450 | 2002-09-12 |
| 1009 | KING   | f        |      10 | PRESIDENT |     5000 | 1995-01-01 |
| 1001 | SMITH  | m        |      20 | CLERK     |      800 | 2005-11-12 |
| 1004 | JONES  | m        |      20 | MANAGER   |     2975 | 1998-05-18 |
| 1008 | SCOTT  | m        |      20 | ANALYSE   |     3000 | 2003-05-12 |
| 1011 | ADAMS  | m        |      20 | CLERK     |     1100 | 1999-10-05 |
+------+--------+----------+---------+-----------+----------+------------+

# 3、 employee  ,       800~2500       
select * from employee where e_salary between 800 and 2500;

+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1007 | CLARK  | m        |      10 | MANAGER  |     2450 | 2002-09-12 |
| 1001 | SMITH  | m        |      20 | CLERK    |      800 | 2005-11-12 |
| 1011 | ADAMS  | m        |      20 | CLERK    |     1100 | 1999-10-05 |
| 1002 | ALLEN  | f        |      30 | SALESMAN |     1600 | 2003-05-12 |
| 1003 | WARD   | f        |      30 | SALESMAN |     1250 | 2003-05-12 |
| 1005 | MARTIN | m        |      30 | SALESMAN |     1250 | 2001-06-12 |
| 1010 | TURNER | f        |      30 | SALESMAN |     1500 | 1997-10-12 |
| 1012 | JAMES  | f        |      30 | CLERK    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+

# 4、  employee  ,       20         
select * from employee where dept_no=20;

+------+--------+----------+---------+---------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job   | e_salary | hiredate   |
+------+--------+----------+---------+---------+----------+------------+
| 1001 | SMITH  | m        |      20 | CLERK   |      800 | 2005-11-12 |
| 1004 | JONES  | m        |      20 | MANAGER |     2975 | 1998-05-18 |
| 1008 | SCOTT  | m        |      20 | ANALYSE |     3000 | 2003-05-12 |
| 1011 | ADAMS  | m        |      20 | CLERK   |     1100 | 1999-10-05 |
+------+--------+----------+---------+---------+----------+------------+

# 5、 employee  ,               
select * from employee where e_salary in (select max(e_salary) from employee group by dept_no);

+------+--------+----------+---------+-----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job     | e_salary | hiredate   |
+------+--------+----------+---------+-----------+----------+------------+
| 1009 | KING   | f        |      10 | PRESIDENT |     5000 | 1995-01-01 |
| 1008 | SCOTT  | m        |      20 | ANALYSE   |     3000 | 2003-05-12 |
| 1006 | BLAKE  | f        |      30 | MANAGER   |     2850 | 1997-02-15 |
+------+--------+----------+---------+-----------+----------+------------+

다중 테이블 조건 질의
# 1、   BLAKE          
select d_name,d_location from dept where d_no in (select dept_no from employee  WHERE e_name='BLAKE');
+--------+------------+
| d_name | d_location |
+--------+------------+
| SALES  | ShenZhen   |
+--------+------------+

# 2、      、              
select dept_no,d_name,d_location from employee,dept where employee.dept_no=dept.d_no;

+---------+------------+------------+
| dept_no | d_name     | d_location |
+---------+------------+------------+
|      10 | ACCOUNTING | ShangHai   |
|      10 | ACCOUNTING | ShangHai   |
|      20 | RESEARCH   | BeiJing    |
|      20 | RESEARCH   | BeiJing    |
|      20 | RESEARCH   | BeiJing    |
|      20 | RESEARCH   | BeiJing    |
|      30 | SALES      | ShenZhen   |
|      30 | SALES      | ShenZhen   |
|      30 | SALES      | ShenZhen   |
|      30 | SALES      | ShenZhen   |
|      30 | SALES      | ShenZhen   |
|      30 | SALES      | ShenZhen   |
+---------+------------+------------+


# 3、 employee  ,            
select dept_no,count(e_name)as peoples from employee group by dept_no ;

+---------+---------+
| dept_no | peoples |
+---------+---------+
|      10 |       2 |
|      20 |       4 |
|      30 |       6 |
+---------+---------+

# 4、 employee  ,             
select e_job,sum(e_salary)as total  from employee group by e_job ;

+-----------+-------+
| e_job     | total |
+-----------+-------+
| ANALYSE   |  3000 |
| CLERK     |  2850 |
| MANAGER   |  8275 |
| PRESIDENT |  5000 |
| SALESMAN  |  5600 |
+-----------+-------+

# 5、 employee  ,           
select dept_no,avg(e_salary)as total  from employee group by dept_no ;

+---------+-----------+
| dept_no | total     |
+---------+-----------+
|      10 | 3725.0000 |
|      20 | 1968.7500 |
|      30 | 1566.6667 |
+---------+-----------+

# 6、 employee  ,      1500     
select * from employee where e_salary<1500;

+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1001 | SMITH  | m        |      20 | CLERK    |      800 | 2005-11-12 |
| 1011 | ADAMS  | m        |      20 | CLERK    |     1100 | 1999-10-05 |
| 1003 | WARD   | f        |      30 | SALESMAN |     1250 | 2003-05-12 |
| 1005 | MARTIN | m        |      30 | SALESMAN |     1250 | 2001-06-12 |
| 1012 | JAMES  | f        |      30 | CLERK    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+

# 7、 employee  ,                  ,            
select * from employee order by dept_no,e_salary  desc ;

+------+--------+----------+---------+-----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job     | e_salary | hiredate   |
+------+--------+----------+---------+-----------+----------+------------+
| 1009 | KING   | f        |      10 | PRESIDENT |     5000 | 1995-01-01 |
| 1007 | CLARK  | m        |      10 | MANAGER   |     2450 | 2002-09-12 |
| 1008 | SCOTT  | m        |      20 | ANALYSE   |     3000 | 2003-05-12 |
| 1004 | JONES  | m        |      20 | MANAGER   |     2975 | 1998-05-18 |
| 1011 | ADAMS  | m        |      20 | CLERK     |     1100 | 1999-10-05 |
| 1001 | SMITH  | m        |      20 | CLERK     |      800 | 2005-11-12 |
| 1006 | BLAKE  | f        |      30 | MANAGER   |     2850 | 1997-02-15 |
| 1002 | ALLEN  | f        |      30 | SALESMAN  |     1600 | 2003-05-12 |
| 1010 | TURNER | f        |      30 | SALESMAN  |     1500 | 1997-10-12 |
| 1003 | WARD   | f        |      30 | SALESMAN  |     1250 | 2003-05-12 |
| 1005 | MARTIN | m        |      30 | SALESMAN  |     1250 | 2001-06-12 |
| 1012 | JAMES  | f        |      30 | CLERK     |      950 | 2008-06-15 |
+------+--------+----------+---------+-----------+----------+------------+
# 8、 employee  ,         A S       
select * from employee WHERE e_name like 'A%' OR e_name LIKE 'S%';

+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1001 | SMITH  | m        |      20 | CLERK    |      800 | 2005-11-12 |
| 1008 | SCOTT  | m        |      20 | ANALYSE  |     3000 | 2003-05-12 |
| 1011 | ADAMS  | m        |      20 | CLERK    |     1100 | 1999-10-05 |
| 1002 | ALLEN  | f        |      30 | SALESMAN |     1600 | 2003-05-12 |
+------+--------+----------+---------+----------+----------+------------+

# 9、 employee  ,       ,      10      
select * from employee where (year(now())-year(hireDate))>= 10;a
	   
select * from employee where year(now())-year(hiredate) >=10;
  
select * from employee where adddate(hiredate,interval 10 year)>=2009;
select * from employee where adddate(hiredate,interval 10 year)<=date(now());

+------+--------+----------+---------+-----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job     | e_salary | hiredate   |
+------+--------+----------+---------+-----------+----------+------------+
| 1007 | CLARK  | m        |      10 | MANAGER   |     2450 | 2002-09-12 |
| 1009 | KING   | f        |      10 | PRESIDENT |     5000 | 1995-01-01 |
| 1001 | SMITH  | m        |      20 | CLERK     |      800 | 2005-11-12 |
| 1004 | JONES  | m        |      20 | MANAGER   |     2975 | 1998-05-18 |
| 1008 | SCOTT  | m        |      20 | ANALYSE   |     3000 | 2003-05-12 |
| 1011 | ADAMS  | m        |      20 | CLERK     |     1100 | 1999-10-05 |
| 1002 | ALLEN  | f        |      30 | SALESMAN  |     1600 | 2003-05-12 |
| 1003 | WARD   | f        |      30 | SALESMAN  |     1250 | 2003-05-12 |
| 1005 | MARTIN | m        |      30 | SALESMAN  |     1250 | 2001-06-12 |
| 1006 | BLAKE  | f        |      30 | MANAGER   |     2850 | 1997-02-15 |
| 1010 | TURNER | f        |      30 | SALESMAN  |     1500 | 1997-10-12 |
| 1012 | JAMES  | f        |      30 | CLERK     |      950 | 2008-06-15 |
+------+--------+----------+---------+-----------+----------+------------+

# 10、        (F)
select e_gender,e_name, year(now())-year(hiredate) as gongling from employee where e_gender='f';

+----------+--------+----------+
| e_gender | e_name | gongling |
+----------+--------+----------+
| f        | KING   |       25 |
| f        | ALLEN  |       17 |
| f        | WARD   |       17 |
| f        | BLAKE  |       23 |
| f        | TURNER |       23 |
| f        | JAMES  |       12 |
+----------+--------+----------+

# 11、  LIMIT    3       6   
select *  from employee  limit 2,4;

# 12、      (SALSEMAN)     
select min(e_salary) as zuidigongzi  from employee group by e_job having 

+------+--------+----------+---------+---------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job   | e_salary | hiredate   |
+------+--------+----------+---------+---------+----------+------------+
| 1001 | SMITH  | m        |      20 | CLERK   |      800 | 2005-11-12 |
| 1004 | JONES  | m        |      20 | MANAGER |     2975 | 1998-05-18 |
| 1008 | SCOTT  | m        |      20 | ANALYSE |     3000 | 2003-05-12 |
| 1011 | ADAMS  | m        |      20 | CLERK   |     1100 | 1999-10-05 |
+------+--------+----------+---------+---------+----------+------------+

# 13、       N  S     
select e_name from employee  where e_name like '%N' or e_name like '%S';

+--------+
| e_name |
+--------+
| JONES  |
| ADAMS  |
| ALLEN  |
| MARTIN |
| JAMES  |
+--------+

# 14、   BeiJing          
select e_name,e_job from employee where dept_no in (select d_no from dept where d_location='BEIJING');

+--------+---------+
| e_name | e_job   |
+--------+---------+
| SMITH  | CLERK   |
| JONES  | MANAGER |
| SCOTT  | ANALYSE |
| ADAMS  | CLERK   |
+--------+---------+


# 15、         employee dept 
select * from employee left join dept on employee.e_no = dept.d_no;

+------+--------+----------+---------+-----------+----------+------------+------+--------+------------+
| e_no | e_name | e_gender | dept_no | e_job     | e_salary | hiredate   | d_no | d_name | d_location |
+------+--------+----------+---------+-----------+----------+------------+------+--------+------------+
| 1007 | CLARK  | m        |      10 | MANAGER   |     2450 | 2002-09-12 | NULL | NULL   | NULL       |
| 1009 | KING   | f        |      10 | PRESIDENT |     5000 | 1995-01-01 | NULL | NULL   | NULL       |
| 1001 | SMITH  | m        |      20 | CLERK     |      800 | 2005-11-12 | NULL | NULL   | NULL       |
| 1004 | JONES  | m        |      20 | MANAGER   |     2975 | 1998-05-18 | NULL | NULL   | NULL       |
| 1008 | SCOTT  | m        |      20 | ANALYSE   |     3000 | 2003-05-12 | NULL | NULL   | NULL       |
| 1011 | ADAMS  | m        |      20 | CLERK     |     1100 | 1999-10-05 | NULL | NULL   | NULL       |
| 1002 | ALLEN  | f        |      30 | SALESMAN  |     1600 | 2003-05-12 | NULL | NULL   | NULL       |
| 1003 | WARD   | f        |      30 | SALESMAN  |     1250 | 2003-05-12 | NULL | NULL   | NULL       |
| 1005 | MARTIN | m        |      30 | SALESMAN  |     1250 | 2001-06-12 | NULL | NULL   | NULL       |
| 1006 | BLAKE  | f        |      30 | MANAGER   |     2850 | 1997-02-15 | NULL | NULL   | NULL       |
| 1010 | TURNER | f        |      30 | SALESMAN  |     1500 | 1997-10-12 | NULL | NULL   | NULL       |
| 1012 | JAMES  | f        |      30 | CLERK     |      950 | 2008-06-15 | NULL | NULL   | NULL       |
+------+--------+----------+---------+-----------+----------+------------+-----

# 16、  LIKE           a   
select * from employee where  e_name like '%a%';

+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1007 | CLARK  | m        |      10 | MANAGER  |     2450 | 2002-09-12 |
| 1011 | ADAMS  | m        |      20 | CLERK    |     1100 | 1999-10-05 |
| 1002 | ALLEN  | f        |      30 | SALESMAN |     1600 | 2003-05-12 |
| 1003 | WARD   | f        |      30 | SALESMAN |     1250 | 2003-05-12 |
| 1005 | MARTIN | m        |      30 | SALESMAN |     1250 | 2001-06-12 |
| 1006 | BLAKE  | f        |      30 | MANAGER  |     2850 | 1997-02-15 |
| 1012 | JAMES  | f        |      30 | CLERK    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+

업데이트 데이터 업데이트
#   : update     SET    1= 1,  2= 2...  WHERE  CONDITION;
#      
# not null                 
# default                  
mysql> update student2 set name='flying' where id=2;   #   id=2    ,  name    flying;   
mysql> update student2 set name='flying' where d=3 and sex='female';  #   and    or
#     
mysql> alter table student2 add id int(3) not null default 22, add gender enum('M','WW');
1、     :where
        select    from      where      ;
        select    from      where       and     ;
        select    from      where      (between A and B); -->   
            eg: select name from haha where id between 0 and 2;
                    +------+
                    | name |
                    +------+
                    | ljt  |
                    +------+
                    1 row in set (0.00 sec)

        SELECT name, salary FROM employee5 WHERE salary NOT IN (4000,5000,6000,9000) ;
        SELECT name,job_description  from employee5 where job_description is null;(    )
        SELECT * FROM employee5 WHERE name LIKE 'al%'; %      
        SELECT * FROM employee5 WHERE name LIKE 'al___'; --> "_"         
          :' = '     ;'like'      ; ' regexp '    

	select * from student where register_date > '2020-02-13';
	#        WHERE             .

2. 정렬:order by 필드(일반적으로 이 필드는 숫자, 성적 등등) 단열: 기본 승차순, 끝에DESC를 추가하면 강차순으로 변경;
            mysql> select id from haha order by id DESC;
            +----+
            | id |
            +----+
            |  4 |
            |  3 |
            |  2 |
            |  1 |
            +----+
            4 rows in set (0.00 sec)

      :      ,              
           eg: mysql> select id from haha order by money,id;
, null
   :SELECT        FROM  1 , 2  WHERE     1.   =  2.  ;
    eg:select info.name,info.age,info.dep_num,department.dep_num  from info,department where info.dep__num = department.dep_num;

좋은 웹페이지 즐겨찾기