数据表的设计和查询

数据库的设计

在这里插入图片描述
在这里插入图片描述

数据表的相关操作

插入数据

使用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 * FROMGROUP 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子句中出现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九久呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值