第五章----关系数据库语言---SQL

一、SQL概述

  SQL,即结构化查询语言

SQL的发展:

  1974年由Boyce和Chamberlin提出SQL。

  1975年~1979年IBM在System R上实现了SQL语言。        
  第一个SQL标准是1986年10月由美国国家标准局
( American National Standard Institute, 简称ANSI)公
布,称SQL 86。
  1987年国际标准化组织( International Standards
Organization,即ISO) 也通过了这标准。

  1989年,ANSI发布SQL-89。

  1992年,ANSI公布SQL-92。

二、SQL特点

  1.综合统一

  2.高度非过程化

  3.面向集合的操作方法

  4.多种使用方式:语言既是自含式语言,又是嵌入式语言

  5.语言简洁,语法简单,易学易用。

三、SQL语言使用的三种表

 

 

 SQL语言使用三种表:基本表、查询表、视图表

1、基本表:实际存在的表。即,基本表是实表。

  DBMS保存并维护基本表的数据和元数据。在一个基本表上,可以创建并维护若干个索引表。

2、查询表:用于存放查询的中间结果,以及查询结果的表。查询表是临时表。查询表的数据和

元数据都是“临时”的。

3、视图表:简称:视图。

  它是由基本表或其它视图表“导出”的表。视图表是“虚”表。视图本身没有独立存在的数据。

四、SQL语句概述

1、数据定义:创建(删除//修改)表、视图、索引

  CREATE / DROP /(ALTER) (数据类型)

2、查询语句

SELECT..

FROM..

WHERE..

GROUP BY..

  HAVING..

ORDER BY..

(1)单表查询

(2)多表查询(连接查询)、连接表达式、自身连接

(3)嵌套查询、使用IN谓词、使用ANY或ALL谓词、使用EXISTS谓词(相关查询)

目标列表达式;*;DISTINCT;字符串;条件表达式;“空”值;聚焦函数(SUM、AVG等)

(4)集合查询

(5)视图查询

3、数据更新:INSERT/DELETE/UPDATE

 

二、数据定义

 

 

 (一)、创建、删除与修改基本表

1、创建基本表

 

 

 

 

 

 2、SQL数据类型

 

 

 3、修改基本表---修改表结构

 

 

 4、删除基本表

 语句格式:DROP TABLE<表名>

如:DROP TABLE Student

(二)、创建和删除索引

1、关于数据库索引

  能够加快给定属性值的查询响应;  增加数据更新操作的系统开销

2、创建数据库索引

  

 

 

 CREATE UNIQUE INDEX IndSname

  ON Student(Sname)

3、删除索引

  DROP INDEX<索引名>

DROP INDEX IndSname

 

三、查询

(一)、查询语句格式

 

 

 接下来的例子经常涉及以下三个表:

1.Student(Sno,Sname,Ssex,Sage,Sdept)

2.Course(Cno,Cname,Cdate,Cpno,Ccredie)

其中,Cdate是开课日期(DATETIME)类型;Cpno是先修课号;Ccredit是学分。

3.SC(SnoCno,Grade)

(二)、单表查询

查所有学生的所有属性值:

  SELECT * FROM Student

查找学生姓名,出生年份,所在系。---使用查询结果表达式

  SELECT Sname,‘Year of Birth’ AS Y-Birth,Sage AS Year,Sdept

  FROM Student

 

查找所有选过课的学生(只出现一次,不重复)

SELECT DISTINCT Sno

FROM SC

 

 

查找计算机系、年龄不大于19岁的学生学号,姓名,年龄。

  SELECT Sno,Sname, Sage

  FROM Student

  WHERE(Sage<=19)AND (Sdept=‘CS’)

找出年龄介于19和22的学生学号,姓名,出生年份

  SELECT Sno,Sname,Sage

  FROM Student

  WHERE Sage BETWEEN 19 AND 22

(字符串匹配)找计算机学院2003级所有同学的学号,姓名

  SELECT Sno,Sname

  FROM Student

  WHERE Sno LIKE '2003%'

找出姓名的第二个字是“庆”的学生学号,姓名

  SELECT Sno,Sname

  FROM Student

  WHERE Sname LIKE '_庆%'

(空值查询)查找选了课,但至今没有考试成绩的学生学号、课号

  SELECT Sno,Cno

  FROM SC

  WHERE Grade IS NULL

找出2004年8月31日以后开课的课程号(使用日期型数据类型)

  SELECT Cno

  FROM Course

  WHERE Cdate > '08/31/2004' 

(使用聚焦函数)查0305050同学的考试总分

  SELECT SUM(Grade)

  FROM SC

  WHERE Sno='0305050'

查询并统计选过课的学生人数(Sno不要重复)

  SELECT COUNT(DISTINCT Sno)

  FROM SC 

关于按照分组排序的例子

 

 

查询选修了3门以上课程的学生学号(使用HAVING子句)

  SELECT Sno

  FROM SC

  GROUP BY Sno HAVING COUNT(*) > 3

(1)首先,要按照GROUP子句的要求,对查询中间结果进行“分组”。

(2)对(1)中的分组结果,按照HAVING短语指定的“条件表达式”,进行“筛选”,得到查询结果。

 

 

 

 

 

 

 

 

  

posted on 2020-10-12 09:37  Kimsohyun4ever  阅读(298)  评论(0编辑  收藏  举报