这两天的练习成绩
--SQL LEFT JOIN 关键字
--LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。
--如果右表中没有匹配,则结果为 NULL。有时候left join 也称为left outer join
select vac01,vac02,vac1.BAO02 from vac1
left join cbm1
on vac1.VAA01=cbm1.VAA01
order by vac01 desc
--SQL RIGHT JOIN 关键字
--RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。
--如果左表中没有匹配,则结果为 NULL。
select vac01,vac02,vac1.BAO02 from vac1
right join cbm1
on vac1.VAA01=cbm1.VAA01
order by vac01 desc
--SQL FULL OUTER JOIN 关键字
/*FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。*/
select vac01,vac02,vac1.BAO02 from vac1
full outer join cbm1
on vac1.VAA01=cbm1.VAA01
order by vac01 desc
--SQL UNION 操作符
/*SQL UNION 操作符合并两个或多个 SELECT 语句的结果集。UNION 内部的每个 SELECT 语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
默认union的操作符选取不同的值,如果允许重复的值,请使用union all
*/
--查询bby1表中 bca01,bdn01 ,bby05字段并且bca01不为空值且bca1表中的bca01具有相同关联的列,并且降序排列
select bca01,bdn01 ,bby05 from bby1 where bca01<>' '
union
select bca01,bca02 ,bca03 from bca1
order by bca01 desc
--SQL SELECT INTO 语句
/*通过 SQL,可以从一个表复制信息到另一个表。SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
可以复制整个表的所有列,也可以复制表中部分或单个列
提示:新表将会使用 SELECT 语句中定义的列名称和类型进行创建。可以使用 AS 子句来应用新名称。*/
--将bbj1表中的所有列和信息复制到test1表中
select * into test1 from bbj1
--将bbj1表中的部分列和信息复制到test2表中
select bbj01,bby01,acf01,bck01a into test2 from bbj1
--删除上面创建的两个表
delete from test1
delete from test2
--SQL INSERT INTO SELECT 语句
/*INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
目标表中任何已存在的行都不会受影响。
从一个表中复制所有的列插入到另一个已存在的表中,前提是具有共同的字段列和数据类型*/
--复制bbj1表中的数据到test1中,并查询test1表中的信息
insert into test1
select * from bbj1
go
select * from test1
/*两者的主要区别为: select into from 要求目标表不存在,
因为在插入时会自动创建;insert into select from 要求目标表存在。
复制表结构及其数据:
create table table_name_new as select * from table_name_old
只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:create table table_name_new like table_name_old
- 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
*/
--SQL CREATE DATABASE 语句
--CREATE DATABASE 语句用于创建数据库。
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
--SQL 约束(Constraints)
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),
或者在表创建之后规定(通过 ALTER TABLE 语句)。
在 SQL 中,有如下约束:
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。
确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。
create table Persons(
ID INT not null,
LastName varchar(255) not null,
FirstName varchar(255) not null,
Age int
)
--添加age的约束不为空
alter table Persons alter column Age int not null;
--删除age以创建好的约束为空
alter table Persons alter column Age int null;
--在创建表的时候为P_id创建约束UNIQUE
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--已经创建表后添加约束
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
--撤销unique约束
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID
--SQL PRIMARY KEY 约束
/*PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。*/
--当数据表已经创建后,需要新增primary key的约束
alter table Prsons add primary key (P_id)
--需要重新命名或者重新定义多个列的主键信息
alter table Prsons add constraint pk_PrsonsID primary key (P_id,LastName)
- --FOREIGN KEY 约束用于预防破坏表之间连接的行为。
--FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
--在Orders表创建的时候创建foreign key 约束
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
--alter table 时的SQL foreign key 约束,已经创建好表,使用
alter table Orders add foreign (P_id) references Persons(P_id)
--重新定义FOREIGN KEY约束,定义多个列的FOREIGN key 约束
alter table Orders add constraint fk_PerOrders foreign key(P_id) references Persons(P_id)
--撤销FOREIGN KEY约束
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
--SQL DEFAULT 约束
--DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
--创建数据表Persons的时候设置City的默认值是Sandnes
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
--当表已经被创建的时候使用alter table来设置city的默认值为sandes
ALTER TABLE Persons ADD CONSTRAINT abf_c DEFAULT 'SANDNES' for City
--撤销default的约束
ALTER TABLE Persons DROP constraint abf_c