SQL语句行列转换

SQL语句行列转换
SQL语句行列转换

SQL语句行列转换(附带数据库、表、视图操作)

本来只是想解决怎么把数据的行和列进行转换的,但最近觉得一些数据库SQL语句的操作,很久没用了,有点陌生。所以也就随笔记录一些简单但很基本的操作。

我的数据库是MSSQL2005.

第一部分主要的操作包含:数据库的创建、删除,表的增、删、改,表中数据的增、删、改、查,视图的操作。

1--查询数据库是否存在

2if exists ( select*from sysdatabases where[name]='TestDB')

3print'Yes, the DB exists'

4else

5print'No, need a new one?'

6

7--新建一个数据库

8create database TestDB on

9 (

10 name ='TestData',

11 filename ='G:\DBS\KeyTest.mdf',

12 size =3,

13 filegrowth =2

14 )

15log on

16 (

17 name ='TestLog',

18 filename ='G:\DBS\KeyTest.ldf',

19 size =3,

20 filegrowth =10

21 )

22

23--drop database TestDB

24

25use TestDB

26go

27

28--新建一个表

29create table[Scores]

30 (

31[ID]int identity(1,1) primary key,

32[Student]varchar(20) ,

33[Subject]varchar(30),

34[Score]float

35 )

36

37--drop table [Scores]

38

39--修改表中的一列

40alter table Scores alter column[Student]varchar(20) not null 41

42--新增一列

43alter table Scores add Birthday datetime

44

45--删除一列

46alter table Scores drop column Birthday

47

48--往表中插入单条数据,方法1:带列名

49insert into Scores(Student,Subject,Score)

50values('张三','语文','90')

51

52--往表中插入单条数据,方法2:不带列名,但要求值的类型要和列字段类型对应 53insert into Scores

54values('张三','英语','95')

55

56--插入多条数据:用union或者union all

57insert into Scores(Student,Subject,Score)

58select'李四','语文','89'

59union all

60select'李四','英语','78'

61

62--删除表中数据,没有条件时,删除所有

63delete from Scores where ID in(7,8)

64

65--修改表中数据

66update Scores

67set Student='王五',Score='94'

68where ID=10

69

70--查看数据

71select*from Scores

72

73--查看表中最大的identity值

74select@@identity

75

76--或者利用dbcc命令查看表中最大的identity值

77dbcc checkident('Scores',noreseed)

79--创建视图,全部省略视图的属性列名,由子查询目标列的字段组成

80create view StudentView

81as

82select Student,Subject,Score

83from Scores

84

85--加上with check option,以后对视图的操作(增,改,删,查)都会自动加上whe re ID>3

86/*

87create view StudentView

88as

89select Student,Subject,Score

90from Scores

91where ID>3

92with check option

93*/

94

95--创建视图,全部定义属性列名,需要定义列名的情况:

96----某个目标列(子查询)不是单纯的属性列,而是聚集函数或列表达式

97----多表连接时选出了几个同名列

98----需要在视图中为某个列启用新的更合适的名字

99create view IS_Student(Student,Subject,MaxScore)

100as

101select Student,Subject,Score

102from Scores

103where Score=(select max(Score) from Scores)

104

106--查询视图,和基本表完全样,只不过如果视图中有with check option,会自动加上那个条件

107select*

108from StudentView

109

110--查询自定义列名的视图

111select*

112from IS_Student

113

114--对视图的insert/delete/update,和对基本表的操作一样,并且最终都是用RDBM S自动转换为对基本表的更新

115--并不是所有的视图都是可更新的,因为有些视图的更新不能有意义的转换成对相应基本表的更新

116

117--删除视图

118drop view StudentView

复制代码

第二部分,这次练习的主题。

【一】行转列

1,查询原始的数据

/***这次练习的主题,行转列,列转行***/

select*from Scores

复制代码

2,得到姓名,通过group by

select Student as'姓名'

from Scores

group by Student

order by Student

复制代码

3,再加上max,case……when

select Student as'姓名',

max(case Subject when'语文'then Score else0end) as'语文' ,--如果这个行是“语文”,就选此行作为列

max(case Subject when'英语'then Score else0end ) as'英语'

from Scores

group by Student

order by Student

复制代码

查看其它资料时,看到另外一种方法,用pivot

