百度
360搜索
搜狗搜索

简单的sql语句,初学者,简单的数据库sql语句,看看对不对详细介绍

本文目录一览: 经典sql语句大全

一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack4、说明:创建新表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 only5、说明:删除新表drop table tabname6、说明:增加一个列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 viewname10、说明:几个简单的基本的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 table111、说明:几个高级查询运算词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.cB:right (outer) join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。C:full/cross (outer) join:全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。13、分组:Group by:一张表,一旦分组 完成后,查询后只能得到组相关的信息。组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据在selecte统计函数中的字段,不能和普通的字段放在一起;14、对数据库进行操作:分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名15.如何修改数据库的名称:sp_renamedb 'old_name', 'new_name'二、提升1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 11(仅用于SQlServer)法二:select top 0 * into b from a2、说明:拷贝表(拷贝数据,源表名: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) b6、说明:外连接查询(表名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.c7、说明:在线视图查询(表名1:a )select * from (SELECT a,b,c FROM a) T where t.a1;8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between 数值1 and 数值29、说明: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())513、说明:一条sql 语句搞定数据库分页select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段具体实现:关于数据库分页:declare @start int,@end int@sql nvarchar(600)set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid-1)’exec sp_executesql @sql注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)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、说明:删除重复记录1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)2),select distinct * into temp from tablenamedelete from tablenameinsert into tablename select * from temp评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段alter table tablename--添加一个自增列add column_b int identity(1,1)delete from tablename where column_b not in(select max(column_b) from tablename group by column1,column2,...)alter table tablename drop column column_b20、说明:列出数据库里所有的表名select name from sysobjects where type='U' // 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 323、说明:初始化表table1TRUNCATE TABLE table124、说明:选择从10到15的记录select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc#p#副标题#e#三、技巧1、1=1,1=2的使用,在SQL语句组合时用的较多“where 1=1” 是表示选择全部 “where 1=2”全部不选,如:if @strWhere !=''beginset @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhereendelsebeginset @strSQL = 'select count(*) as Total from [' + @tblName + ']'end我们可以直接写成set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收缩数据库--重建索引DBCC REINDEXDBCC INDEXDEFRAG--收缩数据和日志DBCC SHRINKDBDBCC SHRINKFILE3、压缩数据库dbcc shrinkdatabase(dbname)4、转移数据库给新用户以已存在用户权限exec sp_change_users_login 'update_one','newname','oldname'go5、检查备份集RESTORE VERIFYONLY from disk='E:\dvbbs.bak'6、修复数据库ALTER DATABASE [dvbbs] SET SINGLE_USERGODBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCKGOALTER DATABASE [dvbbs] SET MULTI_USERGO7、日志清除SET NOCOUNT ONDECLARE @LogicalFileName sysname,@MaxMinutes INT,@NewSize INTUSE tablename -- 要操作的数据库名SELECT @LogicalFileName = 'tablename_log', -- 日志文件名@MaxMinutes = 10, -- Limit on time allowed to wrap log.@NewSize = 1 -- 你想设定的日志文件的大小(M)Setup / initializeDECLARE @OriginalSize intSELECT @OriginalSize = sizeFROM sysfilesWHERE name = @LogicalFileNameSELECT 'Original Size of ' + db_name() + ' LOG is ' +CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'FROM sysfilesWHERE name = @LogicalFileNameCREATE TABLE DummyTrans(DummyColumn char (8000) not null)DECLARE @Counter INT,@StartTime DATETIME,@TruncLog VARCHAR(255)SELECT @StartTime = GETDATE(),@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'DBCC SHRINKFILE (@LogicalFileName, @NewSize)EXEC (@TruncLog)-- Wrap the log if necessary.WHILE @MaxMinutesDATEDIFF (mi, @StartTime, GETDATE()) -- time has not expiredAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)AND (@OriginalSize * 8 /1024)@NewSizeBEGIN -- Outer loop.SELECT @Counter = 0WHILE ((@Counter@OriginalSize / 16) AND (@Counter50000))BEGIN -- updateINSERT DummyTrans VALUES ('Fill Log') DELETE DummyTransSELECT @Counter = @Counter + 1ENDEXEC (@TruncLog)ENDSELECT 'Final Size of ' + db_name() + ' LOG is ' +CONVERT(VARCHAR(30),size) + ' 8K pages or ' +CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'FROM sysfilesWHERE name = @LogicalFileNameDROP TABLE DummyTransSET NOCOUNT OFF8、说明:更改某个表exec sp_changeobjectowner 'tablename','dbo'9、存储更改全部表CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch@OldOwner as NVARCHAR(128),@NewOwner as NVARCHAR(128)ASDECLARE @Name as NVARCHAR(128)DECLARE @Owner as NVARCHAR(128)DECLARE @OwnerName as NVARCHAR(128)DECLARE curObject CURSOR FORselect 'Name' = name,'Owner' = user_name(uid)from sysobjectswhere user_name(uid)=@OldOwnerorder by nameOPEN curObjectFETCH NEXT FROM curObject INTO @Name, @OwnerWHILE(@@FETCH_STATUS=0)BEGINif @Owner=@OldOwnerbeginset @OwnerName = @OldOwner + '.' + rtrim(@Name)exec sp_changeobjectowner @OwnerName, @NewOwnerend-- select @name,@NewOwner,@OldOwnerFETCH NEXT FROM curObject INTO @Name, @OwnerENDclose curObjectdeallocate curObjectGO10、SQL SERVER中直接循环写入数据declare @i intset @i=1while @i30begininsert into test (userid) values(@i)set @i=@i+1end案例:有如下表,要求就裱中所有_有及格的成_,在每次增_0.1的基_上,使他__好及格:Name scoreZhangshan 80Lishi 59Wangwu 50Songquan 69while((select min(sc

常用的sql语句有哪些

