SQL自学通之表达式条件语句与运算
目录
一、目标
二、表达式条件语句
1、表达式:
2、条件
2.1、WHERE 子句
三、运算
1、数值型运算:
1.1、加法(+)
1.2、减法 (-)
1.3、除法(/)
1.4、乘法 (*)
1.5、取模 (%)
优先级别
2、比较运算
3、字符操作
LIKE
下划线( _)
连接(||)
4、逻辑运算
AND
OR
NOT
5、集合运算 SET
UNION 与 UNION ALL
INTERSECT (相交)
MINUS (相减)
6、从属运算 (IN and BETWEEN)
四、问与答
五、校练场
一、目标
在第二天我们学习了使用SELECT语句和FROM语句来对数据进行有趣味性 也是非常有 用的 运算 在今天我们将对昨天学习的进行进一步的扩充 我们将把新的方法应用到查 询 表和行中 引进新的子句和被称为运算的批量处理方法 在第三天的阳光下 你将学会:
知道什么叫作表达式以及如何来使用它们
知道什么叫作条件语句以及如何来使用它们
熟悉基本的子句 WHERE 的使用
可以用算术 比较 字符和逻辑表达式来建立一个运算 学会将多种不同的运算结合在一起使用
注 在今天的学习中我们来使用 PERSONAL ORACLE7 来进行应用举例 其它的 SQL 环 境在命令运算以及结果显示上与它稍有不同 但在遵循 ANSI 标准的基础上它们的结果应 该是相同的。
二、表达式条件语句
1、表达式:
表达式的定义非常简单 表达式可以返回一个值 表达式的类型非常广泛 它以包括各种 类型的数据如数字 字符 以逻辑型等 其实在下列子句 如 SELECT 和 FROM 中所占 成分中表达式最大 在下边的例子中 amount 就是一个表达式 它可以返回 amount 列中的 数据
SELECT amount FROM checks
而在下列语句中 NAME ,ADDRESS, PHONE ,ADDRESSBOOK 是表达式
SELECT NAME, ADDRESS, PHONE
FROM ADDRESSBOOK
现在 请检查一下下边的表达式
WHERE NAME = 'BROWN'
这里 NAME = 'BROWN'是一个条件语句 这是一个逻辑形表达式的实例 NAME = 'BROWN'将根据=号来返回值 TRUE 或 FALSE
2、条件
如果你想在数据库中查找一个或一组特定的信息 你需要使用一个或更多的条件 条件可 以包含在WHERE子句中 在上一个例子中 条件就是
NAME = 'BROWN'
如果你想知道在你们单位中上一个月有谁的工作时间超过了100个小时,你可能会写出下边的条件语句
NUMBEROFHOURS > 100
条件语句可以让你建立一个选择查询 在大多数情况下 条件中包括变量 常量和比较运 算 在第一个例子中的变量是 NAME 常量是'BROWN' 而比较运算符则为= 在第二个 例子中变量为 NUMBEROFHOURS,常量为 100 而比较运算符则是> 当您准备写一个条 件查询时你需要知道两个元素 WHERE子句和运算
2.1、WHERE 子句
Where 子句的语法如下:
WHERE <SEARCH CONDITION>
Select From 和 Where 在 SQL 中最常使用的三个子句 Where 只是当你的查询具有更大的 选择性 没有Where子句 你可以用查询做得最多的有用工作是显示选定表中的所有记录
例如:
输入:
SQL> SELECT * FROM BIKES
这将会将 BIKES 表中的所有数据按行列出 。
输出:
假若你想要一台特定型号的自行车 你应该键入
SQL> SELECT FROM BIKES WHERE NAME = 'BURLEY'
你将只会收到一个记录:
输出:
分析:
这个简单的例子显示出了你可以在数据库返回的数据中加以条件限制
三、运算
运算是你需要对从数据库中返回的数据进行数学处理时所用到的元素 运算可以归为六组 数值型 比较型 字符型 逻辑型和备注型以及混合型
1、数值型运算:
数值型运算有加 减 乘 除和取模 前四个不用多说 取模将返回一个除法结果中商的 余数部分 这里有两个例子
5%2=1
6%2=0
对于有小数的数据不能应用取模运算 如实数 如果你在进行数据运算时应用了几个运算符而没有在其中使用括号 那么运算进行的次序 将是先乘后除再模后加减 举例来说 表达式 2*6+9/3 其结果将是 12+3=15 但是 表 达式 2* 6+9 /3 结果则为 2*15/3=10 注意在这里你使用了括号 有时表达式不会按你所 想像的那样得出期望的结果
1.1、加法(+)
你可以在许多场合下使用加号 下面的语句将显示一个价格表:
输入 :
SQL> SELECT * FROM PRICE
输入如下右:
现在请输入:
SQL>SELECT ITEM, WHOLESALE, WHOLESALE +0.15 FROM PRICE;
OUTPUT:
分析
请不要忽视最后一列 WHOLESALE+0.15 中使用了*号 这将会显示出所有的列 和修改后产生的派生列
请再输入一次刚才的语句:
SQL> SELECT * FROM PRICE
右面是从表中返回的结果
分析
输出的结果有时原始数据并没有被改变 而标题为 WHOLESALE+0.15 的列也不是表中的 固有列 事实上 由于这个列标题太不容易为人所注意 所以你应该在它的上边再花一些工夫
请输入:
SQL> SELECT ITEM, WHOLESALE ,(WHOLESALE+ 0.15) RETAILFROM PRICE
其结果如右:
分析
真棒 你不但可以创建一个新列 而且还可以对它安自己的需要进行重命名 你可以按语 法列名 别名来对任何一个列进行重命名 注意在列名与别名之间有空格
例如 :
输入:
SQL> SELECT ITEM PRODUCE WHOLESALE, WHOLESALE+ 0.25 RETAILFROM PRICE
重命名的列如下:
注 一些SQL解释器使用的语法为 列名 = 别名 所以前一个例子要写成如下格式 :
SQL> SELECT ITEM PRODUCE,
WHOLESALE,
WHOLESALE +0.25 RETAIL,FROM PRICE
请检查你的 SQL 解释器以确认它采用哪一种语法 你大概想知道当不在命令行状态时应如何使用别名吧 很清楚 你知道报表生成器是如何 工作的吗 总有一天 当有人让你写一个报表的生成器时 你就会记住它而且不用却重复 Dr Codd 和 IBM 已经做过的工作
到现在为止 你已经看到了两种加号的用法 第一种用法是在 SELECT 子句中使用+号以 执行对数据的运算并将结果显示出来 第二种用法是在 WHERE 子句中使用加号 在 WHERE 中使用操作符可以在当你对数据有特定条件时具有更大的灵活性
在一些解释器中 加号还同时肩负着进行字符运算的责任 在稍后的几天中你将会看到这 一点
1.2、减法 (-)
减号也有两种用途 第一种用途是作为负号使用 你可以使用HILOW表来验证这项功能
SQL> SELECT * FROM HILOW
输出:
例如 这里对数据进行这样的运算
SQL> SELECT STATE - HIGHTEMP LOWS ,LOWTEMP
HIGHS FROM HILOW
第二种用法 很明显 是作为减号从某一列中减去另一列 例如:
SQL> SELECT STATE,
HIGHTEMP LOWS,
LOWTEMP HIGHS,
(LOWTEMP - HIGHTEMP) DIFFERENCE FROM HILOW
注意这里使用了别名来对输入的错误进行更正 这只不过是一种暂时的补救方法 虽然这 不是永久的解决办法 你是以后 第 21 天 常见的 SQL 错误及其解决方案 会看到如何 对数据以及输入进行更正 在那里你将学会如何对错误的数据进行更正 该查询不只是修正 至少看起来是这样 错误的数据 而且还创建了一个新列以获得每个 记录的最高与最低的差价
如何你在一个字符型字段中意外地使用了减号 你将会看到如下信息
SQL> SELECT- STATE FROM HILOW
ERROR: ORA-01722 :invalid number
在不同的解释器中错误的号码可能会不同 但是结果是相同的
1.3、除法(/)
除法只有一种显而易见的应用 在PRICE表中它的应用如下
输入:
SQL> SELECT * FROM PRICE
输出:
在下边的例句中你可以成功地将销售价折半
输入/输出:
SQL> SELECT ITEM, WHOLESALE (WHOLESALE/2) SALEPRICE; 2 FROM PRICE;
在这个 SELECT 语句中除法的作用是显而易见的 只不过将商品半价销售有点太难以理解 了
1.4、乘法 (*)
乘法的运算也非常直观 再以Price表为例:
输入:
SQL> SELECT * FROM PRICE
输出:
将表中的价格下调 10%可以用如下方法来实现:
输入/输出:
SQL>SELECT ITEM ,WHOLESALE, WHOLESALE * 0.9 NEWPRICE FROM PRICE
通过这些操作您可以在 SELECT 语句中进行复杂的运算
1.5、取模 (%)
取模运算将返回一个除法的余数部分 以REMAINS表举例如下:
输入:
SQL> SELECT * FROM REMAINS
输出:
你也可以用 NUMERATOR % DENOMINATOR 的结果来建立一个新列:
输入/输出:
SQL> SELECT NUMERATOR ,DENOMINATOR, NUMERATOR%DENOMINATOR REMAINDER FROM REMAINS
在一些 SQL 解释器中取模运算符为 MOD 下边的语句所得到的结果与上边的语句相同
SQL> SELECT NUMERATOR,DENOMINATOR,MOD(NUMERATNUMERATOR,DENOMINATOR)
REMAINDER FROM REMAINS
优先级别
在这一部分的例子中主要讲述在 SELECT 语句中的优先级别 数据库 PRECEDENCE 的内容如下:
SQL> SELECT * FROM PRECEDENCE
用 PRECEDENCE 来做如下例子:
输入/输出:
SQL> SELECT
N1+N2*N3/N4,(N1+N2)*N3/N4,
N1+(N2*N3)/N4
FROM PRECEDENCE
看到了吗 第一例与最后一例的结果是相同的 如果你把第四列改写成为 N1+N2* (N3/N4) 那么其结果与上边的例子是相同的
2、比较运算
顾名思义 比较运算就是将两个表达式进行比较并返回三个数值中的一个 True,False,Unknow,请等一下 Unknow True 和 False 的意义无需说明 但是什么是 Unknow 呢
为了便于理解什么是Unknow 你需要理解一下什么是NULL 在数据库领域内NULL 的意义就是在一个字段之中没有数据 这与在该字段中数据为零或为空的不是同一个概念 为零或为空是一种特殊的数值 而 NULL 则表示在这个字段之中什么也没有 如果你想进 行 Field=9 的比较而 Field 字段是空的 那么比较的结果就会返回 Unknow 由于 Unknow 是一种不正常的状态 所以大多数 SQL 都会置其为无效并提供一种叫 IS NULL 的操作来 测试 Null 的存在。
输入:
SQL> SELECT * FROM PRICE
输出:
请注意 WHOLESALE 字段在 ORANGES 处没有输出 这说明在这里的数值是空的 由于 这里的 WHOLESALE 字段的属性为数字 所以空值在这里是显而易见的 但是如果空值 是出现在ITEM列中 那么要将空值与空白值区分开来就是非常重要的了 请试着找一下空值:
输入/输出:
SQL> SELECT * FROM PRICE WHERE WHOLESALE IS NULL
如你所见到的 WHOLESALE 字段中的 ORANGES 是唯一的一个空值 因为它是不可见 的 可是当你使用 = 这个比较运算符时会有什么结果呢
输入/输出:
SQL> SELECT * FROM PRICE WHERE WHOLESALE = NULL
分析:
你没有得到任何记录因为比较运算在这里返回的结果为 FALSE 所以使用 WHERE SWHLESALE IS NULL在这里比使用=更恰当 它将会返回所有存在空值的记录 这个例子也是对使用 = 进行的比较操作进行的完全展示 这之中的 WHERE 子句就不 用多说了 下面简要说一下等号
在今天的早些时候你已经看到了在一些 SQL 解释器中等号可以在 SELECT 子句中用以给 搜索字段赋以别名 而在 WHERE 子句中它则用于比较操作 并且它是从多个记录中捡选 所需要数值的一种有效手段 试一下
输入:
SQL> SELECT * FROM FRIENDS
输出:
现在让我们来找一下 JD.MAST 的记录信息(在我们的这个表中这很容易 但是你的朋友可 能不只这些 也许像这样的记录你有成千上万)
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE FIRSTNAME = 'JD'
结果如我们所愿 再试一下
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE FIRSTNAME = 'AL'
注 你应该看到在这里 = 号返回了多个记录 注意第二个记录的邮政编码 ZIP 是空 的 邮政编码是一个字符型字段 你将在第8天学习如何创建和组装一个表 这个特殊的 空字段表明在字符型字段中空字段与空白字段是不同的。
此外还有一个关于敏感性的问题 试一下
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE FIRSTNAME = 'BUD'
再试一下
输入/输出:
SQL> select * from friends where firstname =' Bud'
分析:
尽管 SQL 对大小写是不敏感的 但是数据库中的数据对大小写却是敏感的 大多数公司在存储数据时采用大写以保证数据的一致性 所以你应该永远采用大写或小写来存储数据 大小写的混合使用会对你精确地查找数据造成障碍。
大于与大于等于
大于操作的使用方法如下:
输入:
SQL> SELECT * FROM FRIENDS WHERE AREACODE > 300
输出:
分析:
这个操作将显示所有比区号比300大的记录 但是不包括300 如果要包括300 应写
成如下方式:
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE AREACODE>=300
当然 你使用AREACODE>299时会得到相同的结果。
注: 在这个语句中300没有使用引号 对于数字型字段是不需要加引号的 小于与小于等于
如你所料 它们的使用方法与大于和大于等于操作相同 但结果相反
输入:
SQL> SELECT * FROM FRIENDS WHERE STATE< ‘LA’
输出:
注 为什么 STATE 会变成 ST 呢 这是因为这一列只有两个字符宽 所以结果只会返回两 个字符 如果列为COWS 那么它将会显示成CO 而AREACODE 和PHONE所在列的 列宽大于它们自身的名字 所以它们不会被截去。
分析:
请等一下 你现在知道<在字符字段中的用法了吗 当然知道了 你可以在各种数据类型 中进行你想要的比较操作 结果会因数据类型的不同而不同 例如 你在下例中使用小写 字符
输入/输出:
SQL>SELECT * FROM FRIENDS WHERE STATE <' la'
分析:
因为大写的字母代码比小写的小 所以大写的字符总是排在小写字符的前面 这里再说一 次 为了保证安全 请在执行前检查大小写情况.
技巧: 想知道你所进行操作的结果 那你先要检查一下你的电脑所采用的字符编码集 PC 机解释器使用的是ASCLL编码 而其它平台则使用EBCDIC编码 要想在结果中显示Louisiana 键入
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE STATE<= 'LA'
不等号 (<>或!=)
如果你想要查找一些除了确定信息以外的其它信息 那你可以使用不等号 由于 SQL 的解 释器不同 它可能写做 <> 或 != 如果你想找除了 AL 以外的人 你可以写出
输入:
SQL> SELECT * FROM FRIENDS WHERE FIRSTNAME
输出:
想找一下不在California住的人 可以写成
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE STATE != 'CA'
注意:! =和<>符号都表示不等于
3、字符操作
无论数据的输出是否为有条件输出 你都可以对其中的字符串进行操作 本部分将会讲述 两个操作符 LIKE和|| 以及字符串连接的概念
LIKE
如果你想从数据库中选出一部分数据并把它们添到一个模板中 并且不需要非常精确的匹 配 你可以用 = 来对每一种可能的情况进行操作 但是这一过程烦琐而又耗时 这时 你可以使用LIKE 如下例
输入:
SQL>SELECT * FROM PARTS
输出:
你怎样找出其中有 BACK 的记录呢 粗看一下这里有两个记录 可不幸的是它们有一点差别
请试一下:
输入/输出:
SQL>SELECT * FROM PARTS WHERE LOCATION LIKE ‘%BACK%’
你可能注意到了在这条语句的LIKE后边使用了% 在LIKE表达式中 %是一种通配符 它表示可能在BACK中出现的其它信息 如果你输入如下:
输入:
SQL>SELECT * FROM PARTS WHERE LOCATION LIKE ‘BACK% ’
你将会检索到所有以 BACK 开头的 LOCATION 记录
输出:
如果你输入:
输入:
SQL> SELECT * FROM PARTS WHERE NAME LIKE 'A%'
你将会得到所有NAME中以 A开头的记录
输出:
那么LIKE语句是否对大小写敏感呢 请看下边的例子:
输入/输出:
SQL> SELECT * FROM PARTS WHERE NAME LIKE 'a%'
分析:
回答是敏感的 当涉及到数据是时候总是大小写敏感的 如果你想查找在某一确定的位置上有字符的数据时你应该如何去做呢 你可以使用另一个 通配符— —下划线
下划线( _)
输入:
SQL> SELECT * FROM FRIENDS
输出:
如果你想查找所有以 开头的州 可以使用如下语句
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE STATE LIKE ‘C_’
也可以在一个语句中使用多个下划线, 如:
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE PHONE LIKE ‘555-6_6_’
这个语句也可以写成如下形式:
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE PHONE LIKE ‘555-6%’
看 它们的结果是一样的 这两个通配符也可以联合起来使用 下边的例子将找出所有的 第 2个字母为 L的记录
输入 /输出:
SQL> SELECT * FROM FRIENDS WHERE FIRSTNAME LIKE '_L%'
连接(||)
可以将两个字符串连接起来 ,例如:
输入:
SQL> SELECT FIRSTNAME || LASTNAME ENTIRENAME FROM FRIENDS
输出:
分析:
请注意这里使用的是 而不是 号 如果你试图使用 号来连接两个字符串的话 对于我 们使用的 SQL 解释程序(Personal Oracle7)将会产生如下错误信息
输入/输出:
SQL> SELECT FIRSTNAME+ LASTNAME ENTIRENAME FROM FRIENDS
ERROR:
ORA-01722: invalid number
它试图将两个数字做加法运算 但是它没有在表达式中找到任何数字
注 :有一些解释器也采用加号来连接字符串 请检查一下你的解释器 对于连接字符串这里有更多的实例:
输入/输出:
SQL> SELECT LASTNAME || ','|| FIRSTNAME NAME FROM FRIENDS
分析:
这条语句在姓与名之间插入了一个逗号
注 请注意在姓与名之间的多余的空格 这些空格是数据的一部分 对于确定的数据类型 空格将右填充至达到字段的设定宽度 请检查你的解释器 有关数据类型内容将在第 9 天 的 表的创建与维护 中讨论
至现在为止你已经学完了所有的比较操作符 对于一些问题这种方法非常好 可是如果你 是想找出所有的名字中的第一个字母为 P 并且他的应有的休假时间已经超过了 3 天的 呢
4、逻辑运算
逻辑运算用于 SQL 的 WHERE 子句中将两个或更多条件组合在一起 休假的时间总是人们在工作时讨论的热门话题 现在我们来为财务部门设计一个名为渡假VACATION 的表 内容如下 :
输入:
SQL> SELECT * FROM VACATION
输出:
假设你的公司的雇员每年可以有12天的休假时间 现在使用你所知道的逻辑运算来实现以 下要求 名字是以B开头并且他的休假时间已经超过了50天的员工
输入/输出:
SQL> SELECT LASTNAME YEARS * 12- LEAVETAKEN REMAINING FROM VACATION WHERE LASTNAME LIKE ‘B% ’AND
YEARS *12 -LEAVETAKEN 50
分析:
这个查询语句是你讫今为止学到的最为复杂的语句 SELECT 子句中使用了算术运算符来 确定每一个员工还有多少天剩余的假期 标准的算式为 YEARS * 12 – LEAVETAKEN
而 更为清楚的表达方法为 YEARS * 12) LEAVETAKEN LIKE中使用了通配符%来发现所有的以B开头的员工 而比较运算的 则用来发现所有休 假时间超过 50 天的员工 这里我们使用了逻辑运算符号AND来使查找到的记录同时满足两个条件 带下划线的
AND
AND 只有当两个表达式的值都为真的时候才会返回真 如果任意一个表达式的值不是真 那么结果就会是假的 例如 找一下在你的公司中工作不超过 5 年但是剩余的休假时间超 过 20 天的员工
输入:
SQL> SELECT LASTNAME FROM VACATION WHERE YEARS <= 5 AND LEAVETAKEN > 20
输出:
如果你想知道在你的公司中工作时间 年以上人员工和休假时间不足已有假期的 的 员工呢 你可以写成下边这样
输入/输出:
SQL> SELECT LASTNAME WORKAHOLICSFROM VACATION
WHERE YEARS >= 5AND
((YEARS *12)-LEAVETAKEN)/(YEARS * 12) < 0.50
给这些人放假吧 也让我们结束对AND的学习
OR
你也可以使用 OR 来对几个条件进行合并 当其中的任一个条件为真时 其结果就会为真 值 为了展示它与AND的不同 下面我们用OR来换掉上一个例子中的AND
输入:
SQL> SELECT LASTNAME WORKAHOLICSFROM VACATION
WHERE YEARS >= 5OR
((YEARS *12)-LEAVETAKEN)/(YEARS * 12) >= 0.50
输出:
分析:
上例中的结果仍然在其中 但是我们又多个几个记录 这几个记录出现的原因是它们满足 我们所提出的条件中的一个 OR只要记录满足其中的一个条件就会把记录返回
NOT
顾名思义 它对条件取反 条件为假时结果为真 条件为真时结果为假。
下边的 SELECT 子句将返回所有开头的名字不是 B 的员工:
输入:
SQL> SELECT *FROM VACATION
WHERE LASTNAME NOT LIKE 'B%'
输出:
当 NOT 应用于 NULL 时可以使用操作符 IS 让我们再来看一下 PRICES 表中 WHOLESALE列 ORANGES 记录中的空值
输入/输出:
SQL> SELECT * FROM PRICE
想找出所有的非空项 可以写出如下语句
输入/输出:
SQL>SELECT * FROM PRICE WHERE WHOLESALE IS NOT NULL
5、集合运算 SET
我们已经知道了SQL是基于集合的理论的 下面这一部分将讨论 集合运算
UNION 与 UNION ALL
UNION将返回两个查询的结果并去除其中的重复部分 下边有两个值勤人员表
输入:
SQL> SELECT * FROM FOOTBALL
输出:
输入:
SQL> SELECT * FROM SOFTBALL
输出:
在这两个表中有哪些不重复的人员呢 输入/输出:
SQL> SELECT NAME FROM SOFTBALLUNION
SELECT NAME FROM FOOTBALL
UNION 返回了两个表中的 10 个记录 它们是不重复的 但是两个表中共有多少人呢 包 括重复的人员
输入/输出:
SQL> SELECT NAME FROM SOFTBALLUNION ALL
SELECT NAME FROM FOOTBALL
分析:
可以看到 UNION ALL与UNION一样对表进行了合并 但是它不去掉重复的记录 可是 如果我们想知道都有谁同时在两个表中呢 UNION 无法做到这一点 我们需要学习使用 INTERSECT
INTERSECT (相交)
INTERSECT 返回两个表中共有的行 看下例 它将返回两个表中有存在的员工
输入:
SQL> SELECT * FROM FOOTBALLINTERSECT
SELECT * FROM SOFTBALL
输出:
分析:
这些记录是两个表中都存在的
MINUS (相减)
MINUS 返回的记录是存在于第一个表中但不存在于第二个表中的记录 例如 输入:
SQL> SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL
输出:
上例中显示了三个不在垒球队中的足球队员 如果你把语句的次序颠倒 那么你将得到在 垒球队中但不在足球队中的队员
输入:
SQL> SELECT * FROM SOFTBALL MINUS SELECT * FROM FOOTBALL
输出:
6、从属运算 (IN and BETWEEN)
这两个运算符对你已经做过的例子提供了更快捷的操作 如果你想找一个你在 Colorado, California,和Louisiana的朋友 可以输入:
输入:
SQL> SELECT * FROM FRIENDS WHERE STATE= 'CA' OR STATE ='CO' OR STATE = 'LA'
输出:
也可以输入:
输入/输出:
SQL> SELECT * FROM FRIENDS WHERE STATE IN('CA','CO','LA')
分析:
第二个实例比第一个更易读和简捷 我想你一会再用以前的方法来工作了吧 在 IN 中也 可以使用数字
例如:
输入/输出:
SQL> SELECT *FROM FRIENDSWHERE AREACODE IN(100,381,204)
如果你想要查找符合某一范围的记录
例如:
输入/输出:
SQL> SELECT * FROM PRICE WHERE WHOLESALE 0.25 AND
WHOLESALE < 0.75
或使用BEWTEEN 你可以这样写输入/输出:
SQL>SELECT * FROMPRICE WHEREWHOLESALEBETWEEN0.25 AND0.75
看 第二个是不是比第一个更清楚和易读
注 如果批发价为 0.25 的商品在表中存在 那么它们也将会被返回 BETWEEN 操作将包 括边界值
四、问与答
问: 如果我不想使用命令行的SQL那么学习这些东西对我有什么用?
答 不论你使用内嵌 SQL 的 COBOL 还是微软的 ODBC 它们所使用的 SQL 结构都是一 样的 所以你现在学习的东西将会更有助于你以后的学习
问: 既然SQL是一种标准 那为什么又种是让我检查一下自己的解释器呢?
答 我们所使用的是 ANSI1992 标准 但大多数供应商对它进行了修改以使它更适用于自 己的数据库 我们是以ANSI1992标准为基础的 但在具体使用时要注意它们的不同
五、校练场
应用下表的内容来回答下列问题
写一下查询 返回数据库中所有名字以M开头的每一个人
答:
SELECT * FROM FRIENDS WHERE LASTNAME LIKE 'M%';
写一个查询 返回数据库ST为LA且FIRSTNAME以AL开头的人
答:
SELECT * FROM FRIENDS WHERE ST='LA' AND FIRSTNAME LIKE 'AL%';
给你两个表 PART1 和 PART2 你如何才能找出两个表中的共有元素
WHERE a >= 10 AND a <=30 的更便捷写法是什么 请写出来?
答:可以使用INNER JOIN语句来找出两个表中的共有元素,具体方法如下:
SELECT PART1.column_name FROM PART1 INNER JOIN PART2 ON PART1.column_name = PART2.column_name;
其中,column_name表示两个表中要比较的列的名称。
WHERE a BETWEEN 10 AND 30 可以更便捷地代替WHERE a >= 10 AND a <=30。其中BETWEEN表示在某个范围内,包括最小值和最大值,比较符号可以简化为一个BETWEEN。因此,更便捷的写法是:
WHERE a BETWEEN 10 AND 30;
下面的查询将返回什么结果?
SELECT FIRSTNAME FROM FRIENDS WHERE FIRSTNAME='AL' AND LASTNAME= ‘BULHER’
答:查询返回:
练习:
用上边给出的表返回下面的结果
输入:
SQL> SELECT (FIRSTNAME || 'FROM') NAME, STATE 2 FROM FRIENDSWHERE STATE = 'IL' ANDLASTNAME = 'BUNDY'
输出:
相关文章:

