SQL高级查询语法

前言

我们都知道,一般搞编程的,基本上都是和一些数据打交道,那么和数据打交道的话,就会联想到什么管理数据,而当我们谈到如何管理数据的时候,就想到了我们的数据库,而在我们平时搞开发中,常用的数据用三种,他们分别是(Oracle,MySQL,SQL),今天我所讲到的就是如何使用SQL。

(1)首先一个创建数据库和创建两个表

--创建数据库
create database user

--选择数据库
use user

创建一个学生信息表

create table StuInfo
(
StuNo varchar(12) primary key,
StuName varchar(12) not null,
StuAge int not null check(StuAge>=0 and StuAge<=100),
StuSex nchar(1) not null check(StuSex = '男' or StuSex = '女') default('男'),
StuTel varchar(15),
StuAddress varchar(12) not null,
ClassName varchar(12) not null
)

创建学生的成绩表

create table Exam
(
ExamNo int primary key identity(1,1),
StuNo varchar(12) foreign key references StuInfo(StuNo),
Written float check(Written >= 0 and Written <= 100),
Lab float check(Lab>=0 and Lab <= 100)
)

 表A


create table A 
(
Name varchar(12) not null,
Password varchar(12) not null
)

什么插入数据,这种简单的事情就不用我写出来了

(2)内连接

多表之间,有一个相同的字段,就可以查询出两个表中自己想要的内容

select s.StuNo,StuName,StuSex,e.Written,e.Lab from StuInfo s inner join Exam e on s.StuNo = e.StuNo

(3)左连接

返回所有左表比配中的不比配内弄,关键字,outer join外连接关键字,left为左连接关键字

select s.StuNo,StuName,StuSex,e.Written,e.Lab from StuInfo s left outer join Exam e on s.StuNo = e.StuNo

(4)右连接

返回所有右表比配中的不比配内弄,关键字,outer join外连接关键字,right为左连接关键字

select s.StuNo,s.StuName,s.StuSex, e.Written,e.Lab from StuInfo s right outer join Exam e on s.StuNo = e.StuNo 

(5)Order by

select s.StuNo,s.StuName,s.StuSex,e.Written,e.Lab from StuInfo s inner join Exam e on s.StuNo = e.StuNo where StuAge>15 order by s.StuAge

 (6)全外连接

select s.StuNo,s.StuName,s.StuSex,e.Written,e.Lab from StuInfo s full outer join Exam e on s.StuNo = e.StuNo 

(7)交叉连接

简单的理解为两个表的字段乘积,关键字为cross join

select s.StuNo,s.StuName,s.StuSex,e.Written,e.Lab from StuInfo s cross join Exam e  

(8)运算符查询

select * from StuInfo s where StuNo = any (select StuNo from Exam e where Written >90 and Lab > 90)

(9)查询某个字段为空

--某个字段为空
select lab from Exam where Lab = ''
--整列数据中的某个字段为空
select * from Exam where Lab = ''

(10)B表数据插入到A表中(注意,两个表的字段数量和属性类型相同的情况下方可实现)

insert into B (Name,Password) select Name,Password from A

(11)未知teach表创建A表(但是创建完A表就包含有teach表的数据,这个就是相当于把一个表的数据了字段复制到另一个表中)

CREATE table A select * from teach

(12)未知A表结构下创建和A表结构相同的B表,且B不能有A表数据(相当于复制A表的字段到B表中)

select top 0 * into C from B

(13)求字段的这列的平均数

select AVG(Written),AVG(Lab) from Exam

(14)求多个字段的平均值

select AVG((Written+Lab) / 2) from Exam

(15某列的最小值

select min(written) from Exam

(16)某列的最大值

select max(written) from Exam

(17)求某列的数量

select count(Lab) from Exam

(18)某行的平均值

--ExamNo = 1就是根据它的ID来求某行的平均值
select AVG((written+lab) /2) from Exam where ExamNo = 1

(19)求多个字段值的总和

select SUM(written+lab) from Exam where ExamNo = 1

(20)创建备份备份表

select * into stuinfo_bakl from stuInfo

(21)删除表中的某条数据

delete student where StuNo = 1

 

尾言

如果觉得有用的话,就帮我点一个赞吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值