T-SQL查询语句

简介:
    SQL语言中最主要、最核心的部分是它的查询功能。查询语句用来对已经存在于数据库的数据按照特定的组合、条件表达式或次序进行检索,使用SELECT语句来完成。

使用SELECT查询数据

1. SELECT语法结构

    T-SQL中查询基本格式是有SELECT子句、FROM子句、WHERE子句组成的查询块:

select 列名 from 表名 where 查询限定条件

其中

* select 指定了想要查看哪些列的数据

* from 指定这些数据来自于哪些表

* where 指定了想要查看哪些行

 

SELECT语句的语法如下:

1
2
3
4
5
6
7
select   列名                        //SELECT 子句:指定查询列表字段,列名格式为“表.字段1,表.字段2”,如果查单个表,可简写为“字段1,字段2”
[into  新表名]                   //INTO 子句:可选,将查询结果存放在一个新表中
from  表名                       //FROM 子句:指定查询数据的表名称
[where  查询限定条件]             //WHERE 子句:可选,查询条件,由字段组成的条件表达式或逻辑表达式
[group by  分组条件]                //GROUP  BY子句:可选,指定查询结果的分组条件,通常是一个列名,但不能是列的别名
[having   分组查询限定条件]           //HAVING 子句:指定分组搜索条件,通常与GROUP BY子句一起使用
[order by  排序规则esc|desc]                 //ORDER  BY子句:指定查询结果的排序方式,默认为升序ESC;DESC表示


2. 表达式

    表达式是符号和运算符的一种组合,并且可以对它求值得到单个数据值

(1)条件表达式

常量:单个指定数据值的符号(字母、数字、符号)

列名:表中列的名称

一元运算符:仅有一个操作数的运算符(+正数、-负数)

二元运算符:将两个操作数组合执行操作的运算符,可以是算数运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串串联运算符、一元运算符

杨书凡16.png

杨书凡17.png

   在查询LIKE运算符的SQL语句需要使用以下的通配符运算符:

杨书凡18.png


例如:要求查找“员工信息表”中电话号码前两位数为“13”,可以编写如下约束表达式

杨书凡19.png


(2)逻辑表达式

杨书凡20.png


3. 查询举例

(1)查询student表中成绩为90-100的学生所有信息

select * from student where 成绩 between 90 and 100


(2)查询student表中成绩低于90或高于95分学生信息

select * from student where 成绩<90 or 成绩>95


(3)查询student表中成绩为89、90、91分的学生信息

select * from student where 成绩 in (89,90,91)


(4)查询student表中所有姓刘的学生信息

select * from student where 姓名 like ‘刘%'


(5)查询student表中前5行的数据

select top 5 * from student


(6)查询student表中所有学生信息,按照成绩从高到低显示查询结果

select * from student order by 成绩 desc


4. 分组查询

    分组查询就是将表中的数据按照一定的条件分类组合,在根据需要得到统计信息,通过group by子句可以实现

    在group by子句查询中,select指定的列名要么是group by子句中指定的列,要么是聚合函数。聚合函数用于对一组值进行计算,并返回单个值,如求总和、最大值、最小值、平均值等。T-SQL中常见的聚合函数有SUM()、AVG()、MAX()、MIN()、COUNT()等

(1)查询student表中所有学生的总成绩,列表名显示为“总成绩”

select SUM(成绩)as 总成绩 from student


(2))查询student表中所有学生的平均成绩

select AVG(成绩)as 平均成绩 from student


(3)查询student表中所有学生的最高分和最低分

select MAX(成绩)as 最高分 MIN(成绩)as 最低分 from student


(4)查询student表中所有行数

select COUNT(*)as 总行数 from student


(5)查询student表中每个班级的总成绩

select SUM(成绩)as 总成绩 from student group by 班级


(6)查询student表中总成绩大于200的班级

select SUM(成绩)as 总成绩 from student group by 班级 having SUM(成绩)>200


(7)将student表中2班的学生信息保存到表student_new中

select * into student_new from student where 班级=2


5. 子查询

    子查询就是查询中又嵌套的查询

案例1:查询student表中的最高分或最低分是哪个学生

select 姓名,成绩

from student

where 成绩=(select MAX(成绩) from student) or 成绩=(select MIN(成绩) from student)


案例2:查询每个季度的生产数量,百分比

杨书凡24.png

select 季度,sum(生产数量) AS 每个季度的生产数量,

str((sum(生产数量)/(select sum(生产数量) from 生产表))*100)+'%' AS 百分比

from 生产表

group by 季度

order by 季度




使用T-SQL实现多表查询

    前面的查询都是单表的查询。如果一个查询需要对多个表进行操作,就称为连接查询,就是通过各个表之间共同列的关联性来查询数据。