SQL自学通之表达式条件语句与运算
目录 一、目标 二、表达式条件语句 1、表达式: 2、条件 2.1、WHERE 子句 三、运算 1、数值型运算: 1.1、加法() 1.2、减法 (-) 1.3、除法(/) 1.4、乘法 (*) 1.5、取模 (%) 优先级别…...

公网域名如何解析到内网IP服务器——快解析域名映射外网访问
在本地搭建主机应用后,由于没有公网IP或没有公网路由权限,在需要发布互联网时,就需要用到外网访问内网的一些方案。由于内网IP在外网不能直接访问,通常就用通过外网域名来访问内网的方法。那么,公网域名如何解析到内网…...

线程安全与并发区别
在并发编程中,"线程安全 "和 "并发 "是相关的概念,但它们有着不同的含义。 线程安全 如果一个类或方法可以同时被多个线程使用,而不会导致数据损坏或意外行为,那么这个类或方法就被认为是线程安全的。即使多…...

SEO优化是什么,如何进行SEO优化
SEO(Search Engine Optimization)是指通过对网站进行优化,提高其在搜索引擎中的排名,从而增加有机流量和改善用户体验的一系列技术和方法。 进行SEO优化可以帮助网站获得更多的有机搜索流量,并提升网站的曝光度和可见…...