--group by, avg/max, pivot。这里用max和avg,结果都一样,有什么区别吗?有点不明白

--参考网上的资料,用法如下

/*

pivot(

聚合函数(要转成列值的列名)

for 要转换的列

in(目标列名)

)

*/

select Student as'姓名',

avg(语文) as'语文',

avg(英语) as'英语'

from Scores

pivot(

avg(Score) for Subject

in (语文,英语)

)as NewScores

group by Student

order by Student asc

复制代码

常用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、说明:几个高级查询运算词

2021年SQL语句大全实例

SQL语句实例 欧阳光明(2021.03. 07) 表操作 例1对于表的教学管理数据库中的表STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, 0) NOT NULL SNAME CHAR (8) NOT NULL AGE NUMERIC(3,0) SEX CHAR(2) BPLACE CHAR(20) PRIMARY KEY(SNO)) 例2对于表的教学管理数据库中的表ENROLLS ,可以定义如下:CREATE TABLE ENROLLS (SNO NUMERIC(6,0) NOT NULL CNO CHAR(4) NOT NULL GRADE INT PRIMARY KEY(SNO,CNO) FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO) FOREIGN KEY(CNO) REFERENCES COURSES(CNO)

*欧阳光明*创编2021.03.07 CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100))) 例3根据表的STUDENTS表,建立一个只包含学号.姓名.年龄的女学生表。 CREATE TABLE GIRL AS SELECT SNO, SNAME, AGE FROM STUDENTS WHERE SEX=女?; 例4删除教师表TEACHER。 DROP TABLE TEACHER 例5在教师表中增加住址列。 ALTER TABLE TEACHERS ADD (ADDR CHAR(50)) 例6把STUDENTS表中的BPLACE列删除,并且把引用 BPLACE列的所有视图和约束也一起删除。 ALTER TABLE STUDENTS DROP BPLACE CASCADE 例7补充定义ENROLLS表的主关键字。 ALTER TABLE ENROLLS ADD PRIMARY KEY (SNO,CNO);

excel表格怎样行变列

竭诚为您提供优质文档/双击可除excel表格怎样行变列 篇一:excel中的表格,行变列,列变行 如何让其行变列,列变行。并且其相关数据也能自动调整 1、启动excel,打开需要的,在当前中,选中需要进行行列转换的单元格区域,如a1:x6。 2、单击“编辑”菜单中的“复制”命令。 3、单击要存放转置表区域的左上角单元格,如a7。 4、单击“编辑”菜单中的“选择性粘贴”命令,系统“选择性粘贴”对话框,选中“转置”复选框。 5、单击[确定]按钮,则行列转置后的表格出现在a7:F30单元格区域。现在把a1:x6单元格区域删除,则完成了表格的行列转置。 怎样把woRd、excel中的表格,行变列,列变行? 在excel中是可以做到的,你将要转变的数据区域复制,在目标单元格处右击,选择“选择性粘贴”,将里面的“转置”选中,确定即可。 excel如何有规律列变行

我有份excel表有一列名字共4000个,我想转换成每行 8个名字,共500行.请问有没有什么简单的方法.请高手帮忙. 在这个工作表后面新建一个工作表 a1=indiRect("sheet1!a"&((Row(a1)-1)*8+column(a1))) 然后复制到a1:h500的区域里就行了 注意sheet1!a表示你原来数据的工作表名为sheet1, 数据在a列,不是的话相应改一下。 在excel中如何有规律的将列变行 比如 1 2 3 4 5 6 7 8 9 相隔处为空白行 变成 123

456 789 请大虾帮忙哈!!!数据非常多,如果用复制转置的话真要命1!谢谢!!问题补充: 若连接处的空行不好处理,能将连续的数列按规律变行更好! 比如 1 2 3 4 5 6 变成 123 456 先万分感谢!! abcdeF 原始数据最终结果行需要合并的单元格 11232a2a3a4 24566a6a7a8

数据库_经典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

Oracle列转行和行转列的几种用法

