6_6_SQL

//名词
Candidate key:若表中记录的某一字段或字段组合能够唯一标志记录,则称该字段或字段组合为候选关键字
Primary key:若一个表有多个候选关键字,则选定其中一个为主关键字,也称为主键
Foreignkey:若某字段或字段组合不是数据库中A表的关键字,但它是数据库中另外一个表B表的关键字,则称该字段或字段组合为A表的外关键字

//语法,数据查询
SELECT 子旬指出查询结果中显示的字段名,以及字段名和函数组成的表达式等。
WHERE 子句定义了查询条件。WHERE子句必须紧跟FROM子句之后,其基本格式为。
OGROUPBY 子旬和ORDERBY子分别对查询结果分组和排序

//举例
下面用示例说明使用SOL语句对Student数据库进行的各种查询。
(1)查询Student数据库。查询students表中各个同学的姓名和总学分。

	USE Student SELECT name,totalscore FROM students

(2)查询表中所有记录。查询students表中各个同学的所有信息。

	SELECT *FROM students

(3)条件查询。查询students表中总学分大于等于120的同学的情况。

	SELECT *FROM students WHERE totalscore>120

(4)多重条件查询。查询students表中所在系为“计算机”且总学分大于等于120的同学的情况。

	SELECT *FROM students WHERE department='计算机'AND totalscore >= 120

(5)使用LIKE谓词进行模式匹配。查询students 表中姓“王”且单名的学生
情况。

	SELECT *FROM students WHERE name LIKE '王_'

(6)用BETWEEN…AND指定查询范围。查询students表中不在1997年出生的学生情况。

	SELECT *FROM students
		WHERE birthday NOT BETWEEN 1997-1-1'and 1997-12-31

(7)空值比较。查询总学分尚不确定的学生情况。

	SELECT *FROM students
		WHERE totalscore IS NUL

(8)自然连接查询。查找计算机系学生姓名及其“C程序设计”课程的考试分数情况。

	SLELCT name,grade
		FROM students,courses,gradesWHERE department=计算机'ANDcoursename=C程设计'ANDstudents.studentid=grades.studentid ANDcourses.courseid=grades.coursesid

(9)IN子查询。查找选修了课程号为101的学生情况。

	SELECT *FROM students
		WHERE studentid IN
		(SELECT studentid FROM courses WHERE courseid=101')

在执行包含子查询的SELECT语句时,系统首先执行子查询,产生一个结果表再执行外查询。本例中,首先执行子查询:

	SELECT studentid FROM courses,students,grades WHERE courseid='101
	AND students.studentid= qrades.studentid AND
	courses.courseid=grades.coursesid

得到一个只含有studentid列的结果表,courses中courseid列值为101的行在该结果表中都有一行。再执行外查询,若students表中某行的stuentid 列值等于子查询结果表中的任意一个值,则该行就被选择到最终结果表中。
(10)比较子查询。这种子查询可以认为是IN子查询的扩展,它是表达式的值与子查询的结果进行比较运算。查找课程号206的成绩不低于课程号101的最低成绩的学生学号。

	SELECT studentid FROM grades
		WHERE courseid=206'AND grade!<ANY
		(SELECT grade FROM grades WHERE courseid=101)

(11)EXISTS子查询。EXISTS谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,则EXISTS返回TRUE,否则返回FALSE。EXISTS还可与NOT结合使用,即NOTEXISTS,其返回值与EXISTS刚好相反。查找选修206号课程的学生姓名。

	SELECT name FROM students
		WHERE EXISTS
			(SELECT *FROM gradesWHERE studentid=students.studentid AND courseid ='206')

(12)查找选修了全部课程的同学姓名(即查找没有一门功课不选修的学生)。

	SELECT name FROM students
		WHERE NOT EXISTS
	(SELECT *FROMouses WHERE NOT EXISTS
	(SELECT *FROM grades WHERE studentid=students.studentid AND
	courseid=courses.courseid)
	)

(13)查询结果分组。将各课程成绩按学号分组。

	SELECT studentid,grade FROM grades GROUP BY studentid

(14)查询结果排序。将计算机系的学生按出生时间先后排序。

	SELECT *FROM students WHERE department=计算机'ORDER BY birthday

//常用聚合函数
在这里插入图片描述

本例对Students数据库表执行查询,使用常用的聚合函数。
(1)求选修101课程学生的平均成绩。

	SELECT AVG(grade) AS '课程101平均成绩' 
	FROM grades 
	WHERE courseid=101

(2)求选修101课程学生的最高分和最低分

	SELECT MAX(grade) AS '课程101最高分'MIN(grade) AS '课程101最低分'
	FROM grades
	WHERE courseid=101

(3)求学生的总人数。

	SELECTCOUNT(*) AS '学生总数' 
	FROM students

// 数据操作
1.插入数据语句 INSERT
INSERT可添加一条或多条记录至一个表中。
INSERT有两种语法形式。
语法1:
INSERT INTO target IN externaldatabase{DEFAULT VALUES | VALUES(DEFAULTl expression_list)}
语法 2:
INSERT INTO target [IN externaldatabase]fields_list{SELECT…IEXECUTE…)
其中,
●target:欲追加记录的表(Table)或视图(View)的名称。
●externaldatabase:外部数据库的路径和名称。
●expression_list:需要插入的字段值表达式列表,其个数应与记录的字段个数一致,若指定要插入值的字段felds list,则应与fields list的字段个数相一致。
使用第1种形式将一个记录或记录的部分字段插入到表或视图中。第2种形式的INSERT语句插入来自SELECT语句或来自使用 EXECUTE语句执行的存储过程的结果集。

例如,用以下语句向students表添加一条记录:
INSERT INTO students
VALUES(‘130206"罗亮’,01/30/1994’,1,150)

2.删除数据语句 DELETE
DELETE用于从一个或多个表中删除记录。
DELETE语句的语法格式如下:

DELETE FROM table names
[WHERE...]

例如,用以下语句从students表中删除姓名为“罗亮”的记录:

DELETE FROM students
	WHERE name=罗亮

3.更新数据语句 UPDATE
UPDATE语用于更新表中的记录。
UPDATE语的语法格式如下:

UPDATE table name
SET Field_1=expression_l[,Field_2=expression_2...]
[FROM tablel_name|viewl_name[,table2_name|view2_name..] ]
[WHERE...]

其中,
●Field:需要更新的字段。
●expression:表示要更新字段的新值表达式。例如,以下语句将计算机系学生的总分增加10:

UPDATE students
SET totalscore=totalscore +10
WHERE department=计算机'
  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值