例子都是基于此表
create table test (
id int primary key auto_increment,
name varchar(20),
sex varchar(6),
age int
)charset utf8;
mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| sex | varchar(6) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
一、插入语句
插入的方式分为:完整插入、插入记录的一部分、插入多条记录等。
1、完整插入
语法:
insert [into] <表名> values (字段1值,字段2值……字段n值);
例如:
mysql> insert into test values (1,'张三','男',20);
Query OK, 1 row affected (0.00 sec)
查看插入的结果
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
+----+--------+------+------+
1 row in set (0.00 sec)
2、插入部分记录
insert [into] <表名> (字段1,字段2,……) values (字段1值,字段2值……)
例如:
mysql> insert into test (id,name,age) values (5,'李四',23);
Query OK, 1 row affected (0.00 sec)
查看插入后的结果:
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 5 | 李四 | NULL | 23 |
+----+--------+------+------+
2 rows in set (0.00 sec)
3、插入多条记录
可以分为部分字段插入多条记录或者完整插入多条记录。
insert into test values
(3,'小明','男',22),
(8,'小花','女',20),
(7,'小美','女',21)
;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
查看结果:
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 3 | 小明 | 男 | 22 |
| 5 | 李四 | NULL | 23 |
| 7 | 小美 | 女 | 21 |
| 8 | 小花 | 女 | 20 |
+----+--------+------+------+
5 rows in set (0.00 sec)
二、更新语句
基本语法
update <表名> set
字段名1=字段名1值,
字段名2=字段名2值,
…………
where <条件表达式>
;
注:如果没有where子句,则表示修改表中指定字段所有的值。
例如:
mysql> update test set sex='男',age=30 where id=5;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
查看修改后的结果:
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 3 | 小明 | 男 | 22 |
| 5 | 李四 | 男 | 30 |
| 7 | 小美 | 女 | 21 |
| 8 | 小花 | 女 | 20 |
+----+--------+------+------+
5 rows in set (0.00 sec)
三、删除数据
基础语法:
delete from <表名> where <条件表达式>;
注:若没有where子句,则会删除表中所有的记录。
在删记录前,先查看表中的记录。
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 3 | 小明 | 男 | 22 |
| 5 | 李四 | 男 | 30 |
| 7 | 小美 | 女 | 21 |
| 8 | 小花 | 女 | 20 |
+----+--------+------+------+
5 rows in set (0.00 sec)
例如,删除id为3和id为7的记录
mysql> delete from test where id=3 or id=7;
Query OK, 2 rows affected (0.00 sec)
删除后查看结果:
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 5 | 李四 | 男 | 30 |
| 8 | 小花 | 女 | 20 |
+----+--------+------+------+
3 rows in set (0.00 sec)
四、查询语句
查询语句是经常使用的到,功能也非常强大。例如查询表中指定列(字段)、使用聚合函数进行查询、连接查询、子查询、正则表达式查询等。
基本语法:
select {* | <字段名列表>} from <表名>
[where <条件表达式>]
[group by 字段名列表]
[having <条件表达式>]
[order by 字段名列表 [ASC | DESC]]
[limit [<offset>,] 行数]
;
*:代表所有字段。
group by 字段名列表:指定分组字段名,可以是多个或一个,用逗号分隔。
having <条件表达式>:与where子句类似,但是having子句需要和group by子句联合使用,having支持聚合函数,而where子句不支持聚合函数。
order by 字段名列表:指定字段名进行分组,可以是一个或多个字段,用逗号分隔,默认是ASC升序,DESC降序。
limit 子句:指定显示的行数,也可以指定偏移行数如3-7。
基于下面这个表,进行简单的操作。
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 2 | 刘一 | 男 | 27 |
| 3 | 刘花 | 女 | 23 |
| 4 | 小明 | 男 | 29 |
| 5 | 李四 | 男 | 30 |
| 8 | 小花 | 女 | 20 |
| 10 | 小西 | 女 | 24 |
| 18 | 王五 | 男 | 32 |
+----+--------+------+------+
8 rows in set (0.00 sec)
1、只查看id,name信息并且年龄大于24岁;
mysql> select id,name from test where age>24;
+----+--------+
| id | name |
+----+--------+
| 2 | 刘一 |
| 4 | 小明 |
| 5 | 李四 |
| 18 | 王五 |
+----+--------+
4 rows in set (0.00 sec)
2、按sex进行分组;
mysql> select sex from test group by sex;
+------+
| sex |
+------+
| 女 |
| 男 |
+------+
2 rows in set (0.00 sec)
3、显示年龄大于平均数的信息;
mysql> select * from test where age>(select avg(age) from test);
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 2 | 刘一 | 男 | 27 |
| 4 | 小明 | 男 | 29 |
| 5 | 李四 | 男 | 30 |
| 18 | 王五 | 男 | 32 |
+----+--------+------+------+
4 rows in set (0.00 sec)
#查看平均年龄
mysql> select avg(age) from test;
+----------+
| avg(age) |
+----------+
| 25.6250 |
+----------+
1 row in set (0.00 sec)
4、根据年龄从低到高输出。
mysql> select * from test order by age;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | 张三 | 男 | 20 |
| 8 | 小花 | 女 | 20 |
| 3 | 刘花 | 女 | 23 |
| 10 | 小西 | 女 | 24 |
| 2 | 刘一 | 男 | 27 |
| 4 | 小明 | 男 | 29 |
| 5 | 李四 | 男 | 30 |
| 18 | 王五 | 男 | 32 |
+----+--------+------+------+
8 rows in set (0.00 sec)
5、显示最大的年龄的所有信息;
mysql> select * from test where age=(select max(age) from test);
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 18 | 王五 | 男 | 32 |
+----+--------+------+------+
1 row in set (0.00 sec)