查询数据表中的记录(SELECT)(4)

时间:2009-02-27 16:06:00 

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

| bird    |        2 |

| cat     |        2 |

| dog     |        3 |

| hamster |        1 |

| snake   |        1 |

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

如果你除了计数还返回一个列的值,那么必须使用GROU BY语句,否则无法计算记录。例如上例,使用GROUP BY对每个owner分组所有记录,没有它,你得到的一切是一条错误消息:

mysql> SELECT owner, COUNT(owner) FROM pet;

ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)

with no GROUP columns is illegal if there is no GROUP BY clause

也可以根据多个列分组,例如:

按种类和性别组合的动物数量:

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;

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

| species | sex  | COUNT(*) |

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

| bird    | NULL |        1 |

| bird    | f    |        1 |

| cat     | f    |        1 |

| cat     | m    |        1 |

| dog     | f    |        1 |

| dog     | m    |        2 |

| hamster | f    |        1 |

| snake   | m    |        1 |

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

查询多个表

查询多个表,FROM子句列出表名,并用逗号分隔,因为查询需要从他们两个拉出信息。

当组合(联结-join)来自多个表的信息时,你需要指定在一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录。

因为name列出现在两个表中,当引用列时,你一定要指定哪个表。这通过把表名附在列名前做到。

现在有一个event表:

mysql>select * from event;

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

| name     | date       | type     | remark                      |

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

| Fluffy   | 1995-05-15 | litter   | 4 kittens, 3 female, 1 male |

| Buffy    | 1993-06-23 | litter   | 5 puppies, 2 female, 3 male |

| Buffy    | 1994-06-19 | litter   | 3 puppies, 3 female         |

| Chirpy   | 1999-03-21 | vet      | needed beak straightened    |

| Slim     | 1997-08-03 | vet      | broken rib                  |

| Bowser   | 1991-10-12 | kennel   | NULL                        |

| Fang     | 1991-10-12 | kennel   | NULL                        |

| Fang     | 1998-08-28 | birthday | Gave him a new chew toy     |

| Claws    | 1998-03-17 | birthday | Gave him a new flea collar  |

| Whistler | 1998-12-09 | birthday | First birthday              |

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

当他们有了一窝小动物时,假定你想要找出每只宠物的年龄。 event表指出何时发生,但是为了计算母亲的年龄,你需要她的出生日期。既然它被存储在pet表中,为了查询你需要两张表:

mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark

-> FROM pet, event

-> WHERE pet.name = event.name AND type = "litter";

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

| name   | age  | remark                      |

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

| Fluffy | 2.27 | 4 kittens, 3 female, 1 male |

| Buffy  | 4.12 | 5 puppies, 2 female, 3 male |

| Buffy  | 5.10 | 3 puppies, 3 female         |

标签:查询,数据库,表,select
0
投稿

猜你喜欢

  • PyTorch深度学习模型的保存和加载流程详解

    2023-07-10 04:58:33
  • Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法

    2021-06-26 12:42:36
  • python pyinstaller 加载ui路径方法

    2023-06-12 23:27:20
  • golang操作mongodb的方法

    2023-09-15 03:49:24
  • Javascript中Math.max和Math.max.apply的区别和用法详解

    2024-04-10 10:55:04
  • Python+matplotlib+numpy实现在不同平面的二维条形图

    2023-11-11 21:01:58
  • AJAX实现web页面中级联菜单的设计

    2007-09-26 13:37:00
  • python解析xml文件实例分享

    2021-11-20 07:56:14
  • sqlserver中重复数据值只取一条的sql语句

    2012-06-06 19:46:31
  • Python编程tkinter库Canvas实现涂鸦颜色表及围棋盘示例

    2023-08-02 13:21:02
  • Python基于OpenCV的视频图像处理详解

    2021-02-06 19:57:37
  • MySQL优化之使用连接(join)代替子查询

    2024-01-25 18:26:33
  • 使用php判断网页是否gzip压缩

    2024-06-05 09:47:41
  • 如何在服务器端调用winzip命令行对文件压缩和解压

    2008-01-26 20:44:00
  • mssql存储过程表名和字段名为变量的实现方法

    2011-12-01 07:59:13
  • MySQL 如何修改root用户的密码

    2024-01-23 19:34:31
  • Python实现将不规范的英文名字首字母大写

    2021-05-21 08:40:46
  • Python 任务自动化工具nox 的配置与 API详情

    2022-05-02 20:57:30
  • 分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功

    2023-10-07 19:07:43
  • oracle复制表结构和复制表数据语句分享

    2023-07-07 02:43:43
  • asp之家 网络编程 m.aspxhome.com