标签归档:select

mssql sqlserver sql脚本模式匹配搜索方法简介


摘要:
下文讲述sql脚本查询中,四种匹配方式(%、_、[]、not)的用法简介,如下所示:
实验环境:sql server 2008 R2


  ---基础数据准备
   create table [maomao365.com]
   (keyId int identity, 
    info varchar(100))
  insert into [maomao365.com]
   (info)values(N'sql博客'),
   (N'sql教程'),(N'sqlserver爱好者'),
  ('a'),('b'),('mao')


1. % 通配符

%通配符可以匹配数据列中任意信息,例:
select * from [maomao365.com]
where info like ‘%s%’
—匹配列中包含s的数据
where info like ‘s%’
—匹配列中s开头的数据
where info like ‘%s’
—匹配列中s结尾的数据


2. _ 通配符

_通配符:匹配列中一个任意字符信息
where info like ‘_’
–匹配列中只包含一个字符的行
where info like ‘ma_’
–匹配列中以ma开头,共三个字符的行
where info like ‘_ao’
–匹配列中以任意字符开头,以ao结尾的行

3. [] 通配符

[]通配符,表示列中指定单个字符,可以为中括号内的任意字符则为符合条件
[^]通配符,表示列中指定单个字符,不能为中括号内的任意字符则为符合条件
where info like ‘[a-c]ao’
—第一个字符为a或b或c则为符合条件
where info like ‘[^a-c]ao’
—第一个字符不能为a则为符合条件
where info like ‘[^a]ao’

4. not求反

where info not like ‘%sql%’
–info列中不包含sql
where info not like ‘_’
–info列中不为一个字符的行信息

通配符检测数据,无法检测出列值为null的信息
如果匹配条件中,以通配符开头,则不能走索引查找–即不能高效的运用索引

mssql sqlserver select查询子句说明


摘要:
下文讲述select查询子句的用法,如下所示:
实验环境:sql server 2008 R2



select子句功能说明:

select子句的可返回指定对象中的行集数据。
——————————————-

select子句语法:

SELECT [ ALL | DISTINCT ]  
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]   
   
 ::=   
    {   
      *   
      | { table_name | view_name | table_alias }.*   
      | {  
          [ { table_name | view_name | table_alias }. ]  
               { column_name | $IDENTITY | $ROWGUID }   
          | udt_column_name [ { . | :: } { { property_name | field_name }   
            | method_name ( argument [ ,...n] ) } ]  
          | expression  
          [ [ AS ] column_alias ]   
         }  
      | column_alias = expression   
    } [ ,...n ]   

———————参数说明———————————–
ALL:
返回结果集中所有行数据,缺省值为ALL。
DISTINCT:
返回结果集中指定列中唯一记录,不返回重复记录(如果列值为NULL,则会作为一行记录显示)
top(数量/百分比):
此参数未显示多少行
后需跟现实数量或者百分比
< select_list >:
需返回结果集中的列信息,列同列之间需使用逗号分隔
如果需返回所有列信息,此参数输入 “*”,则可返回集合中的所有列
table_name | view_name | table_alias.*:
此处输入表名或列名或别名
column_name:
 待返回列名
expression:
常量、函数、子查询、运算符连接的表达式 
$IDENTITY:
 返回标识列,如果多个表联合查询,需在$IDENTITY前面加上表限定符
$ROWGUID:
返回GUID列,如果多个表联合查询,需在$ROWGUID前面加上表限定符



select子句举例说明:

create table test
(keyId int identity,
info varchar(30))


insert into test
(info)values('maomao365.com')
go

select * from test 

go
truncate table test
drop     table test 

mssql sqlserver select查询原理分析


摘要:
下文将讲述sqlserver中select的查询原理,如下所示:
实验环境:sql server 2008 R2



1.表查询的原理

select 列名
from 表名
[ where 查询条件]

select查询语句的原理,首先根据from 关键字找出相应的表,并将表装载至内存中,然后把相关where查询条件装载至内存,根据表名和where条件对表数据进行检索,形成相应的虚拟表(worktable),再根据待返回列名,返回相应的列给用户。


例:
SELECT *
FROM [testTable]
WHERE [列] = ‘maomao365.com’;

sql server引擎先找到select 谓词,然后将表testTable加载至内存中,然后循环表,从第一条记录开始查找,检测到[列]值等于’maomao365.com’,

依次循环检测表,至到将整张表检索完毕,将检索完毕的数据装载至虚表中,然后再将虚拟表中符合条件的列返回给客户端用户。

例2:
SELECT *
FROM [testTable]
WHERE EXISTS
(SELECT *
FROM [testTable2]
WHERE [testTable2].KeyId = [testTable].KeyId );

下文是一个sql exists嵌套查询操作,

sqlserver引擎循环检索 testTable时,需 同时将testTable2装载至内存进行遍历检测,类似于开发语言中的

for()

{

for()

{}

}

最后将符合条件的虚拟表返回给客户端用户。