SQL语法操作集

下列语句部分是Mssql语句,不可以在access中使用。 

SQL分类: 
DDL—数据定义语言(
CREATE ALTER DROP DECLARE
DML—数据操纵语言(
SELECT DELETE UPDATE INSERT
DCL—数据控制语言(
GRANT REVOKE COMMIT ROLLBACK

首先,简要介绍基础语句: 
1 、创建数据库 
CREATE   DATABASE   database - name 
2 、删除数据库 
drop   database  dbname
3 、备份sql server 
-- - 创建 备份数据的 device 
USE  master 
EXEC  sp_addumpdevice ’ disk ’, ’testBack’, ’c:\mssql7backup\MyNwind_1.dat’ 
-- - 开始 备份 
BACKUP   DATABASE  pubs  TO  testBack 
4 、创建新表
create   table  tabname(col1 type1  [ not null ]   [ primary key ] ,col2 type2  [ not null ] ,..) 
根据已有的表创建新表:
A:
create   table  tab_new  like  tab_old (使用旧表创建新表) 
B:
create   table  tab_new  as   select  col1,col2…  from  tab_old definition  only  
5 、删除新表  drop   table  tabname 
6 、增加一个列
Alter   table  tabname  add   column  col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7 、添加主键:  Alter   table  tabname  add   primary   key (col)
删除主键: 
Alter   table  tabname  drop   primary   key (col)
8 、创建索引: create   [ unique ]   index  idxname  on  tabname(col….)
删除索引:
drop   index  idxname
注:索引是不可更改的,想更改必须删除重新建。
9 、创建视图: create   view  viewname  as   select  statement 
删除视图:
drop   view  viewname
10 、几个简单的基本的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 % ’  -- -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
11 、几个高级查询运算词 
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 ),不消除重复行。 
注:使用运算词的几个查询结果行必须是一致的。
12 、使用外连接 
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 : 
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。


其次,大家来看一些不错的sql语句 
1 、复制表(只复制结构,源表名:a 新表名:b) (Access可用) 
法一:
select   *   into  b  from  a  where   1 <> 1  
法二:
select   top   0   *   into  b  from  a 
2 、拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) 
insert   into  b(a, b, c)  select  d,e,f  from  b; 
3 、跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) 
insert   into  b(a, b, c)  select  d,e,f  from  b  in  ‘具体数据库’  where  条件 
例子:..
from  b  in  ’" & Server.MapPath(".") & "\data.mdb"  & "’  where .. 
4 、子查询(表名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
5 、显示文章、提交人和最后回复时间 
select  a.title,a.username,b.adddate  from   table  a,( select   max (adddate) adddate  from   table   where   table .title = a.title) b 
6 、外连接查询(表名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 
7 、在线视图查询(表名1:a ) 
select   *   from  ( SELECT  a,b,c  FROM  a) T  where  t.a  >   1
8 、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 
9 in  的使用方法 
select   *   from  table1  where  a  [ not ]   in  (‘值1’,’值2’,’值4’,’值6’) 
10 、两张关联表,删除主表中已经在副表中没有的信息
delete   from  table1  where   not   exists  (  select   *   from  table2  where  table1.field1 = table2.field1 )
11 、四表联查问题
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  ...
12 、日程安排提前五分钟提醒
SQL: 
select   *   from  日程安排  where   datediff (’minute’,f开始时间, getdate ()) > 5  
13 、一条sql 语句搞定数据库分页
select   top   10  b. *   from  ( select   top   20  主键字段,排序字段  from  表名  order   by  排序字段  desc ) a,表名 b  where  b.主键字段  =  a.主键字段  order   by  a.排序字段
14 、前10条记录
select   top   10   *  form table1  where  范围
15 、选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select  a,b,c  from  tablename ta  where  a = ( select   max (a)  from  tablename tb  where  tb.b = ta.b) 
16 、包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 
(
select  a  from  tableA )  except  ( select  a  from  tableB)  except  ( select  a  from  tableC) 
17 、随机取出10条数据 
select   top   10   *   from  tablename  order   by   newid () 
18 、随机选择记录 
select   newid () 
19 、删除重复记录 
Delete   from  tablename  where  id  not   in  ( select   max (id)  from  tablename  group   by  col1,col2,...) 
20 、列出数据库里所有的表名 
select  name  from  sysobjects  where  type = ’U’ 
21 、列出表里的所有的 
select  name  from  syscolumns  where  id = object_id (’TableName’) 
22 、列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case
select  type, sum ( case  vender  when  ’A’  then  pcs  else   0   end ), sum ( case  vender  when  ’C’  then  pcs  else   0   end ), sum ( case  vender  when  ’B’  then  pcs  else   0   end FROM  tablename  group   by  type 
显示结果: 
type vender pcs 
电脑 A 
1  
电脑 A 
1  
光盘 B 
2  
光盘 A 
2  
手机 B 
3  
手机 C 
3  
23 、初始化表table1 
TRUNCATE   TABLE  table1 
24 、选择从10到15的记录 

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc




mysql -uroot -p111111 -h127.0.0.1

求助数据库连接:ERROR 1045 (28000): Access denied for user (using password: YES)??

其实只要加上主机ip就ok了。

后面需要加-h ServerIPAddr

如:

mysql -u xx -p -h 192.168.1.1然后输入密码,就OK了

随便附上mysql常用的命令(以下内容转载自: 原文地址 http://engyy.com/?action=show&id=127&page=1):

mysql命令行常用命令

第一招、mysql服务的启动和停止

net stop mysql

net start mysql

第二招、登陆mysql

语法如下: mysql -u用户名 -p用户密码

键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:

mysql>

注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP

第三招、增加新用户

格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"

如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";

如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。

如果你不想user1有密码,可以再打一个命令将密码去掉。

grant select,insert,update,delete on mydb.* to user1@localhost identified by "";

第四招: 操作数据库

登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。

1、 显示数据库列表。

show databases;

缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。

2、 显示库中的数据表:

use mysql;

show tables;

3、 显示数据表的结构:

describe 表名;

4、 建库与删库:

create database 库名;

drop database 库名;

5、 建表:

use 库名;

create table 表名(字段列表);

drop table 表名;

6、 清空表中记录:

delete from 表名;

7、 显示表中的记录:

select * from 表名;

第五招、导出和导入数据

1. 导出数据:

mysqldump --opt test > mysql.test

即将数据库test数据库导出到mysql.test文件,后者是一个文本文件

如:mysqldump -u root -p123456 --databases dbname > mysql.dbname

就是把数据库dbname导出到文件mysql.dbname中。

2. 导入数据:

mysqlimport -u root -p123456 < mysql.dbname。

不用解释了吧。

3. 将文本数据导入数据库:

文本数据的字段数据之间用tab键隔开。

use test;

load data local infile "文件名" into table 表名;

第六招、乱码问题

MySQL 的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:

查看字符集:

   1. mysql> SHOW VARIABLES LIKE 'character_set_%';

显示字符集设置如下:

   1. +--------------------------+----------------------------+

   2.   | Variable_name | Value |

   3.   +--------------------------+----------------------------+

   4.   | character_set_client | latin1 |

   5.   | character_set_connection | latin1 |

   6.   | character_set_database | latin1 |

   7.   | character_set_results | latin1 |

   8.   | character_set_server | latin1 |

   9.   | character_set_system | utf8 |

10.   | character_sets_dir | /usr/share/mysql/charsets/ |

11.   +--------------------------+----------------------------+

查看排序方式(Collation)

   1. mysql> SHOW VARIABLES LIKE 'collation_%';

显示默认值:

   1. +----------------------+-------------------+

   2.   | Variable_name | Value |

   3.   +----------------------+-------------------+

   4.   | collation_connection | latin1_swedish_ci |

   5.   | collation_database | latin1_swedish_ci |

   6.   | collation_server | latin1_swedish_ci |

   7.   +----------------------+-------------------+

上面列出的值就是系统的默认值。如果你奇怪系统怎么默认是latin1的瑞典语排序方式,原因是MySQL由瑞典的T.c.X.DataKonsultAB公司(目前公司名称为MySQL AB)开发,不用再多说了吧。

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES ‘utf8′;

它相当于下面的三句指令:

   1. SET character_set_client = utf8;

   2. SET character_set_results = utf8;

   3. SET character_set_connection = utf8;

再试试看,正常了吧?

就是连接之后加个查询

   1. $this->query(”SET NAMES ‘utf8'”);

character_set_client,character_set_results,character_set_connection三个运行变量是造成乱码的关键。mysql把客户端提交的查询由character_set_client转换为 character_set_connection

,由于默认网页提交的查询是gb2312(表单页面meta里可以看到),而mysql默认将其当作utf8(可以查到此时的 character_set_client=utf8),所以必然乱码。同理,mysql返回的结果是已经转换成 character_set_results编码的(与表的编码无关),同样默认是utf8,而网页页面把它当gb2312处理,所以必然有标题等由数据库读出的字段是乱码而其他部门文字不乱码的现象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值