MySQL-SQL基础1

#插入

mysql> insert into emp values('zzx1','2002-03-09','2009-04-03','2001',3,22);

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into emp values('ttx2','20023-04-10','2010-03-04','2002',4,23);

ERROR 1292 (22007): Incorrect date value: '20023-04-10' for column 'birth' at row 1

 

mysql> insert into emp values('ttx2','2023-04-10','2010-03-04','2002',4,23);

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from emp;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 2002.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

#更新

mysql> update emp set sal=4000 where ename='ttx2';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

mysql> select * from emp;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

mysql> select distinct deptno from emp;

+--------+

| deptno |

+--------+

|      1 |

|      3 |

|      4 |

+--------+

3 rows in set (0.01 sec)

 

 

#查询

 

mysql> select * from emp where deptno=1;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

+-------+------------+------------+---------+--------+------+

1 row in set (0.00 sec)

 

mysql> select * from emp where deptno=2;

Empty set (0.00 sec)

 

mysql> select * from emp where deptno=3;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

+-------+------------+------------+---------+--------+------+

1 row in set (0.00 sec)

 

 

mysql> select * from emp order by sal;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

mysql> select * from emp order by deptno;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

#查询排序

 

mysql> select * from emp order by deptno,sal desc;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

#分页查询 

mysql> select * from emp order by sal limit 3;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

mysql> select * from emp order by sal limit 1,3;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

2 rows in set (0.00 sec)

 

#查询表总数

mysql> select count(1) from emp;

+----------+

| count(1) |

+----------+

|        3 |

+----------+

1 row in set (0.00 sec)

 

#针对emp表进行统计deptno的个数

mysql> select deptno,count(1) from emp group by deptno;

+--------+----------+

| deptno | count(1) |

+--------+----------+

|      1 |        1 |

|      3 |        1 |

|      4 |        1 |

+--------+----------+

3 rows in set (0.00 sec)

 

#对ename排序并计算

mysql> select ename,count(1) from emp group by ename;

+-------+----------+

| ename | count(1) |

+-------+----------+

| ttx2  |        1 |

| zzx1  |        2 |

+-------+----------+

2 rows in set (0.00 sec)

 

#对sal排序并计算

mysql> select sal,count(1) from emp group by sal;

+---------+----------+

| sal     | count(1) |

+---------+----------+

| 2000.00 |        1 |

| 2001.00 |        1 |

| 4000.00 |        1 |

+---------+----------+

3 rows in set (0.00 sec)

 

#对age1排序并计算

mysql> select age1,count(1) from emp group by age1;

+------+----------+

| age1 | count(1) |

+------+----------+

|   21 |        1 |

|   22 |        1 |

|   23 |        1 |

+------+----------+

3 rows in set (0.01 sec)

 

#查看emp表结构 

mysql> desc emp;

+---------+---------------+------+-----+---------+-------+

| Field   | Type          | Null | Key | Default | Extra |

+---------+---------------+------+-----+---------+-------+

| ename   | varchar(20)   | YES  |     | NULL    |       |

| birth   | date          | YES  |     | NULL    |       |

| hirdate | date          | YES  |     | NULL    |       |

| sal     | decimal(10,2) | YES  |     | NULL    |       |

| deptno  | int(2)        | YES  |     | NULL    |       |

| age1    | int(4)        | YES  |     | NULL    |       |

+---------+---------------+------+-----+---------+-------+

6 rows in set (0.00 sec)

 

#对birth列排序并计算

mysql> select birth,count(1) from emp group by birth;

+------------+----------+

| birth      | count(1) |

+------------+----------+

| 2000-01-01 |        1 |

| 2002-03-09 |        1 |

| 2023-04-10 |        1 |

+------------+----------+

3 rows in set (0.00 sec)

 

#对hirdate列排序并计算

mysql> select hirdate,count(1) from emp group by hirdate;

+------------+----------+

| hirdate    | count(1) |

+------------+----------+

| 2000-01-01 |        1 |

| 2009-04-03 |        1 |

| 2010-03-04 |        1 |

+------------+----------+

3 rows in set (0.00 sec)

 

#统计部门人数同时统计总人数

mysql> select deptno,count(1) from emp group by deptno with rollup;

+--------+----------+

| deptno | count(1) |

+--------+----------+

|      1 |        1 |

|      3 |        1 |

|      4 |        1 |

|   NULL |        3 |

+--------+----------+

4 rows in set (0.00 sec)

 

 

#统计ename同时统计总人数

mysql> select ename,count(1) from emp group by ename with rollup;

+-------+----------+

| ename | count(1) |

+-------+----------+

| ttx2  |        1 |

| zzx1  |        2 |

| NULL  |        3 |

+-------+----------+

3 rows in set (0.00 sec)

 

 #统计出生人数同时统计总人数

mysql> select birth,count(1) from emp group by birth with rollup;

+------------+----------+

| birth      | count(1) |

+------------+----------+

| 2000-01-01 |        1 |

| 2002-03-09 |        1 |

