查询数据表中的记录SELECT

上传人:m**** 文档编号:182406772 上传时间:2023-01-23 格式:DOCX 页数:14 大小:31.06KB
收藏 版权申诉 举报 下载
查询数据表中的记录SELECT_第1页
第1页 / 共14页
查询数据表中的记录SELECT_第2页
第2页 / 共14页
查询数据表中的记录SELECT_第3页
第3页 / 共14页
资源描述:

《查询数据表中的记录SELECT》由会员分享,可在线阅读,更多相关《查询数据表中的记录SELECT(14页珍藏版)》请在装配图网上搜索。

1、查询数据表中的记录(SELECT)SELECT语句可以帮助我们从MySQL中取出数据0SELECT大概是SQL语言中最常用的语句, 而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的 比较。本节介绍 Select 语句关于查询的最基本功能。除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处。这就是SELECT语句的用途,即帮助取出数据。SELECT大概是SQL语言中最常用的语句,而且怎 样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的比较 本节介绍 Select 语句关于查询的最基本功能。SELECT 语句的语法如下:S

2、ELECT selection_list 选择哪些列FROM table_list 从何处选择行WHERE primary_constraint 行必须满足什么条件GROUP BY grouping_columns 怎样对结果分组HAVING secondary_constraint 行必须满足的第二条件ORDER BY sorting_columns 怎样对结果排序LIMIT count 结果限定注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个HAVING子句必须跟在 GROUP BY子句之后和ORDER BY子句之前。除了词“SELECT”和说明希望检索什么的column_li

3、st部分外,语法中的每样东西都是可 选的。有的数据库还需要FROM子句。MySQL有所不同,它允许对表达式求值而不引用任何 表。普通查询SELECT 最简单的形式是从一张表中检索每样东西:mysql SELECT * FROM pet;其结果为:+| name| owner | species | sex | birth| death+-+| Fluffy |Harold| cat| f| 1993-02-04| NULL | Claws|Gwen| cat| m| 1994-03-17| NULL | Buffy |Harold| dog| f| 1989-05-13| NULL | Chi

4、rpy |Gwen| bird| f| 1998-09-11| NULL | Fang|Benny| dog| m| 1990-08-27| NULL | Bowser |Diane| dog| m| 1990-08-31| 1995-07-29 | Whistler |Gwen| bird| NULL| 1997-12-09| NULL | Slim|Benny| snake| m| 1996-04-29| NULL | Puffball |Diane| hamster| f| 1999-03-30| NULL |+-+查询特定行:你能从你的表中只选择特定的行。变,像这样精选 Bowser

5、的记录:例如,如果你想要验证你对Bowser的出生日期所做的改mysql SELECT * FROM pet WHERE name = Bowser;其结果为:+| name| owner| species |sex|birth|death|+| Bowser| Diane| dog|m|1990-08-31 |1995-07-29 |+你可以对照前一个例子来验证。查询特定列 如果你不想要看到你的表的整个行,就命名你感兴趣的列,用逗号分开。例如,如果你想要 知道你的动物什么时候出生的,精选name和birth列:mysql SELECT name, birth FROM pet where o

6、wner=Gwen;其结果为:+| name|birth|+| Claws|1994-03-17| Chirpy|1998-09-11| Whistler|1997-12-09|+进行表达式计算前面的多数查询通过从表中检索值已经产生了输出结果MySQL还允许作为一个公式的结果 来计算输出列的值。表达式可以简单也可以复杂。下面的查询求一个简单表达式的值(常量) 以及一个涉及几个算术运算符和两个函数调用的较复杂的表达式的值。例如,计算Browser 生活的天数:mysql SELECT death-birth FROM pet WHERE name=Bowser;其结果是:+| death-bir

7、th |+| 49898 |+由于 MySQL 允许对表达式求值而不引用任何表。所以也可以这样使用:mysqlselect (2+3*4.5)/2.5;其结果为:| (2+3*4.5)/2.5 |6.200 |条件查询 不必每次查询都返回所有的行记录,你能从你的表中只选择特定的行。为此你需要使用WHERE或者HAVING从句。HAVING从句与WHERE从句的区别是,HAVING表达的是第二条件, 在与其他从句配合使用,显然不能在WHERE子句中的项目使用HAVING。因此本小节紧介绍 WHERE从句的使用,HAVING从句的使用方法类似。另外WHERE从句也可以实现HAVING从句 的绝大部