sql语句用什么语句1、插入记录通过insertinto进行,SQL语句格式为:例如,向表stuinfo插入一条记录,SQL语句为:注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。
2、SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
3、sql语句中创建表的语句为“CREATETABLE”。具体语法格式为“CREATETABLEtable表名([表定义选项])[表选项][分区选项];”;其中[表格定义选项]的格式为“列名1类型1[,?]列名n类型n”。
4、一:数据查询语言(DQL:DataQueryLanguage):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。
SQL语句有哪几种类型,各类型的主要作用是什么?1、SQL包含四种程序设计语言类别的语句:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事物控制语言(TCL)。
2、整数数据类型整数数据类型是最常用的数据类型之一。INT(INTEGER)INT(或INTEGER)数据类型存储从-2的31次方(-2,147,483,648)到2的31次方-1(2,147,483,647)之间的所有正负整数。
3、数据控制功能DCL(DataControlLanguage)GRANT,REVOKE,COMMIT,ROLLBACK主要为以上操作即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。
4、SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式有叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。
数据库中常用的sql语句有哪些使用mydb这个数据库,或者进入mydb这个数据库。删除数据库删除Testdb这个数据库。查看有哪些数据表进入某个数据库之后,想查看有哪些数据表,SQL语句为:mydb是一个新建的数据库,所以自然是没有数据表。
SQL语句:主要是由sql关键字加sql对象的名称组合而成。
SQL包含四种程序设计语言类别的语句:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事物控制语言(TCL)。
DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
SQL语句语法大全连接对象.ExecuteSQL操作性语句[,RecordAffected][,Option]·RecordAffected为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
selectmax(SQL成绩),min(MCSE成绩)from表---查SQL最高分和MCSE最低分---常用的函数:max(最大),min(最小),sum(总和),avg(平均值)---count(*)统计表内数据的行数。
DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。例如,下面的语句查询testtable表中姓名为张三的nickname字段和email字段。
SQL是英文StructuredQueryLanguage的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。
数据库常用sql语句有哪些例如,删除数据表stuinfotest1,SQL语句为:插入记录此时的表stuinfo是空的,没有数据,我们要向表中插入记录。
sql=selectsum(字段名)as别名from数据表where条件表达式setrs=conn.excute(sql)用rs(别名)获取统的计值,其它函数运用同上。
Access数据库:SELECTiif(len(field)2,left(field,2)+...,field)FROMtablename;Conn.Execute说明Execute方法该方法用于执行SQL语句。

SQL查询语句

SQL查询语句大全
  SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。那么SQL查询语句有哪些?下面跟我一起来看看吧!
  一、简单查询语句
  1. 查看表结构
  SQL>DESC emp;
  2. 查询所有列
  SQL>SELECT * FROM emp;
  3. 查询指定列
  SQL>SELECT empmo, ename, mgr FROM emp;
  SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项
  4. 查询指定行
  SQL>SELECT * FROM emp WHERE job='CLERK';
  5. 使用算术表达式
  SQL>SELECT ename, sal*13+nvl(comm,0) FROM emp;
  nvl(comm,1)的意思是,如果comm中有值,则nvl(comm,1)=comm; comm中无值,则nvl(comm,1)=0。
  SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal为别名,可按别名排序)
  SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';
  6. 使用like操作符(%,_)
  %表示一个或多个字符,_表示一个字符,[charlist]表示字符列中的任何单一字符,[^charlist]或者[!charlist]不在字符列中的任何单一字符。
  SQL>SELECT * FROM emp WHERE ename like 'S__T%';
  7. 在where条件中使用In
  SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');
  8. 查询字段内容为空/非空的语句
  SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;
  9. 使用逻辑操作符号
  SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';
  10. 将查询结果按字段的值进行排序
  SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部门升序,并按薪酬降序)
  二、复杂查询
  1. 数据分组(max,min,avg,sum,count)
  SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;
  SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));
  SQL>SELEC COUNT(*) FROM emp;
  2. group by(用于对查询结果的分组统计) 和 having子句(用于限制分组显示结果)
  SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
  SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;
  对于数据分组的总结:
  a. 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)
  b. 如果select语句中同时包含有group by, having, order by,那么它们的顺序是group by, having, order by。
  c. 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须出现在group by子句中,否则就是会出错。
  使用group by不是使用having的前提条件。
  3. 多表查询
  SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;
  SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;
  4. 自连接(指同一张表的连接查询)
  SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;
  5. 子查询(嵌入到其他sql语句中的select语句,也叫嵌套查询)
  5.1 单行子查询
  SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查询表中与smith同部门的人员名字。因为返回结果只有一行,所以用“=”连接子查询语句
  5.2 多行子查询
  SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查询表中与部门号为10的工作相同的员工的姓名、工作、薪水、部门号。因为返回结果有多行,所以用“IN”连接子查询语句。
  in与exists的区别: exists() 后面的子查询被称做相关子查询,它是不返回列表的值的。只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对 应的结果。如果是ture则输出,反之则不输出。再根据主查询中的每一行去子查询里去查询。in()后面的子查询,是返回结果集的,换句话说执行次序和 exists()不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。符合要求的输出,反之则不输出。
  5.3 使用ALL
  SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查询工资比部门号为30号的所有员工工资都高的员工的姓名、薪水和部门号。以上两个语句在功能上是一样的,但执行效率上,函数会高 得多。
  5.4 使用ANY
  SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查询工资比部门号为30号的任意一个员工工资高(只要比某一员工工资高即可)的员工的姓名、薪水和部门号。以上两个语句在功能上是 一样的,但执行效率上,函数会高得多。
  5.5 多列子查询
  SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');
  5.6 在from子句中使用子查询
  SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;
  5.7 分页查询
  数据库的每行数据都有一个对应的行号,称为rownum.
  SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2="" where="" rn="">=6;
  指定查询列、查询结果排序等,都只需要修改最里层的子查询即可。
  5.8 用查询结果创建新表
  SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;
  5.9 合并查询(union 并集, intersect 交集, union all 并集+交集, minus差集)
  SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';
  合并查询的执行效率远高于and,or等逻辑查询。
  5.10 使用子查询插入数据
  SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一张空表;
  SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再将emp表中部门号为10的数据插入到新表myEmp中,实现数据的批量查询。
  5.11 使用了查询更新表中的数据
  SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';
  简介
  SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,深受计算机工业界和计算机用户的欢迎。1980年10月,经美国国家标准局(ANSI)的数据库委员会X3H2批准,将SQL作为关系数据库语言的美国标准,同年公布了标准SQL,此后不久,国际标准化组织(ISO)也作出了同样的决定。
  SQL从功能上可以分为3部分:数据定义、数据操纵和数据控制。
  SQL的核心部分相当于关系代数,但又具有关系代数所没有的许多特点,如聚集、数据库更新等。它是一个综合的、通用的、功能极强的关系数据库语言。其特点是:
  1、数据描述、操纵、控制等功能一体化。
  2、两种使用方式,统一的语法结构。SQL有两种使用方式。一是联机交互使用,这种方式下的SQL实际上是作为自含型语言使用的。另一种方式是嵌入到某种高级程序设计语言(如C语言等)中去使用。前一种方式适合于非计算机专业人员使用,后一种方式适合于专业计算机人员使用。尽管使用方式不向,但所用语言的语法结构基本上是一致的。
  3、高度非过程化。SQL是一种第四代语言(4GL),用户只需要提出“干什么”,无须具体指明“怎么干”,像存取路径选择和具体处理操作等均由系统自动完成。
  4、语言简洁,易学易用。尽管SQL的'功能很强,但语言十分简洁,核心功能只用了9个动词。SQL的语法接近英语口语,所以,用户很容易学习和使用。
  功能
  SQL具有数据定义、数据操纵、和数据控制的功能。
  1、SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。
  2、SQL数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。
  3、SQL的数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。
  语句结构
  结构化查询语言包含6个部分:
  1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
  2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
  3、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
  4、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
  5、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
  6、指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
  语言特点
  SQL风格统一
  SQL可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据、建立数据库、査询、更新、维护、数据库重构、数据库安全性控制等一系列操作,这就为数据库应用系统开发提供了良好的环境,在数据库投入运行后,还可根据需要随时逐步修改模式,且不影响数据库的运行,从而使系统具有良好的可扩充性。
  高度非过程化
  非关系数据模型的数据操纵语言是面向过程的语言,用其完成用户请求时,必须指定存取路径。而用SQL进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
  面向集合的操作方式
  SQL采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
  以同一种语法结构提供两种使用方式
  SQL既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、C#、JAVA)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的操作方式,为用户提供了极大的灵活性与方便性。
  语言简洁,易学易用
  SQL功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。