| 2023-04-10 |        1 |

| NULL       |        3 |

+------------+----------+

4 rows in set (0.00 sec)

 

 

#统计录用时间同时统计总人数 

mysql> select hirdate,count(1) from emp group by hirdate with rollup;

+------------+----------+

| hirdate    | count(1) |

+------------+----------+

| 2000-01-01 |        1 |

| 2009-04-03 |        1 |

| 2010-03-04 |        1 |

| NULL       |        3 |

+------------+----------+

4 rows in set (0.00 sec)

 

#统计薪资数同时统计总人数 

mysql> select sal,count(1) from emp group by sal with rollup;

+---------+----------+

| sal     | count(1) |

+---------+----------+

| 2000.00 |        1 |

| 2001.00 |        1 |

| 4000.00 |        1 |

|    NULL |        3 |

+---------+----------+

4 rows in set (0.00 sec)

 

 #统计年龄同时统计总人数 

mysql> select age1,count(1) from emp group by age1 with rollup;

+------+----------+

| age1 | count(1) |

+------+----------+

|   21 |        1 |

|   22 |        1 |

|   23 |        1 |

| NULL |        3 |

+------+----------+

4 rows in set (0.00 sec)

 

 

#统计部门大于0的部门 

mysql> select deptno,count(1) from emp group by deptno having count(1)>0;

+--------+----------+

| deptno | count(1) |

+--------+----------+

|      1 |        1 |

|      3 |        1 |

|      4 |        1 |

+--------+----------+

3 rows in set (0.00 sec)

 

#计算薪资总数、最高薪资、最低薪资

mysql> select sum(sal),max(sal),min(sal) from emp;

+----------+----------+----------+

| sum(sal) | max(sal) | min(sal) |

+----------+----------+----------+

|  8001.00 |  4000.00 |  2000.00 |

+----------+----------+----------+

1 row in set (0.00 sec)

 

#联表查询

mysql> create table dept(deptno int(10),deptname varchar(20));

Query OK, 0 rows affected (0.01 sec)

 

mysql> insert into dept values(1,'tech');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into dept values(2,'sale');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into dept values(3,'hr');

Query OK, 1 row affected (0.00 sec)

 

mysql> select ename from emp where emp.deptno=emp.deptno;

+-------+

| ename |

+-------+

| zzx1  |

| zzx1  |

| ttx2  |

+-------+

3 rows in set (0.00 sec)

 

#左连接查询

mysql> select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

+-------+----------+

| ename | deptname |

+-------+----------+

| zzx1  | tech     |

| zzx1  | hr       |

| ttx2  | NULL     |

+-------+----------+

3 rows in set (0.00 sec)

 

#右连接查询

mysql> select ename,deptname from dept right join emp on dept.deptno=emp.deptno;

+-------+----------+

| ename | deptname |

+-------+----------+

| zzx1  | tech     |

| zzx1  | hr       |

| ttx2  | NULL     |

+-------+----------+

3 rows in set (0.00 sec)

 

mysql> select * from emp;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

+-------+------------+------------+---------+--------+------+

3 rows in set (0.00 sec)

 

mysql> select * from dept;

+--------+----------+

| deptno | deptname |

+--------+----------+

|      1 | tech     |

|      2 | sale     |

|      3 | hr       |

+--------+----------+

3 rows in set (0.01 sec)

 

mysql> insert into dept values(4,'sl');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into emp values('ssss','2019-01-01','2018-01-01',5000,2,24);

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from dept;

+--------+----------+

| deptno | deptname |

+--------+----------+

|      1 | tech     |

|      2 | sale     |

|      3 | hr       |

|      4 | sl       |

+--------+----------+

4 rows in set (0.00 sec)

 

mysql> select * from emp;

+-------+------------+------------+---------+--------+------+

| ename | birth      | hirdate    | sal     | deptno | age1 |

+-------+------------+------------+---------+--------+------+

| zzx1  | 2000-01-01 | 2000-01-01 | 2000.00 |      1 |   21 |

| zzx1  | 2002-03-09 | 2009-04-03 | 2001.00 |      3 |   22 |

| ttx2  | 2023-04-10 | 2010-03-04 | 4000.00 |      4 |   23 |

| ssss  | 2019-01-01 | 2018-01-01 | 5000.00 |      2 |   24 |

+-------+------------+------------+---------+--------+------+

4 rows in set (0.00 sec)

 

mysql> select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

+-------+----------+

| ename | deptname |

+-------+----------+

| zzx1  | tech     |

| ssss  | sale     |

| zzx1  | hr       |

| ttx2  | sl       |

+-------+----------+

4 rows in set (0.00 sec)

 

mysql> select ename,deptname from dept right join emp on dept.deptno=emp.deptno;

+-------+----------+

| ename | deptname |

+-------+----------+

| zzx1  | tech     |

| ssss  | sale     |

| zzx1  | hr       |

| ttx2  | sl       |

+-------+----------+

4 rows in set (0.00 sec)