0%

SQLServer-Day5

SQLServer-Day5

UNION 操作符

UNION操作符用于合并两个或多个SELECT语句的结果集

请注意,UNION内部的SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

Tips:默认地,UNION操作符取不同的值,如果允许重复的值,需使用UNION ALL

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名

原始表:

Employees_China:

E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming

Employees_USA:

E_ID E_Name
01 Adam, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill

例:

列出所有在中国和美国的不同的雇员名

1
2
3
4
SELECT E_Name
FROM Employees_China
UNION
FROM Employees_USA

结果:

E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adam, John
Bush, George
Gates, Bill

注释:这个命令无法列出在中国和美国的所有雇员,因为UNION命令只会选取不同的值。

SELECT INTO语句

用于创建表的备份复件

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中

SELECT INTO 语句常用于创建表的备份文件或者用于对记录进行存档

可以将所有的列插入列表:

SELECT *

INTO new_table_name [IN externaldatabase]

FROM old_tablename

或者只把希望的列插入列表:

SELECT column_name(s)

INTO new_table_name [IN externaldatabase]

FROM old_tablename

例:下面的例子会制作“Persons”表的备份复件
1
2
3
SELECT *
INTO Persons_backup
FROM Persons
IN子句可用于向另一个数据库中拷贝表:
1
2
3
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons
如果我们希望拷贝某些域,可以在SELECT语句后列出这些域:
1
2
3
SELECT  LastName, FIrstName
INTO Persons_backup
FROM Persons
带有WHERE子句:
1
2
3
4
SELECT LastName, FirstName
INTO Persons_backup
FROM Persons
WHERE City = 'Beijing'

表示从“Pesons”表中提取居住在“Beijing”的人的信息,创建了一个带有两个列的名为“Persons_backup”的表

被连接的表
1
2
3
4
5
SELECT Persons.LastName, Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P

表示创建一个名为“Persons_Order_Backup”的新表,其中包含了从Persons和Orders两个表中的内容。

CREATE DATABASE 语句

用于创建数据库

CREATE DATABASE database_name

例:创建一个名为my_db的数据库

1
CREATE DATABASE my_db

可以通过CREATE TABLE来添加数据库表

CREATE TABLE 语句

用于创建数据库中的表

CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

)

数据类型(data_type) 规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型

数据类型 描述
interger(size)
int(size)
smallint(size)
tinyint(size)
仅容纳整数,在括号内规定数字的最大位数
decimal(size, d)
numeric(size, d)
容纳带有小数的数字
“size”规定数字的最大位数。“d”规定小数点右侧的最大位数
char(size) 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)
在括号中规定字符串的最大长度
varchar(size) 容纳可变长度的字符串(可容纳字母、数字以及特殊字符)
在括号中规定字符串的最大长度
date(yyyymmdd) 容纳日期

例:

创建”Persons”表,其中包含5个列,列明分别是“Id_P”, “LastName”, “FirstName”, “Address”以及“City”

1
2
3
4
5
6
7
8
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

空的表类似这样

Id_P LastName FirstName Address City

可使用INSERT INTO语句向空表写入数据

SQL 约束(Constraints)

约束用于限制加入表的数据的类型

可以在创建表时规定约束(通过CREATE TABLE语句),或者在表创建之后也可以(通过ALTER TABLE语句)

主要有以下几种约束:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT

NOT NULL约束

NOT NULL约束强制列不接受NULL

NOT NULL约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录

1
2
3
4
5
6
7
8
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)