;

SQL简单语句

第一个:查询计算机专业“计算机导论”课程的学生姓名、课程名、成绩,并按成绩降序排列
select a.姓名,b.课程名,c.成绩 from 学生信息表 a,课程信息表 b,成绩信息表 c
where a.学号=c.学号
and b.课程号=c.课程号
and a.专业名='计算机'
and b.课程名='计算机导论'
order by 成绩 desc
第二个:查询“计算机导论”课程成绩高于80分的学生学号、姓名、专业名;
select a.学号,a.姓名,a.专业名 from 学生信息表 a,课程信息表 b,成绩信息表 c
where a.学号=c.学号
and b.课程号=c.课程号
and b.课程名='计算机导论'
and c.成绩>80
第三个:查询“计算机导论”课程成绩高于80分的学生学号、姓名、课程名、成绩;
select a.学号,a.姓名,b.课程名,c.成绩 from 学生信息表 a,课程信息表 b,成绩信息表 c
where a.学号=c.学号
and b.课程号=c.课程号
and b.课程名='计算机导论'
and c.成绩>80

SQL基础语句

/* 语法: select 查询列表 from 表名 特点: 1.查询列表可以是:表中的字段、常量值、表达式、函数 2.查询的结果是虚拟的表格 */ -- 注意查询之前,要打开指定的库,use myemployees; USE myemployees;
SELECT last_name FROM employees;
SELECT last_name,salary,email FROM employees;
SELECT*FROM employees; -- 顺序和表中的字段一样
SELECT 100; SELECT 'JOIN';
SELECT 100*99;
SELECT VERSION();-- 8.0.11
/* 好处: 1.便于理解 2.如果要查询的字段有重名的情况,使用别名可以区分开 */
SELECT 100*77 AS 结果 haha; SELECT last_name AS 姓,first_name AS 名 FROM employees;
SELECT 100*77 结果 haha; SELECT last_name 姓,first_name 名 FROM employees;
-- SELECT salary AS OUT put FROM employees;会报错 -- 因为out是关键词,所以,如果别名里面有关键词的,请加双引号,或者单引号。 SELECT salary AS "OUT put" FROM employees;
SELECT DISTINCT department_id FROM employees;
/* 1.+号只有一个功能:运算符。 select 100+90; 这个做加法 2.SELECT NULL+10; --只要一方为NULL,则结果肯定是NULL。 */
-- 错误?:SELECT last_name+first_name AS 姓名 FROM employees; SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
DESC departments; SELECT * FROM departments;
SELECT DISTINCT job_id FROM employees;
-- commission_pct有些值是NULL -- 因为NULL和谁拼接都是NULL -- 所以下面的结果可能为NULL SELECT CONCAT(employee_id,',',first_name,',',last_name,",",commission_pct) AS "OUT_PUT" FROM employees;
SELECT IFNULL(commission_pct,0) AS 奖金率,commission_pct FROM employees;
-- 上面题的做法: SELECT CONCAT(employee_id,',',first_name,',',last_name,",",IFNULL(commission_pct,0)) AS "OUT_PUT" FROM employees;
/* 语法: select 查询列表 from 表名 where 筛选条件; 查询列表可以是:表中的字段、常量值、表达式、函数
分类: 一。按条件表达式筛选 条件运算符:> < = !=或者<> >= <= 二。按逻辑表达式筛选 逻辑运算符:z 作用:连接条件表达式 && || ! 或者 and or not 三。模糊查询 like BETWEEN AND in is null 或者 is not null */
SELECT * FROM employees WHERE salary>12000;
SELECT employee_id,department_id FROM employees WHERE department_id<>90;
SELECT last_name,salary,commission_pct FROM employees WHERE salary>=10000 AND salary<=20000;
SELECT * FROM employees WHERE department_id<90 or department_id >110 or salary>15000; -- 或者写成 SELECT * FROM employees WHERE NOt(department_id>=90 AND department_id <=110) or salary>15000;
/*like 特点: 一般和通配符搭配使用, 通配符 % :任意多个字符,包含0个字符 _ :占一个字符 */
-- %代表通配符 SELECT * FROM employees WHERE last_name LIKE '%a%';
SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%';
-- \转义字符 SELECT last_name FROM employees WHERE last_name LIKE ' _%'; -- 或者 告诉系统 %' ESCAPE '$';
/* 1.使用between and 可以提高语句简洁度 2.包好临界值 3.前小后大,不能颠倒顺序 */
SELECT * FROM employees WHERE employee_id>=100 AND employee_id<=120; -- 或者 SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
/* 含义:判断某字段的值是否属于in列表中的某一项 特点: 1.in 比 or 简洁 2.in列表的值类型必须是相同的或者兼容的 3.in列表的值不能使用通配符 */
SELECT last_name,job_id FROM employees WHERE job_id='IT_PROG' or job_id='AD_PRES' or job_id='AD_VP'; -- 或者 SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROG' , 'AD_PRES' ,'AD_VP');
/* =或者<>不能用于判断null值,所以只能用 is null和 is not null */
SELECT last_name,commission_pct FROM employees WHERE commission_pct is null;
SELECT last_name,commission_pct FROM employees WHERE commission_pct is not null;
-- 安全等于作用:判断是否等于,包括null,如果等于返回true。可读性较低 -- is null :仅仅判断null值,可读性较高。
-- 直接写=是不行的 SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> null;
SELECT * FROM employees WHERE salary <=> 12000;
-- 注意这个IFNULL SELECT last_name,department_id,salary 12 (1+IFNULL(commission_pct,0)) as 年薪 FROM employees WHERE employee_id=176;
SELECT salary,last_name FROM employees WHERE commission_pct IS NULL AND salary<18000;
SELECT * FROM employees WHERE job_id<>'IT' OR salary=12000;
DESC departments;
SELECT DISTINCT location_id FROM departments;
SELECT * FROM employees WHERE commission_pct like '%%' and last_name like '%%';-- commission_pct有字段有null,and之后就是null了