nodejs发起http或https请求
前言:使用node内置模块http、https http请求 const express require(express) const http require(http)const app express()const loginConfig (token) > {return {hostname: api.test.com,port: 80,path: /test?access_token${token},method: GET} }app.…...

举例C#使用特性排除某些类成员不参与XML序列化和反序列化
在C#中,可以使用 [XmlIgnore] 特性来排除某些类成员不参与XML序列化和反序列化。这个特性告诉XML序列化器忽略被标记的成员。 以下是一个使用 [XmlIgnore] 特性的示例: using System; using System.IO; using System.Xml.Serialization;public class P…...

PHP基础 - 输入输出
在 PHP 中,有多种方法可以用来输出内容。下面是其中的几种: 1、echo: 这是最常见的输出语句之一,可以输出一个或多个字符串。它是一个语言结构,可以省略括号。使用示例如下: <?php // 使用 echo 语句输出一个字符串 echo "Hello, world!\n";// 可以使用…...

大创项目推荐 交通目标检测-行人车辆检测流量计数 - 大创项目推荐
文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…...

利用R语言heatmap.2函数进行聚类并画热图
数据聚类然后展示聚类热图是生物信息中组学数据分析的常用方法,在R语言中有很多函数可以实现,譬如heatmap,kmeans等,除此外还有一个用得比较多的就是heatmap.2。最近在网上看到一个笔记文章关于《一步一步学heatmap.2函数》,在此与…...