1. 内连接(INNER JOIN)

    内连接(INNER JOIN)是最常用的一种连接方式,只显示两个表中数据的集合部分

杨书凡21.png

案例:在表A和表B中使用内连接查询学生姓名、学校、职业

* 实现方式一:在where子句中指定连接条件,写法如下

select A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B 

from A,B

where A.name=B.name


* 实现方式二:在from子句中使用inner join …on子句来实现,写法如下

select A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B 

from A inner join B on A.name=B.name


2. 外连接

    外连接是对内连接的扩充,除了将两个表中数据重复部分连接起来,还可以要求显示左侧或右侧全部的数据

(1)左外连接(LEFT JOIN)

    左外连接的结果集包括左表的所有行

案例:在表A和表B中使用左外连接查询学生姓名、学校、职业

select A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B 

from A left join B on A.name=B.name


(2)右外连接(RIGHT JOIN)

    右外连接是左外连接的反向连接,其结果集包括右侧所有行

案例:在表A和表B中使用右外连接查询学生姓名、学校、职业

select A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B 

from A right join B on A.name=B.name


(3)全连接(FULL JOIN)

    全连接右成完整外连接,包括左表和右表中的所有行

案例:在表A和表B中使用完整外连接查询学生姓名、学校、职业

select A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B 

from A full join B on A.name=B.name


3. 合并两个结果集

杨书凡22.png

案例:将两个表的结果合并到一个结果显示

SELECT 姓名,学号,班级,国籍

FROM 二班

UNION

select +' '+,学号,班级,国籍

from 一班

order by 班级 desc,学号 asc


4. 自连接

杨书凡23.png

案例:查找每个员工的上司姓名

SELECT Y.员工姓名,S.员工姓名 AS 上司姓名

from 员工信息表 as Y inner join 员工信息表 as S

on Y.上司ID=S.员工ID


5. 交叉连接

    交叉连接就是表之间没有任何连接,左表与右表每一行一一组合,相当于两个表相乘

杨书凡25.png

SELECT T.教师姓名,C.课程名

from 教员基本信息表 AS T cross join 课程表 AS C










本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2044662,如需转载请自行联系原作者
目录
相关文章
|
11天前
|
SQL 运维 监控
MSSQL性能调优实战:索引优化、SQL查询效率提升与并发控制策略
在Microsoft SQL Server(MSSQL)的日常运维与性能优化中,精准的策略与技巧是实现高效数据库管理的关键
|
11天前
|
SQL 监控 数据库
MSSQL性能调优实战技巧:索引优化策略、SQL查询重构与并发控制详解
在Microsoft SQL Server(MSSQL)的管理与优化过程中,性能调优是确保数据库高效运行的关键环节
|
11天前
|
SQL 运维 监控
MSSQL性能调优实战:索引深度优化、SQL查询技巧与高效并发控制
在Microsoft SQL Server(MSSQL)的运维环境中,性能调优是确保数据库高效、稳定运行的核心任务
|
1天前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在执行SQL查询时遇到报错,代码为[XX000],该怎么解决?
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
22小时前
|
SQL DataWorks NoSQL
DataWorks操作报错合集之在执行带with语句的SQL查询时出现了错误,是什么原因?
摘要:DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
11天前
|
SQL 监控 数据库
MSSQL性能调优实战:索引策略优化、SQL查询重写与高效并发管理的具体技巧
在Microsoft SQL Server(MSSQL)的性能调优过程中,索引策略的优化、SQL查询的重写以及高效并发管理是关键环节
|
11天前
|
SQL 运维 监控
MSSQL性能调优实战:索引精细化构建、SQL查询深度优化与高效并发控制策略
在Microsoft SQL Server(MSSQL)的运维与优化过程中,索引的精细化构建、SQL查询的深度优化以及高效并发控制策略是提升数据库性能的关键
|
11天前
|
SQL 运维 监控
MSSQL性能调优实战:索引策略优化、SQL查询重写与智能锁管理
在Microsoft SQL Server(MSSQL)的运维中,性能调优是确保数据库高效运行、满足业务需求的关键环节
|
8天前
|
SQL 存储 关系型数据库
提升SQL查询效率的终极指南
在面试中,SQL调优是考察点,涉及理解与实践。调优步骤包括问题定位、分析及优化。问题可能源于慢查询、性能下降等。分析涉及索引利用、多表连接、查询字段过多等。优化可能需改进索引设计、减少JOIN、优化表结构、数据归档、分库分表、调整参数等。例如,低区分度字段的索引有效性取决于数据分布,不一定是性能瓶颈。数据库参数如`innodb_buffer_pool_size`、`innodb_io_threads`等调整也能提升性能。
|
11天前
|
SQL 监控 数据库

热门文章

最新文章