阅读更多 >>>  什么软件可以备份软件

初学者,简单的数据库sql语句,看看对不对

3
delete 选课where 选课.学号 in(select 学生.学号from 学生where 姓名='李四')
7、求每个同学目前获得的总学分
select 姓名,sum(学分) as 总学分 from 学生,选课,课程 where
学生.学号 = 选课.学号 and 选课.课号 = 课程.课号
group by 姓名
--------
8、查询每个同学的平均分
select 学生.学号,max(姓名),avg(成绩) as 平均分 from 学生,选课 where 学生.学号=选课.学号 group by
学生.学号
9、查询学生学号、姓名、课程名、成绩
select 学生.学号,姓名,课程名,成绩from 学生,课程,选课 where 学生.学号 = 选课.学号
and 选课.课号 = 课程.课号
其他:
2、修改张三的名字为张三丰
update 学生 set 姓名=张三丰 where 姓名='张三'
最好根据学号修改名称,不然重名人员都会被修改。
如果上机实验,标点符号必须用英文的。
第五题:错误了
select 班级,avg(成绩)as 平均成绩 from 学生,选课 where 学生.学号=选课.学号 and 选课.课号in (select
课程.课号 from 课程 where 课程名='数据库') group by 班级
第六题:不需要关联选课表
select 课程名,avg(成绩) as 平均成绩 from 课程 group by 课程名
第七题:我也不知道你这个写得对不对不过你可以这样写比较容易看懂
select (select 姓名 from 学生 where 学生.学号=选课.学号) as 姓名,sum(学分) as 总学分 from 课程,选课 where 课程.课号=选课.课号 group by 学号
第九题:你写得太高深完全没看懂;
select 学号,姓名,课程名,成绩 from 学生,课程,选课 where 学生.学号=选课.学号 and 课程.课号=选课.课号
其他的目测没错!!
5、统计每个班数据库课程的平均成绩select 班级,avg(成绩)as 平均成绩 from 学生,选课 where 选课.课号in (select 课程.课号 from 课程 where 课程名='数据库') and学生.学号=选课.学号 group by 班级
假如本题数据库的课号只有一个,则不加上如上加粗的部分也可以得到正确结果,但是这个运算过程是有问题的,会导致运算的效率降低。本题应该将学生表与选课表关联,若数据库的课号多于一个,那么也会返回正确的结果
7、求每个同学目前获得的总学分select 姓名,sum(学分) as 总学分 from 学生,课程 where 学生.学号in (select 选课.学号from 选课where 课程.课号=选课,课号)group by 姓名
本题应该将三个表关联起来之后,直接group by即可,而且这道题的毛病与第5题一样,你可以实际运算一下,你的写法得出的结果,要比我下面给出的结果,每个人的总学分要多很多。
select 姓名, sum(学分) as 总学分 from 学生,课程 where 学生.学号 = 选课.学号 and 选课.课号 = 课程.课号 group by 学生.姓名
若是考虑到重名的情况,
select 学号,姓名, sum(学分) as 总学分 from 学生,课程 where 学生.学号 = 选课.学号 and 选课.课号 = 课程.课号 group by 学生.姓名,学生.学号
8、查询每个同学的平均分select 姓名,avg(成绩) as 平均分 from 学生,选课 where 学生.学号=选课.学号 group by 姓名
这道题也是,要是考虑到重名的话,最好将学号和姓名一起作为group by的条件,同第7题,你的逻辑是对的。
9、查询学生学号、姓名、课程名、成绩
这道题不需要使用子查询【即在where条件中,增加XXX in(select。。from。。。)】,通常情况下,子查询会降低查询效率。直接进行表关联即可。
select 学生.学号,学生.姓名,课程.课程名,选课.成绩 from 学生,课程,选课 where 学生.学号 = 选课.学号 and 选课.课号 = 课程.课号

sql常用语句,帮我归纳出来,谢谢

