1.
update students set Sname='杨红梅' where Sid = 6;
update 表名 set <字段名=值> WHERE <筛选条件>;
2.
陈述A是正确的。在SQL中,当使用
UNION
操作符来合并两个或多个查询的结果时,被合并的每个查询(在这个例子中是SubQuery1和SubQuery2)必须拥有相同数量的列,且这些列的数据类型必须是可以隐式转换的。此外,这些列在查询中的顺序也必须是一致的。这是因为
UNION
操作的结果集是一个单一的表,其列的顺序和类型由第一个查询(在这个例子中是SubQuery1)定义。如果后续的查询(SubQuery2)中的列顺序或类型与第一个查询不匹配,数据库将无法正确地将它们合并成一个结果集,这会导致语法错误或不可预期的结果。所以,为了确保
UNION
操作能够正确执行,你需要确保所有参与UNION
的查询具有相同数量的列,且这些列在查询中的顺序和数据类型都是一致的。
3.
先用where 限制条件,然后再用group by和having子句
4.
视图更新
不能更新
1.由几个表导出
2.聚集函数
3.group by
4.Having
5.distinct
6.union all
7.没有主键不能更新
5.
空值是不确定不知道的值,不知道它是否满足条件
6.
注意NOT IN 和 NOT EXISTS
直接翻译:这个人的名字没有在选了C01课程且分数不及格的里面
7.
Having 子句不能放在where子句里面
SELECT ...FROM WHERE...... GROUP BY .....HAVING
8.
关系代数
SQL语言:并运算UNION, 交运算INTERSECT, 差运算EXCEPT。
基本语法形式: 子查询{ Union [ALL] |Intersect [ALL]|Except [ALL] 子查询}
通常情况下自动删除重复元组:不带ALL。若要保留重复的元组,则要带 ALL。
假设子查询1的一个元组出现m次,子查询2的一个元组出现n次 ,则该元组在:
子查询1 Union ALL 子查询2,出现m + n次
子查询1 Intersect ALL 子查询2,出现min(m,n)次
子查询1 Except ALL 子查询2,出现max(0, m –n)次
并运算
#求学过002号课的同学或学过003号课的同学学号 Select student_id From SC Where couse_id = ‘002’ UNION Select student_id From SC Where couse_id = ‘003’; #上述语句也可采用如下不用UNION的方式来进行 Select student_id From SC Where couse_id = ‘002’ OR C# = ‘003’;
交运算
#求既学过002号课,又学过003号课的同学学号 Select student_id From SC Where course_id = ‘002’ INTERSECT Select student_id SC Where course_id = ‘003’; #上述语句也可采用如下不用INTERSECT的方式来进行 Select student_id From SC Where C# = ‘002’ and student_id IN (Select student_id From SC Where course_id = ‘003’);
交运算符Intersect并没有增强SQL的表达能力,没有Intersect,SQL也 可以用其他方式表达同样的查询需求。只是有了Intersect更容易表达一些, 但增加了SQL语言的不唯一性
差运算
#假定所有学生都有选课,求没学过002号课程的学生学号 Select DISTINCT student_id From SC EXCEPT Select student_id SC Where course_id = ‘002’ #前述语句也可不用EXCEPT的方式来进行 Select DISTINCT student_id From SC SC1 Where not exists (Select * From SC Where course_id = ‘002’ and course_id = SC1.student_id) ;
差运算符Except也没有增强SQL的表达能力,没有Except,SQL也可以用 其他方式表达同样的查询需求。只是有了Except更容易表达一些,但增加了 SQL语言的不唯一性
9.
10.
存在然后检索表的所有