SQLServer高级查询

本文深入探讨SQLServer的高级查询技巧,包括TOP、LIKE、IN、BETWEEN、AS、JOIN等多种查询方式,以及如何使用通配符进行精确匹配,为数据库操作提供全面指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQLServer高级查询

  • SQL Top
    • select top n * from 表名
  • SQL Like
    • select 列名 from 表名 where 列名 like 模式(按照我们写的规矩查询)
  • SQL 通配符
    • 详情在下方
  • SQL In
    • select 字段 from 表名 where 字段 in (value1,value2,value3…);
  • SQL Between
    • select 字段 from 表名 where 字段 between value1 and value2;
  • SQL Aliases(as)
    • select * from student as user
  • SQL Join
    • select 表一.,表二. from 表一,表二 where 这俩张表的关系(主外键)
  • SQL Inner Join
    • select 表一.,表二. from 表一 inner join 表二 on 这俩张表的关系(主外键)
  • SQL Left Join
    • select 表一.,表二. from 表一 left join 表二 on 这俩张表的关系(主外键)
  • SQL Right Join
    • select 表一.,表二. from 表一 right join 表二 on 这俩张表的关系(主外键)
  • SQL Full Join
    • select 表一.,表二. from 表一 full join 表二 on 这俩张表的关系(主外键)
  • SQL Union
    • select 列名 from 表一 union select 列名 from 表二
  • SQL Select Into
    • select 字段 into 虚拟表名 from 表名
  1. SQL Top
    1. select top n * from 表名
    2. 简单来说就选取前面的3条数据 ,这个在实际开发中是比较常用的,一般用于分页查询
select top 3 * from student
--PS:选取前3条数据
  1. SQL Like
    1. 语法: select 列名 from 表名 where 列名 like 模式(按照我们写的规矩查询)
    2. PS:like中可以匹配少部分正则表达式
select  *  from student where studentName like '[张 小]%'
--PS:匹配studentName以‘张’与‘小’开头的数据
select  *  from student where studentName like '%黑'
--PS:匹配studentName以黑结尾的数据
  1. SQL 通配符
    1. PS:在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。必须配合LIKE使用
符号作用
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]不以什么什么开头的
[!charlist]以什么什么开头的
--匹配:studentName字段黑结尾的数据
select * from student where studentName like '%黑';
--匹配:studentName字段黑结尾并且只有俩个字符的数据
select * from student where studentName like '_黑';
--匹配:studentName字段不以王与张开头的数据
select * from student where studentName like '[^张 王]%';
--匹配:studentName字段以张与王开头的数据
select * from student where studentName like '[!张 王]_';
  1. SQL In
    1. 语法:select 字段 from 表名 where 字段 in (value1,value2,value3…);
    2. PS:in操作符允许我在where子句中规定多个值
select * from student where studentName in ('小黑','王五','张三');
--PS:选取studentName只为'小黑','王五','张三'的数据
  1. SQL Between
    1. 语法:select 字段 from 表名 where 字段 between value1 and value2;
    2. PS:在 value1 与 value2 之间
select * from student where bornDate between '1994-04-05' and '2018-11-03';
--PS:选取 '1994-04-05' 年到 '2018-11-03'年之间的数据 ,当然也可以使用数字进行
  1. SQL as(Aliases0
    1. 语法:select * from student as user
    2. PS:可以为列名或者表表名取别名
select * from student as s;
select StudentNo as s_id from student;
--PS:给表取一个别名,到时候多表连接的时候就可以使用别名了
  1. SQL Join
    1. 语法:select 表一.,表二. from 表一,表二 where 这俩张表的关系(主外键)
    2. 在表中存在至少一个匹配时,INNER JOIN 关键字返回行。(就是必须全部要符合条件才会返回行)
select s.*,g.* from student as s , grade as g where s.gradeId=g.gradeId
  1. SQL Inner Join
    1. select 表一.,表二. from 表一 inner join 表二 on 这俩张表的关系(主外键)
    2. 这和inner一样的
select s.*,g.* from student as s inner join grade as g on s.gradeId=g.gradeId
  1. SQL Left Join
    1. 语法:select 表一.,表二. from 表一 left join 表二 on 这俩张表的关系(主外键)
    2. 左表 (grade) 返回所有的行,即使右表(student)在中没有匹配的行。(右表不受限制)
select * from student as s left join grade as g on s.gradeId=g.gradeId
  1. SQL Right Join
    1. 语法:select 表一.,表二. from 表一 right join 表二 on 这俩张表的关系(主外键)
    2. 右表(student)返回所有的行,即使在左表 (grade) 中没有匹配的行。(右表不受限制)
select * from grade as g right join student as s on s.gradeId=g.gradeId
  1. SQL Full Join
    1. 语法:select 表一.,表二. from 表一 full join 表二 on 这俩张表的关系(主外键)
    2. 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
select * from student as s full join grade as g on s.gradeId=g.gradeId
  1. SQL Union
    1. 语法:select 列名 from 表一 union select 列名 from 表二
    2. UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
select  s.gradeId,s.StudentNo from student as s union  select * from grade as g
--PS:请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
--UNION默认取出不同的值,如果重复的也需要取出的话 用 UNION ALL
  1. SQL Select Into
    1. 语法:select 字段 into 虚拟表名 from 表名
    2. SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。(通常用于对记录继续存档)
--复制表结构与数据
select * into #temp from student

--复制表结构
select * into #temp from student where 1=2;
--测试
select * from #temp

--删除虚拟的表
drop table #temp

--把虚拟的表结构与数据插入newcreate表中(如果有newcreate表的话就是单纯的插入,如果没有的话就创建加插入)
select *  into  newcreate from #temp

--PS:最开始如果在前面加上#那么就是一种虚拟的表只在当前窗口有效,如果没有#那就是创建一张表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值