8、分功能。为了限制 SELECT 语句检索出来的记录集,可使用 WHERE 子句,它给出选择行的条件。可 通过查找满足各种条件的列值来选择行。WHERE 子句中的表达式可使用表1 中的算术运算符、表2 的比较运算符和表3 的逻辑运算 符。还可以使用圆括号将一个表达式分成几个部分。可使用常量、表列和函数来完成运算 在本教程的查询中,我们有时使用几个 MySQL 函数,但是 MySQL 的函数远不止这里给出的 这些。请参阅附录 一,那里给出了所有 MySQL 函数的清单。表 1 算术运算符运算符说明运算符说明+加*乘减/除表 2 比较运算符运算符说明运算符说明小于!=或不等于=大于或等于=AjV -

9、r.等于大于表 3 逻辑运算符运算符说明NOT 或!逻辑非OR 或 |逻辑或AND 或 &逻辑与例如,如果你想要验证你对Bowser的出生日期所做的改变,像这样精选Bowser的记录: mysql SELECT * FROM pet WHERE name = Bowser;+| name|owner|species |sex|birth|death|+| Bowser|Diane|dog|m|1990-08-31 |1995-07-29 |+输出证实出生年份现在正确记录为1990,而不是1909。字符串比较通常是大小些无关的,因此你可以指定名字为bowser、BOWSER等等,查询结 果将是相

10、同的。你能在任何列上指定条件,不只是name。例如,如果你想要知道哪个动物在1998以后出生 的,测试 birth 列:mysql SELECT * FROM pet WHERE birth = 1998-1-1;+| name|owner|species|sex|birth|death|+| Chirpy|Gwen|bird|f|1998-09-11|NULL| Puffball|Diane|hamster|f|1999-03-30|NULL|+你能组合条件,例如,找出雌性的狗:mysql SELECT * FROM pet WHERE species = dog AND sex = f;+

11、| death | name | owner | species | sex | birth+| Buffy|Harold|dog|f|1989-05-13|NULL|+上面的查询使用AND逻辑操作符,也有一个OR操作符:mysql SELECT * FROM pet WHERE species = snake OR species = bird;+| name|owner|species|sex|birth|death|+| Chirpy|Gwen|bird|f|1998-09-11|NULL| Whistler|Gwen|bird|NULL|1997-12-09|NULL| Slim|Be

12、nny|snake|m|1996-04-29|NULL|+AND和OR可以混用。如果你这样做,使用括号指明条件应该如何被分组是一个好主意:mysql SELECT * FROM pet WHERE (species = cat AND sex = m)- OR (species = dog AND sex = f);+| name|owner|species |sex|birth|death|+| Claws|Gwen|cat|m|1994-03-17|NULL| Buffy|Harold|dog|f|1989-05-13|NULL|+查询排序使用ORDER BY子句对查询返回的结果按一列或多

13、列排序。ORDER BY子句的语法格式为:ORDER BY column_name ASC|DESC ,其中ASC表示升序,为默认值,DESC为降序。ORDERBY不能按text、text和image数据类 型进行排 序。另外,可以根据表达式进行排序。例如,这里是动物生日,按日期排序:mysql SELECT name, birth FROM pet ORDER BY birth;+| name|birth|+ | Buffy | 1989-05-13 | Fang | 1990-08-27 | Bowser | 1990-08-31 | Fluffy | 1993-02-04 | Claws

14、 | 1994-03-17 | Slim | 1996-04-29 | Whistler | 1997-12-09 | Chirpy | 1998-09-11 | Puffball | 1999-03-30 |+ 为了以逆序排序,增加DESC (下降)关键字到你正在排序的列名上:mysql SELECT name, birth FROM pet ORDER BY birth DESC;+| name| birth|+| Puffball | 1999-03-30 | | Chirpy | 1998-09-11 | Whistler | 1997-12-09 |Slim| 1996-04-29C

15、laws| 1994-03-17Fluffy| 1993-02-04Bowser| 1990-08-31Fang| 1990-08-27Buffy| 1989-05-13你能在多个列上排序。例如,按动物的种类排序,然后按生日,首先是动物种类中最年轻的 动物,使用下列查询: mysql SELECT name, species, birth FROM pet ORDER BY species, birth DESC;| name| species| birth+| Chirpy| bird| 1998-09-11| Whistler| bird| 1997-12-09| Claws| cat|

