计算你拥有动物的总数目与“在pet表中有多少行?”是同样的问题,因为每个宠物有一个记录。COUNT(*)函数计算行数,所以计算动物数目的查询应为:
mysql>SELECT COUNT(*) FROM pet
+----------+
| COUNT(*) |
+----------+
|9 |
+----------+
在前面,你检索了拥有宠物的人的名字。如果你想要知道每个主人有多少宠物,你可以使用COUNT( )函数:
mysql>SELECT owner, COUNT(*) FROM pet GROUP BY owner
+--------+----------+
| owner | COUNT(*) |
+--------+----------+
| Benny |2 |
| Diane |2 |
| Gwen |3 |
| Harold |2 |
+--------+----------+
注意,使用GROUP BY对每个owner的所有记录分组,没有它,你会得到错误消息:
mysql>SELECT owner, COUNT(*) FROM pet
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
with no GROUP columns is illegal if there is no GROUP BY clause
COUNT( )和GROUP BY以各种方式分类你的数据。下列例子显示出进行动物普查 *** 作的不同方式。
每种动物的数量:
mysql>SELECT species, COUNT(*) FROM pet GROUP BY species
+---------+----------+
| species | COUNT(*) |
+---------+----------+
| bird|2 |
| cat |2 |
| dog |3 |
| hamster |1 |
| snake |1 |
+---------+----------+
每种性别的动物数量:
mysql>SELECT sex, COUNT(*) FROM pet GROUP BY sex
+------+----------+
| sex | COUNT(*) |
+------+----------+
| NULL |1 |
| f|4 |
| m|4 |
+------+----------+
(在这个输出中,NULL表示“未知性别”。)
按种类和性别组合的动物数量:
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 |
+---------+------+----------+
若使用COUNT( ),你不必检索整个表。例如, 前面的查询,当只对狗和猫进行时,应为:
mysql>SELECT species, sex, COUNT(*) FROM pet
->WHERE species = 'dog' OR species = 'cat'
->GROUP BY species, sex
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| cat | f|1 |
| cat | m|1 |
| dog | f|1 |
| dog | m|2 |
+---------+------+----------+
或,如果你仅需要知道已知性别的按性别的动物数目:
mysql>SELECT species, sex, COUNT(*) FROM pet
->WHERE sex IS NOT NULL
->GROUP BY species, sex
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bird| f|1 |
| cat | f|1 |
| cat | m|1 |
| dog | f|1 |
| dog | m|2 |
| hamster | f|1 |
| snake | m|1 |
是两两关联还是一表关联所有表,这不是凭空乱猜的。楼主连最基本的概念都没弄清楚,首先,你问问自己为什么需要这些表?如果这些表是凭着感觉构建出来的,那么结局注定是乱,甚至是出错更进一步的话可能出现灾难。
正确的做法是:
进行需求分析;
对分析结果画数据流图;
根据数据流图各部分构造出一个个子E-R图;
将各个子E-R图合并成全局E-R图。这个全局E-R图就是构造数据库的基石。
这个全局E-R图是业务模型的抽象,对这个图建表有以下四种情况:
1.给其上的每个实体建一张表;
2.实体与实体之间的联系,如果是一对一(很少会这样做)的,则将该联系的属性并入随便哪头的实体表;
3.如果联系是1对多的,则可以给该联系单独建表,也可以将其属性并入多的这一头。如果是单独建表,则可取多的这头表的主键为其主键,也可单独开主键,并引入多的这头主键为其外键;
4.如果联系是多对多的,则必须单独建表(这就是你上面提到的中间表),这个表最好自己开辟主键,且必须把两头实体的主键拿来当外键,以建立他们之间的联系。
回到你的问题,你给了这些表,我们并不清楚你的具体业务是什么,并不清楚你已建的这些表是否合理,也不清楚这些表在业务上的相互关系,所以外人难以给你建中间表。建议楼主先学习掌握数据库原理,然后自行分析并勾勒出E-R图,接着建表是一目了然的事了。
数据库是什么?
之前小编在这个问题上详细讲述过(详见《数据库》),和现实生活中的各类仓库一样,数据库就是网络上用来存放数据的地方,用户可以对这些数据进行增删、查询、更新等 *** 作,从而实现对数据的管理和调令。
数据库技术,是信息管理系统、自动化办公系统、销售统计系统等各种信息系统的核心部分,是进行科学研究和决策管理的重要技术手段,常用的数据库包括:Oracle、DB2、MySQL、SQL Server、Sybase、VF等。
由于MySQL数据库具有性能优良、稳定性好、配置简单、支持各种 *** 作系统等优势,本章主要讲述Windows系统下MySQL数据库的内容。
MySQL的安装与配置
在浏览器中输入MySQL的官方网址mysql.com,找到其中的“DOWNLOADS”菜单并点击:
当然也可以直接在百度上搜索MySQL软件进行下载,在官网中可以找到几种不同的版本,已经更新到了MySQL 8.0版本了。
双击MySQL安装文件setup.exe,进入MySQL安装欢迎界面,点击“Next”进行安装,紧接着进入“Setup Type”界面选择MySQL安装类型,这里选择“Typical”类型,然后点击“Next”按钮进入下一个安装步骤,选择安装目录和“Developer Components”组件。
继续点击“Next”按钮进入下一步,选择Server Machine(服务器),再点击“Next”进入数据库用途选择界面,选择Multifunctional Database(多功能数据库),然后点击“Next”进入并发连接设置界面选择Decision Support(决策支持系统),然后设置MySQL数据库访问量连接数和默认端口号,最后点击Finish完成安装。
SQL语言
任何生物之间的沟通以语言为桥梁,在互联网世界中也无一例外;服务器之间的沟通我们可以称之为数据传输的过程,而在数据库中,SQL语句处于一种关键性地位。
SQL语句是结构化查询语言(Structure Query Language)的缩写,是关系模型的程序设计以及数据库查询语言,专门用于数据的存储、更新、查询以及对数据库系统的管理。
简单说来,就像人类对宠物施行命令要使用特殊口令一样,SQL语句是对数据库进行 *** 作的一种特殊语言。
SQL语句主要划分为三种类别:
DCL(Data Control Language)语句
中文翻译过来又叫做数据控制语句。
该语句用于控制不同数据字段的许可和访问级别,定义了数据库、表、字段、用户的访问权限和安全级别。
常用的语句关键字包括grant、revoke等。
DML(Data Manipulation Language)语句
数据库 *** 纵语句。该语句用于插入、删除、更新和查询数据库的记录,是数据库 *** 作最常用的语句,并检查数据完整性。常用的语句关键字包括insert、delete、update和select。
DDL(Data Definition Language)语句
数据定义语言。该语句定义了不同的数据字段、数据库、数据表、列、索引等数据库对象。常用语句关键字包括create、drop、alter等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)