使用如下三个表,写出操作语句。一个SQL中的简单查询,各位大大求帮忙!! 在oracle sql语句里有没有if...else...的...

作者&投稿:典妻 (若有异议请与网页底部的电邮联系)
1.select 职工名称,基本工资+津贴+奖金-扣除 from 工资,职工
where 工资.职工号=职工.职工号
2.select 姓名,性别,年龄 from 职工 where year(getdate())-year(D)>35

3.select 部门名,部门人数 from 部门,(
select 部门号,count(*) as 部门人数 from 职工
group by 部门号
having count(*)>=10
order by 部门人数) as a where 部门.部门号=a.部门号

--1
CREATE DATABASE 财务数据库
ON PRIMARY
( NAME = 财务数据,FILENAME = 'F:\财务数据\财务数据.mdf',
SIZE = 10,FILEGROWTH = 1)
LOG ON( NAME = 财务日志,FILENAME = 'F:\财务日志\财务日志.ldf',
SIZE = 1,FILEGROWTH = 10% );
GO
USE 财务数据库
GO
--2
CREATE TABLE 部门
(部门号 CHAR(8) PRIMARY KEY,
部门名 CHAR(12),
负责人 CHAR(6),
电话 CHAR(16))
GO
CREATE TABLE 职工
(部门号 CHAR(8) REFERENCES 部门,
职工号 CHAR(10) PRIMARY KEY,
姓名 CHAR(8),
性别 CHAR(2),
出生日期 DATE)
GO
CREATE TABLE 工资
(职工号 CHAR(10) REFERENCES 职工,
基本工资 NUMERIC(8,2),
津贴 NUMERIC(8,2),
奖金 NUMERIC(8,2),
扣除 NUMERIC(8,2))
GO
--(1)
SELECT 姓名,基本工资+津贴+奖金-扣除 AS 实发工资
FROM 职工 JOIN 工资 ON 职工.职工号=工资.职工号
--(2)
SELECT 姓名,性别,YEAR(GETDATE())-YEAR(出生日期) 年龄
FROM 职工
WHERE YEAR(GETDATE())-YEAR(出生日期)>35

--(3)
SELECT 部门名,COUNT(*) 职工人数
FROM 部门 JOIN 职工 ON 部门.部门号=职工.部门号
GROUP BY 部门名
HAVING COUNT(*)>=10
ORDER BY 2 DESC

脖子都歪了,头晕。

SQL语句,在同一张表中把三个条件查询的三个结果组合到一起,并加起来!!~

select sum(PICTURE)
from (
select count(PICTURE)*5 PICTURE from "DB2ADMIN"."C_NEWS" where PICTURE is not null
union all
select count(*)*5 DETAILS from "DB2ADMIN"."C_NEWS" where length(DETAILS)0
union all
select count(*)*10 DETAILS from "DB2ADMIN"."C_NEWS" where length(DETAILS)>1000
) a

oracle 中if ..else 可以再pl/sql 中使用,
如果是要在SQL语句中达到这种效果可以用case when ... then ...else ..end;
mysql数据库中CASE WHEN语句。

case when语句,用于计算条件列表并返回多个可能结果表达式之一。

CASE 具有两种格式:

简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。

CASE 搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的 ELSE 参数。

语法
简单 CASE 函数:


复制代码 代码如下:

CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END


CASE 搜索函数:


复制代码 代码如下:

CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END


参数
input_expression

是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft? SQL Server? 表达式。

WHEN when_expression

使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL
Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。

占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

THEN result_expression

当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值为 TRUE 时返回的表达式。
result expression 是任意有效的 SQL Server 表达式。

ELSE else_result_expression

当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL
值。Else_result_expression 是任意有效的 SQL Server 表达式。Else_result_expression
和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。

WHEN Boolean_expression

使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。

结果类型

从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。

结果值

简单 CASE 函数:
计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。

返回第一个取值为 TRUE 的 (input_expression = when_expression) 的 result_expression。

如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
CASE 搜索函数:
按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。

返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。

如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。

下面分享一些mysql case when语句的例子。

A. 使用带有简单 CASE 函数的 SELECT 语句
在 SELECT 语句中,简单 CASE 函数仅检查是否相等,而不进行其它比较。

例子,使用 CASE 函数更改图书分类显示。

复制代码 代码如下:

USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
ELSE 'Not yet categorized'
END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL
ORDER BY type, price
COMPUTE AVG(price) BY type
GO


注释,后来我试了一下不让用category=。

我使用的代码为:


复制代码 代码如下:

SELECT
case gender
WHEN 1 THEN 'NAN'
WHEN 0 THEN 'NV'
end as gender
FROM
t_swidy_day_nutrient


结果集:


