数据库的基本操作(五)

这两天的练习成绩

--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 都是用来复制表

/*两者的主要区别为: select into from 要求目标表不存在,
因为在插入时会自动创建;insert into select from 要求目标表存在。

  1. 复制表结构及其数据:

    create table table_name_new as select * from table_name_old

  2. 只复制表结构:

    create table table_name_new as select * from table_name_old where 1=2;
    或者:

    create table table_name_new like table_name_old

  3. 只复制表数据:

如果两个表结构一样:

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)

SQL 约束用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 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

SQL
评论区
头像