16、1994-03-17| Fluffy| cat| 1993-02-04| Bowser| dog| 1990-08-31| Fang| dog| 1990-08-27| Buffy| dog| 1989-05-13| Puffball| hamster| 1999-03-30| Slim| snake| 1996-04-29|+|查询分组与行计数GROUP BY 从句根据所给的列名返回分组的查询结果,可用于查询具有相同值的列。其语法 为:GROUP BY col_name,.你可以为多个列分组。例如:mysqlSELECT * FROM pet GROUP BY species;| name|

17、 owner | species | sex | birth| death |Chirpy| Gwenbirdf| 1998-09-11NULLFluffy| Haroldcatf| 1993-02-04NULLBuffy| Harolddogf| 1989-05-13NULLPuffball| Dianehamsterf| 1999-03-30NULLSlim| Bennysnakem| 1996-04-29NULL|由以上结果可以看出:查询显示结果时,被分组的列如果有重复的值,只返回靠前的记录,并且返回的记录集是排序的。这并不是一个很好的结果。仅仅使用GROUP BY从句并没有什么意义,该

18、从句的真正 作用在于与各种组合函数配合,用于行计数。1、COUNT ()函数计数非NULL结果的数目。你可以这样计算表中记录行的数目:mysql select count(*) from pet;| count(*) |+| 9 |+计算 sex 为非空的记录数目:mysql select count(sex) from pet;+| count(sex) |+| 8 |+现在配合 GROUP BY 从句使用。 例如:要知道每个主人有多少宠物mysql SELECT owner, COUNT(*) FROM pet GROUP BY owner; +| owner | COUNT(*) |+|

19、 Benny|2| Diane|2| Gwen|3| Harold|2|+又如,每种宠物的个数: mysql SELECT species,count(*) FROM pet GROUP BY species;| species | count(*) |+| bird|2 | cat|2 | dog|3 | hamster|1 | snake|1 |+如果你除了计数还返回一个列的值,那么必须使用GROUBY语句,否则无法计算记录。例如上例,使用 GROUP BY 对每个 owner 分组所有记录,没有它,你得到的一切是一条错误消息 mysql SELECT owner, COUNT(owner

20、) 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| c

21、at|m|1|dogf |1dogm|2hamsterf |1snakem|1+查询多个表查询多个表,FROM子句列出表名,并用逗号分隔,因为查询需要从他们两个拉出信息。当组合(联结-join)来自多个表的信息时,你需要指定在一个表中的记录怎样能匹配其它表 的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2 个表中的记录。因为 name 列出现在两个表中,当引用列时,你一定要指定哪个表。这通过把表名附在列名 前做到。现在有一个 event 表:mysqlselect * from event;+| name|date|type|remark|+| Flu

22、ffy|1995-05-15|litter|4 kittens,3female,1male| Buffy|1993-06-23|litter|5 puppies,2female,3male| Buffy|1994-06-19|litter|3 puppies,3female| Chirpy|1999-03-21|vet|needed beakstraightened| Slim|1997-08-03|vet|broken rib| Bowser|1991-10-12|kennel|NULL| Fang|1991-10-12|kennel|NULL| Fang|1998-08-28|birthd

23、ay|Gave him anew 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, r

24、emark- FROM pet, event- WHERE pet.name = event.name AND type = litter;+| name|age|remark|+| Fluffy|2.27|4kittens,3female,1male| Buffy|4.12|5puppies,2female,3male| Buffy|5.10|3puppies,3female|+同样方法也可用于同一张表中,你不必有2 个不同的表来执行一个联结。如果你想要将一个 表的记录与同一个表的其他记录进行比较,联结一个表到自身有时是有用的。例如,为了在 你的宠物之中繁殖配偶,你可以用pet联结自身来进行

25、相似种类的雄雌配对:mysql SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species- FROM pet AS p1, pet AS p2- WHERE p1.species = p2.species AND p1.sex = f AND p2.sex = m;| name| sex | name| sex | species |Fluffyf| Clawsm| catBuffyf| Fangm| dogBuffyf| Bowserm| dog在这个查询中,我们为表名指定别名以便能引用列并且使得每一个列引用关联于哪个表实例 更直观。总结本文总结了 SELECT 语句检索记录的简单使用方法。其中涉及到的内容主要包括以下一些内 容:1、WHERE 从句的用法2、GROUP BY 从句的用法3、ORDER BY 从句的用法4、连接多个表的简单介绍

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!