伦茨科技宣布ST17H6x芯片已通过Apple Find My「查找」认证
深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…...

nodejs微信小程序+python+PHP的游戏测评网站设计与实现-计算机毕业设计推荐
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...

在 JavaScript 中导入和导出 Excel XLSX 文件:SpreadJS
在 JavaScript 中导入和导出 Excel XLSX 文件 2023 年 12 月 5 日 使用 MESCIUS 的 SpreadJS 将完整的 JavaScript 电子表格添加到您的企业应用程序中。 SpreadJS 是一个完整的企业 JavaScript 电子表格解决方案,用于创建财务报告和仪表板、预算和预测模型、科学、工…...

【Pytorch】Fizz Buzz
文章目录 1 数据编码2 网络搭建3 网络配置,训练4 结果预测5 翻车现场 学习参考来自: Fizz Buzz in Tensorflowhttps://github.com/wmn7/ML_Practice/tree/master/2019_06_10Fizz Buzz in Pytorch I need you to print the numbers from 1 to 100, excep…...

C++ Primer Plus第十四章笔记
目录 1.包含对象成员的类 valarray类简介 1.2 Student类的设计 1.3 接口和实现 1.4 C和约束 2. 私有继承 2.1 私有继承和组合的异同 2.2 初始化基类组件 2.3 访问基类的方法 2.4 访问基类对象 2.5 访问基类的友元函数 2.5 使用组合还是私有继承 3. 保护继承 4. 使…...