Oracle列转行和行转列的几种用法 栏到 栏主要讨论sys_connect_by_path的用法 1,具有分层关系 SQL > createtabledept(deptnononumber,deptname varchar2 (20),mgrnononumber); table created . SQL >插入deptvalues (1,“总部”,空); 1 row created . SQL >插入deptvalues (2,’浙江分公司’,1); 1 row created . SQL > insert into dept values(3,’杭州分公司’,2);已创建 1行。 SQL >提交; 提交完成。 SQL >从部门连接中选择最大值(子串(sys_connect_by_path(deptname,’,’),2))由先前部门连接= mgrno 最大值(SUBSTER(SYS _ CONNECT _ BY _ PATH(DEPTNAME),’),2) -总部,浙江分行,杭州分行 2,行-列转换 如果一个表的所有列都连接到一行,用逗号分隔:

SQL >选择最大值(SUBSTER(SYS _ CONNECT _ BY _ PATH(column _ name,’,’),2)) MAX(SUBSTRA(SYS _ CONNECT _ BY _ PATH(COLUMN _ NAME,’,’),2)) - DEPTNO,DEPTNAME,MGRNO 3,ListAgg(Oracle 11g) SQL >选择DEPTNO, 2 ListAgg(NAME,’;’) 3在组 4内(由搪瓷订购)搪瓷 5来自emp 6组由deptno 7由deptno 8 / DEPTNO搪瓷 - - 10 CLARK。国王;米勒 20亚当斯;福特。琼斯; SCOTT。史密斯 30艾伦;布莱克; JAMES;马丁; TURNER;下面的W ARD

EXCEL中的表格,行变列,列变行

如何让其行变列,列变行。并且其相关数据也能自动调整 1、启动Excel,打开需要的工作簿,在当前工作表中,选中需要进行行列转换的单元格区域,如A1:X6。 2、单击“编辑”菜单中的“复制”命令。 3、单击要存放转置表区域的左上角单元格,如A7。 4、单击“编辑”菜单中的“选择性粘贴”命令,系统“选择性粘贴”对话框,选中“转置”复选框。 5、单击[确定]按钮,则行列转置后的表格出现在A7:F30单元格区域。现在把A1:X6单元格区域删除,则完成了表格的行列转置。 怎样把WORD、EXCEL中的表格,行变列,列变行? 在EXCEL中是可以做到的,你将要转变的数据区域复制,在目标单元格处右击,选择“选择性粘贴”,将里面的“转置”选中,确定即可。 EXCEL如何有规律列变行? 我有份EXCEL表有一列名字共4000个,我想转换成每行8个名字,共500行.请问有没有什么简单的方法.请高手帮忙. 在这个工作表后面新建一个工作表 A1=INDIRECT("Sheet1!A"&((ROW(A1)-1)*8+COLUMN(A1))) 然后复制到A1:H500的区域里就行了 注意sheet1!A表示你原来数据的工作表名为sheet1,数据在A列,不是的话相应改一下。 在EXCEL中如何有规律的将列变行? 比如 1 2 3 4 5 6 7

8 9 相隔处为空白行 变成 123 456 789 请大虾帮忙哈!!! 数据非常多,如果用复制转置的话真要命1!谢谢!! 问题补充: 若连接处的空行不好处理,能将连续的数列按规律变行更好! 比如 1 2 3 4 5 6 变成 123 456 先万分感谢!! A B C D E F 原始数据最终结果行需要合并的单元格 1 123 2 A2 A 3 A4 2 456 6 A6 A7 A8 3 789 10 A10 A11 A12 101112 14 A14 A15 A16 4 13141 5 18 A18 A19 A20 5 161718 22 A22 A23 A24 6 192021 26 A26 A2 7 A28 30 A30 A31 A32 7 34 A34 A35 A36 8 38 A38 A39 A40 9 42 A42 A43 A44 46 A46 A47 A48 10 50 A50 A51 A52 11 54 A54 A55 A56 12 58 A58 A59 A60 62 A62 A63 A64

SQL常用语法及例子精简——快速入手

