zoukankan      html  css  js  c++  java
  • 20131205-代码修改列-约束--聚合函数-模糊查询

    [1]--============手动增加约束==========

    --手动删除一列(删除EmpAddress列)

    alter table Employees drop column EmpAddress

    --手动增加一列(增加一列EmpAddr varchar(1000))

    alter table Employees add EmpAddr11 varchar(500),AA int ,bb varchar(10)

    --手动修改一下EmpEmail的数据类型(varchar(200))

    alter table Employees alter column EmpAddr varchar(1000)

    --为EmpId增加一个主键约束

    alter table Employees add constraint PK_EmpId primary key(EmpId)

    --非空约束,为EmpName增加一个非空约束

    alter table Employees alter column EmpName varchar(50) not null

    --为EmpName增加一个唯一约束

    alter table Employees add constraint UQ_EmpName unique(EmpName)

    --为性别增加一个默认约束,默认为'男'

    alter table Employees add constraint DF_EmpGender default('男') for EmpGender

    --为年龄增加一个检查约束:年龄必须在-120岁之间,含岁与岁。

    alter table Employees add constraint CK_EmpAge check(EmpAge >=0 and EmpAge<=120)

    --创建一个部门表,然后为Employee表增加一个DepId列。

    alter table Employees add DeptId int

    --增加外键约束

    alter table Employees add constraint FK_DeptId_DepId foreign key(DeptId) references Department(DepId)

    [2]数据检索

    • 执行备注中的代码创建测试数据表。
    • 简单的数据检索 :SELECT * FROM Student
    • 只检索需要的列 :SELECT sName FROM Student 、SELECT sName,sAge FROM Student
    • 列别名:SELECT sName AS 姓名,sAge AS 年龄,sBirthday AS 出生日期 FROM Student
    • 使用where检索符合条件的数据:SELECT sName FROM Student WHERE sSex='女'。
    • 还可以检索不与任何表关联的数据:select 1+1;select select getdate();

    [3]

    查询 前10条数据select top 10 * from Customers

    查询前百分之十select top 10 percent * from Customers

    表达式要加括号select top (10*2) percent * from Customers

    select top 5 * from Products order by UnitPrice desc--默认是升序,这样表示降序

    select top 5 * from Products order by UnitPrice asc--默认升序(可不写)

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

    select top 5 * from TblStudent order by tSAge—年龄最小的学生

    select top 10 percent * from TblStudent order by tSAge desc—获得年纪最大的10%学生---有小数就进1

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

    select distinct * from T1--关键字作用是已经查询后的结果再去除重复

    Select distinct sname,sage,sgender from T1

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

    Select top 5 sName,sAge from student

    Select top 30 percent sName,sAge from student 非四舍五入,返回最大整数 2.1 返回3

    select tSId,tSName+tSGender+tSAddress as信息 from TblStudent----查询信息合集

    [4]

    类型转换:

    CAST ( expression AS data_type [ (length ) ])

    CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

    [5]

    --查询没有及格的学生的学号

    select tScoreId from TblScore where tMath<60

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

    select * from TblStudent where tSAge>20 and tSAge<30 and tSGender='男'

    select * from TblStudent where tSAge between 20 and 30—这个简单

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

    select * from Customers

    select * from Customers where Country='UK' or Country='USA'

    select * from Customers where Country in('UK','USA')

    ==========================================查询国家的方式

    条件多的时候按规定来,则不高效

    select studentId from score where english < 60

    select sName,sAge,sSex from student where sAge >=20 and sAge <=30 and sSex ='男'

    select sName,sAge,sSex from student where sAge between 20 and 30 and sSex ='男'

    [6]

    其中关于条件,SQL提供了四种匹配模式:

     

    1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

     

    比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

     

    将会把u_name为"张三","张猫三"、"三脚猫","唐三藏"等等有"三"的记录全找出来。

     

    另外,如果需要找出u_name中既有"三"又有"猫"的记录,请使用and条件

    SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

     

    若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'

    虽然能搜索出"三脚猫",但不能搜索出符合条件的"张猫三"。

     

    2,_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

     

    比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'

    只找出"唐三藏"这样u_name为三个字且中间一个字是"三"的;

     

    再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';

    只找出"三脚猫"这样name为三个字且第一个字是"三"的;

     

     

    3,[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

     

    比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'

    将找出"张三"、"李三"、"王三"(而不是"张李王三");

     

    如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为"0-4"、"a-e"

    SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'

    将找出"老1"、"老2"、……、"老9";

     

    4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

     

    比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'

    将找出不姓"张"、"李"、"王"的"赵三"、"孙三"等;

     

    SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';

    将排除"老1"到"老4",寻找"老5"、"老6"、……

     

    5,查询内容包含通配符时

     

    由于通配符的缘故,导致我们查询特殊字符"%"、"_"、"["的语句无法正常实现,而把特殊字符用"[ ]"括起便可正常查询。据此我们写出以下函数:

     

    function sqlencode(str)

    str=replace(str,"[","[[]") '此句一定要在最前

    str=replace(str,"_","[_]")

    str=replace(str,"%","[%]")

    sqlencode=str

    end function

     

     

    在查询前将待查字符串先经该函数处理即可,并且在网页上连接数据库用到这类的查询语句时侯要注意:

     

    如Select * FROM user Where name LIKE '老[^1-4]';上面 《'》老[^1-4]《'》是要有单引号的,别忘了!

    [*]

    --模糊查询

    select * from tblstudent

    --找张什么什么的

    --%表示任意字符多个字

    select * from TblStudent where tSName like '张%'

    --(-)表示任意字符一次

    select * from TblStudent where tSName like '张__'

    select * from TblStudent where tSName like '张%' and LEN(tSName)=3

    select * from TblStudent where tSName like '张[a-z]_'

    select * from TblStudent where tSName like '张[0-9]_'

    select * from TblStudent where tSName like '张[^0-9]_'

    select * from TblStudent where tSName like '张%[%]%'

    select * from TblStudent where tSName like '张%[_]%'

    [7]

    select * from TblScore where tEnglish is null 查null

    select * from TblScore where tEnglish is not null 查不是null

    Null和任何东西加后还是null

    [8]

    备注1:

    select

        tSClassId as 班级Id,

        count(*) as 班级人数

    from TblStudent

    group by TSClassId

    备注2:

    select

        tSClassId as 班级Id,

        count(*) as 班级人数

    from TblStudent

    where tSGender='男'

    group by TSClassId

    可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息. 按照group by 子句中指定的表达式的值分组查询结果。

    --当在一个查询语句中使用group by语句的时候,

    --在select 语句的选择列里面,只能包含group by 语句中出现的列,或者是聚合函数,

    --不能包括其他列。

    [9]

    备注1:

    select

        tSClassId as 班级Id,

        count(*) as 班级人数

    from TblStudent

    group by TSClassId

    having count(*)>3

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

    select sClassId,count(sName) from student where count(sName)>3 group by sClassId

    聚合函数不应出现在WHERE 子句中

    select sClassId,count(sName) from student group by sClassId having count(sName)>3

    Group by 前可以有where,是对筛选过后的数据进行分组

    select sClassId,count(sName) from student where sSex='男' group by sClassId

    select sClassId,count(sName) from student group by sClassId having sAge>30

    //错,having是对分组后信息的过滤,能用的列和select中能用的列是一样。

    //having无法代替where。

    [10]

    SELECT 语句的处理顺序

    以下步骤显示 SELECT 语句的处理顺序。

    1.FROM

    2.ON

    3.JOIN

    4.WHERE

    5.GROUP BY

    6.WITH CUBE 或 WITH ROLLUP

    7.HAVING

    8.SELECT

    9.DISTINCT

    10.ORDER BY

    11.TOP

    [11]

    group by

    1.简单分组

    2.分组后筛选

    3.分组后排序

    4.根据多列分组

    [12]

    Sql中

    +:①字符串,连接;

    ②数字,加法

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

    select '日期为'+99

    select '考试成绩为'+ cast(99 as varchar(10));

    select '考试成绩为'+CONVERT(varchar(10),99);

    select * from T2

    update T2 set uname='凤姐'

    select * from T2 order by convert(int, uId) desc

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

    select GETDATE()

    select CONVERT(nvarchar(10),GETDATE(),120)

    select

        isnull(convert(varchar(10),tEnglish),'缺考')

    from TblScore

    select '平均成绩是' + cast(30 as varchar(3))

    select cast(9.85 as int) 舍去小数

    ROUND() 4舍5入

    在SQL语句中,两个连续的 单引号 ,表示 一个单引号 。(单引号的转义符。)

    [13]

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

    扩展知识—自己学习

    SELECT FIdNumber,

    CAST(RIGHT(sNo,3) AS INTEGER) as 后三位的整数形式,

    CAST(RIGHT(sNo,3) AS INTEGER)+1 as 后三位加1,

    CONVERT(INTEGER,RIGHT(sNo,3))/2 as 后三位除以2

    FROM student

    对编号排序,但编号是字符串类型。1、2、11、3、21、36…

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

  • 相关阅读:
    VUE权限列表控制
    VUE-element-UI修改内置样式
    微信开发-url地址传值踩坑
    git 上传命令
    微信开发-缩略图插件
    axios拦截器
    设置contentType
    JSON.parse 函数应用 (复制备忘)
    angularjs开发遇到的坑
    http 请求头
  • 原文地址:https://www.cnblogs.com/CharlesZHENG/p/3527542.html
Copyright © 2011-2022 走看看