Sql基础入门
本教程用简单易懂的叙述,介绍了SQL语言中最基本的select语句的各种用法,从字段、记录、表的概念,到聚合函数和GROUP BY 和 HAVING 子句。然后介绍嵌套SELECT语句,从而提升初学者应用水平。最后介绍各种表连接,使读者真正掌握select语句的精华,解决学习SQL语言的难点问题,步入SQL高手行列。
第一节SQL语言简介
SQL是结构化查询语言(Structured Query Language)的缩写。这种语言允许我们对数据库进行
复杂的查询。同时也提供了创建数据库的方法。SQL语言的使用范围非常广泛。许多数据库产品
都支持SQL语言,这意味着如果我们学会了SQL语言,我们可以把这种知识运用到MS Access 或
SQL Server, Oracle, DB2以及非常多的其它数据库中。
SQL语言运用在关系型数据库中。一个关系型数据库把数据存储在表(也称关系)中。每个
数据库的主要组成就是一组表。每个表又由一组记录组成--每条记录在表中有相同的结构,
包含固定数量的具有一定类型的字段。
下面我们来看一个实际的数据库中的表。该表的表名为cia,包含250多条记录,每个记录代表
一个国家。表由5个字段组成,字段的值有的是字符串类型,有的是数字类型。
name region area population gdp
---- ------ ------ ---------- -----------
Yemen Middle East 527970 000
Zaire Africa 2345410
Zambia Africa 752610 9445723 00
Zimbabwe Africa 390580
下面我们可以用一些SQL语句来查询这个表中我们该兴趣的数据。
db2数据库sql语句1. 中国的GDP是多少?
查询用的SQL语句为:
select gdp from cia
where name='china'
查询结果为:
00000
2. 给出每个地区的国家数和人口总数。并且按地区的人口数从多到少排序。
查询用的SQL语句为:
SELECT region, COUNT(name), SUM(population)
FROM cia
GROUP BY region
ORDER BY 3 DESC
查询结果为:
region COUNT(name) SUM(population)
------ ----------- ---------------
Asia 14 09
Africa 59 3
Europe 43 2
....
怎么样,对SQL语言有了基本的了解了吧,同时对数据库,表,记录,字段等一系列在SQL 语言中常用的
感念也有大概的认识吧。如果不是很清楚也没关系,在接下来的内容中我们从SQL语言中最简单
的内容逐步给大家作介绍,并提供丰富的练习让大家实际操作。相信学完本系列教程,你可以成为一个
SQL语言的高手。
第二节www.sqlzoo网站简介
www.sqlzoo为著名SQL网站www.sqlzoo在中国的主打网站。该网站和其它提供SQL 教程网站
最大的区别就是提供了一个可以让学习者实际练习各种SQL语句的平台。这对SQL的初学者非常重要。
同样,为有一定工作经验的数据库管理员和数据库程序员提供了几乎所有主流数据库的参考资料。
同时提供各种数据库的后台支持,让大家在线执行各种SQL语句,验证同一个SQL语句在不同数据库中的
兼容性。
www.sqlzoo给初学者提供达几百道的SQL在线练习题,从最简单的SELECT到各种复杂的JOIN语句,
可供学习时间达几十小时。这些练习题由英国Napier 大学的Andrew Cumming提供。Andrew Cumming(www.dc s.napier.ac.uk/~andrew/)长期进行SQL语言的教学,这些练习题都是
他平常教学中给学生的实际材料,因此对学生非常有针对性,很有价值。
因为这些材料本来就是英国Napier大学给他们本校学生使用的,因此对于在学校从事数据库和SQL语言教学的老师,
第三节最基本的SELECT命令
select命令或语句用来获取一个或多个表中的记录信息,一般配合where子句使用,来取得满足
某些条件的记录,如果没有where子句,将返回所有记录。一般的使用方式如下:
SELECT attribute-list
FROM table-name
WHERE condition
attribute-list:返回内容的列表,每个内容用逗号分开。这里的内容可以为字段,包含字段的表达式
或更复杂的子查询。
table-name:表名,更复杂时可以为子查询。
condition:条件表达式,用来筛选满足该条件的记录。
在本节中我们使用下表作为试验之用:
bbc(name, region, area, population, gdp)
表名为bbc,该表有5个字段(columns),又称为属性(attributes).
name :国家名
region:国家所在的地区
area: 面积
population :人口
gdp:国民生产总值
SQL实例:
一、选出所有国家名,地区和人口
SELECT name, region, population FROM bbc
二、给出France的人口数
SELECT population FROM bbc
WHERE name = 'France'
三、哪些国家的名称以字符D开始?
SELECT name FROM bbc
WHERE name LIKE 'D%'
四、国土大国(面积大于五百万平方公里)的国名和人口密度
SELECT name, population/area FROM bbc
WHERE area > 5000000
五、给出一些小(面积小于2000平方公里)而富有(国民生产总值大于50亿)的国家SELECT name , region
FROM bbc
WHERE area < 2000
AND gdp > 00
第四节GROUP BY 和HA VING 子句
在介绍GROUP BY 和HA VING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,
例如SUM, COUNT, MAX, A VG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
SELECT SUM(population) FROM bbc
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有
国家的总人口数。
通过使用GROUP BY 子句,可以让SUM 和COUNT 这些函数对属于一组的数据起作用。当你指定GROUP BY region 时,属于同一个region(地区)的一组数据将只能返回一行值.
也就是说,表中所有除region(地区)外的字段,只能通过SUM, COUNT等聚合函数运算后返回一个值.
HA VING子句可以让我们筛选成组后的各组数据.
WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HA VING子句前.而HAVING子句在聚合后对组记录进行筛选。
让我们还是通过具体的实例来理解GROUP BY 和HA VING 子句,还采用第三节介绍的bbc 表。
SQL实例:
一、显示每个地区的总人口数和总面积.
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中
的不同字段(一或多条记录)作运算。
二、显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HA VING SUM(area)>1000000
在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。相反,HA VING子句可以让我们筛选成组后的各组数据.
第五节嵌套SELECT语句
嵌套SELECT语句也叫子查询,形如:
SELECT name FROM bbc WHERE region =
(SELECT region FROM bbc WHERE name = 'Brazil')
一个SELECT 语句的查询结果可以作为另一个语句的输入值。
上面的SQL语句作用为获得和'Brazil'(巴西)同属一个地区的所有国家。
子查询不但可以出现在Where子句中,也可以出现在from子句中,作为一个临时表使用,也可以出现在select list中,作为一个字段值来返回。本节我们仅介绍的Where子句中的子查询。
在Where子句中使用子查询,有一个在实际使用中容易犯的错在这里说明一下。
通常,就像上面的例子一样,嵌套的语句总是和一个值进行比较。
语句(SELECT region FROM bbc WHERE name = 'Brazil') 应该仅返回一个地区,即'Americas'.
但如果我们在表中再插入一条地区为欧洲,国家名称为Brazil的记录,那会发生什么情况?
这将会导致语句的运行时错误.因为这个SQL语句的语法是正确的,所以数据库引擎就开始执行,
但当执行到外部的语句时就出错了。
因为这时的外部语句就像好像是SELECT name FROM bbc WHERE region = ('Americas', 'Europe'),
这个语句当然报错了。
那么有没有办法解决这个问题呢,当然有。有一些SQL查询条件允许对列表值(即多个值)进行操作。
例如"IN" 操作符,可以测试某个值是否在一个列表中。
下面的语句就可以安全的执行而不出错,不管表中有多少条包含Brazils的记录
SELECT name FROM bbc WHERE region IN
(SELECT region FROM bbc WHERE name = 'Brazil')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论