sql语言 库表的增删改查常用语及语法 (1)数据记录筛选: sql="select*from 数据表where 字段名=字段值orderby字段名[desc]" sql="select*from 数据表where 字段名like'%字段值%'orderby字段名[desc]" sql="selecttop10*from 数据表where 字段名orderby字段名[desc]" sql="select*from 数据表where 字段名in('值1','值2','值3')" sql="select*from 数据表where 字段名between 值1and 值2" (2)更新数据记录: sql="update 数据表set 字段名=字段值where 条件表达式" sql="update 数据表set 字段1=值1,字段2=值2……字段n=值nwhere条件表达式" (3)删除数据记录: sql="de letefrom数据表where 条件表达式" sql="de letefrom数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)" sql="insertinto目标数据表select*from 源数据表"(把源数据表的记录添加到目标数据表) (5)数据记录统计函数: AVG(字段名)得出一个表格栏平均值 COUNT(*|字段名)对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名)取得一个表格栏最大的值 MIN(字段名)取得一个表格栏最小的值 SUM(字段名)把数据栏的值相加 引用以上函数的方法: sql="selectsum(字段名)as 别名from 数据表where 条件表达式" setrs=conn.excute(sql) 用rs("别名")获取统的计值,其它函数运用同上。 (6)数据表的建立和删除: CREATETABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度)……) 例:CREATETABLEtab01 (namevarchar (50), datetimedefaultnow ()) DROPTABLE 数据表名称(永久性删除一个数据表) 4.记录集对象的方法: rs.movenext将记录指针从当前的位置向下移一行 rs.moveprevious将记录指针从当前的位置向上移一行 rs.movefirst将记录指针移到数据表第一行 rs.movelast将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N 行 rs.absolutepage=N 将记录指针移到第N 页的第一行 rs.pagesize=N 设置每页为N 条记录 rs.pagecount根据pagesize的设置返回总页数 rs.recordcount返回记录总数 rs.bof返回记录指针是否超出数据表首端,true 表示是,false 为否

最新常用经典SQL语句大全完整版

常用经典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

sqlserver到oracle数据无损迁移

sqlserver到oracle数据无损迁移 编者:liuli10@https://www.360docs.net/doc/c38200438.html, 版本:V1.7 最后修订日期:2015-11-21

第一章简介 1.1数据迁移 随着时代发展数据越来越被重视,而很多时候,当系统需要更新换代的时候,升级后系统所是有的数据库与当前系统的数据库并不一致,此时不仅需要数据割接,最重要的是:如何能将老系统中的数据无损的割接到新系统、新数据库中。因此,结合项目实战经验,针对从windows平台下数据库sqlserver到linux平台下oracle数据库的数据无损迁移进行总结。 1.2数据库简介 一般此处会有很多数据库以及出品公司的历史以及发展历程,在编者看来然而并没有什么大用途,百度百科都可以搜索的到,因此本章结束,直接进入实战总结环节。

第二章sqlserver数据导出 2.1sqlserver数据导出命令 当然不可否认windows为sqlserver提供了强大的图形化平台,导出数据变得只需要点一点就能完成,然而这样的数据导出对于大批量有要求的操作,是极其劳神伤财的,因此,必须要通过命令行进行格式化导出,因此,这里介绍sqlserver 本机数据库导出命令。 2.1.1bcp命令以及参数介绍 https://www.360docs.net/doc/c38200438.html,/liyanmingkong/article/details/6087674 https://www.360docs.net/doc/c38200438.html,/uid-25472509-id-4304562.html https://www.360docs.net/doc/c38200438.html,/link?url=WV2JJM4JHxR7Qct8rr_-499zPc3aP_7E5rOt5l yEnG_Mj_tE9_-ZN1JPE2Vc2wRpkO8QkNGNLVznDfMgniCOnxXhK5jQppNpZk8 Jo1x8o23 为了将文档尽可能精简,bcp命令的参数以及介绍请自行去以上任意网址查询。或者自行baidu或者google搜索。 2.2实战语句解析 实战语句为: bcp"select*from gwbnboss.dbo.ACCOUNT_BUSINESS"queryout "C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt"-c -r"{#$&}"-t"{@#$}"-S"127.0.0.1"-U"数据库用户名"-P"密码" 最终导出的结果存在于 C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt 文件中,当出现“{#$&}”时表示接下来是下一行数据,出现“{@#$}”时表示接下来是下一列数据。将查询结果集完整导出,不对数据做任何格式化或者修改操作,保证数据的原生无损。

word表格行列互换

