文章目录
二. 关于对数据表中数据的操作
以下数据的操作都是围绕这三个数据表
-
student
-
course表
向输入cpno为null的元组,再选择cpno为已经输入元组cno值相同的元组输入。不然会出现参照不完整的报错。
-
CS表
这个表的数据是查看cource表和student表中的数据
1)数据查询
a.单表查询
选择表中的列
- 查询指定列
select 属性1,属性2... from 表名
-
查询全部列
查询全部列时可以用
*
来标识所有列
-
查询经过计算的值
选择表中的行
-
去重
使用distinct关键字
-
条件查询
-
单条件查询
a. 比较
b. 范围
between是包含边界的
not between不包含边界
c. 确定集合
d. LIKE模糊查询
用
_
表示任意一个字符,如"李_",表示姓李,长度为2的名字_
被用来表示任意一个字符,%表示任意多个任意字符,如果查询数据中包含这两个字符可以用ESCAPE转义使用
\
作为转义发生无法执行的错误被当作转义字符串的串最好是不经常使用的串>
e. 多条件查询
-
order by 排序
默认是递增(asc)排序。默认时可以省略asc。递减需要指定desc
聚集函数
group by 子句
GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。
对查询结果分组的目的是为了细化聚集函数的作用对象。分组后聚集函数将作用于每一个
组,即每一组都有一个函数值。
b. 多表查询
student表
course表
SC表
连接查询
连接时会把比较的两个列都显示出来>
等值连接
非等值连接
自身连接
自身连接需要对表取别名
外连接
留下前者的所有值
多表连接
嵌套查询
带有IN谓词的子查询
先执行子查询找到刘晨的专业号,从student表中取出专业号集合中的数据
带有比较运算符的子查询
找出成绩大于自身成绩平均值的学科
带有ANY (SOME) 或ALL谓词的子查询
ANY是小于返回集合中的任意一个就行
ALL是小于返回集合中的全部值
带有EXISTS谓词的子查询
存在选修1号课程的学生
c. 集合查询
-
并union
cs专业学生和年龄小于19的学生
- 交 intersect
MySQL不支持INTERSECT操作符
-
差 except
MySQL 不支持 EXCEPT 运算符。
d. 派生查询
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表(derived table)成为主查询的查询对象。
如果子查询中没有聚集函数,派生表可以不指定属性列
2)插入数据
a. 插入一般数据
- 插入一列数据
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
field的元组可以缺省
-
插入多列数据
INSERT INTO table_name VALUES (value_for_column1, value_for_column2, value_for_column3,... value_for_columnN), (value_for_column1, value_for_column2, value_for_column3,... value_for_columnN), …;
-
插入特定列数据
INSERT INTO table_name(column1, column3) VALUES (value_for_column1 , value_for_column3);
-
插入子查询的结果
insert into <表名> (属性1,属性2...) 子查询
b. 插入子查询结果
insert into 表名(属性1,属性2...) 子查询;
3)删除数据
delete from 表名 where 条件
a. 删除某个元组
b. 删除多个元组
直接把表清空
c. 带子查询的删除
4)修改数据
update 表名 set 列名1=表达式1,列名2=表达式2... where 条件
a. 修改某个元组
b. 修改多个元组
c. 带子查询的修改语句
三. 视图
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。视图一经定义,就可以和基本表一样被查询、被删除。也可以在一个视图之上再定义