因为最近酷爱数据库查询,以前知道数据库特别容易学,可是今天回想起来,却是那么的无助,除了排序和分组,基本的统计查询一点都不会,今天用了点时间,写了些代码,希望高手能帮帮我!
use test
go
CREATE TABLE [myTrea] (
[trea_id] [int] NOT NULL ,
[trea_name] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[trea_date] [datetime] NULL ,
[trea_price] [float] NULL ,
PRIMARY KEY CLUSTERED
(
[trea_id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [myTrea2] (
[trea_id] [int] NOT NULL ,
[trea_name] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[trea_date] [datetime] NULL ,
[trea_price] [float] NULL ,
[trea_regdate] [datetime] NULL ,
PRIMARY KEY CLUSTERED
(
[trea_id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
select * from dbo.stuscore
--查找语文和数学的成绩
select * from dbo.stuscore where subject='数学' union
(select * from dbo.stuscore where subject='语文')
--查找语文及格的人
select * from dbo.stuscore where score >any (select score from stuscore where score>60 ) and subject='语文'
--SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
--此语句要myTrea2存在
Insert into myTrea2(trea_id,trea_name,trea_date) select trea_id,trea_name,trea_date from myTrea
--此语句要myTrea2 不存在
select trea_id,trea_name,trea_date into myTrea3 from myTrea
--查找语文最高成绩的学生
select * from stuscore as a,
(select stuid,max(score) as 成绩 from stuscore where subject='语文' and score=(select max(score) from stuscore where subject='语文') group by stuid) as b
where a.stuid=b.stuid
--查找成绩最高分
select DISTINCT a.stuid ,a.name ,b.maxscore as 总分 from stuscore as a ,
(select top 1 stuid,sum(score) as maxscore from stuscore group by stuid order by maxscore desc) as b
where a.stuid=b.stuid
--查找每位学生的平均分
select DISTINCT a.stuid,a.name,b.avgscore as 平均分 from stuscore as a,
(select stuid,avg(score) as avgscore from stuscore group by stuid) as b
where a.stuid=b.stuid
--查找语文的平均分
select subject,avg(score) as 平均成绩 from stuscore where subject='语文' group by subject
--其实这个平均分没有算好,其实语文的总分是350,有5个学生,平均分是70,有待求高手
(select sum(score) as ascore from stuscore where subject='语文')
(select count(DISTINCT stuid) from stuscore)
--列转行静态的方法
select name 姓名,
max(case subject when '语文' then score else 0 end) 语文,
max(case subject when '数学' then score else 0 end) 数学,
max(case subject when '物理' then score else 0 end) 物理
from stuscore
group by name
--列转行定义方法动态的方法
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then score else 0 end) [' + Subject + ']'
from (select distinct Subject from stuscore) as a
set @sql = @sql + ' from stuscore group by name'
exec(@sql)
我陆续会增加文章内容,上面有错的,或者需要改正的,希望各位高手踊跃告诉我!
--T-SQL 语句
--定义(声明)变量给变量赋值
declare @username varchar(4) --定义变量(声明,变量名称,变量数据类型 必须指定长度,否则一直为1)
declare @userid int --自动增长列
select @username='abcd' --select赋值
set @username='艳明二号' --se赋值
set @userid=(select max(trea_id) from mytrea)--获取自动增长列的值
print @username
print @userid
insert into mytrea values(@userid+1,@username,dateadd(day,-1,getdate()),15000)
select * from mytrea where trea_name =@username
--if else 的用法
declare @rowcount int
if not exists(select trea_id from mytrea)
print '暂时没有数据'
else
set @rowcount=(select count(trea_id) from mytrea )
print cast(@rowcount as varchar)+'条数据被检索到'
--begin 和end 用法如果条件内部要跟代码块(多条语句)就要用到begin和end
declare @trea_id int
if(@trea_id is null)
begin
print '@trea_id没有赋值';
set @trea_id=(select trea_id from mytrea where trea_id=1)
print '@trea_id已经获值'+convert(varchar,@trea_id);
end
else
print '@trea_id已经赋值'+convert(varchar,@trea_id);
--case 用法
select * from mytrea
select trea_id,trea_name,trea_date
=case
when trea_date ='2012-06-12' then trea_price
when trea_date ='2012-05-12' then trea_price
else '0'
end
from mytrea
-- while 循环语句while允许break和continue的存在
while 1=1
begin
waitfor time '10:21'
update mytrea set trea_name = '天下无敌2' where trea_id = 1
waitfor time '10:23'
SELECT GETDATE()
PRINT '该下班了!'
end
--:inner join 是在做排除,如果任一行在两个表中不匹配,则注定将从最终的结果中排除掉
select * from mytrea a inner join mytrea2 b on a.trea_id=b.trea_id
--outer join无论左侧表(e)中的行是否与右侧表中的行相匹配都要显示(就是left join 或者right join)
select * from mytrea a left outer join mytrea2 b on a.trea_id=b.trea_id
--full join 与 cross join
--full join 是 left join 和 right join 的结合
--full join将包含位于连接两侧的表的所有行
select * from mytrea a full outer join mytrea2 b on a.trea_id=b.trea_id
--unionunion更像是从一个查询直接向另一个查询进行的数据追加(差别还是有的)
--1:select 列表中字段的数量必须相同
--2:字段的数据类型必须隐士兼容
--3:返回的结果集的标头取自第一个查询
--4:默认返回方式是distinct,union alll返回全部的集合
select trea_name from mytrea union all select trea_name from mytrea2
--any some 和 all
--any与some功能上是相同的,推荐用some
--any与some一般都是和比较运算符一起使用的(>= <= <> !> 等 )
-->some (1,2,3)意味着大于1 >some就是大于最小的一个值
--=some和in 起的作用是一样的
--not in (a,b,c)展开为 <>a and <>b and <>c
--<>some (a,b,c)展开为 <>a or <>b or <> c
-->all (1,2,3)意味着大于3
select * from mytrea where trea_id = any(select trea_id from mytrea where trea_name='艳明')
select * from mytrea where trea_id <> all(select trea_id from mytrea where trea_name='艳明')
select * from mytrea where trea_id = all(select trea_id from mytrea where trea_id=2)
--创建视图:删除和修改视图
--alter view yourviewname as...
--drop view yourviewname as...
--加密视图alter view yourviewname with encryption as...加密了之后连你自己也看不到原代码了
create view myview
as
select * from mytrea
select * from myview
--存储过程
create proc myProc
as
update mytrea set trea_name='存储过程' where trea_id=7
select * from mytrea
exec myProc --调用
--带参数存储过程
create proc spComputer
@trea_name nvarchar(50) = null
as
if @trea_name is null
print '你未输入查询参数'
else
select * from mytrea where trea_name=@trea_name
exec spComputer '存储过程'
--输出存储过程
drop proc spComputer
alter proc spComputer
@reX nvarchar(50) ='123',
@reY nvarchar(50) = '456',
@LastName nvarchar(50) = null output
as
if @LastName is null
begin
print @reX
return '123';
end
else
begin
print @reY
return '456'
end
--调用的
declare @myOut varchar(50)
set @myOut='123'
exec @myOut = spComputer @myOut,@myOut,@myOut output
print @myOut
--自定义函数(时间格式处理)
drop function DayOnly
Create function dbo.DayOnly(@date datetime)
returns varchar(12)
as
begin
return convert(varchar(12),@date,103)
end
select dbo.DayOnly(trea_date) from mytrea --时间调用
--自定义table 查询
create function dbo.fnTableSearch(@TreaName nvarchar(50))
returns table
as
return (select * from mytrea where trea_name like @TreaName+'%')
select * from fnTableSearch('存储过程') --调用table 数据
--需要参数函数
drop function selTableByParam
create function dbo.selTableByParam
(@id as int,@name as varchar) --输入参数
returns @allrows table --临时表(及字段)
(
trea_id int not null,
trea_name nvarchar(40) null,
trea_price float null
)
as
begin
insert into @allrows select trea_id,trea_name,trea_price from mytrea where trea_id = @id
return
end
go
select * from selTableByParam(2,'12233')
分享到:
相关推荐
Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...
包含常见的增删改查sql语句,开发中经常打开看看对照着写sql,非常好用
Oracle SQL Profiler,自己设计算法写的一款非常好用的抓取Oracle数据库SQL语句的工具,可以再没有源码的情况下监控ORACLE数据库服务器的v$sqlarea视图抓取出从点击开始按钮到点击结束按钮期间执行过的SQL语句。...
Java知识点总结大全(七) -- 数据库SQL语句基本操作关注后面会分享面向对象,io,集合,多线程,网络,sql的总结
Oracle数据库SQL语句大全
sql语句查询修改等,mysql服务器配置,mysql常见问题
sql 语句就是对数据库进行操作的一种语言。 常见语句 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串) ...
数据库 SQL 创建查询语句 一、创建数据库 数据库是关系型数据库管理系统的核心组成部分,用于存储和组织数据。在 SQL Server 2008 中,可以使用对象资源管理器或 T-SQL 语句创建用户数据库。使用对象资源管理器...
SQLtrack是一款专为数据库SQL语句监控和解析设计的工具,它可以帮助数据库管理员或开发人员实时追踪和分析SQL语句的执行情况,从而优化数据库性能、排查问题或确保数据操作的正确性。这款软件的特点是其易用性,用户...
分布式数据库 SQL 语句 SQL 是一种特殊用途的编程语言,用于管理关系数据库管理系统(RDBMS)。它是一种标准语言,广泛应用于各种数据库管理系统中。SQL 语句可以用来创建、修改和管理数据库结构,包括数据库表、...
本实验旨在让学生了解 SQL Server 数据库的逻辑结构和物理结构,熟悉表的结构特点,掌握 SQL Server 的基本数据类型,了解空值概念,并学会在企业管理器中创建数据库和表,使用 T-SQL 语句创建数据库和表。...
Oracle数据库Sql语句详解大全,详细介绍oracle数据库的sql各种写法,非常适合初学者快速入门使用。
Oracle中用sql语句创建数据库,比较长,一般做了解
全国 省 市 区 县 数据库 sql语句
本文将详细讲解如何使用特定程序从SQL Server数据库导出SQL语句,以便于数据库维护、备份、迁移或进行其他相关操作。 首先,我们要理解SQL语句的含义。SQL(Structured Query Language)是用于管理和处理关系数据库...
使用SQL语句创建数据库创建表
可以 创建全国省市的数据库SQL语句,直接新建查询,复制执行即可
SQL语句是数据库操作的核心,它用于查询、插入、更新和删除数据,是任何数据库管理系统中的基础工具。在IT行业中,编写SQL语句是一项必备技能,但手动编写和调试SQL语句可能会耗费大量时间和精力,尤其在处理复杂...