竭诚为您提供优质文档/双击可除 word表格行列互换 篇一:巧在woRd表格中行列轻松对调 巧在woRd表格中行列轻松对调 在日常工作中,我们经常会遇到将word表格行列对调的情况,但这个看似简单的要求在word中却很难实现,因为word本身并不提供这样的功能。不过,要解决这个难题也不是没有办法,今天笔者就给大家介绍一个利用excel轻松互换word表格的小技巧,希望对大家能有所帮助。 【注】本文所述技巧已于word20xx+excel20xx环境下测试通过 1.打开word软件,选中需要进行行列对调的表格,右击执行“复制”命令 2.再打开excel软件,新建一个工作簿,用鼠标在空白单元格处右击并选择“粘贴”命令 3.在excel软件中,将刚刚粘贴下来的表格再次选中,同样是右击执行“复制”命令 4.在空白单元格处再次右击并执行“选择性粘贴”命令,同时勾选上“转置”复选框后点击“确定”按钮

5.此时,表格中的行列内容已经互换,将完成后的excel 表格选中,并粘贴到word中,基本操作即告完成 6.最后,别忘了删除掉word中的原有表格。至此,所有工作正式完成 篇二:word表格中数据纵横转换的方法和技巧 word表格中数据纵横转换的方法和技巧在实际工作中,有时需要将表格中的行、列数据互换,有时需要将表格数据快速转换成指定列数的新表格,或者对表格作简单编辑后快速得到新表格,这些都是表格内数据纵横转换问题,如何实现呢? 一、实现表格内行列数据互换 对表格的行列数据做转置处理,就能实现表格内行列数据互换。在word中做转置处理困难,但在excel中实现数据转置比较容易。所以,可借助excel实现word表格内行列数据互换。具体操作步骤是:第1步:在word编辑环境下,选定欲操作的表格,执行剪切操作,将表格数据粘贴到剪贴板。第2步:启动excel,执行粘贴操作,将剪贴板内的数据粘贴到当前数据表中;然后,选中全部粘贴来的数据,执行复制操作,并用鼠标单击数据区外的某一单元格,执行“粘贴|转置”命令,得到转置后的数据;(word表格行列互换)再选中转置后的数据,执行复制操作。 第3步:切换到word编辑中,执行“选择性粘贴”命

SQL语句实例

表操作 例1 对于表的教学管理数据库中的表STUDENTS,可以定义如下:CREATE TABLE STUDENTS, ( SNO NUMERIC (6, 0) NOT NULL, SNAME CHAR (8) NOT NULL, AGE NUMERIC(3,0), SEX CHAR(2), BPLACE CHAR(20), PRIMARY KEY(SNO) ) 例2 对于表的教学管理数据库中的表ENROLLS,可以定义如下:CREATE TABLE ENROLLS ( SNO NUMERIC(6,0) NOT NULL, CNO CHAR(4) NOT NULL, GRADE INT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO), FOREIGN KEY(CNO) REFERENCES COURSES(CNO), CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)) ) 例3 根据表的STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。CREATE TABLE GIRL AS SELECT SNO, SNAME, AGE FROM STUDENTS WHERE SEX='女'; 例4 删除教师表TEACHER。 DROP TABLE TEACHER 例5 在教师表中增加住址列。 ALTER TABLE TEACHERS ADD (ADDR CHAR(50))

例6 把STUDENTS表中的BPLACE列删除,并且把引用BPLACE列的所有视图和约束也一起删除。 ALTER TABLE STUDENTS DROP BPLACE CASCADE 例7 补充定义ENROLLS表的主关键字。 ALTER TABLE ENROLLS ADD PRIMARY KEY (SNO,CNO); 视图操作(虚表) 例9 建立一个只包括教师号、姓名和年龄的视图FACULTY。(在视图定义中不能包含ORDER BY子句) CREATE VIEW FACULTY AS SELECT TNO, TNAME, AGE FROM TEACHERS 例10 从学生表、课程表和选课表中产生一个视图GRADE_TABLE,它包括学生姓名、课程名和成绩。 CREATE VIEW GRADE_TABLE AS SELECT SNAME,CNAME,GRADE FROM STUDENTS,COURSES,ENROLLS WHERE STUDENTS.SNO=ENROLLS.SNO AND https://www.360docs.net/doc/c38200438.html,O=https://www.360docs.net/doc/c38200438.html,O 例11 删除视图GRADE_TABLE DROP VIEW GRADE_TABLE RESTRICT 索引操作 例12 在学生表中按学号建立索引。 CREATE UNIQUE INDEX ST ON STUDENTS (SNO,ASC) 例13 删除按学号所建立的索引。 DROP INDEX ST 数据库模式操作 例14 创建一个简易教学数据库的数据库模式TEACHING_DB,属主为ZHANG。 CREATE SCHEMA TEACHING_DB AUTHRIZATION ZHANG 例15 删除简易教学数据库模式TEACHING_DB。((1)选用CASCADE,即当删除数据库模式时,则本数据库模式和其下属的基本表、视图、索引等全

