中企动力 > 商学院 > sql复制表数据到另一张表
  • ?

    sql查询语句学习,多表查询和子查询以及连接查询

    燕丹翠

    展开

    交叉连接查询

    这种查询方式基本不会使用,原因就是这种查询方式得到的是两个表的乘积(笛卡儿集)

    语法就是select * from a,b;

    内连接查询,可以有效的去除笛卡尔集现象

    内连接查询分为两类:

    隐式内连接 select * from A,B where 条件隐式连接使用别名:select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx;显示内连接 select * from A inner join B on 条件 (inner可以省略)显示连接使用别名: select * from A 别名1 inner join B 别名2 on 别名1.xx=别名2.xx

    举例:

    SELECT * FROM category c,product p WHERE c.cid=p.category_id;

    外连接

    外连接有两种方式,一种是左外连接,一种是右外连接

    左外连接:select * from A left outer join B on条件右外连接:select * from A right out join B on 条件左外连接就是左边的表的内容全部显示,然后匹配右边的表,如果右边的表匹配不到,则空右外连接就是右边的表的内容全部显示,然后匹配左边的表,如果左边的表匹配不到,则空

    总结:

    内连接就是两个表的交集

    左外连接就是左边表加两表交集

    右外连接就是右边表加两表交集

    子查询

    子查询就是查询中还有查询,就是一条select语句结果作为另外一条select语法的一部分(查询结果,查询条件,表等)

    子查询的用处很多比如:查询本公司工资最高的员工的详细信息

    select * from emp where sal=max(sal)这个是错误的,原因是聚合函数不可以用在条件中,要想解决这个问题,只能用子查询select* from emp where sal=(select max(sal)from emp)

    exists关键字select * from emp where exists(select max(sal) from emp)这句话的意思是只要(select max(sal) from emp)有结果则执行select * from emp,否则不执行

    子查询出现在where后是作为条件出现的

    子查询出现在from之后是作为表存在的

    作为表举例 select e.emono,e.ename from(select * from where deptno=30) e还给表起了一个别名e

    作为条件有以下几种情况

    单行单列:可以使用=,>,<,>=,<=,!=多行单列(集合)可以用All ANY IN not IN单行多列(对象),就是一行,像一个对象一样什么属性都有多行多列:多行多列一直用在from后面作为表

    单行单列举例:select * from emp where sal >(select avg(sal) from emp)

    多行多列举例:select * from emp where sal> All(select sal from emp where deptno=10)

    单行多列举例:select * from emp where(job,deptno,sal)IN(select job,deptno,sal from emp where ename='殷天正');(查询和殷天正一样工作,工号,工资的人的工作,工号,工资从emp表中)

    每天分享编程语言,欢迎关注

  • ?

    有了这个工具,我终于可以将数据库从MySQL迁移到SQL SERVER了

    紫南

    展开

    MySQL作为甲骨文一个非常优秀的开源免费数据库,而SQL server作为微软一个付费的优秀数据库,难免有时候,我们需要将MySQL数据库迁移到SQL SERVER数据库,今天我就带着大家一起来完成这个任务。

    工具介绍

    SSMA是一个客户端应用程序,从上面我们能够看到,这个工具不仅仅有MySQL版本的,还有DB2、oracle、Access等等数据库的,也就是说,利用这些工具,我们能够将各种数据库迁移到SQL SERVER,同时,支持的SQL SERVER版本有2008、2008 R2、2012、2014、2016、2017版本和Azure SQL Database版本等。

    系统要求

    目前关于MySQL版本的这个迁移工具需要满足以下系统需求:

    Windows 7或者之后的版本;或者Windows server 2008或者之后的版本

    推荐使用4GB RAM

    框架需要4.0之后的版本

    需要MySQL ODBC 5.1驱动程序

    其他需求

    为了迁移系统函数、存储过程等等,你需要安装Extension Pack

    实现步骤

    当我们安装好上面的两个迁移工具之后,我们可以参考以下的步骤来实现真正的迁移数据库操作:

    用这个工具连接MySQL数据库

    连接SQL SERVER实例

    转变MySQL数据库对象到SQL SERVER(比如数据表、索引、存储函数、存储过程等等)

    加载对象(数据表、索引、存储函数、存储过程等等)进入到SQL SERVER

    迁移数据到SQL server

    总结

    从上面的描述,我们不难看出,从MySQL迁移到SQL SERVER数据库,需要同时安装MySQL数据库和SQL SERVER数据库,并且为了链接MySQL,我们还需要安装MySQL的ODBC,这样才能够让这个工具正常与MySQL进行通信,以保证迁移的顺利进行。

  • ?

    SQL数据库用存储过程批量更改某一个字段的值(单表也可以)

    梦碎

    展开

    USE [aa] --其中aa是数据库库名

    GO

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    --批量替换数据库所有相同字段的值,

    --如果@Table值不为空,则只更新传入表该字段的值

    --用法1:在查询分析器写入如示语句执行批量更改:BatchModify '字段名', '旧值', '新值', ''

    --用法2:在查询分析器写入如示语句执行批量单表更改:BatchModify '字段名', '旧值', '新值', '表名'

    Create Procedure [dbo].[BatchModify](

    @Field nvarchar(40),--要替换值的字段

    @OldValue nvarchar(50),--旧值

    @NewValue nvarchar(50),--新值

    @Table nvarchar(40)--待替换的表名

    ) as

    begin

    --字段、旧值、新值不能为空

    if (@Field <> '') and (@OldValue <> '') and (@NewValue <>'')

    begin

    --传入表名不为空,则更新该表的该字段值

    if @Table <>''

    begin

    Exec('Update ' + @Table + ' Set ' + @Field + ' = ''' + @NewValue +

    ''' Where ' + @Field + ' = ''' + @OldValue + '''')

    Print '更改单个表的字段值成功!'

    end

    else

    begin

    --使用游标进行批量更新

    Declare @TableTemp nvarchar(40)

    --Declare @ID Int

    Declare BatchMod Cursor For

    --找出字段所在表的ID

    Select T.[Name] From SysColumns C Inner Join SysObjects T

    On C.ID = T.ID Where (C.[Name] = @Field) and (T.XType = 'U')

    Open BatchMod

    Fetch Next From BatchMod Into @TableTemp

    While @@FETCH_STATUS = 0

    begin

    --根据表ID找出表名

    --Select @TableTemp = [Name] From SysObjects Where (ID = @ID)

    --执行批量修改

    Exec('Update ' + @TableTemp + ' Set ' + @Field + ' = ''' + @NewValue +

    ''' Where ' + @Field + ' = ''' + @OldValue + '''')

    --循环,抓出下一条

    Fetch Next From BatchMod Into @TableTemp

    end

    --关闭、释放游标

    Close BatchMod

    Deallocate BatchMod

    Print '批量更改数据库中所有表的字段值成功!'

    end

    end

    else

    begin

    Print '字段、旧值或者新值没有输入!请检查!'

    end

    end

  • ?

    数据库:使用sql语句建表的时候建立外键的两种方式

    友儿

    展开

    外键约束

    外键一般是引用另外一张表单的主键外键可以重复外键可以为空主键和外键不一定名称一致,一致比较好,可读性性强一个表引用n个表的主键,那么就会有n个外键

    设置外键有两种方式,一个是在建表的时候就直接设置好外键,还有一个就是表已经建立好的情况下,通过alter添加外键,两个方法均可以实现。

    方式一:在建表的同时建立外键

    这样就将emp表的deptno设置外键,其中fk_emp_dept是外键的名称

    方式二:先建表,然后再添加外键

    两种方式均添加了外键,上面两个都添加了外键名称,这个作用是方便删除外键的

    一旦建立外键,要注意,主表中主键没有的,从表不能添加,还有从表中使用的主表不能删除,要想删除,要先把从表中使用某个主键的删除,然后再删除主表中的数据

    CREATE TABLE dept(deptno INT PRIMARY KEY AUTO_INCREMENT,demame VARCHAR(50));CREATE TABLE emp(empno INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50),deptno INT,CONSTRAINT fk_emp_dept FOREIGN KEY(deptno) REFERENCES dept(deptno));CREATE TABLE emp(empno INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50),deptno INT);ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(deptno) REFERENCES dept(deptno);

  • ?

    excel办公小技巧:vba使用sql语句获取excel表格数据教程

    阿曼达

    展开

    在excel办公中,用VBA加上SQL语句实现对excel表格的数据获取,对于处理一些大数据量的表格来说是非常实用的。SQL是结构化查询语言,是数据库开发中用的程序设计语言,数据库里的数据表跟EXCEL里的表格其实是很类似的,所以用VBA加SQL语句可以实现类似的表格查询操作。

    举个例子:在EXCEL里用VBA+SQL来查询总成绩大于290分的学生

    一、手工操作的步骤是:

    1、 EXCEL打开如下表格,点击插入-数据透视图,点击创建数据透视图

    2、 在出现的数据透视图界面,点击姓名为行标签,点击成绩为求和项字段

    3、 在左侧的出现的行标签和求和项表格数据进行排序,手工选出成绩大于290分的记录。

    用上面的数据透视图方法很方便,步骤也少,比分类汇总功能要简便些。

    二、VBA加上SQL语句实现EXCEL表格数据的查询

    1、 先用EXCEL打开表格,调出VBE工程界面(ALT+F11),建议在个人工作簿新建个模块,把代码输入到右侧的区域。注:用个人工作簿的好处是,每次启动EXCEL不用手动启用宏。

    2、 根据自己的表格字段和功能需求,修改好SQL代码后,保存按F5快捷键运行。注:SQL语句中表名要用[表名$]这种写法。

    以上是在EXCEL用VBA加SQL语句实现对表格的自动查询,调用的方法是按ALT+F8,选择相应的代码名称,这里的名称是SQL查询。用这种方法对于规则不经常变动的情况下使用很实用,特别是在数据量大的情况下。

    附上截图代码

    Sub SQL查询()

    Dim cnn As Object, rs As Object, SQL As String

    Set cnn = CreateObject("adodb.connection") '创建数据库连接

    cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName

    Set rs = CreateObject("adodb.recordset") '创建一个数据集

    SQL = "select 姓名,sum(成绩) from [原始数据$] group by 姓名 HAVING sum(成绩)>290" '设置SQL查询语句,这个根据实际需要改写,注意【表名$】这种写法

    Set rs = cnn.Execute(SQL) '执行查询

    ActiveWorkbook.Worksheets(2).Cells.ClearContents

    Dim i As Integer

    For i = 1 To rs.Fields.Count

    ActiveWorkbook.Worksheets(2).Cells(1, i) = rs.Fields(i - 1).Name '填写标题到表2

    Next

    ActiveWorkbook.Worksheets(2).Range("a2").CopyFromRecordset rs '复制记录集到表2

    rs.Close

    Set rs = Nothing

    cnn.Close

    Set cnn = Nothing

    End Sub

    对于EXCEL2007版本的电子表格,以上的cnn.Open后的字符串要改成"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"""

  • ?

    如何用T—SQL命令查询一个数据库中有哪些表

    昆斯费里

    展开

    可用如下方法:

    以sqlserver2008r2为例,可以从系统表中sys.objects来取字段。

    1、打开SQL Server Managment Studio,并登陆到指定数据库。

    2、新建一个查询窗口。

    3、使用如下语句:

    select name from sys.objects where type='U';

    查询结果:

    其中name列的内容就是当前登陆用户下的所有表名。

    (本文内容由百度知道网友badkano贡献)

  • ?

    PL/SQL中如何导出表结构和表数据

    景梦芝

    展开

    在数据库操作中,很多时候会发现数据库不兼容,但原来的数据库中又有很多数据,表结构也很复杂,这时候就会想到将这个表中的数据和表结构都移植到另一个数据库中,在PL/SQL的工具栏中,可以进行数据库表移植和数据转移。

    打开PL/SQL客户端,成功登录数据库后,就会进入到主操作界面,在最上方中,有工具菜单栏,其中就有Tools选项,如图

    点击【Tools】选项,会出现一列工具选项,其中就有【Export Tables】选项,选中该选项,就会跳转到表数据导出界面,如图

    再点击【Tools】选项,再在列表中选中【Export User Objects】选项,就会跳转到表结构导出界面,如图

    如果想导入数据库表结构,或表数据,也可以再点击【Tools】中的【Import Tables】选项,会跳转到导入数据表界面和导入数据表结构界面,如图

    在该界面中,切换到【SQL inserts】选项,在下方文件打开按钮中,选中已经准备好的sql语句文件,再点击impot按钮,就可以导入表数据了,如图

  • ?

    如何实现批量导入数据

    紫筝

    展开

        SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。    使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。    下面分享如何使用实现批量导入信息资料功能。

    1. 信息资料数据表设计

    2. WinForm 程序设计Winform 程序 采用VS2008 C#语言开发。界面设计为工具栏、查询条件、数据列表及状态栏。

    3. 数据导入界面设计数据导入选择导入数据文件,经解释正确后,进行确定,导入数据。

    4. 选择CSV数据文件进行解释    本示例使用CSV文本文件导入。4.1. CSV 数据文件内容

    4.2. CSV数据导入解释方法

    5. 使用导入数据

        至此,导入数据分享完毕,几万行数据,可在几秒内瞬间导入。从中我们也发现,想要达到这种速度,是有很多条件的。比如程序不会针对每一行数据进行数据有效性验证;导入的数据列必须与数据库中的数据表设计完全一致。所以一般只在数据转移、信息系统升级中常用。

  • ?

    SQL查询-一张表的join

    Dong

    展开

    在执行查询的时候,经常会用到多表关联,但如果所需数据仅涉及一张表,通常很难想象会用到join的场景。最近有做一个查询,发现一张表与它自身进行关联,也是非常实用的,分享给大家。

    需求:7月各品类的销售额占比。

    通常情况下,小编会分品类汇总一下本月的实际支付金额,导出,然后手工计算一下。想来应该有不少同学都是这么操作,因为这个也实在太简单了~但是,这只是小编举的一个栗子,实际需求中,类似此查询仅仅是小编众多操作过程中间的一个环节,因此,小编要尽量在查询中得到直接结果。

    于是,小编就用到了一张表与其自身进行关联。

    如上,在此例中,销售额占比的分子是7月各品类的销售额,分母是7月总销售额,这两个数据无法在同一条查询语句中进行,那么先分开查询,再以7月这个字段来关联这两条查询语句—需注意,为避免出错,用的是left join。

    真实结果不方便直接上图,随便写个数给大家看个大概吧,见下图。红虚线框内是关联后的数据,框外是最后select的结果。

    实际应用情况应该会比此例复杂,但整体核心思路如上,小伙伴们如有更多经验,欢迎一起分享。

  • ?

    如何将SQL语句查询出的数据新建成一个表

    淳于芸

    展开

    CREATE        VIEW `test`.`view_ll`     AS(SELECT * FROM ...);

    `test`.`view_ll` 是数据库.表名。()里面是sql语句。

    (本文内容由百度知道网友du瓶邪贡献)

sql复制表数据到另一张表

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP