- 浏览: 63069 次
- 性别:
- 来自: 烟台
最新评论
//獲取table表的列名 ,適用於SQl server ,對oracle數據庫無效。
SELECT name FROM syscolumns
WHERE (id =(SELECT id FROM sysobjects WHERE (id = OBJECT_ID(‘表名’))))
ORDER BY colid
1.自我連接
Select e.last_name employee,m.last_name manager from employee e,employee m
Where m.employee_id=e.manager_id
2.單行子查詢
Select last_name,first_name,salary from employees where salary=(select max(salary) from employees);
3.多行子查詢
Select last_name,first_name,department_id from employees where department_id in (select department_id
From employees where first_name=’john’);
增:有4種方法
1.使用insert插入單行資料:
語法:insert [into] <表名> [列名] values <列值>
例:insert into Strdents (姓名,性別,出生日期) values (‘開心朋朋’,'男’,'1980/6/15′)
注意:在SQLserver中into可以省略,oracle中不可以省略;列名列值用逗號分開;列值用單引號因上;如果省略列名,將依次插入所有列
2.使用insert select語句將現有表中的資料添加到已有的新表中
語法:insert into <已有的新表> <列名>
select <原表列名> from <原表名>
例:insert into tongxunlu (姓名,位址,電子郵件)
select name,address,email
from Strdents
注意:into不可省略;查詢得到的資料個數、順序、資料類型等,必須與插入的項保持一致
3.使用select into語句將現有表中的資料添加到新建表中
語法:select <新建表列名> into <新建表名> from <源表名>
例:select name,address,email into tongxunlu from strdents
注意:新表是在執行查詢語句的時候創建的,不能夠預先存在,適用與SQL server,在oracle中報錯。
在新表中插入標識列(關鍵字‘identity’):
語法:select identity (資料類型,標識種子,標識增長量) AS 列名
into 新表 from 原表名
例:select identity(int,1,1) as 標識列,dengluid,password into tongxunlu from Struents
注意:關鍵字‘identity’
4.使用union關鍵字合併資料進行插入多行
語法:insert <表名> <列名> select <列值> tnion select <列值>
例:insert Students (姓名,性別,出生日期)
select ‘開心朋朋’,'男’,'1980/6/15′ union(union表示下一行)
select ‘藍色小明’,'男’,'19**/**/**’
注意:插入的列值必須和插入的列名個數、順序、資料類型一致
4).查詢空行
例:select name from a where email is null
說明:查詢表a中email為空的所有行,並顯示name列;SQL語句中用is null或者is not null來判斷是否為空行
5).在查詢中使用常量
例:select name ‘唐山’ as 地址 from a
說明:查詢表a,顯示name列,並添加地址列,其列值都為’唐山’
6).查詢返回限制行數(關鍵字:top percent)
例1:select top 6 name from a
說明:查詢表a,顯示列name的前6行,top為關鍵字
例2:select top 60 percent name from a
說明:查詢表a,顯示列name的60%,percent為關鍵字
例3 :select * from mytable order by afield limit 2, 5
在ms sql server中或access中,
若要查询前10条记录,使用top 10即可,
但在mysql中不支持这个写法,它用limit 10
利用MySQL中SELECT支持的一个子句——LIMIT——来完成这项功能。
LIMIT可以实现top N查询,也可以实现M至N(某一段)的记录查询,具体语法如下:
SELECT * FROM MYTABLE
ORDER BY AFIELD
LIMIT offset, recnum
其中offset为从第几条(M+1)记录开始,recnum为返回的记录条数。
2.模糊查詢
1).使用like進行模糊查詢
注意:like運算副只用語字串,所以僅與char和varchar資料類型聯合使用
例:select * from a where name like ‘趙%’
說明:查詢顯示表a中,name欄位第一個字為趙的記錄
2).使用between在某個範圍內進行查詢
例:select * from a where nianling between 18 and 20
說明:查詢顯示表a中nianling在18到20之間的記錄
3).使用in在列舉值內進行查詢
例:select name from a where address in (‘北京’,'上海’,'唐山’)
說明:查詢表a中address值為北京或者上海或者唐山的記錄,顯示name欄位
3.分組查詢
1).使用group by進行分組查詢
例:select studentID as 學員編號, AVG(score) as 平均成績 (注釋:這裏的score是列名)
from score (注釋:這裏的score是表名)
group by studentID
說明:在表score中查詢,按strdentID欄位分組,顯示strdentID欄位和score欄位的平均值;select語句中只允許被分組的列和為每個分組返回的一個值的表達試,例如用一個列名作為參數的聚合函數
2).使用having子句進行分組篩選
例:select studentID as 學員編號, AVG(score) as 平均成績 (注釋:這裏的score是列名)
from score (注釋:這裏的score是表名)
group by studentID
having count(score)>1
說明:接上面例子,顯示分組後count(score)>1的行,由於where只能在沒有分組時使用,分組後只能使用having來限制條件,
4.多表聯接查詢
內連接與外連接的最大的區別在於內連接只顯示兩個表中有相同的記錄。
外連接是當有相同的現實出來,如果不同以NULL顯示。
Natural join 自然連接 用處不大
Join on 內連接
Select ××× where ××× = ××× 內連接 找出兩個表相同的記錄
Left (outer) join on 左外連接 //outer可以省略
Right (outer) join on 右外連接
Full (outer) join on 全外部連接
(+) 外連接的標誌,看所在位置,如果在右邊,就是左連接,如果在左邊,就是右連接。
select * from test2 a,test6 b where A.USERSNAME=B.NAME(+) //左連接
select * from test2 a,test6 b where A.USERSNAME(+)=B.NAME //右連接
內連接與外連接的最大的區別在於內連接只顯示兩個表中有相同的記錄。
外連接是當有相同的現實出來,如果不同以NULL顯示。
1).內聯接
①在where子句中指定聯接條件
例:select a.name,b.chengji
from a,b
where a.name=b.name
說明:查詢表a和表b中name欄位相等的記錄,並顯示表a中的name欄位和表b中的chengji欄位
②在from子句中使用join…on
例:select a.name,b.chengji
from a inner join b
on (a.name=b.name)
說明:同上
2).外聯接
①左外聯接查詢
例:select s.name,c.courseID,c.score
from strdents as s
left outer join score as c
on s.scode=c.strdentID
說明:在strdents表和score表中查詢滿足on條件的行,條件為score表的strdentID與strdents表中的sconde相同
②右外聯接查詢
例:select s.name,c.courseID,c.score
from strdents as s
right outer join score as c
on s.scode=c.strdentID
說明:在strdents表和score表中查詢滿足on條件的行,條件為strdents表中的sconde與score表的strdentID相同
Oracle在兩個Schema之間復制表格數據,在二者之中必須要有相同的表結構,而且表的名稱必須相同。
Truncate Table 表的名字 :SQL中的刪除資料表內容的語句。
Between的用法:
Between的日期是有前后的分別的,例如:select * from SALES_DETAIL where to_char(SALE_DATE,’yyyy-mm-dd’) between ‘2008-12-23′ and ‘2008-12-24′
如果寫成這樣就搜不出來select * from SALES_DETAIL where to_char(SALE_DATE,’yyyy-mm-dd’) between ‘2008-12-24′ and ‘2008-12-23′
在數據庫中字符串用’’ 單引號
在C#代碼中字符串用”” 雙引號
//執行多條sql語句
string vSql = @”begin insert into x1(school3,dep,name,score) values(‘999′,’888′,’777′,90);insert into x2 values(‘555′,’666′,84); end;”;
SELECT name FROM syscolumns
WHERE (id =(SELECT id FROM sysobjects WHERE (id = OBJECT_ID(‘表名’))))
ORDER BY colid
1.自我連接
Select e.last_name employee,m.last_name manager from employee e,employee m
Where m.employee_id=e.manager_id
2.單行子查詢
Select last_name,first_name,salary from employees where salary=(select max(salary) from employees);
3.多行子查詢
Select last_name,first_name,department_id from employees where department_id in (select department_id
From employees where first_name=’john’);
增:有4種方法
1.使用insert插入單行資料:
語法:insert [into] <表名> [列名] values <列值>
例:insert into Strdents (姓名,性別,出生日期) values (‘開心朋朋’,'男’,'1980/6/15′)
注意:在SQLserver中into可以省略,oracle中不可以省略;列名列值用逗號分開;列值用單引號因上;如果省略列名,將依次插入所有列
2.使用insert select語句將現有表中的資料添加到已有的新表中
語法:insert into <已有的新表> <列名>
select <原表列名> from <原表名>
例:insert into tongxunlu (姓名,位址,電子郵件)
select name,address,email
from Strdents
注意:into不可省略;查詢得到的資料個數、順序、資料類型等,必須與插入的項保持一致
3.使用select into語句將現有表中的資料添加到新建表中
語法:select <新建表列名> into <新建表名> from <源表名>
例:select name,address,email into tongxunlu from strdents
注意:新表是在執行查詢語句的時候創建的,不能夠預先存在,適用與SQL server,在oracle中報錯。
在新表中插入標識列(關鍵字‘identity’):
語法:select identity (資料類型,標識種子,標識增長量) AS 列名
into 新表 from 原表名
例:select identity(int,1,1) as 標識列,dengluid,password into tongxunlu from Struents
注意:關鍵字‘identity’
4.使用union關鍵字合併資料進行插入多行
語法:insert <表名> <列名> select <列值> tnion select <列值>
例:insert Students (姓名,性別,出生日期)
select ‘開心朋朋’,'男’,'1980/6/15′ union(union表示下一行)
select ‘藍色小明’,'男’,'19**/**/**’
注意:插入的列值必須和插入的列名個數、順序、資料類型一致
4).查詢空行
例:select name from a where email is null
說明:查詢表a中email為空的所有行,並顯示name列;SQL語句中用is null或者is not null來判斷是否為空行
5).在查詢中使用常量
例:select name ‘唐山’ as 地址 from a
說明:查詢表a,顯示name列,並添加地址列,其列值都為’唐山’
6).查詢返回限制行數(關鍵字:top percent)
例1:select top 6 name from a
說明:查詢表a,顯示列name的前6行,top為關鍵字
例2:select top 60 percent name from a
說明:查詢表a,顯示列name的60%,percent為關鍵字
例3 :select * from mytable order by afield limit 2, 5
在ms sql server中或access中,
若要查询前10条记录,使用top 10即可,
但在mysql中不支持这个写法,它用limit 10
利用MySQL中SELECT支持的一个子句——LIMIT——来完成这项功能。
LIMIT可以实现top N查询,也可以实现M至N(某一段)的记录查询,具体语法如下:
SELECT * FROM MYTABLE
ORDER BY AFIELD
LIMIT offset, recnum
其中offset为从第几条(M+1)记录开始,recnum为返回的记录条数。
2.模糊查詢
1).使用like進行模糊查詢
注意:like運算副只用語字串,所以僅與char和varchar資料類型聯合使用
例:select * from a where name like ‘趙%’
說明:查詢顯示表a中,name欄位第一個字為趙的記錄
2).使用between在某個範圍內進行查詢
例:select * from a where nianling between 18 and 20
說明:查詢顯示表a中nianling在18到20之間的記錄
3).使用in在列舉值內進行查詢
例:select name from a where address in (‘北京’,'上海’,'唐山’)
說明:查詢表a中address值為北京或者上海或者唐山的記錄,顯示name欄位
3.分組查詢
1).使用group by進行分組查詢
例:select studentID as 學員編號, AVG(score) as 平均成績 (注釋:這裏的score是列名)
from score (注釋:這裏的score是表名)
group by studentID
說明:在表score中查詢,按strdentID欄位分組,顯示strdentID欄位和score欄位的平均值;select語句中只允許被分組的列和為每個分組返回的一個值的表達試,例如用一個列名作為參數的聚合函數
2).使用having子句進行分組篩選
例:select studentID as 學員編號, AVG(score) as 平均成績 (注釋:這裏的score是列名)
from score (注釋:這裏的score是表名)
group by studentID
having count(score)>1
說明:接上面例子,顯示分組後count(score)>1的行,由於where只能在沒有分組時使用,分組後只能使用having來限制條件,
4.多表聯接查詢
內連接與外連接的最大的區別在於內連接只顯示兩個表中有相同的記錄。
外連接是當有相同的現實出來,如果不同以NULL顯示。
Natural join 自然連接 用處不大
Join on 內連接
Select ××× where ××× = ××× 內連接 找出兩個表相同的記錄
Left (outer) join on 左外連接 //outer可以省略
Right (outer) join on 右外連接
Full (outer) join on 全外部連接
(+) 外連接的標誌,看所在位置,如果在右邊,就是左連接,如果在左邊,就是右連接。
select * from test2 a,test6 b where A.USERSNAME=B.NAME(+) //左連接
select * from test2 a,test6 b where A.USERSNAME(+)=B.NAME //右連接
內連接與外連接的最大的區別在於內連接只顯示兩個表中有相同的記錄。
外連接是當有相同的現實出來,如果不同以NULL顯示。
1).內聯接
①在where子句中指定聯接條件
例:select a.name,b.chengji
from a,b
where a.name=b.name
說明:查詢表a和表b中name欄位相等的記錄,並顯示表a中的name欄位和表b中的chengji欄位
②在from子句中使用join…on
例:select a.name,b.chengji
from a inner join b
on (a.name=b.name)
說明:同上
2).外聯接
①左外聯接查詢
例:select s.name,c.courseID,c.score
from strdents as s
left outer join score as c
on s.scode=c.strdentID
說明:在strdents表和score表中查詢滿足on條件的行,條件為score表的strdentID與strdents表中的sconde相同
②右外聯接查詢
例:select s.name,c.courseID,c.score
from strdents as s
right outer join score as c
on s.scode=c.strdentID
說明:在strdents表和score表中查詢滿足on條件的行,條件為strdents表中的sconde與score表的strdentID相同
Oracle在兩個Schema之間復制表格數據,在二者之中必須要有相同的表結構,而且表的名稱必須相同。
Truncate Table 表的名字 :SQL中的刪除資料表內容的語句。
Between的用法:
Between的日期是有前后的分別的,例如:select * from SALES_DETAIL where to_char(SALE_DATE,’yyyy-mm-dd’) between ‘2008-12-23′ and ‘2008-12-24′
如果寫成這樣就搜不出來select * from SALES_DETAIL where to_char(SALE_DATE,’yyyy-mm-dd’) between ‘2008-12-24′ and ‘2008-12-23′
在數據庫中字符串用’’ 單引號
在C#代碼中字符串用”” 雙引號
//執行多條sql語句
string vSql = @”begin insert into x1(school3,dep,name,score) values(‘999′,’888′,’777′,90);insert into x2 values(‘555′,’666′,84); end;”;
发表评论
-
Sql疑难问题
2011-11-06 11:30 720select ROW_NUMBER() OVER(ORDER ... -
oracle重要的函数
2011-07-31 22:25 887oracle函数(单行) 1. nvl(x1,x2),x1和x ... -
MySql格式化字符串
2011-07-31 20:44 2000DATE_FORMA T(date, format) 根据格式 ... -
splite数据库学习心得
2011-03-19 18:23 1358这篇文章是看网友牛腩的文章后,提炼的精要笔记 1、到http ... -
在Oracle中實現類似自動增加ID的功能
2011-03-19 17:55 729創建序列 create sequence SEQ minv ... -
intersect, minus(转载)
2011-03-16 21:27 590intersect, minus intersect运算:返回 ... -
临时表的概念
2011-03-16 21:26 742//SQL server 在創建表的時候添加了“#”首碼的表 ... -
标准的Oracle存储过程
2010-08-09 16:34 685为什么我说它标准呢?因为这个存储过程中包括了,游标的使用,fo ... -
MSSQL分页
2010-08-09 16:08 954有些控件自身带的 ... -
Oracle分页存储过程
2010-08-09 15:29 1089首先在oracle中创建包,包可以比喻成篮子,存储过程好比是苹 ...
相关推荐
(20080318_4)SQL Server 2000安全及高级应用技巧 【SQLServer.rar】文件大小:165 KB (169,094 字节) 解压后含有ppt,sql脚本。
SQL(Structured Query Language)是...掌握这些SQL高级应用技巧对于数据库管理和开发至关重要,能有效提升数据操作效率并保证数据的准确性和完整性。在实际应用中,应根据具体需求灵活运用各种SQL语句和事务管理策略。
在“SQL Server高级开发与应用”这一主题中,我们将深入探讨SQL Server的高级特性和实践应用,包括但不限于性能优化、安全性管理、高可用性解决方案、大数据处理以及复杂查询技巧。 1. **性能优化**:SQL Server...
其次,性能优化是SQL高级应用中的关键部分。通过正确使用索引、优化查询结构、减少磁盘I/O和合理分配数据库资源,可以显著提升查询速度。索引是提高查询性能的重要手段,但创建过多的索引也可能增加写操作的开销。...
《SQLServer高级开发与专业应用》一书涵盖了SQL Server数据库系统的深入理解和专业级应用技巧,是针对数据库开发者和管理员的一份宝贵资源。SQL Server作为微软公司推出的强大关系型数据库管理系统,广泛应用于企业...
内容概要:本文全面介绍了Microsoft SQL Server中的高级查询技巧及其应用,涵盖复杂查询构建、子查询与嵌套查询、索引优化、查询计划分析、窗口函数、递归CTE、数据整合操作、高级聚合与分组、排序与筛选、数据安全...
《SQL2005高级应用》是一门深入探讨SQL Server 2005技术的教程,旨在帮助用户掌握更复杂的数据库管理和开发技能。这门课程包含了一系列PPT课件,如"SqlServer高级查询第四章.ppt"和"数据库实现.PPT"等,旨在通过实例...
本话题主要聚焦于内联查询、左外联查询以及嵌套查询,这些都是SQL高级查询的重要组成部分。 首先,内联查询(也称为子查询)是指在一个查询语句中嵌套另一个查询,用以获取所需的数据。内联查询可以在SELECT、FROM...
Oracle SQL高级编程是针对数据库开发和管理的专业领域,旨在帮助高级编程人员深入理解和掌握SQL在Oracle数据库中的应用。Oracle数据库是世界上最广泛使用的数据库系统之一,它提供了强大的功能和高效的性能,使得SQL...
在IT行业中,SQL Server作为一款广泛使用的数据库管理系统,对于企业级应用开发至关重要。这篇文档将对SQL Server...通过阅读《SQL Server 应用开发基础.doc》这份文档,你将能更深入地了解这一领域的核心概念和技巧。
另外,聚合函数如COUNT、SUM、AVG、MAX、MIN的使用,以及GROUP BY和HAVING子句的应用也是高级SQL学习中的关键。 "SQL基础、中级SQL、高级SQL_手册_e路网.htm"可能是一个综合性的电子书,包含了以上所有知识的详细...
在SQL Server精华技巧集中,你将发现一系列关于SQL数据库管理和优化的专业知识,这些技巧对于数据库管理员、开发人员以及任何需要处理SQL数据的人来说都是极其宝贵的。SQL Server是Microsoft公司推出的一款强大的...
提供的源码部分将包含示例脚本和应用程序,帮助你亲手实践上述概念,加深理解并掌握实际应用技巧。 总之,"Oracle SQL 高级编程"涵盖了数据库管理和开发的多个方面,通过学习和实践,你将能够编写出更高效、更灵活...
"Asp 高级技巧 Asp 高级应用 Asp精华 2"这一主题涵盖了许多深入的技术点,旨在帮助开发者进一步挖掘ASP的潜力。下面将详细阐述这些高级知识点。 1. **对象与组件的使用**: ASP中包含多种内置对象,如Request、...
《Oracle SQL 高级编程》一书的随书脚本集合是学习和深入理解Oracle数据库管理及SQL高级特性的宝贵资源。这些脚本涵盖了从基础查询到复杂的数据操作、存储过程、函数以及触发器等多个方面,旨在帮助读者提升在Oracle...
通过阅读《Oracle SQL高级编程》,读者不仅可以掌握Oracle SQL的高级特性,还能学习到如何在实际项目中应用这些知识,从而提升数据库管理与开发的效率和质量。对于DBA来说,这本书也是日常维护和优化数据库的宝贵...
Oracle SQL高级编程是数据库管理与开发领域中的一个重要主题,它涵盖了数据库设计、查询优化、存储过程、触发器、索引策略、并发控制以及安全性等方面的知识。在这个领域,Oracle数据库系统以其强大功能和广泛的企业...
本教程将深入探讨LINQ的基础概念以及高级应用技巧。 一、LINQ简介 LINQ是.NET Framework 3.5的一个核心特性,为C#和Visual Basic提供了统一的查询语法,适用于各种数据源,如集合、数据库、XML等。通过使用LINQ,...