这是调试通过的
<%
'这里假定你的数据库名为db.mdb放在Datebase目录下,用户表名为users,其中有id(自动编号),userName,PassWord,ip,email几个字段
dim conn,connstr,strdb,rs,action,username,password,newpassword,ip,mail
strdb="Datebase/db.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(""&strdb&"")
conn.Open connstr
action=request("action")
username=request("username")
password=request("password")
newpassword=request("newpassword")
mail=request("mail")
if request("ip") ="" then
ip=Request.ServerVariables("REMOTE_ADDR")
end if
if action="reg" then
if username="" or password="" or mail="" then
response.write("注册失败,账号密码邮箱不能为空")
response.end
end if
if isUser(username) then
response.write "注册失败,账号已经存在"
else
'在这里执行SQL语句,添加新的项目,将 username 和 password 和 mail添加进去
sql="insert into users ([userName],[PassWord],ip,email) values ('"&username&"','"&password&"','"&ip&"','"&mail&"')"
conn.execute(sql)
response.write("注册成功")
end if
response.end
end if
if action="edit" then
if username="" or password="" or newpassword="" then
response.write "改密失败,账号密码新密码不能为空"
response.end
end if
if not isLegalUser(username,password) then
response.write "改密失败,账号不存在或旧密码错误"
else
'更改密码
sql="update users set [PassWord]='"&newpassword&"' where [userName]='"&username&"'"
conn.execute(sql)
response.write "改密成功"
end if
response.end
end if
if action="find" then
if username="" or mail="" then
response.write "找回失败,账号邮箱不能为空"
response.end
end if
if not isUser(username) then
response.write "找回失败,账号不存在"
else
'取得用户的密码加入到password 变量中,接着直接输出密码
set rs=server.CreateObject("adodb.recordset")
sql="select PassWord from users where [UserName]='"&username&"' and [email]='"&mail&"'"
rs.open sql,conn,1,1
if rs.eof then
response.write("找回失败,账号或邮箱地址不正确")
else
password=rs("PassWord")
response.write("找回成功,你的密码是:" & password )
end if
rs.close
set rs=nothing
end if
response.end
end if
if action="update" then
if username="" or password="" then
response.write "更新失败,账号密码不能为空"
response.end
end if
if not isUser(username) then
response.write "更新失败,账号不存在"
response.end
else
'更新到用户名的IP列中
sql="update users set ip='"&ip&"' where [userName]='"&username&"'"
conn.execute(sql)
response.write ("更新成功,最新IP:" & ip )
end if
response.end
end if
if action="showip" then
if username="" then
response.write "输出失败,账号不能为空"
response.end
end if
'在这里执行SQL语句,将用户的IP地址取得后加入到变量IP中
set rs=server.CreateObject("adodb.recordset")
sql="select ip from users where [UserName]='"&username&"'"
rs.open sql,conn,1,1
if rs.eof then
response.write("输出失败,账号不存在")
else
ip=rs("ip")
response.write("你的IP是:" & ip )
end if
rs.close
set rs=nothing
response.end
end if
'======================
'检查账号是否存在
'======================
function isUser(userStr)
set rs=server.CreateObject("adodb.recordset")
sql="select * from users where [UserName]='"&userStr&"'"
rs.open sql,conn,1,1
if rs.eof then
isUser=false
else
isUser=true
end if
rs.close
set rs=nothing
end function
'======================
'检查用户名和密码是否都正确
'======================
function isLegalUser(userStr,pwsStr)
set rs=server.CreateObject("adodb.recordset")
sql="select * from users where [UserName]='"&userStr&"' and [PassWord]='"&pwsStr&"'"
rs.open sql,conn,1,1
if rs.eof then
isLegalUser=false
else
isLegalUser=true
end if
rs.close
set rs=nothing
end function
%>
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
下面都是开发必须要的语法 好好保存 做开发都经常用到的
(我总结了几年,其他的语法经典知识有很多C#,java,js,jsp,你想要可以给我留言)
select 列名(*代表全部列) from 表明
创建表
create table 表名

字段名1 类型 约束/是否为空/主键。。,
字段名2 类型 约束/是否为空

插入数据
insert into 表名 values(值1,值2,值3....)
insert into 表名(字段1,字段2,字段3....)values (值1,值2,值3...)
更改表以添加新列-------------------------------
注意:ALTER TABLE 只允许添加可包含空值或指定了 DEFAULT 定义的列。---
语法:
alter table 表名 add 新列名 类型 约束/是否为空/主键。。
更改表以除去列
语法:
alter table 表名 drop column 列名
修改表的列的类型
语法:
alter table 表名 alter column 列名 新类型
一次插入多行数据
insert into 新表 select * from 旧表
insert into 新表(字段1,字段2,字段3.....)select * from 旧表(字段1,字段2,字段3....)
select * into 新表 from 旧表
select (字段1,字段2,字段3。。。) into 新表 from 旧表
----select into拷贝用法需要注意--------------------------
语法:将一个表的结构拷贝到另一个表中(不拷贝数据)
select * into 新表 from 旧表 where 1=0
语法:将一个表拷贝到自动新建的表中
select * into 新表 from 旧表 where 1=1 或者 select * into aa from student
insert 表名(字段1,字段2,字段3)
select 值,值,值 union
select 值,值,值 union
select 值,值,值
修改纪录
修改满足条件下的一条纪录的语法如下:
update 表名 set 字段名1=新值,字段2=新值 where 字段名3=值
不加条件就意味着修改所有语法如下:
update 表名 set 字段名=新值
like的用法
select * from 表名1 where 字段1 like '%荆%'
is null 用法
select * from 表名1 where 字段1 is null 区别于下面 select * from students where stuAddress =''
is not null 用法
select * from 表名1 where 字段1 is not null
between用法
select * from 表名1 where 字段1 between 60 and 80
in 用法
select * from 表名1 where 字段1 in (值1,值2,值3.....)
聚合函数
select sum(字段1) as 别名 from 表名 where 字段=值
select max(字段1) as 别名 from 表名 where 字段=值
select min(字段1) as 别名 from 表名 where 字段=值
select count(*) as 别名 from 表名
group by用法 //注意结合上课所讲的
select 字段,avg(字段) as 别名 from 表名 group by 字段
inner join ... on 注意:将表1和表2中的公共的数据 给列在拼接表中
select * from 表1 inner join 表2 on 表1.字段名=表2.字段
left join...on --注意:左连接是把 两个表中的公共的数据给列出来在拼接表中,并且把 左表即left join 左边的表students中有的但是在 scores中没有的也列出来
select * from 主表 left join 子表 on 主表.字段=子表.字段
注意:
select * from 子表 left join 主表 on 主表.字段=子表.字段 相当于内连接 如下
select * from 表1 inner join 表2 on 表1.字段名=表2.字段
right join ...on用法
select * from 主表 right join 子表 on 主表.字段=子表.字段
--------------创建一个数据库 -----------
create database 库名
on primary ---主要数据文件
(
name=库名_data,---主要数据文件逻辑文件名,可任意命名,与日志文件逻辑文件名不能相同
filename='盘符:\路径\库名.mdf',---主要数据文件物理文件名
size=1mb,----最小空间
maxsize=5mb,----最大空间
filegrowth=10%----增涨率
)
-----日志文件-----
log on
(
name=库名_log,--日志文件逻辑文件名,可任意命名,与主要数据文件逻辑文件名不能相同
filename='盘符:\路径\库名.ldf',--日志文件物理文件名
size=1mb,----最小空间
maxsize=5mb,----最大空间
filegrowth=10%----增涨率
)
--------------维护数据库的结构-------------
----修改大小
ALTER DATABASE 库名
MODIFY FILE
(
NAME = '主要数据文件名或日志文件名',
SIZE = 新空间大小MB
)
----添加次要数据文件
ALTER DATABASE Sample
ADD FILE
(
NAME = 次要数据文件名,
FILENAME='盘符:\路径\库名.ndf',
SIZE=空间大小MB,
MAXSIZE=最大空间大小MB
)
--------------删除数据库-------------
drop database 库名1,库名2,……库名n
--------------创建一个数据表-------------------
CREATE TABLE 表名
(
列名1 类型1 约束,
列名2 类型2 约束,
………………
列名n 类型n 约束
)
----创建表时直接创建各种约束
CREATE TABLE 表名
(
列名1 类型1 primary key(列名1,列名2,……列名n),---主键约束
列名2 类型2 unique, ---唯一约束
列名3 类型3 identity(初始值,增量),---标识列约束
列名4 类型4 default 默认值[注意:字符和日期要用单引号]---默认值约束
列名5 类型5 check(列名及常量及运算符组成的表达式)---检查约束
………………
列名n 类型n,foreign key(列名1,列名2,……列名n) references 主键所在表名(列名a1,列名a2,……列名n)
)
-------------删除数据表--------------
drop table 表名1,表名2,……表名n
-------------维护数据表的结构-----------------
-----修改列
alter table 表名 alter column 列名 新类型(长度)
-----添加列
alter table 表名 add 列名 类型(长度)
-----删除列
alter table 表名 drop column 列名
-----添加主键约束
alter table 表名
add constraint 主键约束名 (外键列名)
primary key(列名1,列名2,……列名n)
-----删除主键约束
alter table 表名 drop constraint 主键约束名
-----添加唯一约束
alter table 表名 add constraint 唯一约束名 unique(列名)
-----删除唯一约束
alter table 表名 drop constraint 唯一约束名
-----添加外键约束
alter table 表名 add constraint 外键约束名 foreign key(列名1,列名2,……列名n) references 主键所在的表名(列名A1,列名A2,……列名An)
-----删除主键约束
alter table 表名 drop constraint 外键约束名
-----添加默认约束
alter table 表名 add constraint 默认约束名 default 默认值 for 列名
-----删除默认约束
alter table 表名 drop constraint 默认约束名
-----添加检查约束
alter table 表名 add constraint 检查约束名 check(列名及常量及运算符组成的表达式)
-----删除检查约束
alter table 表名 drop constraint 检查约束名
-------------------维护表的数据-------------------
-----插入数据
USE BOOKS (利用数据库)
GO
insert into 表名
values(列值1,列值2,……列值n)
insert into 表名1(列名1,列名2,……列名n)
select (列名a1,列名a2,……列名an) from 表名2
-----查询数据
select * from 表名 ---显示所有记录的所有列
select 列名1,列名2,……列名n from 表名 -----显示所有记录的某些列
select * from 表名
where 条件表达式 ---显示满足条件的所有记录的所有列
select 列名1,列名2,……列名n from 表名
where 条件表达式 -----显示满足条件的所有记录的某些列
-----删除数据
delete from 表名
where 条件表达式 -----删除满足条件的记录
truncate table 表名 -----删除所有的记录,只保留表的结构
汉化标题
select 别名1.列名1,……别名1.列名n,别名2.列名1,……别名2.列名n
from 表名1 as 别名1 inner join 表名2 as 别名2
on 别名1.列名=别名2.列名
where 条件表达式
---内联接的等值联接
select 别名1.列名1,……别名1.列名n,别名2.列名1,……别名2.列名n
from 表名1 as 别名1
inner join 表名2 as 别名2
on 别名1.列名>别名2.列名
where 条件表达式
---内联接的不等值联接
select 别名1.列名1,……别名1.列名n,别名2.列名1,……别名2.列名n
from 表名1 as 别名1
left outer join 表名2 as 别名2
on 别名1.列名=别名2.列名
where 条件表达式 ---内联接的左外联接
select 别名1.列名1,……别名1.列名n,别名2.列名1,……别名2.列名n
from 表名1 as 别名1
right outer join 表名2 as 别名2
on 别名1.列名=别名2.列名
where 条件表达式
---内联接的右外联接
select 别名1.列名1,……别名1.列名n,别名2.列名1,……别名2.列名n
from 表名1 as 别名1
full outer join 表名2 as 别名2
on 别名1.列名=别名2.列名 where 条件表达式
---内联接的完全外联接
select 列名1,列名2,……列名n
from 表名
where 条件表达式
order by 列名---按某列排序
[ASC为升序,DESC为降序。对于联接查询的排序只需将上述语法后加上order by子句即可]
select 列名1+'符号常量'+列名2+'符号常量'+……列名n
from 表名
where 条件表达式 -----使用特殊符号显示满足条件的所有记录的某些列
select 列名1 as 新列名1,列名2 as 新列名2,……列名n as 新列名n
from 表名
where 条件表达式 -----使用as子句显示满足条件的所有记录的某些列
select identity(类型,初值,增量)
as 新列名
into 新创建的表名
from 已有的表名----使用
identity从一个旧表创建一个新表,且只有一个标识列
select identity(类型,初值,增量)
into 新创建的表名 from 已有的表名----使用
identity从一个旧表创建一个新表,且只有一个标识列
[当新表中只有一个标识列时可不用as]
select 新列名=identity(类型,初值,增量)
into 新创建的表名 from 已有的表名----使用
identity从一个旧表创建一个新表,且只有一个标识列
select identity(类型,初值,增量) as 新列名1,旧表的列名1 as 新表的列名2,…… 旧表的列名n as 新表的列名n
into 新创建的表名
from 已有的表名----使用
identity从一个旧表创建一个新表,且有一个标识列和其它列
[当新表中有很多列时必用as]
select top n * from 表名
where 条件表达式---显示前n行记录
select top n percent * from 表名
where 条件表达式---显示前n%行记录
select 列名1,列名2,……列名n
from 表名
group by 列名1,列名2,……列名n
select 列名,聚合函数
[sum(列名)或avg(列名)或count(列名)或max(列名)或min(列名)] from 表名
group by 列名----使用聚合函数分组查询
[注意sum和avg只用于数字型的列,count用于数字型和字符型的列,max和min用于数字、字符和日期型的列,sum、avg和count支持distinct]
select 列名1,列名2,……列名n
from 表名 group by 列名1,列名2,……列名n
having 条件表达式----使用having子句查询
[注意where、group和having的顺序不能颠倒]
select * from 表名
where 通配符条件表达式
--- 列名 like '_A%'
--- 列名 not like '_A%'
--- 列名 in(值1,值2,……值n)
--- 列名 not in(值1,值2,……值n)
--- 列名 between 值1 and 值2
--- 列名 not between 值1 and 值2
--- 列名 is null
--- 列名 is not null
-----更新数据
update 表名 set 列名1=值1,列名2=值2,……列名n=值n
where 条件表达式----更新满足条件的记录的某些列值
update 表名 set 列名1=值1,列名2=值2,……列名n=值n
from 表名1 as 别名1
inner join 表名2 as 别名2 on 别名1.列名=别名2.列名
where 条件表达式 ---内联接的等值联接更新
update 表名 set 列名1=值1,列名2=值2,……列名n=值n
from 表名1 as 别名1
inner join 表名2 as 别名2 on 别名1.列名>别名2.列名
where 条件表达式
---内联接的不等值联接更新
update 表名 set 列名1=值1,列名2=值2,……列名n=值n
from 表名1 as 别名1
left outer join 表名2 as 别名2
on 别名1.列名=别名2.列名 where 条件表达式
---内联接的左外联接更新
update 表名 set 列名1=值1,列名2=值2,……列名n=值n
from 表名1 as 别名1
right outer join 表名2
as 别名2 on 别名1.列名=别名2.列名
where 条件表达式 ---内联接的右外联接更新
update 表名 set 列名1=值1,列名2=值2,……列名n=值n
from 表名1 as 别名1
full outer join 表名2 as 别名2 on 别名1.列名=别名2.列名 where 条件表达式 ---内联接的完全外联接更新
sql常用的无非就是增、删、查、改
更新 update ...set语法:
update 表名 set 列名=更新值 Where=更新条件
(一般update都是有条件更新的)
查找语法:
Select 列名 From 表名 或者Select * From 表名(这是查询整张表)
删除语法:
删除数据:
Delete From 表名 Where Name='张三' (delete是足行删除,不可以单个删除)
Truncate Table 表名 (Truncate table 删除表中的所有行,不会删除表结构、列、约束、索引等)
删除数据库:
Drop database 数据库名
删除表:
Drop table 表名
增加语法:
单行增加:
insert 表名(列名) Values(增加的数据)
多行增加:
insert 表名 (列名)
Select 增加的数据 Union(最后一行数据后面不要Union)
这些都是常用的SQL语句
建议楼主去买《sql Server 必知必会》这本书,挺好的,希望能帮到你!
SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
一、基础
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:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
二、提升
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
三、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
"where 1=1" 是表示选择全部 "where 1=2"全部不选,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
我们可以直接写成
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
2、收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、压缩数据库
dbcc shrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go
5、检查备份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的数据库名
SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日志文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、说明:更改某个表
exec sp_changeobjectowner 'tablename','dbo'
9、存储更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
10、SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
小记存储过程中经常用到的本周,本月,本年函数
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
Dateadd(mm,datediff(mm,0,getdate()),0)
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
Dateadd(yy,datediff(yy,0,getdate()),0)
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
上面的SQL代码只是一个时间段
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
就是表示本周时间段.
下面的SQL的条件部分,就是查询时间段在本周范围内的:
Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
而在存储过程中
select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)

