数据库和ado连接语句的使用总结,mysql语句整理

基本的sql语句

  1. 创建数据库:CREATE DATABASE
    database-name
  2. 删除数据库:drop database
    dbname
  3. 创建表:create table
    tabname(字段属性)
  4. 删除表:drop table tabname
  5. 增加列:Alter table tabname add
    column col type
  6. 添加/删除主键:Alter table taname
    add/drop(删除) primary key(列名)
  7. 创建索引:create [unique] index
    idxname on tabname(col….)
  8. 创建视图:create view viewname as
    select statement
  9. 查询:select * from table1 where
    范围
  10. 插入:insert into
    table1(field1,field2) values(value1,value2)
  11. 删除:delete from table where
    范围
  12.  更新:update table1 set
    field1=value1 where 范围
  13.  模糊查找:select * from table1
    where field1 like ’%value%’
  14. 排序:select * from table order by
    field1,field2 [desc]
  15. 总数统计:select count(*) from
    table
  16.  求和:select sum(field) as sumvalue
    from table
  17. 平均:select avg(field) as avgvalue
    from table
  18. 最大最小:select max/min(field) as
    value from table
  19.  查询范围值: select * from table1
    where time between time1 and time2
  20. UNION 运算符:请转表的关联查询
  21. EXCEPT
    运算符:请转表的关联查询
  22. INTERSECT
    运算符:请转表的关联查询
  23. 外连接:请转表的关联查询
  24. 分组:select age,SUM(age) from
    BaseTable GROUP BY age
  25. 复制表(只复制表结构): select * into
    b from a where 1<>1
  26. 复制数据: insert into b(列名) select
    列名 from b;

转自http://www.cnblogs.com/0351jiazhuang/p/4530366.html

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

索引分为聚簇索引和非聚簇索引两种,聚簇索引
是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

SQL是(Structured Query
Language)结构化查询语言的简称,下面赵一鸣随笔博客从基础知识、判断对象和应用技巧等方面,介绍了SQL的应用方法。

触发器

触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。

触发器分为after触发器,insert触发器, update触发器, delete触发器。

创建触发器语法:

create trigger tgr_name

on table_name

for  触发器类型

AS

数据库执行的语句

基础

触发器实例

在ado数据库创建BaseTable的插入触发器:

在向表BaseTable插入一条记录时,同时触发器会向Table表也插入一条数据作为记录触发器执行成功。

图片 1图片 2

ALTER TRIGGER [dbo].[tgr_name]

   ON  [dbo].[BaseTable]

   for INSERT

AS

BEGIN

    declare @name varchar(20),@id int;

    select @id = id, @name = name from inserted;

    set @name = @name + convert(varchar, @id);

    insert into [Ado].[dbo].[Table] values(@name, 18 + @id);



END

View Code

创建数据库

储存过程

存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。

储存过程的优点:存储过程允许标准组件式编程,存储过程能够实现较快的执行速度,存储过程减轻网络流量,存储过程可被作为一种安全机制来充分利用。

创建之前判断该数据库是否存在

系统储存过程:

系统存储过程是系统创建的存储过程,系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程,有些也会在创建新数据库的时候自动创建在当前数据库。常用的系统储存过程有:

exec sp_databases; –查看数据库
exec sp_tables;       
–查看表
exec sp_columns
student;–查看列
exec sp_helpIndex
student;–查看索引
exec sp_helpConstraint
student;–约束
exec sp_stored_procedures;
exec sp_helptext
‘sp_stored_procedures’;–查看存储过程创建、定义语句
exec sp_rename student,
stuInfo;–修改表、索引、列的名称
exec sp_renamedb myTempDB,
myDB;–更改数据库名称
exec sp_defaultdb ‘master’,
‘myDB’;–更改登录名的默认数据库
exec
sp_helpdb;–数据库帮助,查询数据库信息

储存过程的示例调用:

重命名表的名字:exec sp_rename 'tablename', tablename1;

if exists (select * from sysdatabases where name=’databaseName’)

用户自定义储存过程

创建储存过程的语法:

Create proc|procedure proc_name

(

   @参数名 类型,

   ….

)

As

Sql执行语句和一写判断处理

 

创建示例:

图片 3图片 4

USE [Ado]

GO

