SQL笔记-查询语句

SQL笔记-查询语句目录

  • 一.最简单的查询
  • 二.条件查询
  • 三.聚集函数
  • 四.关键字top和distinct
  • 五.order by 子句
  • 六.group by 子句
  • 七.having 子句
  • 八.into 子句
  • 九.内部连接
  • 十.外部连接
  • 十一.交叉连接
  • 十二.使用union组合结果集
  • 十三.使用公用表表达式(CTE)
  • 十四.含in谓词的子查询
  • 十五.带有比较运算符的子查询
  • 十六.带有exists谓词的子查询
  • 十七.使用子查询代替表达式
  • 附加

一.最简单的查询

1.查询表中的所有信息
select *
from <表名>
2.查询表中选择的列的所有信息
select <列名>as<列名>,<列名>as<列名>
from <表名>

二.条件查询

select *
from <表名>
where <条件表达式>

查询条件 谓 词
比较 =, >, <, >=, <=, !=, <>, !>, !<
确定范围 between and, not between and
确定集合 in, not in
字符匹配 like, not like
空值 is null, is not null
多重条件 and, or(and优先级高于or)

字符匹配通配符
%(匹配0个或多个字符串)
_(匹配1个字符串)

三.聚集函数

select <聚集函数>,
from depart
where <条件表达式>

聚集函数 效果
avg (distinct<列名>) 求平均值,加上distinct 表示相同的只计算一次
count (distinct<列名>) 计数,加上distinct 表示相同的只计数一次
sum (distinct<列名>) 求和,加上distinct 表示相同的只计算一次
max (<列名>) 求最大值
min (<列名>) 求最小值

四.关键字top和distinct

1.top(查询结果是表从上往下的 n 行信息)
select top n *
from <表名>
2.distinct(可以消除同一列的重复数据-消除重复行)
select distinct <列名>
from <表名>

五.order by 子句

order by 子句用作排序
select *
from <表名>
order by <列名> asc,<列名> desc
asc:升序
desc:降序

六.group by 子句

group by 子句用作分组统计查询
select type,avg(price) as avg(price)
from <表名>
group by type
查询语句图片效果↓
SQL笔记-查询语句_第1张图片

七.having 子句

having 子句使用在 group by 子句后面
可以在后面跟条件表达式聚集函数
作用与where类似
select <列名>,<列名>
from <表名>
group by <列名> having <条件表达式/聚集函数>

八.into 子句

into 子句用作将查询结果保存到一个新建表中<永久表/临时表>)
临时表用#开头
select *
into #<临时表名>
from <表名>
查询临时表
select *
from #<临时表名>

九.内部连接

方法1:在from子句中指定内部连接的条件(建议使用方法1)
select *
from <表名1> inner join <表名2> on <连接条件>
方法2:在where子句中指定内部连接的条件
select *
from <表名1>,<表名2>
where <连接条件>

十.外部连接

1.左外连接(left outer join–on)
select <表名1>.*,<表名2>.*
from <表名1> left outer join <表名2> on <连接条件>
返回 outer join左边的表中所有的行,并匹配右边表中的数据行,若无填入NULL
2.右外连接(right outer join–on)
select <表名1>.*,<表名2>.*
from <表名1> right outer join <表名2> on <连接条件>
返回 outer join右边的表中所有的行,并匹配左边表中的数据行,若无填入NULL
3.完全外部连接(full outer join–on)
select <表名1>.*,<表名2>.*
from <表名1> full outer join <表名2> on <连接条件>
返回两表中所有行的数据
如果两表之间有匹配行时,返回整体结果集包含两表的数据值,
如果两表之间没有匹配的行时,返回数据值并且与之相对应的列填入NULL

十一.交叉连接

select <表名1>.*,<表名2>.*
from <表名1> cross join <表2名>
where <条件表达式>
返回两表每行的所有可能的组合,可通过where进行筛选

十二.使用union组合结果集


union

Union运算符用于将两个或多个select语句的结果组合成一个结果集
使用 union 运算符时应遵循下列准则:

  • 第一,在用 union 运算符组合的语句中,所有选择列表中的表达式(如列名称、算术表
    达式、聚集函数等)数目必须相同。
  • 第二,union 组合的结果集中的对应列必须具有相同的数据类型,并且可以在两种数据
    类型之间进行隐式数据转换,或者可以提供显式转换。
  • 第三,用 union 运算符组合的各语句中对应结果集列的顺序必须相同,因为 union 运算
    符按照各个查询中给定的顺序一对一地比较各列。

十三.使用公用表表达式(CTE)

CTE:可以视为临时结果集
CTE 不存储对象,并且只在查询期间有效,它可以自引用,还可以在同一查询中引用多次
定义CTE
with (selec查询结果的各列名) as ()
引用CTE
select *
from

十四.含in谓词的子查询

in谓词的作用是判断一个表中指定列的值是否包含在已定义的列表中或在另一个表中
select <列名>
from <表名>
where <列名> in (<查询语句>)

十五.带有比较运算符的子查询

判断符号 any(表示任何一个) all(表示全部)
< 表示小于子查询结果中的任何一个结果 表示小于子查询结果中的所有值
> 表示大于子查询结果中的任何一个结果 表示大于子查询结果中的所有值

select <列名>
from <表名>
where <列名><判断符号>(<查询语句>)

十六.带有exists谓词的子查询


exists谓词用于where子句中测试子查询返回的数据行是否存在,只产生逻辑值“true”或“false”
select *
from <表名1>
where exists (<查询语句>)

十七.使用子查询代替表达式

select <查询语句> as <显示的列名>
from <表名>

附加

<连接条件>=<表名1>.<列名>=<表名2>.<列名>
<查询语句>=select...from...where...
year(<列名>)用于获取这个列的年
month(<列名>)用于获取这个列的月
day(<列名>)用于获取这个列的日
GETDATE()用于获取当前日期

你可能感兴趣的:(SQL)