数据库的设计
数据表的相关操作
插入数据
使用INSERT INTO
:
INSERT INTO 表名(各个字段名)VALUES (对应的值)
添加删除字段
添加字段的语句
ALTER TABLE 表名 ADD 字段名称 字段类型
删除字段的语句
ALTER TABLE 表名 DROP 字段名称
数据表的查找
查询表达式
普通的全部查询
mysql> SELECT * FROM test1;
或者:SELECT * FROM test.test1; test为数据库
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | Jony | 18 |
| 2 | Kitty | 16 |
| 3 | Rabbit | 19 |
| 4 | Tim | 14 |
| 5 | Ella | 10 |
+----+--------+-----+
使用别名的一些查询,用AS关键字,可以把字段、表另起一个名字
mysql> SELECT a.id AS '编号',a.name AS '姓名',a.age AS '年龄' FROM test1 AS a;
+--------+--------+--------+
| 编号 | 姓名 | 年龄 |
+--------+--------+--------+
| 1 | Jony | 18 |
| 2 | Kitty | 16 |
| 3 | Rabbit | 19 |
| 4 | Tim | 14 |
| 5 | Ella | 10 |
+--------+--------+--------+
5 rows in set (0.00 sec)
带有where的查询,注意要使用<=>作为等于号。
SELECT * FROM test1 WHERE age<=>18;
+----+------+-----+--------+
| id | name | age | school |
+----+------+-----+--------+
| 1 | Jony | 18 | NULL |
+----+------+-----+--------+
使用IS来判断该字段是否存在空值:
mysql> SELECT * FROM test1 WHERE school IS NOT NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM test1 WHERE school IS NULL;
+----+--------+-----+--------+
| id | name | age | school |
+----+--------+-----+--------+
| 1 | Jony | 18 | NULL |
| 2 | Kitty | 16 | NULL |
| 3 | Rabbit | 19 | NULL |
| 4 | Tim | 14 | NULL |
| 5 | Ella | 10 | NULL |
| 6 | fdasf | 19 | NULL |
+----+--------+-----+--------+
6 rows in set (0.05 sec)
BETWEEN AND 指定范围[X,Y](如果为字符,则不区分大小写)
SELECT * FROM test1 WHERE age BETWEEN 10 AND 20;
IN或者NOT IN用于进行固定的集合查询:
mysql> SELECT * FROM test1 WHERE id IN(1,3,5,7,9);
模糊查询 (如果为字符,则不区分大小写)
%表示0个1个或者多个任意字符
_表示一个任意字符
mysql> SELECT * FROM test1 WHERE name LIKE '%a%';
+----+--------+-----+--------+
| id | name | age | school |
+----+--------+-----+--------+
| 3 | Rabbit | 19 | NULL |
| 5 | Ella | 10 | NULL |
| 6 | fdasf | 19 | NULL |
+----+--------+-----+--------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM test1 WHERE name LIKE '____';
+----+------+-----+--------+
| id | name | age | school |
+----+------+-----+--------+
| 1 | Jony | 18 | NULL |
| 5 | Ella | 10 | NULL |
+----+------+-----+--------+
2 rows in set (0.00 sec)
分组查询
使用GROUP BY语句,如果直接使用:
SELECT * FROM 表 GROUP BY 字段
则只会出现字段第一次出现的记录,而不知道相关记录有几条,如下代码所示:
mysql> SELECT * FROM test1 GROUP BY sex|5;
+----+-------+-----+--------+--------+
| id | name | age | school | sex |
+----+-------+-----+--------+--------+
| 1 | Jony | 18 | NULL | 男 |
| 2 | Kitty | 16 | NULL | 女 |
| 5 | Ella | 10 | NULL | 保密 |
+----+-------+-----+--------+--------+
3 rows in set (0.00 sec)
按照多个字段进行分组:先按照第一个字段分组,再按照第二条记录进行分组,但是也是按照第一次出现的内容进行分组
mysql> SELECT * FROM test1 GROUP BY sex,age;
+----+--------+-----+--------+--------+
| id | name | age | school | sex |
+----+--------+-----+--------+--------+
| 1 | Jony | 18 | NULL | 男 |
| 3 | Rabbit | 19 | NULL | 男 |
| 4 | Tim | 14 | NULL | 女 |
| 2 | Kitty | 16 | NULL | 女 |
| 6 | fdasf | 19 | NULL | 女 |
| 5 | Ella | 10 | NULL | 保密 |
+----+--------+-----+--------+--------+
6 rows in set (0.00 sec)
关于GROUP BY
GROUP_CONCAT()函数
mysql> SELECT GROUP_CONCAT(name) FROM test1 GROUP BY sex;
+--------------------+
| GROUP_CONCAT(name) |
+--------------------+
| Jony,Rabbit |
| Kitty,Tim,fdasf |
| Ella |
+--------------------+
可以加一点内容:SELECT id,sex,GROUP_CONCAT(name) FROM test1 GROUP BY sex;
结果:
+----+--------+--------------------+
| id | sex | GROUP_CONCAT(name) |
+----+--------+--------------------+
| 1 | 男 | Jony,Rabbit |
| 2 | 女 | Kitty,Tim,fdasf |
| 5 | 保密 | Ella |
+----+--------+--------------------+
使用聚合函数,聚合函数放置在SELECT语句后面,FROM语句的前面。其中,SUM(字段)函数用于求分组中该字段的和;AVG(字段)函数用于求分组中该字段的平均值,MAX(字段)函数用于求分组中该字段的最大值;MIN(字段)函数用于求分组中该字段的最小值,COUNT()函数用于求数量,一般使用COUNT(*),但是COUNT()不统计值为NULL的数据。
注意:聚合函数不能在WHERE子句中出现。