/****** Object:  StoredProcedure [dbo].[proc_BaseTable]    Script Date: 05/25/2016 17:23:08 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[proc_BaseTable](@name varchar(50),@age int)



AS

BEGIN

select * from BaseTable where name=@name

select * from BaseTable where age=@age return 10

select * from BaseTable where name=@name and age=@age 

END

View Code

drop database databaseName

视图

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加
SQL 函数、WHERE 以及 JOIN
语句,我们也可以提交数据,就像这些来自于某个单一的表。

创建视图:create view view_BaseTable as select id,name from BaseTable

数据库文件有一个BaseTableView.Sql文件执行即是此示例。

go

约束

在此功能上我只在BaseTable表的age字段添加check约束使年龄不能超过50.

Create DATABASE database-name

约束的属性介绍:

NOT NULL : 用于控制字段的内容一定不能为空(NULL)。

UNIQUE : 控件字段内容不能重复,一个表允许有多个 Unique 约束。

PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。

FOREIGN KEY: FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY
约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

CHECK: 用于控制字段的值范围。

DEFAULT: 用于设置新记录的默认值。

删除数据库

示例:

NOT NULL :Create table MyTable 

               ( 

                   id varchar(32) not null, 

               name varchar (32) 
               ) 

UNIQUE:Create table MyTable 

               ( 

                   id varchar(32) not null UNIQUE, 

                   name varchar (32) 

               ) 

           Create table MyTable 

                ( 

                    id varchar(32) not null, 

                    name varchar (32), 

                    unique (id,…..) 

                 ) 

PRIMARY KEY :Create table MyTable 

               ( 

                   id varchar(32) not null PRIMARY KEY, 

                   name varchar (32) 

               ) 

Foreign Key :Create table MyTable 

               ( 

                            id nvarchar(32) not null primary key, 

                   name nvarchar(32), 

foreign key(id) references myTB(id) 

               ) 

Check  :Create table MyTable 

               ( 

                 id nvarchar(32) not null,

                   age int not null,

check (age>15 and age <30)

               ) 

Default:Create table MyTable 

               ( 

                 id int, 

name nvarchar(32) default ‘celly’               

 ) 

drop database dbname

游标

游标是一种能从包含多条数据记录的结果集中每次提取一条记录的机制。将批操作变成行操作,对结果集中得某行进行操作。

数据库文件BaseTableCsr.sql是游标示例。查询BaseTable表的id与name字段循环打印出来。

备份sql server

表的关联查询

— 创建 备份数据的 device

内连接:

只根据表查找符合添加的,不返回所有表数据。

示例代码:

select * from BaseTable join tabname on BaseTable.id=tabname.id

效果图

 图片 5

USE master

左连接查询:

以左表为主第二张表加入有符合条件的则显示数据,没有则第二张表全部为空

示例代码

select * from BaseTable left join tabname on BaseTable.id=tabname.id

效果图:

图片 6

EXEC sp_addumpdevice ‘disk’, ‘testBack’,
‘c:mssql7backupMyNwind_1.dat’

右链接查询:

以右表为主查找符合的数据,没有符合项左表显示为空

示例代码:

select * from BaseTable right join tabname on BaseTable.id=tabname.id

效果图:

 图片 7

— 开始 备份

完全外连接:

查找的表所有的数据合并成一张表进行显示

示例代码:

select * from BaseTable full join tabname on BaseTable.id=tabname.id

效果图(tabname表只有一条数据):

 图片 8

BACKUP DATABASE pubs TO testBack

交叉连接:

没有where语句的交叉连接产生的是两张表行数的乘积数据,如果带where的结果与内连接的结果相同。

示例代码:

select * from BaseTable cross join tabname

效果图:

 图片 9

创建新表

UNION运算:

分为UNION(检查重复)和UNION all(不检查重复)

检查重复示例代码:

select id from BaseTable union select id from  Tables

效果图:

 图片 10

不检查重复代码:

select id from BaseTable union all select id from  Tables

效果图:

 图片 11

create table tabname(col1 type1 [not null] [primary key],col2 type2
[not null],..)

EXCEPT运算:

从左查询中返回有右查询中没有找到的不重复项

示例代码:

select id from BaseTable except select id from tabname

效果图:

图片 12

根据已有的表创建新表:

INTERSECT运算:

返回两个表都有的非重复项

示例代码:

select id From BaseTable intersect select id from tabname

效果图:

 图片 13

A:go

ADO 

use 原数据库名

连接字符串常用属性

1、    Data Source:数据源。计算机名称或者IP地址。

2、    Server:服务器。数据库所在计算机的名称

3、    Database:数据库名称。

4、    Initail Catalog:数据库的名称。

5、    User ID:用于连接数据库的用户名称。

6、    Password:用于连接数据库的用户密码。

7、    Pooling:标志是否使用数据库连接池(少客户访问启用可以提高性能)。

8、    Intergrated
Security:系统集成安全验证。标志登录数据库时是否使用系统集成验证。

9、    Connection
Timeout:连接超时的时间。系统再次尝试连接数据库时所经历的时间,单位为秒,默认值为15秒。

go

在程序中的事务操作

首先创建事物:SqlTransaction st = conn.BeginTransaction();

开始事物(即事物的赋值):cmd.Transaction = st;

提交事务:st.Commit();

回滚事务:st.Rollback();

假如要创建某个事物保存点可以使用:st.save();

根据事物操作可以做事物回滚的批量插入,修改操作,有一条不正确即可实现事物回滚,具体请看dome代码详细介绍。

select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)

调用储存过程

使用在数据库创建的储存过程在dome中通过ado进行调用,并得到返回的表。

示例代码:

 图片 14

 

注意点:在调用储存过程中,加入你的存储过程涉及到大量的操作,查询什么的,而你只需要返回其中的某个一条查询记录,需要在储存过程中找到需要返回的语句加上return
,这样在程序中调用只会返回本条语句结果。

B:create table tab_new as select col1,col2… from tab_old definition
only

创建序列

create sequence SIMON_SEQUENCE

minvalue 1 — 最小值

maxvalue 999999999999999999999999999 最大值

start with 1 开始值

increment by 1 每次加几

cache 20;

删除新表

drop table tabname

增加一个列

Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

添加主键

Alter table tabname add primary key(col)

说明:删除主键: Alter table tabname drop primary key(col)

创建索引

create [unique] index idxname on tabname(col….)

删除索引:drop index idxname on tabname

注:索引是不可更改的,想更改必须删除重新建。

创建视图

create view viewname as select statement

删除视图:drop view viewname

几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’
(所有包含‘value1’这个模式的字符串)—like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count(*) as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1[separator]

几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和
TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION
一起使用时(即 UNION
ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自
TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2
中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时
(EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2
中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT
一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

使用外连接

A、left outer join:

左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a =
b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

判断对象是否存在

判断数据库是否存在

if exists (select * from sys.databases where name = ‘数据库名’)

drop database [数据库名]

判断表是否存在

if not exists (select * from sysobjects where [name] = ‘表名’ and
xtype=’U’)

begin

–这里创建表

end

判断存储过程是否存在

if exists (select * from sysobjects where id =
object_id(N'[存储过程名]’) and OBJECTPROPERTY(id, N’IsProcedure’) =
1)

drop procedure [存储过程名]

判断临时表是否存在

if object_id(‘tempdb..#临时表名’) is not null

drop table #临时表名

判断视图是否存在

–SQL Server 2000

IF EXISTS (SELECT * FROM sysviews WHERE object_id =
‘[dbo].[视图名]’

–SQL Server 2005

IF EXISTS (SELECT * FROM sys.views WHERE object_id =
‘[dbo].[视图名]’

判断函数是否存在

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[函数名]’) and xtype in (N’FN’, N’IF’, N’TF’))

drop function [dbo].[函数名]

获取用户创建的对象信息

SELECT [name],[id],crdate FROM sysobjects where xtype=’U’

/*

xtype 的表示参数类型,通常包括如下这些 C = CHECK 约束 D = 默认值或
DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数
P = 存储过程 PK = PRIMARY KEY 约束(类型是 K) RF = 复制筛选存储过程 S =
系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K) V
= 视图 X = 扩展存储过程 */

