Java教程

数据库五章其二 ——SQL

本文主要是介绍数据库五章其二 ——SQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

       本人会用几天时间把在学校学到的整个数据库知识全盘托出,如果能看懂并且明白我接下来所写的博文,相信对你数据库提升、对行业软件理解、以后工作有很大帮助。

由于SQL部分内容实在太多,我会把整个第二章分成四个小部分来细讲

第二讲其二:SQL

目录

第二讲其二:SQL

 SQL的组成部分

 数据查询语言——单表查询

2.3.1查询语句格式

 SELECT后面直接跟列名

【例2.18】

  查询Book表中的书名(name),作者(author),价格(price)

【例2.19】查询Book表中的全部数据

DISTINCT关键字 

•如果在结果中重复的数据不想显示出来,可以使用DISTINCT关键字

 •【例2.22】查询每一本书九折后的价格

 列更名

 WHERE子句

• SELECT  列名列表  FROM  表名 

   WHERE  条件表达式

•【例2.25】查询价格大于30元的图书的全部信息

 范围比较:BETWEEN … AND …

•【例2.29】查询图书价格在25到50元之间的图书 

•【例2.30】图书价格不在20到30元之间的图书

比较运算  

•【例2.26】查询所有的女读者的信息

•【例2.27】查询图书价格在30到50元之间的图书

•【例2.28】查询“机械工业出版社”或者“清华大学出版社”出版的图书

集合查询:IN

•【例2.31】查找“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

•【例2.32】查找不是“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

WHERE子句中可以使用的查询条件

空值比较:IS NULL  

•【例2.38】查询性别为空的读者的信息

•【例2.39】查询出生日期不为空的读者的姓名

字符串模糊查询:LIKE

 •【例2.33】查询姓全部“王”的读者的信息。

LIKE的用法

 多重条件查询

•【例】查询1992年以后出生的女读者的姓名

查询语句格式

SELECT [ALL|DISTINCT] <目标列名序列>

FROM <数据源>

[ WHERE <检索条件表达式> ]

[ GROUP BY <分组依据列>

[ HAVING <组提取条件表达式> ] ]

[ ORDER BY <排序依据列> [ ASC|DESC ] ]

ORDER BY子句:排序

•【例2.42】查询读者的信息按出生日期的升序显示

•【例2.43】查询读者的信息按出生日期的“降序”显示

•【例2.44】查询图书的信息,查询结果按照出版社的名称升序排序,同一出版社的按照价格的降序排序。 

聚集函数

•【例2.45】统计全部图书的平均价格

•【例2.46】查询最高的图书价格

•【例2.47】统计读者的总人数 

分组查询(GROUP BY 子句)

•【例2.49】统计每个出版社的出版图书的数目

•可以使用GROUP BY <列名>进行分组

•在<列名>上值相同的元组被分在一组,该列称为分组依据列。然后可以使用聚集函数统计每一组的数据。

•【例2.42】统计每个人所借图书的数目。 

•【例2.43】统计每个出版社出版图书的平均价格,并显示每个出版社的名称 

•【例】查询出版图书平均价格高于30元的出版社名称,并显示其图书平均价格。

 •【例2.45】查询出版图书多于2本的出版社名称和出版图书数目

小结:SELECT 的基本结构

聚集函数  


 SQL的组成部分

 数据查询语言——单表查询

2.3.1查询语句格式

SELECT [ALL|DISTINCT] < 目标列名序列 >

FROM <数据源>

[ WHERE <检索条件表达式> ]

[ GROUP BY <分组依据列>

[ HAVING <组提取条件表达式> ] ]

[ ORDER BY <排序依据列> [ ASC|DESC ] ]

– 聚集函数:统计

正式讲解SQL之前先准备好软件环境,了解library数据库的结构和表的含义

 SELECT后面直接跟列名

【例2.18】

  查询Book表中的书名(name),作者(author),价格(price)

 语句:

SELECT  name,  author,  price   FROM   Book 

【例2.19】查询Book表中的全部数据

语句: 

select  * from book

DISTINCT关键字 

•如果在结果中重复的数据不想显示出来,可以使用DISTINCT关键字

•对比结果:

 【例2.20】

 SELECT  pubilsh   FROM   Book

 【例2.21】

SELECT  DISTINCT  pubilsh   FROM   Book

 •【例2.22】查询每一本书九折后的价格

SELECT  book_ID,name,price*0.9  FROM Book

 列更名

• SQL 提供了为关系表和属性重新命名的机制。 • 首先来学习一下如何为列重命名。经过计算的列、函数的列和常量列的显示结果都没有列名,也可以通过这样的方式指定列名。 • 语法格式为: •      旧列名 | 表达式 [ AS ] 新列名 •      或:新列名 =旧列名 | 表达式

 WHERE子句

SELECT  列名列表  FROM  表名 

   WHERE  条件表达式

•【例2.25】查询价格大于30元的图书的全部信息

SELECT  *  FROM Book    WHERE     price >30

 范围比较:BETWEEN … AND …

•【例2.29】查询图书价格在25到50元之间的图书

SELECT  *  FROM  Book
WHERE  price  BETWEEN  25  AND  50

等价于

SELECT  *  FROM  Book
WHERE  price>=25  AND  price <=50

         •【例2.30】图书价格不在20到30元之间的图书

SELECT * FROM Book 
WHERE  price NOT BETWEEN 20 AND 30

等价于

SELECT  *  FROM  Book 
WHERE  price<20  OR  price >30

比较运算  

•【例2.26】查询所有的女读者的信息

