SQL练习:数据库创建、模式管理与表操作

0 下载量 73 浏览量 更新于2024-09-04 收藏 1.26MB PDF 举报
"SQL练习,包括CREATE、DROP、ALTER等操作,对比SQL与T-SQL的差异,主要涉及数据库的创建、模式的定义与删除、表的创建、修改及删除。" 在这个SQL练习中,我们将深入理解数据库管理的基础概念,特别是如何使用SQL和T-SQL来创建、删除和修改数据库对象。首先,我们通过【新建查询】并输入`CREATE DATABASE SCHOOL`创建了一个名为SCHOOL的数据库,然后设置它为当前可执行数据库,以便后续的操作都在这个数据库上下文中进行。 模式是数据库中的一个重要概念,它用于组织数据库对象。在SQL中,我们可以使用`CREATE SCHEMA`命令定义模式,并通过`AUTHORIZATION`指定模式的所有者。例如,【例3.1】展示了如何为用户WANG创建一个名为"S-T"的模式: ```sql CREATE SCHEMA "S-T" AUTHORIZATION WANG; ``` 在T-SQL(SQL Server的扩展)中,当未指定模式时,默认模式是dbo。【例3.2】展示了如何创建一个模式并授权给WANG: ```sql CREATE SCHEMA AUTHORIZATION WANG; ``` 接着,【例3.3】演示了如何在WANG的TEST模式下创建一个名为TAB1的表,包含了不同数据类型的列: ```sql CREATE SCHEMA TEST AUTHORIZATION WANG; CREATE TABLE TAB1 ( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10, 3), COL5 DECIMAL(5, 2) ); ``` 对于表的操作,我们可以通过`CREATE TABLE`定义表结构,如【例3.5】所示,创建具有列级完整约束条件的表。【例3.6】至【例3.8】则分别展示了创建"学生"、"课程"和"学生选课"表的例子。 表的修改涉及添加、删除或更改列以及约束。【例3.8】向Student表添加"入学时间"列,这可以通过`ALTER TABLE`命令完成。【例3.9】改变列的数据类型,例如将年龄列从字符型改为整数型。【例3.10】添加唯一性约束,确保"课程名称"字段的唯一性。 最后,删除表通常使用`DROP TABLE`,但需要注意的是,SQL Server不支持在删除表时使用`CASCADE`关键字,这意味着不能直接删除表及其依赖对象,如【例3.11】。删除模式则使用`DROP SCHEMA`,这将同时删除模式中的所有对象,如【例3.4】所示。 这个练习涵盖了数据库管理的基本操作,通过这些实践,你可以更好地理解和掌握SQL与T-SQL在数据库对象管理上的异同,为更复杂的数据库设计和管理打下坚实基础。
2023-06-01 上传

#include <iostream> using namespace std; //二分查找 int bin_search(int A[], int n, int x) { int mid, low = 0, high = n - 1; //初始化查找区域 while (low <= high) //结束查找 { mid = (low + high) / 2; if (x == A[mid]) return mid; else if (x < A[mid]) high = mid - 1; else low = mid + 1; } return -1; //返回查找失败标记 } //二叉排序树 class Bnode { public: int date; Bnode* lchild,* rchild; }; void insert(Bnode* T, Bnode* S) { if (T == nullptr)T = S; else if (S->date < T->date) insert(T->lchild, S); else insert(T->rchild, S); } Bnode* creat() { Bnode* T = new Bnode; T = nullptr; int num = 0; cout << "输入结点数:"; cin >> num; cout << endl << "输入结点:" << endl; for (int i = 1; i <= num; i++) { Bnode* P = new Bnode; cin >> P->date; P->lchild = nullptr; P->rchild = nullptr; insert(T, P); } return T; } void InorderTree(Bnode *T) { if (T == nullptr) return; InorderTree(T->lchild); cout << T->date; InorderTree(T->rchild); } int main() { //二分查找 //int A1[] = { 1,2,3,4,6,7,8,9,10,11,12,13,17,18,19,20,24,25,26,30,35,40,45,50,100 }; //int A2[] = { 2,3,5,7,8,10,12,15,18,20,22,25,30,35,40,45,50,55,60, 80,100 }; //cout << "2:" << bin_search(A1, 26, 2) << " " // << "30:" << bin_search(A1, 26, 30) << " " // << "5:" << bin_search(A1, 26, 5) << " " // << "33:" << bin_search(A1, 26, 33) << " " // << "110:" << bin_search(A1, 26, 110) << endl // << "8:" << bin_search(A2, 21, 8) << " " // << "80:" << bin_search(A2, 21, 80) << " " // << "3:" << bin_search(A2, 21, 3) << " " // << "100:" << bin_search(A2, 21, 100) << " " // << "13:" << bin_search(A2, 21, 13) << endl; //二叉排序树 Bnode* T = creat(); InorderTree(T); return 0; }改错

2023-06-06 上传