SQL单表查询实例:并集、交集与差集操作详解

1 下载量 27 浏览量 更新于2024-08-30 收藏 57KB PDF 举报
在SQL数据查询中,单表查询是基础操作,特别是当涉及到集合查询时,理解并操作UNION、INTERSECT和EXCEPT是至关重要的。这些集合操作符用于合并、筛选或排除查询结果中的重复元素,使得数据检索更加灵活和精确。 1. **并操作 (UNION)**: UNION 是用来合并两个或更多 SELECT 查询的结果集,返回的是所有不同记录的集合,去除了重复项。例如,当你想要查找年龄小于等于19岁的学生以及CS系的学生时,可以分别执行两个查询并用 UNION 合并: ```sql SELECT * FROM Student WHERE Sage <= 19 UNION SELECT * FROM Student WHERE Sdept = 'CS' ``` 这里,`OR` 表示逻辑上的并集,而 `UNION` 实际上达到了同样的效果,即合并两个查询结果,只显示不重复的数据。 2. **交操作 (INTERSECT)**: INTERSECT 操作返回两个查询结果集中都存在的非重复记录。例如,要找出既年龄不大于19岁又为CS系的学生,可以这样写: ```sql SELECT * FROM Student WHERE Sage <= 19 AND Sdept = 'CS' ``` 或者使用 INTERSECT 来确保两个条件同时满足: ```sql SELECT * FROM Student WHERE Sage <= 19 INTERSECT SELECT * FROM Student WHERE Sdept = 'CS' ``` 3. **差操作 (EXCEPT)**: EXCEPT 与 INTERSECT 相反,它返回第一个查询结果中但不在第二个查询结果中的记录。这意味着它排除了第二个查询中包含的记录。例如,如果你想查看除了CS系外其他所有系的学生,可以这样做: ```sql SELECT * FROM Student WHERE Sage <= 19 EXCEPT SELECT * FROM Student WHERE Sdept = 'CS' ``` 在实际应用中,比如在“教学管理”数据库JXGL中,这些集合操作可以用来查询学生选课情况,如查找某个学生的所有选课记录,或者找出某个课程被哪些系的学生选修等。通过组合这些操作,可以更精细地控制数据的筛选和汇总,提高查询效率和数据一致性。

case 3: { system("CLS"); cout << "———————————————————————————————————————————————————修改图书信息—————————————————————————————————————————————————————\n" << endl; printf("|修改书籍信息|\n"); //修改数据 成功返回1,查询失败返回0 cout << "请输入要修改的书籍ID:"; cin >> book_id; cout << "请输入变更的书名:"; cin >> name; cout << "请输入变更数量:"; cin >> number; cout << "请输入变更价格:"; cin >> price; cout << "请输入变更后作者:"; cin >> author; cout << "请输入变更后类型:"; cin >> type; sql = "update books set books_name ='《" + name + "》',books_number =" + to_string(number) + ",books_price =" + to_string(price) + ",books_author ='" + author + "',books_type ='" + type + "' where books_id = " + to_string(book_id); if (mysql_query(&mysql, sql.c_str())) { cout << "Error: Query[update] fail." << endl; break; } cout << "update success." << endl; cout << "——————————————————————————————————————————————————————————————————————————————————————————————————————————————————\n" << endl; break; }将这段c++代码改成可选择修改各个信息

2023-05-31 上传