Select  *  from reader   where  sex=‘女’

•【例2.27】查询图书价格在30到50元之间的图书

SELECT  *  FROM  Book   WHERE  price  BETWEEN  25  AND  50

•【例2.28】查询“机械工业出版社”或者“清华大学出版社”出版的图书

 SELECT  *  FROM  Book   WHERE publish =‘机械工业出版社’ or  publish = ’ 清华大学出版社’,’ 高等教育出版社’

集合查询:IN

•【例2.31】查找“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

SELECT  *  FROM  Book 
WHERE publish IN(‘机械工业出版社’,
’ 清华大学出版社’,’ 高等教育出版社’)

•【例2.32】查找不是“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

SELECT * FROM Book 
WHERE publish NOT IN (‘机械工业出版社’,
’ 清华大学出版社’,’ 高等教育出版社’)

WHERE子句中可以使用的查询条件

 

空值比较:IS NULL  

•【例2.38】查询性别为空的读者的信息

  SELECT * FROM Reader 
                   WHERE sex IS NULL

•【例2.39】查询出生日期不为空的读者的姓名

SELECT name FROM Reader    
WHERE  birthdate  IS not NULL

字符串模糊查询:LIKE

 •【例2.33】查询姓全部“王”的读者的信息。

SELECT  *  FROM   Reader
                     WHERE  name  LIKE  ‘王%’

LIKE的用法

•列名 LIKE <字符串> •在字符串中我们可以使用通配符 –_代表任意一个字符 –%代表任意多个字符

 多重条件查询

•【例】查询1992年以后出生的女读者的姓名

SELECT name FROM Reader 
 WHERE birthdate >= ’1992-1-1’ AND sex=‘女’

查询语句格式

SELECT [ALL|DISTINCT] <目标列名序列>

FROM <数据源>

[ WHERE <检索条件表达式> ]

[ GROUP BY <分组依据列>

[ HAVING <组提取条件表达式> ] ]

[ ORDER BY <排序依据列> [ ASC|DESC ] ]

ORDER BY子句:排序

•【例2.42】查询读者的信息按出生日期的升序显示

SELECT * FROM Reader
   ORDER BY birthdate ASC

 •【例2.43】查询读者的信息按出生日期的

SELECT MAX(price) FROM Book

“降序”显示

   SELECT * FROM Reader 
   ORDER BY birthdate DESC

•【例2.44】查询图书的信息,查询结果按照出版社的名称升序排序,同一出版社的按照价格的降序排序。 

SELECT * FROM Book 
    ORDER BY publish ASC,price DESC

聚集函数

• 聚集函数(也叫集合函数),方便统计一些数据。 • COUNT ( * ) :      统计表中元组个数; • COUNT (列名 ) : 统计本列列值个数; • SUM (列名 ) : 计算列值总和(必须是数值型列); • AVG (列名 ) : 计算列值平均值(必须是数值型列); • MAX (列名 ) : 求列值最大值; • MIN (列名 ) :   求列值最小值。

•【例2.45】统计全部图书的平均价格

SELECT  AVG(price)   FROM Book

 •【例2.46】查询最高的图书价格

SELECT MAX(price) FROM Book

•【例2.47】统计读者的总人数 

SELECT COUNT(*) FROM Reader 

分组查询(GROUP BY 子句)

•【例2.49】统计每个出版社的出版图书的数目

分析:如果能够将所有的图书,按照出版社的名称进行分组,然后我们在统计每一组的元组的个数,我们就能能到得到期望的数据。如图:

•可以使用GROUP BY <列名>进行分组

•在<列名>上值相同的元组被分在一组,该列称为分组依据列。然后可以使用聚集函数统计每一组的数据。

SELECT  COUNT(*) , publish  FROM  Book
 GROUP BY publish

•【例2.42】统计每个人所借图书的数目。 

SELECT  COUNT(book_ID), Reader_id
FROM  Borrow 
GROUP  BY  Reader_id
Having   COUNT(book_ID)>2

•【例2.43】统计每个出版社出版图书的平均价格,并显示每个出版社的名称 

SELECT  publish,   AVG(price) AS   平均价格
    FROM Book
    GROUP BY publish

•【例】查询出版图书平均价格高于30元的出版社名称,并显示其图书平均价格。

•   HAVING 子句用于对分组统计后的结果进行筛选。满足HAVING 子句条件将会保留在结果中。
SELECT publish,AVG(price) FROM Book 
GROUP BY publish
HAVING AVG(price)>30

 •【例2.45】查询出版图书多于2本的出版社名称和出版图书数目

SELECT  publish, COUNT(*)  FROM Book 
GROUP  BY  publish
HAVING  COUNT(*)>2

小结:SELECT 的基本结构

• SELECT <目标列名序列>          -- 查询哪些列 • FROM <数据源>                        -- 来自于哪些表 •[WHERE <检索条件表达式>]      -- 筛选的条件 •[GROUP BY <分组依据列>]       --根据那些列分组 •[HAVING <组提取条件>]        --分组后的筛选条件 •[ORDER BY <排序依据列>]    --根据那些列排序

聚集函数  

•聚集函数(也叫集合函数),方便统计一些数据。 •COUNT( * ):     统计表中元组个数; •COUNT(列名 ): 统计本列列值个数; •SUM(列名 ):计算列值总和(必须是数值型列); •AVG(列名 ):计算列值平均值(必须是数值型列); •MAX(列名 ): 求列值最大值; •MIN(列名 ):  求列值最小值。
这篇关于数据库五章其二 ——SQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!