SQL Lesson 6: 在查询中使用表达式

之前我们在SQL中的出现col_name(属性名)的 地方,我们都只是写上col_name自身。其实在SQL中可以用col_name的地方,都可以用表达式来指定对属性进行一定的计算或处理。举个例子:假设有一个col_name是出生日期,现在要求SQL返回当前的年龄,这就可以用一个时间计算表达式对出生日期做计算得到年龄。表达式可以对数字运算,对字符串运算,也可以在表达式中只包含常量不包含col_name(如:SELECT 1+1)

包含表达式的例子

SELECT particle_speed / 2.0 AS half_particle_speed (对结果做了一个除2) 
FROM physics_data 
WHERE ABS(particle_position) * 10.0 >500 (条件要求这个属性绝对值乘以10大于500);

每一种数据库(mysql,sqlserver等)都有自己的一套函数,包含常用的数字,字符串,时间等处理过程.具体需要参看相关文档。

当我们用表达式对col属性计算时,很多事可以在SQL内完成,这让SQL更加灵活,但表达式如果长了则很难一下子读懂。所以SQL提供了AS关键字, 来给表达式取一个别名.

AS使用别名

SELECT col_expression AS expr_description, … FROM mytable;

实际上AS不仅用在表达式别名上,普通的属性列甚至是表(table)都可以取一个别名,这让SQL更容易理解.

属性列和表取别名的例子

SELECT column AS better_column_name, … 
FROM a_long_widgets_table_name AS mywidgets 
INNER JOIN widget_sales ON mywidgets.id = widget_sales.widget_id;

练习

我们来用表达式处理一些 BoxOffice标的数据,让一些数据更加的人性化而不是原始数据!

Table: Movies (Read-Only)

Id Title Director Year Length_minutes
1 Toy Story John Lasseter 1995 81
2 A Bug's Life John Lasseter 1998 95
3 Toy Story 2 John Lasseter 1999 93
4 Monsters, Inc. Pete Docter 2001 92
5 Finding Nemo Finding Nemo 2003 107
6 The Incredibles Brad Bird 2004 116
7 Cars John Lasseter 2006 117
8 Ratatouille Brad Bird 2007 115
9 WALL-E Andrew Stanton 2008 104
10 Up Pete Docter 2009 101
11 Toy Story 3 Lee Unkrich 2010 103
12 Cars 2 John Lasseter 2011 120
13 Brave Brenda Chapman 2012 102
14 Monsters University Dan Scanlon 2013 110

Table: Boxoffice (Read-Only)

Movie_id Rating Domestic_sales International_sales
5 8.2 380843261 555900000
14 7.4 268492764 475066843
8 8 206445654 417277164
12 6.4 191452396 368400000
3 7.9 245852179 239163000
6 8 261441092 370001000
9 8.5 223808164 297503696
11 8.4 415004880 648167031
1 8.3 191796233 170162503
7 7.2 244082982 217900167
10 8.3 293004164 438338580
4 8.1 289916256 272900000
2 7.2 162798565 200600000
13 7.2 237283207 301700000

Table(表): Movies

Title Price
Toy Story 361958736
A Bug's Life 363398565
Toy Story 2 485015179
Monsters, Inc. 562816256
Finding Nemo 936743261
The Incredibles 631442092
Cars 461983149
Ratatouille 623722818
WALL-E 521311860
Up 731342744
Toy Story 3 1063171911
Cars 2 559852396
Brave 538983207
Monsters University 743559607

练习 do it — 请完成如下任务

1.列出所有的电影ID,名字和销售总额(以百万美元为单位计算) 

SELECT  id,title,(Domestic_sales+International_sales)/1000000
FROM movies
left join Boxoffice on movies.id=Boxoffice.Movie_id

2.列出所有的电影ID,名字和市场指数(Rating的10倍为市场指数) 

SELECT  id,title,rating*10
FROM movies
left join Boxoffice on movies.id=Boxoffice.Movie_id

3.列出所有偶数年份的电影,需要电影ID,名字和年份 

SELECT  id,title,year
FROM movies
left join Boxoffice on movies.id=Boxoffice.Movie_id
where year %2=0

4.John Lasseter导演的每部电影每分钟值多少钱,告诉我最高的3个电影名和价值就可以

SELECT  title,(Domestic_sales+International_sales)/Length_minutes   as price
FROM movies
left join Boxoffice on movies.id=Boxoffice.Movie_id
where Director like "John Lasseter"
order by price desc
limit 3

5.电影名最长的3部电影和他们的总销量是多少

SELECT  title,(Domestic_sales+International_sales) as price
FROM movies
left join Boxoffice on movies.id=Boxoffice.Movie_id
order by len(title) desc 
limit 3
 

你可能感兴趣的:(SQL Lesson 6: 在查询中使用表达式)