Category Shortened Title Price
------------------- ------------------------- --------------------------
Business You Can Combat Computer S 2.99
Business Cooking with Computers: S 11.95
Business The Busy Executive's Data 19.99
Business Straight Talk About Compu 19.99

avg
==========================
13.73

Category Shortened Title Price
------------------- ------------------------- --------------------------
Modern Cooking The Gourmet Microwave 2.99
Modern Cooking Silicon Valley Gastronomi 19.99

avg
==========================
11.49

Category Shortened Title Price
------------------- ------------------------- --------------------------
Popular Computing Secrets of Silicon Valley 20.00
Popular Computing But Is It User Friendly? 22.95

avg
==========================
21.48

Category Shortened Title Price
------------------- ------------------------- --------------------------
Psychology Life Without Fear 7.00
Psychology Emotional Security: A New 7.99
Psychology Is Anger the Enemy? 10.95
Psychology Prolonged Data Deprivatio 19.99
Psychology Computer Phobic AND Non-P 21.59

avg
==========================
13.50

Category Shortened Title Price
------------------- ------------------------- --------------------------
Traditional Cooking Fifty Years in Buckingham 11.95
Traditional Cooking Sushi, Anyone? 14.99
Traditional Cooking Onions, Leeks, and Garlic 20.95

avg
==========================
15.96

(21 row(s) affected)

B. 使用带有简单 CASE 函数和 CASE 搜索函数的

SELECT 语句
在 SELECT 语句中,CASE 搜索函数允许根据比较值在结果集内对值进行替换。

例子:根据图书的价格范围将价格(money 列)显示为文本注释。


复制代码 代码如下:

USE pubs
GO
SELECT 'Price Category' =
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
ELSE 'Expensive book!'
END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO


结果集:


Price Category Shortened Title
--------------------- --------------------
Not yet priced Net Etiquette
Not yet priced The Psychology of Co
Very Reasonable Title The Gourmet Microwav
Very Reasonable Title You Can Combat Compu
Very Reasonable Title Life Without Fear
Very Reasonable Title Emotional Security:
Coffee Table Title Is Anger the Enemy?
Coffee Table Title Cooking with Compute
Coffee Table Title Fifty Years in Bucki
Coffee Table Title Sushi, Anyone?
Coffee Table Title Prolonged Data Depri
Coffee Table Title Silicon Valley Gastr
Coffee Table Title Straight Talk About
Coffee Table Title The Busy Executive's
Expensive book! Secrets of Silicon V
Expensive book! Onions, Leeks, and G
Expensive book! Computer Phobic And
Expensive book! But Is It User Frien

(18 row(s) affected)

C. 使用带有 SUBSTRING 和 SELECT 的 CASE 函数

例子,使用 CASE 和 THEN 生成一个有关作者、图书标识号和每个作者所著图书类型的列表。






首先,来看下 CASE 的语法。在一般的 SELECT 中,其语法如下:


复制代码 代码如下:

SELECT =
CASE
WHEN THEN
WHEN THEN
ELSE
END


以上代码,需要用具体的参数代替尖括号中的内容。




甚至还可以组合这些选项,添加一个 ORDER BY 子句,例如:

复制代码 代码如下:

USE pubs
GO
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range,
Title
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
GO


除了选择自定义字段之外,在很多情况下 CASE 都非常有用。

稍加深入,还可以得到以前认为不可能得到的分组排序结果集。
使用CASE WHEN进行字符串替换处理


在SELECT查询中使用CASE WHEN

复制代码 代码如下:

/*
mysql> SELECT Name, RatingID AS Rating,
-> CASE RatingID
-> WHEN 'R' THEN 'Under 17 requires an adult.'
-> WHEN 'X' THEN 'No one 17 and under.'
-> WHEN 'NR' THEN 'Use discretion when renting.'
-> ELSE 'OK to rent to minors.'
-> END AS Policy
-> FROM DVDs
-> ORDER BY Name;
+-----------+--------+------------------------------+
| Name | Rating | Policy |
+-----------+--------+------------------------------+
| Africa | PG | OK to rent to minors. |
| Amadeus | PG | OK to rent to minors. |
| Christmas | NR | Use discretion when renting. |
| Doc | G | OK to rent to minors. |
| Falcon | NR | Use discretion when renting. |
| Mash | R | Under 17 requires an adult. |
| Show | NR | Use discretion when renting. |
| View | NR | Use discretion when renting. |
+-----------+--------+------------------------------+
8 rows in set (0.01 sec)
*/
Drop table DVDs;
CREATE TABLE DVDs (
ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(60) NOT NULL,
NumDisks TINYINT NOT NULL DEFAULT 1,
RatingID VARCHAR(4) NOT NULL,
StatID CHAR(3) NOT NULL
)
ENGINE=INNODB;
INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)
VALUES ('Christmas', 1, 'NR', 's1'),
('Doc', 1, 'G', 's2'),
('Africa', 1, 'PG', 's1'),
('Falcon', 1, 'NR', 's2'),
('Amadeus', 1, 'PG', 's2'),
('Show', 2, 'NR', 's2'),
('View', 1, 'NR', 's1'),
('Mash', 2, 'R', 's2');
SELECT Name, RatingID AS Rating,
CASE RatingID
WHEN 'R' THEN 'Under 17 requires an adult.'
WHEN 'X' THEN 'No one 17 and under.'
WHEN 'NR' THEN 'Use discretion when renting.'
ELSE 'OK to rent to minors.'
END AS Policy
FROM DVDs
ORDER BY Name;