常用经典SQL语句大全完整版教学文案

常用经典S Q L语句大 全完整版

常用经典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….)

oracle列转行sql详细讲解

--当期时间贷款时间 SELECT DK_ID, max(substr(activeDate, 2)) activeDate FROM (SELECT DK_ID, sys_connect_by_path(activeDate, ',') activeDate FROM (SELECT DK_ID, activeDate, DK_ID || rn rchild, DK_ID || (rn - 1) rfather FROM (SELECT TEMP.DK_ID, --查询项目所在地树形结构全名 SELECT t.area_id, substr(sys_connect_by_path(t.area_name, '-'), 2) as allname , connect_by_root t.area_name as root, --是单一操作符,返回当前层的最顶层节点connect_by_isleaf as IsLeaf, --是伪列,判断当前层是否为叶子节点,1代表是,0代表否 level as lel --是伪列,显示当前节点层所处的层数 FROM dk_project_area_info t START WITH t.area_name = '项目所在地' CONNECT BY PRIOR t.area_id = t.area_pid SYS_CONNECT_BY_PATH 学习2008-09-08 10:59SELECT ename FROM scott.emp START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr; 得到结果为:KING JONES SCOTT ADAMS FORD SMITH BLAKE ALLEN WARD MARTIN TURNER JAMES

SQL语句大全实例

SQL语句实例 表操作 例 1 对于表的教学管理数据库中的表STUDENTS ,可以定义如下:CREATE TABLE STUDENTS (SNO NUMERIC (6, 0) NOT NULL SNAME CHAR (8) NOT NULL AGE NUMERIC(3,0) SEX CHAR(2) BPLACE CHAR(20) PRIMARY KEY(SNO)) 例 2 对于表的教学管理数据库中的表ENROLLS ,可以定义如下: CREATE TABLE ENROLLS (SNO NUMERIC(6,0) NOT NULL CNO CHAR(4) NOT NULL GRADE INT PRIMARY KEY(SNO,CNO) FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO) FOREIGN KEY(CNO) REFERENCES COURSES(CNO) CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100))) 例 3 根据表的STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。 CREATE TABLE GIRL

AS SELECT SNO, SNAME, AGE FROM STUDENTS WHERE SEX=' 女'; 例 4 删除教师表TEACHER 。 DROP TABLE TEACHER 例 5 在教师表中增加住址列。 ALTER TABLE TEACHERS ADD (ADDR CHAR(50)) 例 6 把STUDENTS 表中的BPLACE 列删除,并且把引用BPLACE 列的所有视图和约束也一起删除。 ALTER TABLE STUDENTS DROP BPLACE CASCADE 例7 补充定义ENROLLS 表的主关键字。 ALTER TABLE ENROLLS ADD PRIMARY KEY (SNO,CNO) ; 视图操作(虚表) 例9 建立一个只包括教师号、姓名和年龄的视图FACULTY 。( 在视图定义中不能包含ORDER BY 子句) CREATE VIEW FACULTY AS SELECT TNO, TNAME, AGE FROM TEACHERS 例10 从学生表、课程表和选课表中产生一个视图GRADE_TABLE ,它包括学生姓名、课程名和成绩。 CREATE VIEW GRADE_TABLE AS SELECT SNAME,CNAME,GRADE FROM STUDENTS,COURSES,ENROLLS WHERE STUDENTS.SNO =ENROLLS.SNO AND https://www.360docs.net/doc/c38200438.html,O=https://www.360docs.net/doc/c38200438.html,O 例11 删除视图GRADE_TABLE DROP VIEW GRADE_TABLE RESTRICT 索引操作 例12 在学生表中按学号建立索引。 CREATE UNIQUE INDEX ST ON STUDENTS (SNO,ASC) 例13 删除按学号所建立的索引。 DROP INDEX ST 数据库模式操作