CentOS 7 mini 运行环境搭建与测试——CentOS Mini 安装ifconfig工具【云原生开发部署实践笔记】
云原生开发部署实践笔记 一、开发测试环境搭建与测试 1.1 Linux运行环境的搭建与测试 虽然CentOS已经更新到Stream 9 版本,但基于大多数企业和单位多数使用CentOS 7版本作为运行底座,7版本也一直在更行维护,此实践基于CentOS 7 Mini版本搭…...

案例061:基于微信小程序的互助学习系统
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...

【ELK03】ES 索引的Mapping映射详解、数据类型和settings属性设置
一、ES 索引的映射和设置 1.MAPPING 映射(MAPPING)就是es中一个决定了文档如何存储,如何生成索引,字段各种类型定义的过程.类似于我们在关系型数据库中创建一个表格数据之前先定义表格有哪些字段,每个字段是什么类型,然后数据会按照这个配置写入表格,ES中同样是这个过程,它由…...

线性代数入门与学习笔记
该内容为重拾部分线性代数知识的学习笔记,内容上更多的是为了解决问题而学习的内容,并非系统化的学习。 针对的问题为:Music算法推导求解过程中的矩阵计算知识。 学习的内容包括:矩阵原理、矩阵行列式、矩阵的秩、线性变换矩阵变换…...