如何用SQL语句把现有3个表中的3个字段的所有组合方式创建一张新表
答:select sum(PICTURE)from (select count(PICTURE)*5 PICTURE from "DB2ADMIN"."C_NEWS" where PICTURE is not null union all select count(*)*5 DETAILS from "DB2ADMIN"."C_NEWS" where length(DETAILS)<1000 and="">0 union all select count(*)*10 DETAILS from "DB2ADMIN"."C_NEWS"...

sql server 语句如何将3个表合并成一个表?
答:但是在执行合并的时候,需要对每一个待合并的数据,打上一个标签,代表这个是哪个表中来的数据,这个标签最后用于区分同一个人的不同的成绩是分别是多少,不能因为合并在一起后,就把同一个人的三项成绩给搞混了。合并后的数据进行行转列的操作。具体的SQL语句如下图所示:...

用join连线三个表的查询,该怎么写语句?
答:SQL里3个表的连线查询的语句怎么写呀? 两种: 1.select * from 表1,表2,表3 where 表1.栏位=表2.栏位 and 表1.栏位=表3.栏位 这种效率比较低 结构简单资料量小可以采用 2.select * from 表1 join 表2 on 表1.栏位=表2.栏位 and join 表3 on 表1.栏位=表3.栏位 ...

我想用sql语句实现以下查询:A,B,C为三个表,每个表里对应一个字段a,b...
答:select * from A,B,C where substr(A.a,1,3) = B.b and substr(A.a,4,3) = c;

求个数据库原理的作业 写出创建如下三张表的SQL语句,在定义表的同时定义...
答:CREATE TABLE [dbo].[图书表] ([书号] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,[书名] [nvarchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,[第一作者] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,[出版日期] [smalldatetime] NULL ,[价格] [numeric](4, 1...

所创建的三张表,写出创建满足如下要求的视图的sql语句:查询销售了...
答:if(rb_R.Checked==true){ data[2] = 0x00;if (rb_clock.Checked == true){ data[3] = 0x00;} else if (rb_anclock.Checked == true){ data[3] = 0x01;} if (cmb_speed.Text.ToString() == "停止"){ data[4] = 0x00;data[5] = 0x00;} else { data[4] = Byte....

已知三个关系模式(学生表,课程表,成绩表)用SQL语句实现以下内容_百度...
答:CREATE TABLE 选课表 (学号 CHAR(8) REFERENCES 学生表(学号),课程编号 CHAR(6) REFERENCES 课程表(课程编号),成绩 smallint)GO INSERT INTO 学生表 VALUES('20100101','李丹','女','1993-6-6','管理系')GO SELECT 学号,姓名,所在系 FROM 学生表 GO SELECT 学生表.学号,姓名 FROM 学生表 ...

二、使用SQL语句完成以下操作: 数据库中有三个关系(基本表): S(学号...
答:1、create table sc(学号 Char(10),课程号 Char(10),成绩 float(10)primary key(学号,课程号))2、alter table s add 地址 char(30),身份证号码 char(20)3、select 姓名,年龄 from s order by 年龄 desc 4、select * from s where left(姓名,1)='王'PS:好好上课啊 这个是基础中的...

sql语言怎么把三个表自然连接在一起?
答:把三个表自然连接在一起的方法如下:1 有关联 select from a left join b on a.id=b.id left join c on b.id=c.id 2 无关联 select id from a union all select id from b union all select id from c 其中:inner join 只显示符合条件的数据行,此为默认的join方式,inner 可以省略...

...设计一个简单的数据库,要求有至少三个表,每个表的字段不少于三个,每...
答:要求 1.提交报告的创建表和插入表数据的SQL语句须在SQL Server 2000中进行测试验证。2.每位同学独立完成,最后如果发现两位同学的报告存在25%以上雷同,则两人的期中考试成绩记为0分,请学习委员收设计报告的时候进行筛查。3.最终上交设计报告要求用A4纸打印。4.提交学委时间为11月5日,学委进行筛查...