zoukankan      html  css  js  c++  java
  • sql常用语句汇总

    --创建数据库

    USE yuju

    CREATE database YuJu

    on primary

    (

        name='YuJu',

        filename='B:ceshi数据库YuJu.mdf',

        maxsize=1024mb,

        filegrowth=10%

    )

    log on

    (

        name='YuJu_log',

        filename='B:ceshi数据库YuJu.ldf',

        size=10mb,

        maxsize=1024mb,

        filegrowth=10mb

    )

    --                                                          

    DROP database YuJu

    --

    CREATE table Teacher(

       TId int identity(1,1) primary key,

       TName nvarchar(10),

       TAge int

    )

    ----

    SELECT * FROM Teacher

    DELETE FROM Teacher

    --

    INSERT INTO Teacher(TName,TAge) VALUES('王书峰',44)

    ----插入自增列

    set IDENTITY_INSERT Teacher on

    INSERT INTO Teacher(TId,TName,TAge) VALUES(2,'王书峰',44)

    SET IDENTITY_INSERT Teacher off

    --同时插入多行(union会自动除去重复行)union all不会

    INSERT INTO Teacher

    SELECT 'a',22 UNION

    SELECT 'b',33 UNION

    SELECT 'a',22 UNION

    SELECT 'b',33 UNION

    SELECT 'c',44

    --union all

    INSERT INTO Teacher

    SELECT 'a',22 UNION ALL

    SELECT 'b',33 UNION ALL

    SELECT 'a',22 UNION ALL

    SELECT 'b',33 UNION ALL

    SELECT 'c',44

    -----复制到新的表

    SELECT * into guo FROM Teacher

    ---修改表列:

    ALTER table Teacher alter column TName varchar(50)

    --添加非空约束:

    ALTER table Teacher alter column TName varchar(50) not null

    ---

    ALTER table Teacher drop column TName

    ---增加一列

    ALTER table Teacher add Sex nvarchar(10) not null

    ----加N,保证编辑器编辑不会放生乱码;

    INSERT INTO Teacher VALUES(N'王书峰',44)

    ----sql逻辑运算符高低:not>and>or,c#也一样||的优先级最低;

    a>10 and a<15 or a='' and(not(a=34))

    ----truncate 性能快的多,原因是不记录到日志中去。

    ---添加外键:

    ALTER table Teacher add constraint pk_Teacher primary key(TId)

    ---添加唯一约束:

    ALTER table Teacher add constraint uq_Teacher_Id unique(TId)

    --默认约束:

    ALTER table Teacher add constraint df_Teacher_TName default('男') for TName

    --检查约束:

    ALTER table Teacher add constraint ck_Teacher_TName check(TName like'%hh%')

    --添加外键:

    ALTER table tt add constraint fk_Teacher_tt foreign key(TTId) references Teacher(TId)

    --删除外键

    ALTER table  tt drop constraint fk_Teacher_tt

    --删除多个键名

    ALTER table  tt drop constraint fk_Teacher_tt,ck_Teacher_TName

    --添加多个键名:

    ALTER table Teacher

    add constraint name1 unique(TId),

    add constraint name12 check(TId>=0)

    --若想修改键的话,先删除原来的键再添加新的键

    --添加级联:

    ALTER table tt add constraint fk_Teacher_tt foreign key(TTId) references Teacher(TId) on delete cascade

    --添加非空约束:

    ALTER table Teacher alter column TName varchar(50) not null

    --重命名的两中方式;

    SELECT TId as 'T','TT'=TId from Teacher

    --长度为3;

    select LEN('郭泽峰')

    ----索引:

    --查看索引信息

    sp_helpindex emp

    --创建索引

    create index idxempid on emp(id)

    --创建非聚集索引

    create nonclustered index idxempid on emp(id)

    --创建具体索引

    create clustered index idxempid on emp(id)--cluster代表聚集

    --删除索引

    drop index emp.idxmpid

    --按书籍编号查询,创建聚集索引

    create clustered index idxsjid on 书籍(书籍编号)

    --查询索引信息

    sp_helpindex 书籍

    --删除索引

    drop index 书籍.idxsjid

    --使用全文索引

    --查询跟windows相关的书

    Select * from 书籍where 书籍名称like '%windows%'

    --查询SQL SERVER 是否安装全文索引,-安装,-没安装

    select fulltextserviceproperty ('isfulltextinstalled')

    --查看数据库是否能定义全文索引,1-有,0-没有

    select databaseproperty('练习','isfulltExtenabled')

    --启动数据库全文索引功能

    exec sp_fulltext_database 'enable'

    --删除全文索引

    drop fulltext index on 书籍

    --删除全文目录

    drop fulltext catalog ft

    --创建全文目录

    create fulltext catalog ft as default

    --创建全文索引

    create fulltext index on 书籍(书籍名称)key index pk_书籍--全文索引的关键词有:contains  ,  freetext

    ----

    --和[]和正则表达式中的一样,只要包含a或b;

    like '%[ab]%'   like '%x[^ab]y%'

    --转义的话,sql中使用中括号

    like '%[%]%'

    --数据空中的null表示unknow,where a=null或a<>null;是不正确的;用is null,is not null

    --null参与任何运算 结果都是null;

    --数据库必须是大写的NULL,null当成了字符串;

    --如果字段为NULL值得话,就替换成‘未填写’

    SELECT ISNULL(TName,'未填写')

    --排序中NUll被认为是最小的;

    --orderby后面可以跟一个表达式;

    order BY (f+f)/2

    --order by 放于最后面,执行顺序的话,也是最后执行,所以后面跟的内容没太多限制,

    --where 放于group by前面;先筛选后汇总

    SELECT TID,COUNT(TID) from Teacher where TID>0 GROUP BY TID

    ----having是对于组进行筛选,比如每组人数<=10的除去;

    SELECT TID,COUNT(TID) as allTea from Teacher HAVING COUNT(TID)>10

    --但不能为having allTea>10,因为执行having时,as allTea还没

    --执行

    ----以前在这里吃了不少亏,走了许多弯路,只知道用hvaing

    SELECT TID,COUNT(TID) from Teacher where TName LIKE '%gg%' GROUP BY TID

    ---返回多个结果集,第二个结果集是两个汇总的;

    USE pubs

    SELECT type, price, advance

    FROM titles

    ORDER BY type

    COMPUTE SUM(price), SUM(advance)

    -----------------------------------------------------

    2、 日期时间函数

    select dateAdd(day, 3, getDate());--加天

    select dateAdd(year, 3, getDate());--加年

    select dateAdd(hour, 3, getDate());--加小时

    --返回跨两个指定日期的日期边界数和时间边界数

    select dateDiff(day, '2011-06-20', getDate());

    --相差秒数

    select dateDiff(second, '2011-06-22 11:00:00', getDate());

    --相差小时数

    select dateDiff(hour, '2011-06-22 10:00:00', getDate());

    select dateName(month, getDate());--当前月份

    select dateName(minute, getDate());--当前分钟

    select dateName(weekday, getDate());--当前星期

    select datePart(month, getDate());--当前月份

    select datePart(weekday, getDate());--当前星期

    select datePart(second, getDate());--当前秒数

    select day(getDate());--返回当前日期天数

    select day('2011-06-30');--返回当前日期天数

    select month(getDate());--返回当前日期月份

    select month('2011-11-10');

    select year(getDate());--返回当前日期年份

    select year('2010-11-10');

    select getDate();--当前系统日期

    select getUTCDate();--utc日期

    -----数据库元数据语句;

    ------------------------------------------返回列的名字:表名:Teacher;2指的是第二列;

    select col_name(object_id('Teacher'), 2)

    ----返回列的长度:

    select col_length('Teacher', col_name(object_id('Teacher'), 1))

    -----返回列在在表中多的索引值(从0开始)

    select columnProperty(object_id('Teacher'), 'TId', 'ColumnId')

    ---

    select replace('abcedef', 'e', 'E');--替换字符串

    ---

    select replace('abcedef', 'e', 'E');--替换字符串

    select stuff('hello world', 3, 4, 'ABC');--指定位置替换字符串 [3:第三个,4:长度]

    select replicate('abc#', 3);--重复字符串

    select subString('abc', 1, 1), subString('abc', 1, 2), subString('hello Wrold', 7, 5);--截取字符串

    select len('abc');--返回长度

    select reverse('sqlServer');--反转字符串

    select left('leftString', 4);--取左边字符串

    select left('leftString', 7);

    select right('leftString', 6);--取右边字符串

    select right('leftString', 3);

    select lower('aBc'), lower('ABC');--小写

    select upper('aBc'), upper('abc');--大写

    --去掉左边空格

    select ltrim(' abc'), ltrim('# abc#'), ltrim('abc' );

    --去掉右边空格

    select rtrim(' abc '), rtrim('# abc# '), rtrim('abc');

    ==================================================================

    SELECT YEAR('2012-1-1')

    SELECT DATEPART(YEAR,'2012-1-1')

    ------------------------------------------------------------------

    语句顺序:

    from>where>group by>having>select>order by;

    ------------建立索引必然会排序,更新索引,因为只有排序才能实现快速的查找;使用各种算法;

    视图中不可以使用order by,除非使用top; 排序顺序后用top就不报错了;

    -----索引视图(在视图上创建唯一聚集索引)就会保存数据,而不引用表中的数据;

    begin transaction

      DECLARE @num int

      SET @num=0

      SELECT 1

      set @num=@num+@@error

      SELECT 2

      set @num=@num+@@error

    if @num<>0

    begin

      rollback transaction

      end

    else

       commit transaction

    -------------------------------

    比如insert语句,默认是自动提交事务,没插入一条自动开启事务,自动提交

    当然,可以改为手动事务,

    begin tran

     insert ...

    rollback:这样就回滚了;

    -------------------------------

    存储过程优点:

    1.执行速度更快;一次编译;

    2.允许模块化程序设计,类似方法的复用;

    3.提高系统安全性,防止sql注入;

    4.减少网络流量;

    ----

    EXEC sp_databases :查看所有数据库的信息;

    EXEC sys.sp_helpdb 'PM' :查看指定数据库的信息;

    exec sp_renamedb 'PM','guo':给数据库重命名;

    ----查看数据库有多少张表和视图:

    USE EF

    EXEC sys.sp_tables

    ----查看表的列

    USE PM

    EXEC sys.sp_columns 'AChengBenGuiJi'

    --sp_开头是系统的存储过程;

    --触发器是表,所以比如同时删除多行时,只执行一次触发器;

    游标不建议使用,性能非常的低下;

  • 相关阅读:
    iOS 10 的杂碎资料
    MAC SVN Merge 操作
    iOS中AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
    从字符串中获取指定字符内的内容
    判断是否是是全汉字、全字母、全数字、数字和字母等
    解析URL 获取某一个参数值
    长按TextField或TextView显示中文的粘贴复制
    TextField和TextView的限制输入长度
    抢购、距活动结束,剩余时间倒计时。
    Cell右滑 多个编辑选项栏
  • 原文地址:https://www.cnblogs.com/guozefeng/p/3467483.html
Copyright © 2011-2022 走看看