以前遇见别人问的几个数据库的问题,我没有回答好,最近看些数据库的书籍把他们总结如下,以备后人之鉴。
1、用select语句,查询重复记录。(一般我们用的是distinct找不同的记录,问到重复的反而有点发愣)
假设,表名为 T1 子段为 A,B,C
select count(*) ,A,B,C from T1
group by A,B,C having count(*) > 1
测试数据:
A100 B100 C100
A101 B101 C101
A102 B102 C102
A102 B102 C100
A102 B102 C102
A102 B102 C102
A100 B100 C100
运行结果:
2 A100 B100 C100
3 A102 B102 C102
2、如果查询的结果某个字段是Null,用默认的值代替。1、)Sql server中:select case when 字段名1 is null
then 替代值
else 字段名1
end +
case when 字段名2 is null
then 替代值
else 字段名2
end as 显示字段名
from 表名
注:字段名是表中的列。
经常如果某个字段是“”时(空格),也可以用某个字段代替,例如customer表:
执行下列语句:
select custid,shipline1,shipline2, name ,
case when Status =' ' then '0' else Status end as Status from customer
得到(如果status为’ ’,则让它视图显示“0”):
执行进一步更复杂的要求,如果name为’my’显示‘a’,为’yo’显示‘b’,其他显示’c’,sql语句如下:
select
custid,shipline1,shipline2,
case when name='my' then 'a'
when name='yo' then 'b'
else 'c' end as name ,
case when Status ='' then '0' else Status end
as Status from customer order by custid asc
注:(附建表语句)
create table AppDta.dbo.customer(
custid int Not Null check(custid>0),
name char(30) Not Null check(name<>''),
shipline1 varchar(100) Not Null Default '',
shipline2 varchar(100) Not Null Default '',
Status char(1) Not Null Default '',
CreditLimit Money Not Null check((CreditLimit Is NUll) or (CreditLimit>=0)));
2、)oracle中:下面用一个常见的数据显示来说明decode函数的用法。就是成绩单的显示。我想做开发的人员都遇到过这个,而且在大学期间也是常常接触成绩单,显示的是:姓名、语文、数学等。 实现脚本如下(cjd.sql):
--建表
create table stud
(
sid varchar2(10),
kcbm varchar2(10),
cj int
);
--插入测试数据
insert into stud values(''''1'''',''''语文'''',80);
insert into stud values(''''2'''',''''数学'''',90);
insert into stud values(''''3'''',''''英语'''',100);
commit;
--创建视图,decode用法
create or replace view cjd as
select sid,
decode(kcbm,''''语文'''',cj,0) 语文,
decode(kcbm,''''数学'''',cj,0) 数学,
decode(kcbm,''''英语'''',cj,0) 英语
from stud
order by sid;
--显示数据
select * from cjd;
执行过程如下:
SQL> create table stud(sid varchar2(10),
2 kcbm varchar2(10),
3 cj int);
表已创建。
WS$R=业@网VgoX育Yb网IlU
SQL> insert into stud values(''''1'''',''''语文'''',80);
已创建 1 行。
SQL> insert into stud values(''''2'''',''''数学'''',90);
已创建 1 行。
SQL> insert into stud values(''''3'''',''''英语'''',100);
已创建 1 行。
SQL> commit;
提交完成。
SQL> create or replace view cjd as
2 select sid,
3 decode(kcbm,''''语文'''',cj,0) 语文,
4 decode(kcbm,''''数学'''',cj,0) 数学,
5 decode(kcbm,''''英语'''',cj,0) 英语
6 from stud
7 order by sid;
视图已建立。
SQL> select * from cjd;
SID 语文 数学 英语
---------- ---------- ---------- ----------
1 80 0 0
2 0 90 0
3 0 0 100
3、存储过程和触发器的区别。1、)什么是存储过程呢?定义:
将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?
Microsoft公司为什么还要添加这个技术呢?
那么存储过程与一般的SQL语句有什么区别呢?
存储过程的优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权
存储过程的种类:
1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,
如 sp_help就是取得指定对象的相关信息
2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用户自定义的存储过程,这是我们所指的存储过程
常用格式
Create procedure procedue_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解释:
output:表示此参数是可传回的
with {recompile|encryption}
recompile:表示每次执行此存储过程时都重新编译一次
encryption:所创建的存储过程的内容会被加密
如:
表book的内容如下
编号 书名 价格
001 C语言入门 $30
002 PowerBuilder报表开发 $52
实例1:查询表Book的内容的存储过程
create proc query_book
as
select * from book
go
exec query_book
实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额
Create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as
insert book(编号,书名,价格) Values(@param1,@param2,@param3)
select @param4=sum(价格) from book
go
执行例子:
declare @total_price money
exec insert_book '003','Delphi 控件开发指南',$100,@total_price
print '总金额为'+convert(varchar,@total_price)
go
存储过程的3种传回值:
1.以Return传回整数
2.以output格式传回参数
3.Recordset
传回值的区别:
output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中
实例3:设有两个表为Product,Order,其表内容如下:
Product
产品编号 产品名称 客户订数
001 钢笔 30
002 毛笔 50
003 铅笔 100
Order
产品编号 客户名 客户订金
001 南山区 $30
002 罗湖区 $50
003 宝安区 $4
请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
总金额=订金*订数,临时表放在存储过程中
代码如下:
Create proc temp_sale
as
select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额
into #temptable from Product a inner join Order b on a.产品编号=b.产品编号
if @@error=0
print 'Good'
else
print 'Fail'
go
2)什么是触发器定义:触发器是一种特殊的存储过程,当insert,update,delete语句修改表中的一个或多个行时,执行触发器
分享到:
相关推荐
以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()`方法将生成的SQL语句打印到控制台。例如: ```csharp var query = (from customer in ...
### SQL优化的关键方法 #### 一、选择最有效的表名顺序 在构建SQL查询时,尤其是在涉及多个表的连接查询中,表名的顺序对于查询性能有着重要影响。Oracle数据库的解析器是从右向左处理FROM子句中的表名。为了优化...
本文将详细介绍几种常见且有效的Oracle数据库SQL优化策略。 首先,明确SQL语句优化的必要性是开展优化工作的前提。SQL语句在数据分析和应用中使用极其频繁,对于大多数应用软件而言,几乎所有的数据库操作都涉及SQL...
SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...
以下是从网络上搜集整理的几种方法来实现这一过程。 #### 方法一:通过 SQL Server 2000 备份文件进行还原 1. **准备工作**:首先确保你有一个有效的 SQL Server 2000 的数据库备份文件(.bak 文件),并确认该备份...
本文将详细介绍几种SQL去重的方法,并通过具体的示例来解释每种方法的应用场景及其背后的原理。 ### 方法一:使用 `SELECT DISTINCT` `SELECT DISTINCT` 是最常用的去重方式之一,它可以返回指定列中的不同值。...
提供的`sql2005自动备份方法1.sql`和`sql2005自动备份方法2.sql`是两种利用T-SQL脚本来实现自动备份的方法。这些脚本可以直接在SQL Server的查询分析器中执行,或者集成到数据库维护计划中。它们通常包含以下步骤:...
### SQL Server 数据库优化之50种方法 在IT领域,特别是对于数据库管理与优化方面,SQL Server作为一款广泛使用的数据库管理系统,其性能优化一直是DBA(数据库管理员)和技术团队关注的重点。本文将根据给定的信息...
### 通过SQL语句实现行列转换的几种方法 在日常工作中,我们经常需要处理的数据结构并不总是按照我们期望的方式组织的。特别是在制作自定义报表或进行产品开发时,经常会遇到需要将数据从一种布局转换到另一种布局...
以上是SQL2000中的各种查询方法,这些基础知识对于理解和使用任何SQL数据库都是非常重要的。通过熟练掌握这些方法,你可以高效地从数据库中获取你需要的信息。在实际应用中,还可以结合存储过程、触发器、视图等高级...
### ASP 连接 SQL Server 数据库的几种方法 在 Web 开发领域,ASP(Active Server Pages)作为一种服务器端脚本环境,在与数据库交互方面有着广泛的应用。本文将详细介绍 ASP 如何连接 SQL Server 数据库的几种常见...
游标对于初学者来说可能有些抽象,但一旦掌握了其基本使用方法,就能在很多场景下发挥巨大的作用。下面我们将详细探讨SQL经典游标的应用。 首先,我们需要理解游标的基本概念。游标创建了一个指向结果集中特定位置...
对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防...我在网上收集了以下3种方法 C#防SQL注入方法一 在Web.config文件中
本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL...
下面将详细介绍几种常见的SQL Server报错及其解决方法。 #### 忘记`sa`登录密码 当忘记`sa`账号密码时,通常有两种情况:一是忘记了在Windows认证模式下的`sa`密码;二是忘记了混合认证模式(Windows认证与SQL ...
本文将详细探讨三种常用的Oracle分页SQL方法:ROWNUM、ROWNUM结合子查询以及新引入的Oracle 12c的FETCH NEXT WITH OFFSET语法。这三种方法各有优缺点,适用于不同的场景。 1. ROWNUM方法: ROWNUM是Oracle中最基础...
### 嵌入式SQL的详细使用方法 #### 一、嵌入式SQL的基本概念与组成元素 **嵌入式SQL(Embedded SQL)**是一种将SQL语句嵌入到高级编程语言(如C语言)中的技术。这种方式允许开发人员直接在程序中执行数据库操作,...
这篇文章将介绍两种主要的获取SQL Server元数据的方法:使用系统存储过程和系统函数,以及通过信息架构视图。 首先,我们来看使用系统存储过程和系统函数的方式。SQL Server提供了许多预定义的系统存储过程和函数,...
### 嵌入式SQL的使用方法详解 #### 一、引言 嵌入式SQL是一种将SQL语句嵌入到宿主语言(如C、C++等)中的编程技术。这种方式可以让程序员更加灵活地控制数据库操作流程,尤其是在处理复杂的查询逻辑时。本文将详细...
### SQL分页的几种方法 #### 背景介绍 在数据库操作中,分页是一项非常常见的需求。尤其是在处理大量数据时,为了提高查询效率、减少服务器负担,并为用户提供更好的体验,分页变得尤为重要。SQL提供了多种实现分页...