根据提供的文件信息,我们可以归纳出以下关于SQL Server的关键知识点:
### SQL Server 数据查询与操作
#### 1. 基本连接(Cartesian Product)
在SQL Server中,当两个表进行连接时,如果未指定任何连接条件,则会产生笛卡尔积(Cartesian Product),即第一个表的每一行都会与第二个表的所有行进行配对。
**示例**:
```sql
SELECT student.*, sc.*
FROM student, sc;
```
这里没有指定连接条件,因此会产生笛卡尔积。
#### 2. 内连接(Inner Join)
内连接返回两个表中匹配的行。如果不匹配,则不会返回该行。
**示例**:
```sql
SELECT student.sno, sname, ssex, sage, sdept, cno, grade
FROM student, sc
WHERE student.sno = sc.sno;
```
#### 3. 外连接
外连接分为左外连接、右外连接和全外连接。
- **左外连接(Left Outer Join)**: 返回左表中的所有行,即使在右表中没有匹配的行也会返回,并用NULL填充右表的列。
- **右外连接(Right Outer Join)**: 类似于左外连接,但是方向相反,返回右表中的所有行。
- **全外连接(Full Outer Join)**: 返回两个表中的所有行,对于没有匹配的行则用NULL填充另一表的列。
**示例**:
```sql
SELECT first.cno, second.cpno
FROM course_first LEFT JOIN course_second ON first.cpno = second.cno;
```
#### 4. 内连接与外连接的区别
- **内连接**: 只有当两个表中的行满足连接条件时才会返回结果。
- **外连接**: 即使没有匹配的行也会返回。
#### 5. SQL Server中的其他连接类型
- **交叉连接**: 相当于没有指定连接条件的基本连接,会产生笛卡尔积。
- **自然连接**: 根据公共列自动连接两个表,返回匹配的行。
### SQL Server 查询优化
#### 1. SQL Server中的不同类型的查询
- **内连接**: 使用INNER JOIN关键字。
- **左外连接**: 使用LEFT JOIN或LEFT OUTER JOIN关键字。
- **右外连接**: 使用RIGHT JOIN或RIGHT OUTER JOIN关键字。
- **全外连接**: 使用FULL JOIN或FULL OUTER JOIN关键字。
**示例**:
```sql
-- 内连接
SELECT * FROM table1 INNER JOIN table2 ON condition;
-- 左外连接
SELECT * FROM table1 LEFT JOIN table2 ON condition;
```
### SQL Server中的集合运算符
#### 1. UNION
用于合并多个SELECT语句的结果集,自动去除重复的行。
**示例**:
```sql
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
```
#### 2. INTERSECT
返回两个或多个SELECT语句结果集中的公共行。
**示例**:
```sql
(SELECT column_name(s) FROM table1)
INTERSECT
(SELECT column_name(s) FROM table2);
```
#### 3. EXCEPT
返回第一个SELECT语句的结果集中不包含在第二个SELECT语句结果集中的行。
**示例**:
```sql
(SELECT column_name(s) FROM table1)
EXCEPT
(SELECT column_name(s) FROM table2);
```
### SQL Server中的聚合函数与分组
#### 1. GROUP BY 和 HAVING 子句
GROUP BY子句用于将数据分组以便进行聚合计算,HAVING子句用于过滤这些分组后的结果。
**示例**:
```sql
SELECT column_name, COUNT(column_name)
FROM table_name
GROUP BY column_name
HAVING COUNT(column_name) > 1;
```
#### 2. 删除前N条记录
可以使用TOP关键字来限制删除的记录数量。
**示例**:
```sql
DELETE TOP (N) FROM table_name;
```
### SQL Server中的注释
#### 1. 注释
单行注释使用“--”开始,多行注释使用“/* */”括起来。
### SQL Server中的表定义
#### 1. 表的创建
```sql
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
...
);
```
#### 2. 主键约束
主键约束用于标识表中的唯一记录。
**示例**:
```sql
CREATE TABLE table_name (
id int PRIMARY KEY,
name varchar(50),
...
);
```
#### 3. 外键约束
外键约束用于引用另一个表的主键,确保表之间的参照完整性。
**示例**:
```sql
CREATE TABLE table_name (
id int,
foreign_id int FOREIGN KEY REFERENCES other_table(primary_key),
...
);
```
### SQL Server中的数据类型
#### 1. 整型
- `INT`: 存储较大的整数值。
- `SMALLINT`: 存储较小的整数值。
- `TINYINT`: 存储非常小的整数值。
#### 2. 字符串类型
- `CHAR(n)`: 固定长度的字符类型,占用的空间为n个字节。
- `VARCHAR(n)`: 可变长度的字符类型,占用的空间为实际使用的字符数。
- `NCHAR(n)`: 固定长度的Unicode字符类型,占用的空间为n个字节。
- `NVARCHAR(n)`: 可变长度的Unicode字符类型,占用的空间为实际使用的字符数。
#### 3. 文本类型
- `TEXT`: 存储非Unicode文本。
- `NTEXT`: 存储Unicode文本。
#### 4. 日期时间类型
- `DATE`: 存储日期值。
- `SMALLDATETIME`: 存储日期和时间值,精确到分钟。
- `TIME`: 存储时间值,精确到毫秒。
- `DATETIME`: 存储日期和时间值,精确到毫秒。
以上内容概括了SQL Server中的一些基础概念和技术点,包括数据查询、表结构设计、数据类型选择等方面的知识点,有助于更好地理解和掌握SQL Server的使用方法。