热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL心得4--1--数据库查询1_MySQL

MySQL心得4--1--数据库查询1
bitsCN.com 1. 选择(Selection)作用于行! 选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。 选择运算的记号为sF(R)。其中s是选择运算符,下标F是一个条件表达式,R是被操作的表。 若要在学生情况表中找出学生表中性别为女的行形成一个新表,则运算式为:sF(学生)F:性别=“女”,该选择运算的结果如下: 学 号 姓 名 专 业 名 性 别 出 生 日 期 总 学 分 备 注 081103 王燕 计算机 女 1989-10-06 50 2.投影(projection)作用于列! 投影也是单目运算,该运算从表中选出指定的属性值组成一个新表,记为:?A(R)。其中A是属性名(即列名)表,R是表名。 若在学生情况表中对学号、姓名和总学分投影,运算式为:?学号,姓名,总学分(学生)该运算得到如下: 学 号 姓 名 总 学 分 081101 王林 50 081102 程明 50 081103 王燕 50 3.连接(join) 连接是把两个表中的行按照给定的条件进行拼接而形成新表,记为:RS。其中,R、S是被操作的表,F是条件。 两个表连接最常用的条件是两个表的某些列值相等,这样的连接称为等值连接。 数据库应用中最常用的是“自然连接”。进行自然连接运算要求两个表有共同属性(列),自然连接运算的结果表是在参与操作两个表的共同属性上进行等值连接后再去除重复的属性后所得的新表。自然连接运算记为:RS,其中R和S是参与运算的两个表。 4.选择列 基本查询(单表查询):select 列1,列2,。。。from 表名 1)看所有字段 :select * fromproduct; 2)部分字段(选择指定的列): select 字段名1,字段名2 from product; 使用SELECT语句选择一个表中的某些列,各列名之间要以逗号分隔 3)给列加列标题 当希望查询结果中的某些列或所有列显示时且使用自己选择的列标题时,可以在列名之后使用AS子句来更改查询结果的列别名。 字段名 [as] 列标题 如果列标题中有空格,要使用单引号,中括号内的内容都可以省略。 select pnumber as 产品编号,pname as 产品名称 from product; 说明:不允许在where子句中使用列别名。这是因为,执行where代码时,可能尚未确定列值。例如,下述查询是非法的: SELECT 性别 ASSEX FROM XS WHERE SEX=0; 4)替换查询结果中的数据 在对表进行查询时,有时对所查询的某些列希望得到的是一种概念而不是具体的数据。例如查询XS表的总学分,所希望知道的是学习的总体情况,这时,就可以用等级来替换总学分的具体数字。 格式为: case when 条件1 then 表达式1 when 条件2 then 表达式2 …… else 表达式 end case: 替换查询中的结果(case是一行,所以中间打回车不用分号或逗号) 例1: select 学号,姓名,case when 性别=1then &#39;男&#39; when 性别=0then &#39;女&#39; end as 性别 from xs; 例2: select学号, 姓名, case when 总学分 isnull then &#39;尚未选课&#39; when 总学分 <50 then &#39;不及格&#39; when总学分 >=50 and 总学分<=52 then &#39;合格&#39; else &#39;优秀&#39; (或者可以简单的这么写:when总学分>52 then &#39;优秀&#39; when总学分 >=50 then &#39;合格&#39; else &#39;不及格&#39; 即:先写大的后写小的) end as等级 from XS 5)计算列 使用select对列进行查询时,在结果中可以输出对列值计算后的值,即select字句可使用表达式作为结果。 计算列值使用算术运算符:+、-、*、/和%(取余)后面细讲。 例1:select 学号,姓名,总学分+5 from xs;(字段总学分+5会显示在列标题处) 例2:select 学号,课程号, 成绩*1.20 as 成绩 120 from XS_KC 5. 使用数据库和表的主要目的是存储数据以便在需要时进行检索、统计或组织输出,通过SQL语句的查询可以从表或视图中迅速方便地检索数据。SQL的SELECT语句可以实现对表的选择、投影及连接操作。 select语句(是SQL的核心)可以从一个或多个表中选取特定的行和列,结果通常是生成一个临时表(即不会改变原来的表结构)。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中,这就是实现选择和投影运算的一个形式。 6. 选择行 where 条件 where子句会根据条件对from子句的中间结果中的行一行一行地进行判断,当条件为true的时候,一行就被包含到where子句的中间结果中。 判定运算包括比较运算、模式匹配、范围比较、空值比较和子查询。 1). 比较运算 比较运算符用于比较两个表达式值,MySQL支持的比较运算符有:=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!=(不等于)。 比较运算的语法格式为: expression { = | <| <= | > | >= | <=> |<> | != } expression 其中expression是除TEXT和BLOB外类型的表达式。 当两个表达式值均不为空值(NULL)时,除了“<=>”运算符,其他比较运算返回逻辑值TRUE(真)或FALSE(假);而当两个表达式值中有一个为空值或都为空值时,将返回unknown。 MySQL有一个特殊的等于运算符“<=>”,当两个表达式彼此相等或都等于空值时,它的值为TRUE,其中有一个空值或都是非空值但不相等,这个条件就是FALSE。没有UNKNOWN的情况。 例:查询XS表中备注为空的同学的情况。 SELECT 姓名,学号,出生日期,总学分 FROM XS WHERE 备注<=>NULL; 2).逻辑运算符: and or not 例1: 计算机系女生记录 表中女用0表示 select 姓名,专业名,性别 from xs where 专业名=&#39;计算机&#39; and 性别=0 例2: 查看不是1990年出生的学生的姓名; select 姓名 fromxs where 出生日期<&#39;1990-01-01&#39;or 出生日期>&#39;1990-12-31&#39;; 或: select 姓名 fromxs where not(出生日期>=&#39;1990-01-01&#39;and 出生日期<=&#39;1990-12-31&#39;); 7. 模式匹配:模糊查询 匹配符:% _ %:任意多个任意字符 ; _:任意单个字符 like运算符: like运算符用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar、text、datetime等类型的数据,返回逻辑值TRUE或FALSE。 使用LIKE进行模式匹配时,常使用特殊符号_和%,可进行模糊查询。“%”代表0个或多个字符,“_”代表单个字符。 escape_character:转义字符,escape_character没有默认值,且必须为单个字符。当要匹配的字符串中含有与特殊符号(_和%)相同的字符时,此时应通过该字符前的转义字符指明其为模式串中的一个匹配字符。使用关键字escape可指定转义符。 由于MySQL默认不区分大小写,要区分大小写时需要更换字符集的校对规则。 例1:查询XSCJ数据库XS表中姓“王”的学生学号、姓名及性别。 SELECT 学号,姓名,性别 FROM XS WHERE 姓名 LIKE &#39;王%&#39;; 例2:name中倒数第二个字母是b的姓名 name like &#39;%b_&#39; 8. 如果我们想要查找特殊符号中的一个或全部(_和%),我们必须使用一个转义字符。 例:查询XS表中名字包含下画线的学生学号和姓名。 SELECT 学号,姓名 FROM XS WHERE 学号 LIKE &#39;%#_%&#39; ESCAPE&#39;#&#39;; 说明:定义了“#”为转义字符以后,语句中在“#”后面的“_”就失去了它原来特殊的意义。也可以不用“#”用其他任何符号。 9. regexp运算符(改运算符不是SQL标准的一部分。即也许在MySQL中能用,在sever SQl中却用不了,跨平台性不高,所以慎用) regexp运算符用来执行更复杂的字符串比较运算。regexp是正则表达式(regular expression)的缩写。和LIKE运算符一样,regexp运算符有多种功能,但它不是SQL标准的一部分,regexp运算符的一个同义词是rlike。 语法格式: match_expression [ not ][ regexp | rlike] match_expression like运算符有两个符号具有特殊的含义:“_”和“%”。而regexp运算符则有更多的符号有特殊的含义,参见下表: 特殊字符 含 义 特殊字符 含 义 ^ 匹配字符串的开始部分 [abc] 匹配方括号里出现的字符串abc $ 匹配字符串的结束部分 [a-z] 匹配方括号里出现的a~z之间的1个字符 . 匹配任何一个字符(包括回车和新行) [^a-z] 匹配方括号里出现的不在a~z之间的1个字符 * 匹配星号之前的0个或多个字符任何序列 | 匹配符号左边或右边出现的字符串 + 匹配加号之前的1个或多个字符的任何序列 [[. .]] 匹配方括号里出现的符号(如空格、换行、括号、句号、冒号、加号、连字符等) ? 匹配问号之前0个或多个字符 [[:<:]和[[:>:]] 匹配一个单词的开始和结束 {n} 匹配括号前的内容出现n次的序列 [[: :] 匹配方括号里出现的字符中的任意一个字符 () 匹配括号里的内容 10. where子句必须紧跟from子句之后,在where子句中,使用一个条件从from子句的中间结果中选取行。其基本格式为: where where_definition 其中,where_definition为查询条件。语法格式为: where_definition: | { and | or } | (where_definition) | not where_definition 其中,predicate为判定运算,结果为true、false或unknown。 : expression { = | <| <= | > | >= | <=> | <> | !=} expression /*比较运算*/ | match_expression [ NOT ] like match_expression [ ESCAPE&#39;escape_character &#39; ] /*like运算符*/ | match_expression [ NOT ][ regexp |rlike] match_expression /*regexp运算符*/ | expression [ not ] between expression and expression /*指定范围*/ | expression is [ not ] null /*是否空值判断*/ | expression [ not] in ( subquery | expression [,…n] ) /*in子句*/ | expression { = | <| <= | > | >= | <=> | <> | !=} {all | some | any} (subquery ) /*比较子查询*/ | exist ( subquery ) /*exist子查询*/ 说明: In关键字既可以指定范围,也可以表示子查询。 在SQL中,返回逻辑值(TRUE或FALSE)的运算符或关键字都可称为谓词。 作者 tianyazaiheruan bitsCN.com
推荐阅读
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
author-avatar
UTOB
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有