SQL Server学习笔记二(多种查询数据的方法)

SQL数据语句美化工具推荐

使用微软的官方下载渠道

sql server 数据查询 sqlserver数据查询方法_sql

使用Select语句查询数据

sql server 数据查询 sqlserver数据查询方法_数据库_02

查询词说明

Select 查询

* 查询表的所有字段

From 从哪张表查询

表名:如果没有指定表的模式,就会从默认的dbo模式下去找表,如果没有找到就会报错

也可以指定具体的数据库来查询具体的表名书,如果新建查询的时候有指定了数据库表就会默认查询当前创建查询的数据库表

Select * From sales.customers

查询的数据结果

sql server 数据查询 sqlserver数据查询方法_sql_03

指定具体的查询字段

sql的注释为: –

-- 指定具体的查询字段
SELECT
  customer_id,
  first_name,
  last_name,
  phone
FROM
  sales.customers;

查询的结果

sql server 数据查询 sqlserver数据查询方法_学习_04

对数据进行排序 Oder By

SELECT
  customer_id,
  first_name,
  last_name,
  phone
FROM
  sales.customers
ORDER BY
  first_name;

使用默认的排序是按照字段的升序来排的,指定的排序字段是按字母的先后顺序排的再到汉字

如果需要将排序的内容颠覆过来就可以使用关键字 desc

-- 对数据进行排序
SELECT
  customer_id,
  first_name,
  last_name,
  phone
FROM
  sales.customers
ORDER BY
  first_name DESC;

sql server 数据查询 sqlserver数据查询方法_sql server 数据查询_05

对多列结果排序

-- 对多列结果执行排序
SELECT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  city ASC,
  first_name

排序的先后顺序很重要,排序的先后顺序会影响查询的结果

按多列和不同顺序对结果集进行排序

-- 对多列结果执行排序
SELECT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  city ASC,
  first_name DESC

按len()表达式对字符串长度进行排序

-- 按字符串长度进行排序
SELECT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  Len(first_name) ASC

使用到了len()函数,可以计算字符串的长度

-- 按表达式结果集进行排序
SELECT
  first_name,
  len(last_name) as len_name, -- len_name会代替last_name字段,显示last_name字段的字符串长度
  city
FROM
  sales.customers
ORDER BY
  Len(first_name) ASC

len(last_name) as len_name,as后面的字段会代替前面的字段

按不在选择列表中的列对结果集进行排序

请注意, state 列在 customers 表中定义。 如果不是,那么查询将无效。

可以通过选择列表中未显示的列对结果集进行排序

-- 按不在选择列表中的列对结果集进行排序
SELECT
first_name,
last_name,
 city
FROM
  sales.customers
ORDER BY
  state -- state 是目前没有查询到列集上面的

按列表的序数位置进行排序

SQL Server允许根据选择列表中显示的列的序号位置对结果集进行排序。

以下语句按名字和姓氏对客户进行排序。 但是它没有显式指定列名,而是使用列的序号位置:

-- 按列表的序数位置进行排序
SELECT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  3,1;

限制返回行数

SELECT TOP 子句用于限制查询结果集中返回的行数或行百分比。

由于存储在表中的行的顺序是不可预测的,因此 SELECT TOP 语句始终与 ORDER BY 子句一起使用。 结果,结果集限于前 N 个有序行数

-- 限制返回行数 select top (现在行数)
SELECT
  TOP 10 first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  3,
  1;

使用PERCENT对数据按照比例返回

-- 限制返回行数 select top (现在行数) [PERCENT] 百分比利进行查询
SELECT
  TOP 10 PERCENT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  3,
  1;

在使用TOP 10 PERCENT查询的时候,最好不要吧ORDER BY去掉,最好要有自己的排序规则

使用TOP WITH TIES 与最后一行中的值匹配的行

-- 使用TOP WITH TIES与最后一行中的值匹配的行:
SELECT
  TOP 10 WITH ties -- WITH ties会将最后一行数据的排序数据再去查询相同的,返回的结果可能就不会是我们写的10行了
  product_name,list_price
FROM
  production.products
ORDER BY
  list_price

