- SQL UNION 和 UNION ALL 操作符
UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
select E_ID from Employees_China union all select E_ID from Employees_USA
- SQL select into语句 从一个表中选取数据,插入另一个表中
select LastName,FirstName into Persons_backup from Persons
select LastName into Persons_backup from Persons where City = 'Paris'
select Persons.LastName ,Orders.OrderNo into Persons_Order_Backup from Persons inner join Orders on Persons.Id_P= Orders.Id_P
- creat database 语句
create database OldPersons
creat table 语句
create table OldPerson( name varchar(255), sexy char ,age int,City varchar(255),... )
SQL 约束(constraints)
not null :约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录
create table OldPerson( name varchar(255) not null, sexy char ,age int not null,City varchar(255))
unique 约束:UNIQUE 和 PRIMARY KEY(拥有自动定义的 UNIQUE 约束) 约束均为列或列集合提供了唯一性的保证。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
create table OldPerson( name varchar(255) not null unique, sexy char ,age int not null,City varchar(255))
【Mysql】create table OldPerson( name varchar(255) , age int not null,City varchar(255),unique(name))
需要命名unique约束,以及为多个列定义unique 约束:
create table OldPerson( name varchar(255) , age int not null,City varchar(255),constraint Person_id unique (name ,age))【管了三列】
如果表已经创建 使用 alter
alter table Persons add unique (Id_P)
alter table Persons add constraint Person_ID unique (Id_P,LastName)
撤销unique 约束
【Mysql】 alter table Persons drop index Person_ID
【SQL server/Oracle / MS Access 】alter table Persons drop constraint Person_ID
SQL primary key约束:
主键约束,唯一表示数据库table 中的每条记录,必须包含唯一的值;主键列不能包含 null 值; 每个表都要有一个主键且唯一一个主键(主键不一定只有一列 可以有多列共同构成主键)。
【Mysql】create table OldPerson( Id_P int not null, LastName varchar(255) , age int not null,City varchar(255),primary key(Id_P))
针对多列定义为主键约束的语法 【constraint Person_ID primary key (Id_P,Lastname)】
【SQL server/Oracle / MS Access 】
create table OldPerson( Id_P int not null primary key, name varchar(255) , age int not null,City varchar(255))
【注意,如果table已经存在,此时去添加主键,一定要把主建的列生命为不包含 null值(在表首次创建时??)】
撤销 primary key约束
【Mysql】alter table Persons drop primary key
【SQL server/Oracle / MS Access 】 alter table Persons drop constraint person_ID
SQL forign key 外键 约束:一个表中的forign key 指向另一个表的 primary key
Orders中的 Id_P 是forign key;Persons中的 Id_P 是 primary key;
前者约束表征表与表之间的某中约定关系,用于防止破坏表之间连接的动作,也能防止非法数据插入forign key 列
【Mysql】create table Orders( Id_O int not null, OrderNo int not null,Id_P int, primary key Id_O,forign key(Id_P) preferences Persons (Id_P))
【SQL server/Oracle / MS Access】create table Orders(Id_O int not null primary key , OrderNo int not null,Id_P int forign key preferences Persons (Id_P))
多个 forign key时
创建时:create table Orders( Id_O int not null, OrderNo int not null,Id_P int, primary key (Id_O),fconstraint Person_ID forign key(Id_P) preferences Persons (Id_P))
("Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束):alter table Orders add forign key (Id_P) references Persons(Id_P)
(命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束):alter table Orders add constraint Persons_ID forign key (Id_P) references Persons (Id_P)
撤销 forign key
【Mysql】alter table Orders drop forign key Person_ID
【SQL server/Oracle / MS Access】alter table Orders drop constraint Person_ID
之后不作说明全都是【SQL server/Oracle / MS Access】
SQL check约束:限制列中的值的范围。
create table Persons( Id_P int not null check (Id_P > 0), LastName varchar(255) not null,Address varchar(255),City varchar(255))
需要命名 CHECK 约束,以及为多个列定义 CHECK 约束
create table Persons(Id_P int not null check , LastName varchar(255) not null,Address varchar(255),constraint chec_Person check (Id_P>0 and City ='Paris'))
table已存在情况下
单列 alter table Persons add check (Id_P > 0)
多列 alter table Persons add constraint che_Person check (Id_P>0 and City ='Paris')
撤销 check
alter table Persons drop constraint che_Person
数据库中最简单最原始的聚合函数
可能有人就会问了:那什么是聚合函数,又该怎么去使用它呢?
专家解析:一般在做统计分析的时候需要使用聚合函数
当我们需要计算时,我们首先想到的应该就是Sum() “求总和”、AVG() ”求平均“COUNT() “求总记录“;那比较的函数就是MAX() "最大值" 和MIN() “最小值”。
既然我们都知道了它们的作用了,就来看看怎么运用并实现其功能的吧!!!
01.SUM()函数
--查询每个年级的总学时数,并按照升序排列
select gradeid as 年级编号,SUM(classhour) as 总学时数 from Subject group by gradeid order by 总学时数 asc
02.AVG()函数
select AVG(studentresult) as 平均分 from Result
--查询每个参加考试的学员平均分
select studentno as 学号,AVG(studentresult) as 平均分 from Result group by studentno
--查询每门课程的平均分,并按照降序排列
select subjectid as 课程编号,AVG(studentresult) as 平均分 from Result group by SubjectId order by 平均分 desc
--查询每年级学生的平均年龄:
select gradeid as 年级,AVG(DATEDIFF(YY,birthday,getdate())) as 平均年龄 from student group by GradeId
--查询参加年级考试的学生中,平均分及格的学生记录,按照降序排列 select studentno as 学号,avg(StudentResult) as 平均分 from Result group by StudentNo having avg(StudentResult)>60 order by 平均分 desc
--查询考试时间为-9-9课程的及格平均分
--课程编号 所有课程平均分
select subjectid as 课程编号,AVG(studentresult) as 所有课程平均分 from Result where ExamDate>='2009-9-9' and ExamDate<'2009-9-10' group by subjectid having AVG(StudentResult)>60
03.MAX()函数
select MAX(studentresult) as 最高分 from Result
04.MIN()函数
select min(studentresult) as 最高分 from Result
05.COUNT()函数
COUNT():统计一张表中总共有多少条数据
例如:
--查询每年级学时数超过的课程数
select gradeid as 年级编号,COUNT(subjectid) as 课程总数 from Subject where ClassHour>=50 group by GradeId
--统计至少有一次不及格的学生学号和次数。
select studentno as 学号,COUNT(studentresult) as 次数 from Result where StudentResult<60 group by studentno
--查询每个年级包含北京的学生总数
select gradeid as 年级,COUNT(studentno) as 总人数 from student where Address like '%北京%' group by GradeId
最后需要记住五个函数都要遵守的注意事项:
--如果语句中有group by关键字,那么select后只能跟group by后出现的列,或者是聚合函数
--max() min() count(),sum(),avg()
最后,希望我的作品能够让您满意,如有不足之处,请不要吝啬你的建议,只有这样我的作品才能令你满意;因为一次的缺漏永远会给下一次补充、让其变得更好。