oracle 行转列sql

表结构和数据如下(表名Test): NO V ALUE NAME 1 a 测试1 1 b 测试2 1 c 测试3 1 d 测试4 2 e 测试5 4 f 测试6 4 g 测试7 Sql语句: select No, ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value, ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name from (select No, Value, Name, rnFirst, lead(rnFirst) over(partition by No order by rnFirst) rnNext from (select a.No, a.Value, https://www.360docs.net/doc/c38200438.html,, row_number() over(order by a.No, a.V alue desc) rnFirst from Test a) tmpTable1) tmpTable2 start with rnNext is null connect by rnNext = prior rnFirst group by No; 检索结果如下: NO V ALUE NAME 1 a;b;c;d 测试1;测试2;测试3;测试4 2 e 测试5 4 f;g 测试6;测试7 简单解释一下那个Sql吧: 1、最内层的Sql(即表tmpTable1),按No和Value排序,并列出行号:select a.No, a.Value, https://www.360docs.net/doc/c38200438.html,, row_number() over(order by a.No, a.V alue desc) rnFirst

SQL常用语句+举例

SQL 常用语句+举例 相关表: 1. distinct: 剔除重复记录 例:select distinct stroe_name from Store_information 结果: 2. And / or: 并且/或 例:在表中选出所有sales 高于$1000或是sales 在$275及$500之间的记录 Select store_name ,sales from Store_information Where sales>1000 Or (sales>275 and sales <500) 3. 例:在表中查找store_name 包含 Los Angeles 或San Diego 的记录 Select * from Store_information where store_name in (‘Los Angeles ’,’San Diego ’) 结果: 4. Between : 可以运用一个范围抓出表中的值

与in 的区别:in 依照一个或数个不连续的值的限制抓出表中的值 例:查找表中介于Jan-06-1999 及Jan-10-1999 中的记录 Select * from Store_information where date between ‘Jan-06-1999’ and ‘Jan-10-1999’ 结果: 5. Like : 让我们依据一个套式来找出我们要的记录 套式通常包含: ’A_Z ’: 所有以A 开头,中间包含一个字符,以Z 结尾的字串 ’ABC%’: 所有以ABC 起头的字串 ’%XYZ ’: 所有以XYZ 结尾的字串 ’%AN%’: 所有包含AN 的字串 例:Select * from Store_information where store_name like ‘%An%’ 结果: 6. Order by: 排序,通常与ASC (从小到大,升序)、DESC (从大到小,降序)结合使用 当排序字段不止一个时,先依据字段1排序,当字段1有几个值相同时,再依据字段2排序 例:表中sales 由大到小列出Store_information 的所有记录 Select Store_name, sales,date from Store_information order by sales desc 结果: 7. 函数:AVG (平均值)、COUNT (计数)、MAX (最大值)、MIN (最小值)、SUM(求和) 语句:select 函数名(字段名) from 表名 例:求出sales 的总和 Select sum(sales) from Store_information 结果 8. COUNT (计数) 例:找出Store_information 表中 有几个store_name 值不是空的记录

ORACLE关于动态SQL的使用

关于动态SQL的使用-----摘录 内容摘要:在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,比如需要动态建表或某个不确定的操作需要动态执行。这就需要使用动态SQL来实现。本文通过几个实例来详细的讲解动态SQL的使用。 本文适宜读者范围:Oracle初级,中级 系统环境: OS:windows2000Professional(英文版) Oracle:8.1.7.1.0 正文: 一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现。 首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。 Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明: 一、本地动态SQL 本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。 1、本地动态SQL执行DDL语句: 需求:根据用户输入的表名及字段名等参数动态建表。 create or replace procedure proc_test ( table_name in varchar2,--表名 field1in varchar2,--字段名 datatype1in varchar2,--字段类型 field2in varchar2,--字段名 datatype2in varchar2--字段类型 )as str_sql varchar2(500); begin str_sql:=create table||table_name||(||field1||||datatype1||,||field2|| ||datatype2||); execute immediate str_sql;--动态执行DDL语句 exception when others then null; end; 以上是编译通过的存储过程代码。下面执行存储过程动态建表。

相关文档
最新文档