阅读更多 >>>  sql语言又称为什么,SQL语言又称为( )。A.结构化定义语言B.结构化控制语言C.结构化查询语言

15个MySQL常用基本SQL语句

在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。
在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存储在数据表中。
数据库和数据表之间的关系可以用下面这个图来表示,对于一个数据库来说,有多个数据表。
在正式开始写SQL语句之前,需要说明两点。
这里通过MySQL Workbench来写SQL代码,在Workbench中,执行一条SQL语句的方式有两种。
了解了这之后,接下来介绍一些常见的命令,分两部分:数据库常用命令和数据表常用命令。
1、查看有哪些数据库
2、创建数据库
创建一个名为Testdb的数据库。
3、创建数据库并指定编码格式
有些时候,为了防止中文乱码,创建数据库的时候需要指定编码格式。
4、使用某个数据库
使用mydb这个数据库,或者进入mydb这个数据库。
5、删除数据库
删除Testdb这个数据库。
1、查看有哪些数据表
进入某个数据库之后,想查看有哪些数据表,SQL语句为:
mydb是一个新建的数据库,所以自然是没有数据表。
2、创建数据表
建表SQL语句格式为:
说明: 每个字段以逗号分隔,最后一个字段不加逗号。
例如,给定一个学员信息表,如下表所示。
根据以上表格,建表SQL语句如下。
以上语句中,primary key表示主键,意思是这个字段作为记录的唯一标识,就像每个人的身份证号,都是唯一确定的。
3、查看表结构
查看表结构的SQL命令为:
执行该命令会显示表stuinfo的基本结构,例如有哪些字段,每个字段是什么类型,谁是主键等。
4、修改数据表
修改数据表通过drop子句进行,比如,建完表后,想增加一个字段,SQL语句的格式为:
想在指定位置增加一个字段,例如,在某个字段后增加一个字段,SQL语句的格式为:
如果在某个字段之前增加字段,用before即可。
例如,在字段age后增加一个字段major(专业),SQL语句为:
执行这个命令,再通过describe查看表结构,会发现表中多了一个字段major。
如果要删除major这个字段,通过drop子句,SQL语句为:
5、重命名表
重命名表通过alter+rename来实现,SQL语句格式为:
这里为了不影响之前创建的表,我们创建一个新表,SQL语句如下。
以上创建一个名为stuInfoTest的表,现在想将它的名称改成stuinfotest1,SQL语句为:
6、删除数据表
删除数据表通过drop进行,SQL语句格式为:
例如,删除数据表stuinfotest1,SQL语句为:
7、插入记录
此时的表stuinfo是空的,没有数据,我们要向表中插入记录。
插入记录通过insert into进行,SQL语句格式为:
例如,向表stuinfo插入一条记录,SQL语句为:
注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。
如果需要一次性插入多条记录,SQL语句格式为:
例如,向表stuinfo再插入两条记录,SQL语句为:
注意:如果设置了主键,插入记录的主键字段是不能重复的,也就是不能插入重复的记录。
作业:大家可以按照上述方法将上面的学员信息表中的所有记录都插入表stuinfo中。
8、查询记录
有了数据之后,就可以查询记录了,查询记录通过select子句进行。
例如,想查询表stuinfo中的所有记录,SQL语句为:
执行之后,就可以看到表stuinfo中的所有记录了。
如果想查询符合某个条件的记录,就要用到where子句了,SQL格式为:
例如,想查询stuid为20161001的记录,SQL语句为:
9、删除记录
删除记录通过delete子句进行,SQL语句格式为:
例如,想删除stuid为20161002的记录,SQL语句为:
10、修改记录
修改记录通过update子句进行,update就是更新的意思,SQL语句格式为:
例如,想将学号(stuid)为20161001的记录的姓名(stuname)更新为Jack,SQL语句为:
以上,就是MySQL中的基本SQL语句。
零基础如何学习数据分析?查看下方专栏。