在平常的报表或者统计数据中会使用到

限制查询返回的行数【分页查询】

OFFSET 和 FETCH 子句是 ORDER BY 子句的选项。 它们用于限制查询返回的行数。必须将 OFFSET 和 FETCH 子句与 ORDER BY 子句一起使用

OFFSET 和 FETCH 子句比实现 TOP 子句更适合实现查询分页解决方案

-- 限制查询返回的行数【分页查询】
SELECT
  product_id,
  product_name,
  list_price
FROM
  production.products
ORDER BY
  product_id OFFSET 0 ROWS -- 跳过0行
FETCH NEXT
  10 ROWS ONLY;-- 匹配到10行
  
SELECT
  product_id,
  product_name,
  list_price
FROM
  production.products
ORDER BY
  product_id OFFSET 10 ROWS -- 跳过10行 从11行开始
FETCH NEXT
  10 ROWS ONLY;-- 匹配到10行
  
-- 套公式计算第几页的查询数据【查询第四页】
SELECT
  product_id,
  product_name,
  list_price
FROM
  production.products
ORDER BY
  product_id OFFSET (5 -1) * 10 ROWS -- 跳过40行 从41行开始
FETCH NEXT
  10 ROWS ONLY;-- 匹配到10行

笔记的所有语句

-- 知识回顾,复习模拟昨天的查询全部字段、指定字段、排序、倒序

-- 查询表的所有字段
Select * From sales.customers

-- 查询指定的字段
Select first_name,last_name,email
From sales.customers

-- 对查询的姓名字段进行排序【从A开始】
Select first_name,last_name,email
From sales.customers
Order by first_name ASC

-- 对查询的姓名字段进行倒序【从凤凰ld开始】
Select first_name,last_name,email
From sales.customers
Order by first_name DESC

-- 对多列结果执行排序
Select first_name,last_name,city
From sales.customers
Order by city ASC,first_name

-- 按多列和不同顺序对结果集进行排序
Select first_name,last_name,city
From sales.customers
Order by city ASC,first_name desc

-- 按字符串长度进行排序
SELECT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  Len(first_name) ASC

 -- 按不在选择列表中的列对结果集进行排序
SELECT
first_name,
last_name,
 city
FROM
  sales.customers
ORDER BY
  state -- state 是目前没有查询到列集上面的

-- 按表达式结果集进行排序
SELECT
  first_name,
  len(last_name) as len_name, -- len_name会代替last_name字段,显示last_name字段的字符串长度
  city
FROM
  sales.customers
ORDER BY
  Len(first_name) ASC

-- 按列表的序数位置进行排序
SELECT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  3,1;

-- 限制返回行数 select top (现在行数)
SELECT
  TOP 10 first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  3,
  1;

-- 限制返回行数 select top (现在行数) [PERCENT] 百分比利进行查询
SELECT
  TOP 10 PERCENT
  first_name,
  last_name,
  city
FROM
  sales.customers
ORDER BY
  3,
  1;

-- 使用TOP WITH TIES与最后一行中的值匹配的行:
SELECT
  TOP 10 WITH ties -- WITH ties会将最后一行数据的排序数据再去查询相同的,返回的结果可能就不会是我们写的10行了
  product_name,list_price
FROM
  production.products
ORDER BY
  list_price

-- 限制查询返回的行数【分页查询】
SELECT
  product_id,product_name,list_price
FROM
  production.products
ORDER BY
  product_id
OFFSET 0 rows -- 跳过0行
FETCH NEXT 10 ROWS ONLY; -- 匹配到10行

SELECT
  product_id,product_name,list_price
FROM
  production.products
ORDER BY
  product_id
OFFSET 10 rows -- 跳过10行 从11行开始
FETCH NEXT 10 ROWS ONLY; -- 匹配到10行

-- 套公式计算第几页的查询数据【查询第四页】
SELECT
  product_id,product_name,list_price
FROM
  production.products
ORDER BY
  product_id
OFFSET (5-1)*10 rows -- 跳过40行 从41行开始
FETCH NEXT 10 ROWS ONLY; -- 匹配到10行