SQL数据更新和查询

一、数据更新

3.5.1 插入数据


1.插入元组

例3.69 将一个新学生元组插入到Student表中

INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈冬','男','IS','18');

sql server 更新数据库数据类型 sql的数据更新功能_元组


在INTO子句中指出了表明Student,并指出了新增加的元组在哪些属性上要赋值,属性的顺序可以与CREATE TABLE中的顺序不一样。VALUES子句对新元组的各属性赋值。INTO子句中没有出现的属性列新元组在这些列上将取空值。但必须注意的是,在表定义时说明了NOT NULL属性列不能取空值,否则会出错。


例3.70 将学生张成民的信息插入到Student表中。

INSERT
INTO Student
VALUES('2012151126','张成民','男','CS','18');

sql server 更新数据库数据类型 sql的数据更新功能_元组_02

INTO子句中没有指明任何属性列名新插入的元组必须在每个属性列上均有值。属性列的次序与CREATE TABLE中的次序相同。VALUES子句对新元组的各属性列赋值,一定要注意值与属性列要一 一对应。


例3.71 插入一条选课记录

INSERT
INTO SC(Sno,Cno)
VALUES('201215128','1');

sql server 更新数据库数据类型 sql的数据更新功能_升序_03


注意SC表中的外键约束


2.插入子查询结果

例3.72 对每一个系,求学生的平均年龄,并把结果存入数据库

CREATE TABLE Dept_age
(Sdept CHAR(15),
Avg_age SMALLINT);
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(SAge)
FROM Student
GROUP BY Sdept;

sql server 更新数据库数据类型 sql的数据更新功能_元组_04


sql server 更新数据库数据类型 sql的数据更新功能_元组_05


3.5.2 修改数据

1.修改某一个元组

例 3.73 将学生20121512的年龄改为22岁

UPDATE Student
SET SAge==22
WHERE Sno='201215126';

sql server 更新数据库数据类型 sql的数据更新功能_升序_06


2.修改多个元组

例 3.74 将所有学生的年龄增加1岁

UPDATE Student
SET Sage=Sage+1;

3.带子查询的修改语句

UPDATE
SET Grade=0
WHERE Sno IN
	(SELECT Sno
	FROM Student
	WHERE Sdept='CS');

3.5.2 删除数据

1.删除一个元组的值

DELETE
FROM Student
WHERE Sno='201215128';

2.删除多个元组的值

DELETE
FROM SC;

3.带子查询的删除语句

DELETE
FROM SC
WHERE Sno IN
	(SELECT Sno
	FROM Student
	WHERE Sdept='CS');



二、数据查询

单表查询

1.选择表中的若干例

SELECT*
FROM Student
//等价于
SELECT Sno,Sname,Ssex,Sage,Sdept\
FROM Student;

2.选择表中的若元组

SELECT DISTINCT Sno
FROM SC;

其中DISTINCT用来去重

//**查询计算机系全体学生的名单**
SELECT Sname
FROM
WHERE Sdept='CS';

接着上次写


挑几个不太好懂的写加强印象

例 3.27 查询CS、MA、IS系学生的姓名和性别

SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('CS','MA','IS');

等价于后面多条件查询

SELECT Sname,Ssex
FROM Student
WHERE Sdept='CS'OR Sdept='MA' OR Sdept='IS';

在满足条件的元组集合中输出Sname列和Ssex列

字符匹配

例 3.35 查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况

SELECT*
FROM Course
WHERE Cname LIKE 'DB\_%i__'ESCAPE'\';

匹配串’DB_%i__'中第一个_因前有 ’ \ ‘,被转义成普通字符’’。i后面的两个’'仍作通配符

ORDER BY 子句
ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序。

例 3.40 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;

多个属性列的排序原理:

sql server 更新数据库数据类型 sql的数据更新功能_元组_07

聚集函数
COUNT(*)
COUNT([DISTINCT | ALL] <列名>)
SUM([DISTINCT | ALL] <列名>)
AVG([DISTINCT | ALL] <列名>)
MAX([DISTINCT | ALL] <列名>)
MIN([DISTINCT | ALL] <列名>)

例 3.42 查询选修了课程的学生人数

SELECT COUNT(DISTINCT Sno)
FROM SC;

一个学生要选修多门课程,为避免重复计算学生人数,必须在COUNT函数中使用DISTINCT