SQL自学通之表达式条件语句与运算

news2024/11/15 13:01:59

目录

一、目标

二、表达式条件语句

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) RETAIL

FROM PRICE

其结果如右:

分析
真棒 你不但可以创建一个新列 而且还可以对它安自己的需要进行重命名 你可以按语 法列名 别名来对任何一个列进行重命名 注意在列名与别名之间有空格
例如 :

输入:

SQL> SELECT ITEM PRODUCE WHOLESALE, WHOLESALE+ 0.25 RETAIL

FROM 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 WORKAHOLICS

FROM VACATION
WHERE YEARS >= 5

AND
((YEARS *12)-LEAVETAKEN)/(YEARS * 12) < 0.50

给这些人放假吧 也让我们结束对AND的学习

OR

你也可以使用 OR 来对几个条件进行合并 当其中的任一个条件为真时 其结果就会为真 值 为了展示它与AND的不同 下面我们用OR来换掉上一个例子中的AND
输入:

SQL> SELECT LASTNAME WORKAHOLICS

FROM VACATION
WHERE YEARS >= 5

OR
((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 SOFTBALL

UNION
SELECT NAME FROM FOOTBALL

UNION 返回了两个表中的 10 个记录 它们是不重复的 但是两个表中共有多少人呢 包 括重复的人员
输入/输出:

SQL> SELECT NAME FROM SOFTBALL

UNION ALL
SELECT NAME FROM FOOTBALL

 

分析:
可以看到 UNION ALL与UNION一样对表进行了合并 但是它不去掉重复的记录 可是 如果我们想知道都有谁同时在两个表中呢 UNION 无法做到这一点 我们需要学习使用 INTERSECT


INTERSECT (相交)

INTERSECT 返回两个表中共有的行 看下例 它将返回两个表中有存在的员工
输入:

SQL> SELECT * FROM FOOTBALL

INTERSECT
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 FRIENDS

WHERE AREACODE IN(100,381,204)

如果你想要查找符合某一范围的记录

例如:

输入/输出:

SQL> SELECT * FROM PRICE WHERE WHOLESALE 0.25 AND
WHOLESALE < 0.75


或使用BEWTEEN 你可以这样写输入/输出:

SQL>SELECT * FROM

PRICE WHERE

WHOLESALE

BETWEEN

0.25 AND

0.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 FRIENDS

WHERE STATE = 'IL' AND

LASTNAME = 'BUNDY'

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第24章:Kubernetes Helm Introduction

目录 1. Helm简介2. Helm Charts文件&#xff08;.tgz&#xff09;组成3. Helm核心术语&#xff1a;4. Helm常用命令&#xff1a;5. DIY简单Helm Charts参考链接 1. Helm简介 Helm用于管理Kubernetes应用程序&#xff0c;Helm Charts可以用于定义、安装和升级最复杂的Kubernet…

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…

Android加载AnimatedImageDrawable播放gif动态图,Kotlin

Android加载AnimatedImageDrawable播放gif动态图&#xff0c;Kotlin import android.graphics.ImageDecoder import android.graphics.ImageDecoder.OnHeaderDecodedListener import android.graphics.drawable.AnimatedImageDrawable import android.os.Bundle import android…

SVG-椭圆弧-参数转换-计算公式-标准解读

文章目录 1.简介2.基本参数2.1.椭圆的表达2.2.参数变换2.3.注意事项 3.参考资料4.总结 1.简介 为了与其他路径段表示法保持一致&#xff0c; SVG 路径中的圆弧是根据曲线上的起点和终点定义的。椭圆弧的这种端点参数化。优点是它允许与其它路径一致的语法&#xff0c;其中所有…

Spring Security 6.x 系列(9)—— 基于过滤器链的源码分析(二)

一、前言 在本系列文章&#xff1a; Spring Security 6.x 系列&#xff08;4&#xff09;—— 基于过滤器链的源码分析&#xff08;一&#xff09;中着重分析了Spring Security在Spring Boot 的自动配置、 DefaultSecurityFilterChain 的构造流程、FilterChainProxy 的构造流…

深入学习锁--Synchronized各种使用方法

一、什么是synchronized 在Java当中synchronized通常是用来标记一个方法或者代码块。在Java当中被synchronized标记的代码或者方法在同一个时刻只能够有一个线程执行被synchronized修饰的方法或者代码块。因此被synchronized修饰的方法或者代码块不会出现数据竞争的情况&#x…

Spring Boot中使用Swagger

1. 启用Swagger 1.1 启用注解扫描和文档接口 直接在POM文件引入依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> </dependency>1.2 启动swagger-u…

ARM与大模型,狭路相逢

编辑&#xff1a;阿冒 设计&#xff1a;沐由 从去年底至今&#xff0c;伴随着OpenAI旗下ChatGPT的火爆&#xff0c;一波AI大模型推动着AI应用全面进入了大模型时代。与此同时&#xff0c;随着边缘算力的提升&#xff0c;AI大模型的部署也逐渐从云端涉入到边缘。 世界对AI算力的…

黑马一站制造数仓实战1

1. 项目目标 一站制造 企业中项目开发的落地&#xff1a;代码开发 代码开发&#xff1a;SQL【DSL SQL】 SparkCore SparkSQL 数仓的一些实际应用&#xff1a;分层体系、建模实现 2. 内容目标 项目业务介绍&#xff1a;背景、需求 项目技术架构&#xff1a;选型、架构 项目环境…

Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等

解决 Selenium 自动化中的常见疑难杂症 这里记录一些关于 Selenium的常用操作和疑难杂症。 有一些细节的知识点就不重复介绍了&#xff0c;因为之前的文章中都有&#xff01; 如果对本文中的知识点有疑问的&#xff0c;可以先阅读我以前分享的文章&#xff01; 知识点&…

1-4、调试汇编程序

语雀原文链接 文章目录 1、执行过程第一步&#xff1a;源程序第二步&#xff1a;编译连接第三步&#xff1a;执行 2、DOSBox运行程序第1步 进入EDIT.EXE第2步 编写源程序第3步 编译第4步 连接第5步 执行完整过程 3、DEBUG跟踪执行过程加载程序到内存执行程序debug和源程序数字…

【导航控制器总结-导航控制器栈 Objective-C语言】

一、导航控制器总结 1.我们接着上一堂课的内容继续 我们上节课说到哪里了,是不是就是对这个导航控制器的一个总结啊 然后,使用的注意事项 2.导航控制器使用注意事项: 1)第一点,使用导航控制器,你在创建的时候,需要给它指定一个根控制器 创建导航控制器的同时,指定…

【译】如何在调试时分析CPU和内存(Analyze CPU and Memory while Debugging)

您想了解如何使您的代码运行得更快&#xff0c;使用更少的内存&#xff0c;或者只是找出您的代码是否有CPU或内存问题?你当然会——你是一名开发人员!但是&#xff0c;内存和性能调优经常会遇到“重要但不紧急”的任务&#xff0c;因为真正紧急的事情&#xff0c;您似乎根本无…

优化 SQL 日志记录的方法

为什么 SQL 日志记录是必不可少的 SQL 日志记录在数据库安全和审计中起着至关重要的作用&#xff0c;它涉及跟踪在数据库上执行的所有 SQL 语句&#xff0c;从而实现审计、故障排除和取证分析。SQL 日志记录可以提供有关数据库如何访问和使用的宝贵见解&#xff0c;使其成为确…

Dockerfile脚本编写流程及示例

学习dockerfile指令 Dockerfile 指令 说明 FROM 指定基础镜像 MAINTAINER 声明镜像的维护者 LABEL 添加元数据标签 RUN 在容器中执行命令 CMD 容器启动后默认执行的命令 EXPOSE 暴露容器的端口 ENV 设置环境变量 ADD 将文件、目录或远程文件添加到容器中 COP…

[ 蓝桥杯Web真题 ]-外卖给好评

目录 介绍 准备 目标 效果 规定 思路 解答参考 介绍 外卖是现代生活中必备的一环。收到外卖后&#xff0c;各大平台软件常常会邀请用户在口味&#xff0c;配送速度等多个方面给与评分。在 element-ui 组件中&#xff0c;已经有相应的 Rate 组件&#xff0c;但是已有组件…

论文解读--PointPillars- Fast Encoders for Object Detection from Point Clouds

PointPillars--点云目标检测的快速编码器 摘要 点云中的物体检测是许多机器人应用(如自动驾驶)的重要方面。在本文中&#xff0c;我们考虑将点云编码为适合下游检测流程的格式的问题。最近的文献提出了两种编码器;固定编码器往往很快&#xff0c;但牺牲了准确性&#xff0c;而…

【latex笔记】双栏格式下插入单栏、双栏格式图片

双栏格式下插入单栏、双栏格式图片 1.缘起multicols2.双栏格式 插入单栏图片3.双栏格式 插入双栏图片 1.缘起multicols 插入双栏格式图片问题被困扰了有很长一段时间&#xff0c;查看网络资源也一直没找到解决方法&#xff0c;今天查看Latex官方文档&#xff0c;才发现因为mul…

spring cloud 整合Feign经行远程调用

文章目录 Feign远程调用Feign替代RestTemplate1&#xff09;引入依赖2&#xff09;添加注解3&#xff09;编写Feign的客户端4&#xff09;测试5&#xff09;总结 自定义配置配置文件方式Java代码方式 Feign使用优化 Feign远程调用 先来看我们以前利用RestTemplate发起远程调用…

将rtsp视频流发送到AWS Kinesis Video Streams的方案——使用Gstreamer(C++) Command Line

大纲 1 创建Kinesis Video Streams1.1 创建视频流1.2 记录Creation Time 2 创建策略2.1 赋予权限2.2 限制资源2.3 Json格式描述&#xff08;或上面手工设置&#xff09;2.4 注意事项 3 创建IAM用户3.1 生成密钥对3.2 附加策略3.3 记录访问密钥对 4 编译C 创建者库5 发送6 检查参…