Linux安全学习路标
1. 操作系统基础知识 首先,你需要建立坚实的操作系统基础知识,包括Linux文件系统和目录结构、Linux进程管理、权限管理等基本概念。 2. 网络和通信安全 学习关于网络和通信安全的基础知识,包括TCP/IP协议栈、网络攻击类型、防火墙配置、网…...

常见的中间件--消息队列中间件测试点
最近刷题,看到了有问中间件的题目,于是整理了一些中间件的知识,大多是在小破站上的笔记,仅供大家参考~ 主要分为七个部分来分享: 一、常见的中间件 二、什么是队列? 三、常见消息队列MQ的比较 四、队列…...

【USRP】5G / 6G OAI 系统 5g / 6G OAI system
面向5G/6G科研应用 USRP专门用于5G/6G产品的原型开发与验证。该系统可以在实验室搭建一个真实的5G 网络,基于开源的代码,专为科研用户设计。 软件无线电架构,构建真实5G移动通信系统 X410 采用了目前流行的异构式系统,融合了FP…...

ubuntu20.04设置开机自启动jar(依赖其他服务)
目的: 有的时候我们的项目是部署在物理机上给其他公司员工使用,对于他们来说操作越简单越好。所以我需要实现将我的jar部署在ubuntu上,实现开机自启。(我的项目依赖emqx服务)。 步骤: 切换到system目录 …...