sql查询语句大全

一、基础  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 on tabname
  注:索引是不可更改的,想更改必须删除重新建。
  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%’ (所有包含‘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]
  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:
  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 [编辑本段]二、提升  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 [编辑本段]三、技巧  1、1=1,1=2的使用,在SQL语句组合时用的较多
  “where 1=1” 是表示选择全部 “where 1=2”全部不选,
  如:
  if @strWhere !='
  begin
  set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
  end
  else
  begin
  set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
  end
  我们可以直接写成
  set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
  2、收缩数据库
  --重建索引
  DBCC REINDEX
  DBCC INDEXDEFRAG
  --收缩数据和日志
  DBCC SHRINKDB
  DBCC SHRINKFILE
  3、压缩数据库
  dbcc shrinkdatabase(dbname)
  4、转移数据库给新用户以已存在用户权限
  exec sp_change_users_login 'update_one','newname','oldname'
  go
  5、检查备份集
  RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
  6、修复数据库
  Alter DATABASE [dvbbs] SET SINGLE_USER
  GO
  DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
  GO
  Alter DATABASE [dvbbs] SET MULTI_USER
  GO
  7、日志清除
  SET NOCOUNT ON
  DECLARE @LogicalFileName sysname,
  @MaxMinutes INT,
  @NewSize INT
  USE tablename -- 要操作的数据库名
  Select @LogicalFileName = 'tablename_log', -- 日志文件名
  @MaxMinutes = 10, -- Limit on time allowed to wrap log.
  @NewSize = 1 -- 你想设定的日志文件的大小(M)
  -- Setup / initialize
  DECLARE @OriginalSize int
  Select @OriginalSize = size
  FROM sysfiles
  Where name = @LogicalFileName
  Select 'Original Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  Where name = @LogicalFileName
  Create TABLE DummyTrans
  (DummyColumn char (8000) not null)
  DECLARE @Counter INT,
  @StartTime DATETIME,
  @TruncLog VARCHAR(255)
  Select @StartTime = GETDATE(),
  @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
  DBCC SHRINKFILE (@LogicalFileName, @NewSize)
  EXEC (@TruncLog)
  -- Wrap the log if necessary.
  WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
  AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)
  AND (@OriginalSize * 8 /1024) > @NewSize
  BEGIN -- Outer loop.
  Select @Counter = 0
  WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
  BEGIN -- update
  Insert DummyTrans VALUES ('Fill Log')
  Delete DummyTrans
  Select @Counter = @Counter + 1
  END
  EXEC (@TruncLog)
  END
  Select 'Final Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  Where name = @LogicalFileName
  Drop TABLE DummyTrans
  SET NOCOUNT OFF
  8、说明:更改某个表
  exec sp_changeobjectowner 'tablename','dbo'
  9、存储更改全部表
  Create PROCEDURE dbo.User_ChangeObjectOwnerBatch
  @OldOwner as NVARCHAR(128),
  @NewOwner as NVARCHAR(128)
  AS
  DECLARE @Name as NVARCHAR(128)
  DECLARE @Owner as NVARCHAR(128)
  DECLARE @OwnerName as NVARCHAR(128)
  DECLARE curObject CURSOR FOR
  select 'Name' = name,
  'Owner' = user_name(uid)
  from sysobjects
  where user_name(uid)=@OldOwner
  order by name
  OPEN curObject
  FETCH NEXT FROM curObject INTO @Name, @Owner
  WHILE(@@FETCH_STATUS=0)
  BEGIN
  if @Owner=@OldOwner
  begin
  set @OwnerName = @OldOwner + '.' + rtrim(@Name)
  exec sp_changeobjectowner @OwnerName, @NewOwner
  end
  -- select @name,@NewOwner,@OldOwner
  FETCH NEXT FROM curObject INTO @Name, @Owner
  END
  close curObject
  deallocate curObject
  GO
  10、SQL SERVER中直接循环写入数据
  declare @i int
  set @i=1
  while @i<30
  begin
  insert into test (userid) values(@i)
  set @i=@i+1
  end
