ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库五章其二 ——SQL

2022-02-01 10:00:30  阅读:1667  来源: 互联网

标签:数据库 五章 查询 Book SELECT SQL WHERE 列名 图书


目录

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

由于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(列名 ):  求列值最小值。

标签:数据库,五章,查询,Book,SELECT,SQL,WHERE,列名,图书
来源: https://blog.csdn.net/rej177/article/details/122762751

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有