MySQL心得4--1--数据库查询1_MySQL
程序员文章站
2022-06-06 22:34:21
...
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 '男' when 性别=0then '女' end as 性别 from xs; 例2: select学号, 姓名, case when 总学分 isnull then '尚未选课' when 总学分 =50 and 总学分52 then '优秀' when总学分 >=50 then '合格' else '不及格' 即:先写大的后写小的) 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 专业名='计算机' and 性别=0 例2: 查看不是1990年出生的学生的姓名; select 姓名 fromxs where 出生日期'1990-12-31'; 或: select 姓名 fromxs where not(出生日期>='1990-01-01'and 出生日期:]] 匹配一个单词的开始和结束 {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'escape_character ' ] /*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