博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用SQL
阅读量:5346 次
发布时间:2019-06-15

本文共 4616 字,大约阅读时间需要 15 分钟。

一、基础SQL语句

  1. 创建数据库

    create database db_name;

  2. 删除数据库

    drop database db_name;

  3. 数据库备份

    --- 创建 备份数据的 device
    USE master
    exec sp_addumpdevice 'disk', 'testBack', 'd:\mysql7backup\MyNwind_1.dat'
    --- 开始 备份
    BACKUP DATABASE pubs TO testBack

  4. 创建新表

    create table tb_name(
    column_name type [not null] primary key [auto_increment],
    column_name2 type2......)
    从旧表选字段建新表
    create table tb_name like old_tb
    create table tb_name as select col1,col2 from old_tb definition only

  5. 修改字段数据类型 modify

    alter table tb_name modify col_name new_type [not null];

  6. 修改字段名称 change

    alter table tb_name change old_name new_name;

  7. 删除字段

    alter table tb_name drop col_name;

  8. 创建索引

    create [unique] index index_name on tb_name(column(length));

  9. 综合常用语句

    选择:select * from tb_name where 范围
    插入:insert into tb_name(field1,field2) values(v1,v2)
    删除:delete from tb_name where 范围
    更新:update tb_name set field1=v1 where 范围
    查找:select * from tb_name where field1 like ’v1%’ ---切勿左模糊
    排序:select * from tb_name order by field1,field2 [asc]
    总数:select count as totalcount from tb_name
    求和:select sum(field1) as sumvalue from tb_name
    平均:select avg(field1) as average from tb_name
    最大:select max(field1) as maxvalue from tb_name
    最小:select min(field1) as minvalue from tb_name

  10. 连接(连表)
    left join 左连接
    select a.a, b.b from a left join b on a.a=b.b;
  • right join 同理右连接 或 full join
  1. group by 分组

    一张表分组 完成后,查询后只能得到组相关的信息。
    组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
    select sum(col) from tb_name group by col2;

  2. 对数据库进行操作:

    分离数据库: sp_detach_db;附加数据库:sp_attach_db 后接表明,附加需要完整的路径名

&bsp;

二、常见
  1. top子句

    SQL server的语法:
    select top num | percent col_name from tb_name;
    --
    例子:从表students中选取前2行的数据;
    select top 2 * from students;
    --
    从表中取前30%的学生姓名:
    select top 30 percent name from students;
    --
    MySQL的语法:
    select col_name from tb_name limit num offset num;
    --
    如:查看3行数据,偏移量5,意思从第5行开始看到第8行:
    select * from students limit 3 offset 5

  2. 复制表-不带数据

    select top 0 * into new from old;

  3. 拷贝表-带数据

    insert into new(col1,col2,col3) select d,e,f from old;

  4. 子查询

    select x,y from a where x in (select d from b);

  5. between 范围之间

    select * from tb_name where id between n1 and n2;
    同理not between
    mysql中可用大于> 或者小于< and 连接。

  6. in 在里面

    select * from tb_name where id in (v1, v2, v3);
    同理 not in
    注意not in在连表查询时如有null值,则出现无数据bug不好用,可使用not exist

  7. 说明:两张关联表,删除主表中已经在副表中没有的信息

    delete from tb1 where not exists ( select * from tb2 where tb1.field1=tb2.field1 )

  8. 随机选择

    select newid();

  9. 删除重复记录

    delet from tb_name where id not in (select max(id) from tb_name group by (col1, col2...));
    或者
    select distinct * into temp from tb_name
    delete from tb_name
    insert into tb_name select * from temp

  10. 列出数据库里所有的表名

    select name from sysobjects where type='U' // U代表用户

  11. 列出表里的所有的列名

    select name from syscolumns where id=object_id('TableName')

  12. 压缩数据库

    dbcc shrinkdatabase(dbname)

  13. 转移数据库给新用户以已存在用户权限

    exec sp_change_users_login 'update_one','newname','oldname'
    go

  14. 检查备份集

    RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

  15. 修复数据库

    ALTER DATABASE [dvbbs] SET SINGLE_USER
    GO
    DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
    GO
    ALTER DATABASE [dvbbs] SET MULTI_USER
    GO

  16. 日志清除

    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),(@OriginalSize8/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

  17. 说明:更改某个表

    exec sp_changeobjectowner 'tablename','dbo'

转载于:https://www.cnblogs.com/shiqi17/p/10538836.html

你可能感兴趣的文章
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>
参数范围的选择
查看>>
使用 MarkDown & DocFX 升级 Rafy 帮助文档
查看>>
THUPC2019/CTS2019/APIO2019游记
查看>>
Nodejs Express模块server.address().address为::
查看>>
4.3.5 Sticks (POJ1011)
查看>>
POJ 2960 S-Nim 博弈论 sg函数
查看>>
Dijkstra模版
查看>>
一个简单的插件式后台任务管理程序
查看>>
GDB调试多进程程序
查看>>
组合数
查看>>
CMD批处理延时启动的几个方法
查看>>
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>
HTC G7直刷MIUI开启A2SD+亲测教程
查看>>
shiro的rememberMe不生效
查看>>
const 不兼容的类型限定符问题
查看>>
OpenCV的配置
查看>>