判断列是否存在

if exists(select * from syscolumns where id=object_id(‘表名’) and
name=’列名’)

alter table 表名 drop column 列名

判断列是否自增列

if columnproperty(object_id(‘table’),’col’,’IsIdentity’)=1

print ‘自增列’

else

print ‘不是自增列’

SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(‘表名’)

AND is_identity=1

判断表中是否存在索引

if exists(select * from sysindexes where id=object_id(‘表名’) and
name=’索引名’)

print ‘存在’

else

print ‘不存在

查看数据库中对象

SELECT * FROM sys.sysobjects WHERE name=’对象名’

提升

复制表

(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二:select top 0 * into b from a

拷贝表

(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

跨数据库之间表的拷贝

(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in ‘”&Server.MapPath(“.”&”data.mdb” &”‘ where..

子查询

(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b 或者: select a,b,c from
a where a IN (1,2,3)

显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate)
adddate from table where table.title=a.title) b

外连接查询

(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

在线视图查询

(表名1:a

select * from (Select a,b,c FROM a) T where t.a > 1;

between的用法

between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

删除主表中已经在副表中没有的信息

两张关联表delete from table1 where not exists ( select * from table2
where table1.field1=table2.field1

四表联查问题

select * from a left inner join b on a.a=b.b right inner join c on
a.a=c.c inner join d on a.a=d.d where …..

日程安排提前五分钟提醒

SQL: select * from 日程安排 where
datediff(‘minute’,f开始时间,getdate())>5

一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order
by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by
a.排序字段

前10条记录

select top 10 * form table1 where 范围

选择排名

发表评论

电子邮件地址不会被公开。 必填项已用*标注