【GEE笔记】在线分类流程,标注样本点、分类和精度评价
GEE在线分类流程 介绍 GEE(Google Earth Engine)是一个强大的地理信息处理平台,可以实现在线的遥感影像分析和处理。本文将介绍如何使用GEE进行在线的分类流程,包括标注样本点、分类和精度评价。本文以2020年5月至8月的哨兵2影像…...

MATLAB基础运算
矩阵和数字相乘 就是矩阵里面每个元素跟这个数字乘一遍 矩阵和矩阵相乘 能不能相乘,需要前面矩阵的列数等于后面矩阵的行数,出来的矩阵大小是前面矩阵的行数*后面矩阵的列数。 所以大家会发现,矩阵相乘如果前后调转了,结果会完全…...

Linux DAC权限的简单应用
Linux的DAC(Discretionary Access Control)权限模型是一种常见的访问控制机制,它用于管理文件和目录的访问权限。作为一名经验丰富的Linux系统安全工程师,我会尽可能以简单明了的方式向计算机小白介绍Linux DAC权限模型。 在Linu…...

JVS低代码表单引擎:数据校验与处理的先锋
随着信息技术的迅速发展,数据校验与处理已经成为了各类应用中不可或缺的一环。尤其是在涉及敏感信息,如密码处理时,其安全性和准确性显得尤为重要。JVS低代码表单引擎提供了强大的文本组件触发逻辑校验功能,它能够在用户填写数据的…...

clickhouse删除partition分区数据
clickhouse分布式表tencent_table_20231208_DIST,本地表tencent_table_20231208_local; 30台clickhouse存储服务器; 本地表:tencent_table_20231208_local CREATE TABLE tencent_sz.tencent_table_20231208_local (id Int64 DEFA…...

持续集成交付CICD:CentOS 7 安装 Nexus 3.63
目录 一、实验 1.CentOS 7 安装Nexus3.63 二、问题 1.安装Nexus报错 2.Nexus启动停止相关命令 一、实验 1.CentOS 7 安装Nexus3.63 (1)当前操作系统版本&JDK版本 cat /etc/redhat-releasejava -version(2)下载Nexus新…...

Apache Flink(十):Flink集群基础环境搭建-JDK及MySQL搭建
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录...

LVS-DR+Keepalived+动静分离实验
架构图 解释一下架构,大概就是用Keepalived实现两台DR服务器的LVS负载均衡,然后后端服务器是两台Nginx服务器两台Tomcat服务器并且实现动静分离这个实验其实就是把 LVS-DRKeepalived 和 动静分离 给拼起来,真的是拼起来,两个部分…...