• sql语句总结


    1、创建数据库语句(以部门表(department)和员工表(employee)位例)

      create database MyCompany

      on

      (

    name='MyCompany_data',

    filename='c:\database\MyCompany_data.mdf',

    size=5mb,

    filegrowth=10%,

    maxsize=100mb

      )

      log on

      (

    name='MyCompany_log',

    filename='c:\database\MyCompany_log.ldf',

    size=1mb,

    filegrowth=1mb,

    maxsize=10mb

      )

    2、创建表语句

     

    create table department

    (

    dId int identity(1,1) primary key,

    dName nvarchar(10) not null

    )

    go


    --员工表 employee


    create table employee

    (

    eId int identity(1,1) primary key,

    eName nvarchar(10),

    eSex nchar(1),

    eAge int,

    eSalary money,

    eDepId int,

    eIntime datetime

    )

    go

     

    3、创建主键约束 

      alter table [表名] add 

        constraint [键名] Primary key [主键名称]

    4、创建唯一约束

      alter table [表名] add

         constraint [键名] unique(唯一键名称)

    5、创建默认约束

      alter table [表名] add

         constraint [键名] default(默认值) for [设为默认值的字段]

    6、创建检查约束

      alter table [表名] check(要检查的条件)

    7、创建外键约束

      alter table [表名] add

      constraint [外键名称(自己起的)] foreign key(表中的外键名称) references [与外键相关联的表名][相应表中的主键]

    8、级联删除

      alter table [表名] add

      constraint [外键名称(自己起的)] foreign key(表中的外键名称) references [与外键相关联的表名][相应表中的主键] on delete cascade

    删除的时候先删除字表中的数据,再删除父表中的数据

    9、在表中插入数据

      insert into [表名](字段名称)values(对应字段的值)

    10、删除数据

      delete from table where(条件)

        truncate table [表名]

      delete与truncate的区别:truncate删除数据的时候把自增长列的值还原成种子

      delete删除了数据如果再向表中插入数据,有自增长列的值的种子还会自增

      删除表 drop table [表名]

      删除数据库 drop database [数据库名]

    11、修改数据

      update table set [要修改的数据] where 条件

    12、查询数据

      最简单的查询:selcet [字段] from [表名]

      sql中最难的要属数据查询了,增删改相对来说都比较简单。

      --修改列名

    select sName as '姓名',sAge as '年龄',sSex as '性别' from Student

    select sName '姓名',sAge '年龄',sSex '性别' from Student

    select '姓名'=sName,'年龄'=sAge from Student


    --带条件查询

    select sName as '姓名',sAge as '年龄',sSex as '性别' from Student

    where sAge > 20

    select 1+1 as 'mm'

    select GETDATE() 'time'


    --top

    select top 3 * from Student


    --百分之几

    select top 3 percent sName,sAge,sBirthday from Student

    --distinct

    select * from Student

    select distinct * from Student

    select distinct sName from Student

    select distinct sName,sNo from Student

    select distinct sName,sSex from Student


    --聚合函数

    select * from Score

    select COUNT(*) from Student

    select MAX(english) from Score

    select Min(english) from Score

    select SUM(english)/COUNT(*) from Score


    --avg没有统计null的值

    select AVG(english) from score

    select MAX(sbirthday),MIN(sbirthday) from Student


    --对列计算

    select sName,sAge + 5 as 'sAge',sSex from Student

    select english*2,studentid from Score

    --带条件查询

    select studentId,english from Score where english<60

    select * from Student where sAge >=20 and sAge <= 30

    --Between…and …在之间


    --查询年龄在20-30岁之间的男学生

    select * from Student where sAge between 20 and 22 and sSex = '男'


    --查询成绩在80-90分之间的所有学生

    select * from Score where english between 80 and 90

    select * from Student where sBirthday between '1988-1-1' and '1989-12-31' 


    --in

    select * from Student where sClassId = 1 or sClassId=2 or sClassId=3 or sClassId = 4

    select * from Student where sClassId in (1,2,3,4)


    --模糊查询  like

    select * from Student where LEFT(sName,1) = '张'

    select * from Student where sName like '张%'

    select * from Student where  sName like '%侯%'

    select * from Student where sName like '张__'

    select * from Student where sName like '%[飞羽]%'--[0-9]  [a-z]  [123]


    --null

    select 1 + null

    select * from Score where english is null

    select * from Score where english is not null

    --order by


    --出现在select语句的最后

    select * from Student order by sAge asc

    select * from Student order by sAge desc

    select top 5 * from Student order by sAge desc

    select * from Score order by english asc,math asc

    select * from Score where english >= 60 and math >= 60

    order by english asc,math asc


    --分组  group by

    --select之后的列,必须出现在聚合函数或者group by子句中

    select sClassId,COUNT(sId),MAX(sAge) from Student group by sClassId

    select sSex,COUNT(*) from Student group by sSex

     

    --having 对分组过后的数据进行筛选

    select sClassId,COUNT(*) from Student group by sClassId having COUNT(*) > 3

    13、数据库中常用的函数

      getdate();count(),avg(),max(),min(),sum()

    14、函数总结

        1、ISNULL(expression,value)     如果expression不为null返回expression表达式的值,否则返回value的值

    2、字符串函数

    LEN() :计算字符串长度

    LOWER() 、UPPER () :转小写、大写

    LTRIM():字符串左侧的空格去掉 

    RTRIM () :字符串右侧的空格去掉 

    LTRIM(RTRIM('         bb        '))

    LEFT()、RIGHT()  截取取字符串

    SUBSTRING(string,start_position,length)

    参数string为主字符串,start_position为子字符串在主字符串中的起始位置(从1开始),length为子字符串的最大长度。SELECT  SUBSTRING('abcdef111',2,3) 

    REPLACE(string,oldstr,newstr)

    3、日期函数

    GETDATE() :取得当前日期时间 

    DATEADD (datepart , number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY, 3,date)为计算日期date的3天后的日期,而DATEADD(MONTH ,-8,date)为计算日期date的8个月之前的日期 

    DATEDIFF ( datepart , startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。

     

    DATEPART (datepart,date):返回一个日期的特定部分 整数

    DATENAME(datepart,date):返回日期中指定部分 字符串

    YEAR() MONTH() DAY()

    4、类型转换函数

    CAST ( expression AS data_type)

    case(score as varchar(10))

    CONVERT ( data_type, expression[,style])

    取日期部分

    2012-12-21

    1、CONVERT(varchar(100),getdate(),23)

    2、CONVERT(varchar(10),getdate(),21)


     

    嵌套查询(子查询)

     

    子查询返回的值不止一个。

     

    --当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

     

     

     

    在子查询中,一搬我们会使用in 代替 =使用

     

    select employee_id,employee_name

     

    from employee

     

    where department_id in

     

    (select department_id 

     

    from department where department_name='销售部')

     

    连接查询

     

    内连接  inner join...on...

     

    查询满足on后面条件的数据

     

    外连接

     

    左连接

     

    left join...on...

     

    先查出左表中的所有数据

     

    再使用on后面的条件对数据过滤

     

    右连接

     

    right join...on...

     

    先查出右表中的所有数据

     

    再使用on后面的条件对数据过滤

     

     

     

    (*)交叉连接 

     

    cross join 没有on

     

    第一个表的每一行和后面表的每一行进行连接

     

    没有条件。是其它连接的基础

     

      



     



      

  • 相关阅读:
    Web Dynpro for ABAP(9):Suspend Call And Enhancement
    Web Dynpro for ABAP(13):Messages
    Web Dynpro for ABAP(11):Dialog Boxes
    Web Dynpro for ABAP(10):Handling Images and Web Icons
    Web Dynpro for ABAP(7):Assistance Class
    Web Dynpro for ABAP(14):12Hour Time Format
    Web Dynpro for ABAP(16):WDA Analysis Tools
    Web Dynpro for ABAP(8):Service Calls
    Web Dynpro for ABAP(12):Input Help
    Web Dynpro for ABAP(15):Print
  • 原文地址:https://www.cnblogs.com/caishuhua226/p/2136635.html
Copyright © 2020-2023  润新知