已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MYSQL一、 引入课题:除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处。这就是 SELECT 语句的用途,即帮助取出数据。SELECT 大概是 SQL 语言中最常用的语句,而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的比较。本节介绍Select语句关于查询的最基本功能。 二:授课内容项目一:查询数据表中的记录?SELECT 语句的语法如下:SELECT 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_list 部分外,语法中的每样东西都是可选的。有的数据库还需要 FROM 子句。MySQL 有所不同,它允许对表达式求值而不引用任何表。知识点:1 普通查询l 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 | | Chirpy | 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 | +-+-+-+-+-+-+l 查询特定行:你能从你的表中只选择特定的行。例如,如果你想要验证你对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 | +-+-+-+-+-+-+你可以对照前一个例子来验证。l 查询特定列如果你不想要看到你的表的整个行,就命名你感兴趣的列,用逗号分开。例如,如果你想要知道你的动物什么时候出生的,精选name和birth列:mysql SELECT name, birth FROM pet where owner=Gwen;其结果为: +-+-+ | name | birth | +-+-+ | Claws | 1994-03-17 | | Chirpy | 1998-09-11 | | Whistler | 1997-12-09 | +-+-+l 进行表达式计算前面的多数查询通过从表中检索值已经产生了输出结果。MySQL 还允许作为一个公式的结果来计算输出列的值。表达式可以简单也可以复杂。下面的查询求一个简单表达式的值(常量)以及一个涉及几个算术运算符和两个函数调用的较复杂的表达式的值。例如,计算Browser生活的天数:mysql SELECT death-birth FROM pet WHERE name=Bowser;其结果是: +-+ | death-birth | +-+ | 49898 | +-+由于MySQL允许对表达式求值而不引用任何表。所以也可以这样使用:mysqlselect (2+3*4.5)/2.5;其结果为: +-+ | (2+3*4.5)/2.5 | +-+ | 6.200 | 学生活动:练习本功能。 知识点:1条件查询不必每次查询都返回所有的行记录,你能从你的表中只选择特定的行。为此你需要使用WHERE或者HAVING从句。HAVING从句与WHERE从句的区别是,HAVING表达的是第二条件,在与其他从句配合使用,显然不能在WHERE子句中的项目使用HAVING。因此本小节紧介绍WHERE从句的使用,HAVING从句的使用方法类似。另外WHERE从句也可以实现HAVING从句的绝大部分功能。为了限制 SELECT 语句检索出来的记录集,可使用 WHERE 子句,它给出选择行的条件。可通过查找满足各种条件的列值来选择行。WHERE 子句中的表达式可使用表1-1 中的算术运算符、表1-2 的比较运算符和表1-3 的逻辑运算符。还可以使用圆括号将一个表达式分成几个部分。可使用常量、表列和函数来完成运算。在本教程的查询中,我们有时使用几个 MySQL 函数,但是 MySQL 的函数远不止这里给出的这些。请参阅附录一,那里给出了所有MySQL 函数的清单。表3-1 算术运算符运算符 说明 运算符 说明 + 加 * 乘 - 减 / 除 表3-2 比较运算符运算符 说明 运算符 说明 小于 != 或 不等于 = 大于或等于 = 等于 大于 表3-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等等,查询结果将是相同的。你能在任何列上指定条件,不只是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; +-+-+-+-+-+-+ | name | owner | species | sex | birth | death | +-+-+-+-+-+-+ | 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 | Benny | 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子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:ORDER BY column_name ASC|DESC ,其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按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 | 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-29 | | Claws | 1994-03-17 | | Fluffy | 1993-02-04 | | Bowser | 1990-08-31 | | Fang | 1990-08-27 | | Buffy | 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 | 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 |+-+-+-+注意DESC关键词仅适用于紧跟在它之前的列名字(birth);species值仍然以升序被排序。注意,输出首先按照species排序,然后具有相同species的宠物再按照birth降序排列。 学生活动:练习本功能。 项目三:GROUP BY 从句根据所给的列名返回分组的查询结果,可用于查询具有相同值的列。其语法为:GROUP BY col_name,.你可以为多个列分组。例如:mysqlselect * from pet group by species; +-+-+-+-+-+-+ | name | owner | species | sex | birth | death | +-+-+-+-+-+-+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | +-+-+-+-+-+-+由以上结果可以看出:查询显示结果时,被分组的列如果有重复的值,只返回靠前的记录,并且返回的记录集是排序的。这并不是一个很好的结果。仅仅使用GROUP BY从句并没有什么意义,该从句的真正作用在于与各种组合函数配合,用于行计数。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(*) | +-+-+ | 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 | +-+-+如果你除了计数还返回一个列的值,那么必须使用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 | +-+-+-+ 项目四:用Alter Table语句修改表的结构有时你可能需要改变一下现有表的结构,那么Alter Table语句将是你的合适选择。l 增加列alter table tbl_name add col_name type例如,给表增加一列weightmysqlalter table pet add weight int;l 删除列alter table tbl_name drop col_name例如,删除列weight:mysqlalter table pet drop weight;l 改变列alter table tbl_name modify col_name type例如,改变weight的类型:mysql alter table pet modify weight samllint;另一种方法是:alter table tbl_name change old_col_name col_name type例如:mysql alter table pet change weight weight samllint;l 给列更名mysqlalter table pet change weight wei;l 给表更名alter table tbl_name rename new_tbl例如,把pet表更名为animalmysqlalter table pet rename animal;l 改变表的类型 另外,可以为列增加或删除索引等属性学生活动:练习本功能。 项目四:修改、删除数据记录有时,希望除去某些记录或更改它们的内容。DELETE 和 UPDATE 语句令我们能做到这一点。活动1 用update修改记录UPDATE tbl_name SET 要更改的列WHERE 要更新的记录这里的 WHERE 子句是可选的,因此如果不指定的话,表中的每个记录都被更新。例如,在pet表中,我们发现宠物Whistler的性别没有指定,因此我们可以这样修改这个记录:mysql update pet set sex=f where name=” Whistler”; 活动2 用delete删除记录DELETE 语句有如下格式:DELETE FROM tbl_name WHERE 要删除的记录WHERE 子句指定哪些记录应该删除。它是可选的,但是如果不选的话,将会删除所有的记录。这意味着最简单的 DELETE 语句也是最危险的。这个查询将清除表中的所有内容。一定要当心!为了删除特定的记录,可用 WHERE 子句来选择所要删除的记录。这类似于 SELECT 语句中的 WHERE 子句。mysql delete from pet where name=”Whistler”;可以用下面的语句清空整个表:mysqldelete from pet;活动三、用DROP Table 语句删除数据表DROP TABLE IF EXISTS tbl_name , tbl_name,.DROP TABLE删除一个或多个数据库表。所有表中的数据和表定义均被删除,故小心使用这个命令!在MySQL 3.22或以后版本,你可以使用关键词IF EXISTS类避免不存在表的一个错误发生。例如:mysqluse mytest;mysqldrop table guestbook;或者,也可以同时指定数据库和表:mysqldrop table mytest. guestbook;学生活动:练习本功能。 三、总结 本文总结了SELECT语句检索记录的简单使用方法。其中涉及到的内容主要包括以下一些内容:1、 WHERE从句的用法2、 GROUP BY从句的用法3、 ORDER
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年会展策划经理招聘面试参考题库及答案
- 2025年高级Java工程师招聘面试参考题库及答案
- 2025年轻工制造工程师招聘面试题库及参考答案
- 2025年数字营销招聘面试题库及参考答案
- 2025年系统测试工程师招聘面试题库及参考答案
- 2025年医疗器械销售专员招聘面试题库及参考答案
- 2025年客服主管人员招聘面试参考题库及答案
- 2025年化妆品营销经理招聘面试参考题库及答案
- 2025年养老客服招聘面试题库及参考答案
- 2025年驾驶教练招聘面试题库及参考答案
- 公路维修养护质量保证体系
- 中国软件行业协会:2025中国软件行业基准数据报告 SSM-BK-202509
- 国家电投集团五凌电力有限公司笔试
- 2025至2030智利电力行业项目调研及市场前景预测评估报告
- 时间介词in-on-at课件
- 电厂工控网络安全培训课件
- 合理用药培训课件内容
- 室内装修工程监理实施细则
- 个体工商户设立章程模板及编写指南
- DB15T 1969-2020 绵羊人工授精及同期发情技术操作规程
- 产房医院感染管理培训
评论
0/150
提交评论