: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%’   排序: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
SELECT * FROM TWS2F14CCC260D71 WHERE 地类='1999资源清查有林地'
1、Alter table LOANS add [备注说明] varchar(20)。
2、Select 出版社,KCSL as 库存量,总价/KCSL as 平均单价 From (Select 出版社,count(索书号) as KCSL,sum(价格) as 总价 from BOOKS Group by 出版社) As 库存表 Order by 库存量 Desc。
3、Select Left(借书证号,2) as 年级,Count(*) as 人数 from BORROWER Order by 年级。
4、Select 出版社 from BOOK Where 价格>200 group by 出版社。
5、Select 借书证号,Count(图书登记号) As 借书数量 from LOANS Group by 借书证号 having Count(图书登记号) >5 order by 借书证号 Desc。
 创建数据库:Create DATABASE database-name
一、 简单查询   简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。  例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。   SELECT nickname,email  FROM testtable  WHERE name='张三'  (一) 选择列表  选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。  1、选择所有列  例如,下面语句显示testtable表中所有列的数据:   SELECT *  FROM testtable  2、选择部分列并指定它们的显示次序  查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。  例如:   SELECT nickname,email  FROM testtable  3、更改列标题  在选择列表中,可重新指定列标题。定义格式为:  列标题=列名  列名 列标题  如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:   SELECT 昵称=nickname,电子邮件=email  FROM testtable  4、删除重复行  SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。  5、限制返回的行数  使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。  例如:   SELECT TOP 2 *  FROM testtable  SELECT TOP 20 PERCENT *  FROM testtable  (二)FROM子句  FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:   SELECT username,citytable.cityid  FROM usertable,citytable  WHERE usertable.cityid=citytable.cityid  在FROM子句中可用以下两种格式为表或视图指定别名:  表名 as 别名  表名 别名  (二) FROM子句  FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:   SELECT username,citytable.cityid  FROM usertable,citytable  WHERE usertable.cityid=citytable.cityid  在FROM子句中可用以下两种格式为表或视图指定别名:  表名 as 别名  表名 别名  例如上面语句可用表的别名格式表示为:   SELECT username,b.cityid  FROM usertable a,citytable b  WHERE a.cityid=b.cityid  SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。  例如:   SELECT a.au_fname+a.au_lname  FROM authors a,titleauthor ta  (SELECT title_id,title  FROM titles  WHERE ytd_sales>10000  ) AS t  WHERE a.au_id=ta.au_id  AND ta.title_id=t.title_id  此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据三) 使用WHERE子句设置查询条件  WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:   SELECT *  FROM usertable  WHERE age>20  WHERE子句可包括各种条件运算符:  比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<  范围运算符(表达式值是否在指定的范围):BETWEEN...AND...  NOT BETWEEN...AND...  列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2......)  NOT IN (项1,项2......)  模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE  空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL  逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR  1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30  2、列表运算符例:country IN ('Germany','China')  3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。  可使用以下通配字符:  百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。  下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。  方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。  例如:  限制以Publishing结尾,使用LIKE '%Publishing'  限制以A开头:LIKE '[A]%'  限制以A开头外:LIKE '[^A]%'  4、空值判断符例WHERE age IS NULL  5、逻辑运算符:优先级为NOT、AND、OR  (四)查询结果排序  使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:  ORDER BY {column_name [ASC|DESC]} [,...n]  其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排  序。  例如:   SELECT *  FROM usertable  ORDER BY age desc,userid ASC  另外,可以根据表达式进行排序。  二、 联合查询  UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:   select_statement  UNION [ALL] selectstatement  [UNION [ALL] selectstatement][...n]  其中selectstatement为待联合的SELECT查询语句。  ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。  联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。  在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。  在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:  查询1 UNION (查询2 UNION 查询3)  三、连接查询  通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。  连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。  SQL-92标准所定义的FROM子句的连接语法格式为:   FROM join_table join_type join_table  [ON (join_condition)]  其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。  join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。  交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。  连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。  无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:   SELECT p1.pub_id,p2.pub_id,p1.pr_info  FROM pub_info AS p1 INNER JOIN pub_info AS p2  ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)  (一)内连接  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。  2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!
<和
。  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:   SELECT *  FROM authors AS a INNER JOIN publishers AS p  ON a.city=p.city  又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):  SELECT a.*,p.pub_id,p.pub_name,p.country  FROM authors AS a INNER JOIN publishers AS p  ON a.city=p.city  (二)外连接  内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:   SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b  ON a.username=b.username  下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:   SELECT a.*,b.*  FROM city as a FULL OUTER JOIN user as b  ON a.username=b.username  (三)交叉连接  交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。 SELECT type,pub_name  FROM titles CROSS JOIN publishers  ORDER BY type
</和

阅读更多 >>>  winform连接数据库,winform连接数据库的主流库

网站数据信息

"简单的sql语句,初学者,简单的数据库sql语句,看看对不对"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:简单的sql语句,初学者,简单的数据库sql语句,看看对不对的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!