SQL基础——数据查询

本文详细介绍了SQL查询的基本语法,包括SELECT、FROM、WHERE、GROUP BY和ORDER BY子句的使用,以及如何进行条件查询、分组统计、排序和连接查询。还涉及了聚合函数如MAX、MIN、COUNT、SUM和AVG的应用,以及如何插入、更新和删除数据。此外,还讲解了模糊查询和联合查询的操作。内容涵盖了基础查询、数据操作和高级查询技巧。
摘要由CSDN通过智能技术生成

基础查询语法格式

USE 数据库 指定在哪个数据库执行脚本
SELECT [ALL| TOP(N) | DISTINCT] <目标列表达式> [,<目标列表达式>] …
FROM <表名或视图名> [, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC | DESC ] ]

(1)SELECT <目标列名表>,称为SELECT子句。用于指定整个查询结果表中包含的列。假定已经执行完FROM、WHERE、GROUP BY、HAVING子句,从概念上来说得到了一个表,若将该表称为T,从T表中选择SELECT子句指定的目标列即为整个查询的结果表。

(2)FROM <数据源表>,称为FROM子句。用于指定整个查询语句用到的一个或多个基本表或视图,是整个查询语句的数据来源,通常称为数据源表。

(3)WHERE <查询条件>,称为WHERE子句。用于指定多个数据源表的连接条件和单个源表中行的筛选或选择条件。如果只有一个源表,则没有表间的连接条件,只有行的筛选条件

(4)GROUP BY <分组列>,称为GROUP BY子句。假定已经执行完FROM、WHERE子句,则从概念上来说得到了一个表,若将该表称为T1表,则GROUP BY用于指定T1表按哪些列(称为分组列)进行分组,对每一个分组进行运算,产生一行。

(5)ORDER BY <排序列>,称为ORDER BY子句。若有ORDER BY子句,则用于指定查询结果表T中按指定列进行升序或降序排序(默认情况下按升序排列),得到整个查询的结果表。

通用的查询方式

查询用户表全部的行和列
SELECT * FROM USER
–代码说明:查询USER表中的所有数据列,得到的数据集可能极其庞大,因此不太常用

查询用户表全部的行和列
SELECT top 1 * FROM USER
–代码说明:查询USER表中的头一条数据

查询用户表全部的行和列
SELECT DISTINCT NAME FROM USER
–代码说明:查询USER表中的数据,并根据NAME 去重

WHERE指定条件查询方式

查询名字叫张三的用户信息
SELECT * FROM USER WHERE NAME=‘张三’
查询除了叫张三的所有用户信息
SELECT * FROM USER WHERE NAME <> ‘张三’
WHERE语句的使用方法
where语句是一个条件判断语句,只会对满足where语句条件的数据进行数据操作
(1)、单关系条件的where语句
常在where语句中使用条件判断符号:<(小于)、>(大于)、(>=)不小于、(<=)不大于、=(等于)、(!=、<>)(不等于)
空值条件判断使用 IS NULL 或 IS NOT NULL

(2)、多关系条件的where语句
1)常在where中使用到的逻辑符号:AND、OR、NOT
between…and…条件判断使用between and 语句执行的效率要优于实现相同功能的逻辑条件语句
属性域的判断条件IN关键字指定属性的值域
示例:
SELECT TOP 1000 * FROM Grade_Table WHERE fraction< 60
GO
–代码说明:查询表中成绩小于60的记录
SELECT TOP 1000 * FROM Grade_Table WHERE fraction> 60
GO
–代码说明:查询表中成绩大于60的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction<= 60
GO
–代码说明:查询成绩小于等于60的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction>= 60
GO
–代码说明:查询成绩大于等于60的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction= 100
GO
–代码说明:查询成绩等于100的记录
SELECT TOP 1000 * FROM Grade_Table WHERE fraction<> 60
GO
–代码说明:查询成绩不等于60的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction!= 60
GO
–代码说明:查询成绩不等于60的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction IS NULL
GO
–代码说明:查询表中成绩为NULL的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction IS NOT NULL
GO
–代码说明:查询成绩不为NULL的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction<> 60 AND GNAME= ‘语文’
GO
–代码说明:查询表中成绩不为60并且科目为语文的记录
SELECT TOP 1000 * FROM Grade_Table WHERE fraction<> 60 OR GNAME= ‘语文’
GO
–代码说明:查询表中成绩不为60或者科目为语文的记录

SELECT TOP 1000 * FROM Grade_Table WHERE not fraction= 60
GO
–代码说明:查询成绩表中成绩不满足成绩为60的记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction BETWEEN 60 AND 100
GO
–代码说明:查询成绩表中分数在60-100之间(包含60和100)分数记录

SELECT TOP 1000 * FROM Grade_Table WHERE fraction IN (65,75,85)
GO
–代码说明:查询成绩表中分数为65或75或85的分数记录
–注:域值的数据类型必须与属性的数据类型一致
–关系判断条件默认将会自动屏蔽掉查询条件值为NULL的数据信息

有序查询方式

SELECT GNAME,fraction FROM Grade_Table WHERE fraction <> 0 ORDER BY fraction
GO
–代码说明:将查询到的成绩记录表按分数默认排序规则进行排序(正序)

SELECT GNAME,fraction FROM Grade_Table WHERE fraction <> 0 ORDER BY fraction DESC
GO
–代码说明:将查询到的成绩记录表按分数倒序规则进行排序

SELECT GNAME,fraction FROM Grade_Table WHERE fraction <> 100 ORDER BY fraction ASC
–代码说明:将查询到的成绩记录表按成绩正序规则进行排序

模糊查询方式

模糊查询就是查询的条件和查询的结果可以不完全匹配常使用的通配符:
_ 表示一个占位符,可以任何字符
% 表示零个或多个占位符,可以是任何字符
[] 表示只要满足中括号内一个字符就可以
[^] 表示不包含中括号内的任意一个字符
示例:
SELECT TOP 100 * FROM USER WHERE StudentID LIKE ‘%10%’
GO
–代码说明:查询用户表中学号中含有10的学生档案

SELECT TOP 100 * FROM USER WHERE StudentID LIKE ‘00850_’
GO
–代码说明:查询学生表中学号以00850开头的学生档案

SELECT TOP 100 * FROM USER WHERE StudentID LIKE ‘10010[1-2]’
GO
–代码说明:查询学生表中学号为100101或100102的学生档案

SELECT TOP 100 * FROM USER WHERE StudentID LIKE ‘10010[^1-2]’
GO
–代码说明:查询学生数据表中学号不为10010或10010的
–注意:
–当查询的数据中含有通配符时怎么处理?
– 查询 StudentID 列包含 “0_3”的数据 (可以使用转义字符)
select TOP 100 * from USER wher StudentID like ’ %0_3% ’ escape ’ \ ’

别名查询

为查询列定义别名的方式:
–方式一:
SELECT TOP 100 SEXID AS 性别 FROM user
–方式二:
SELECT TOP 100 SEXID 性别 FROM USER
–方式三:
SELECT TOP 100 性别=SEXID FROM USER

分组过滤查询方式

分组查询统计的方式:
SELECT SEXID,AVG(B.fraction ) as 平均成绩 FROM USER A LEFT JOIN Grade_Table B ON A.FID=B,MINFID GROUP BY A.SEXID
GO
–代码说明:根据性别ID进行分组,统计男女成绩的平均值

使用having语句来过滤不符合条件的分组信息
SELECT SEXID AS 性别,AVG(fraction ) AS 平均成绩
FROM USER A LEFT JOIN Grade_Table B ON A.FID=B.MINFID
GROUP BY A.SEXID HAVING A.SEXID <> ‘’
GO
–代码说明:先按性别对种猪进行分组,剔除性别为’'的分组,最后求各个分组出生胎次的平均值
–注意:
–1、where子句用在from语句后,having子句用在group by语句后;where语句是对整个表进行筛选,而having是对分组进行筛选
–2、必须在group by子句中列出select查询字段中所有的非集合字段

常使用的聚合函数

–聚合函数:
–经常使用的聚合函数有:
–MAX():得到数据中的最大值;
–MIN():得到数据中的最小值
–COUNT():得到数据的条数
–SUM():得到整性数据的和(必须为整形)
–AVG():得到数值类型数据的平均数
–示例代码:
SELECT MAX(fraction ) AS 最大值 FROM Grade_Table

SELECT MIN(fraction ) AS 最小值 FROM Grade_Table

SELECT COUNT(*) AS 总数 FROM Grade_Table

SELECT SUM(fraction ) AS 求和 FROM Grade_Table

SELECT AVG(fraction ) AS 求平均 FROM Grade_Table
–注意:
–1、在MIN() MAX() AVG() SUN 中会自动屏蔽掉NULL值,,但是在COUNT()中不会屏蔽掉NULL

连接查询方式

当两个或多个表中的数据存在联系时
对数据的查询操作可能需要将两个数据表根据外键关系连接起来再进行查询操作
–方式一:在where语句中通过外键将两个数据表连接起来
SELECT TOP 100
A.NAME, --姓名
B.GNAME,–科目名
A.SEXID,–性别
B.fraction --成绩
FROM USER A,Grade_Table B
WHERE A.FID = B.MAINID
GO
–USER 用户信息表
–Grade_Table 成绩表
–代码说明:where子句执行之后,将USER ,Grade_Table 这两个数据表连接依据外键关系进行连接操作,创建一个新的临时表(含有两个个表所有信息)
–from子句指定查询数据所在的数据表
–select子句将要查询展示的列名,当列名在多个表中都存在时,必须要指定查询哪个表中的列(若为某个表所特有的可以不加)

–方式二:使用JOIN子句进行连接查询
SELECT TOP 100
A.NAME, --姓名
B.GNAME,–科目名
A.SEXID,–性别
B.fraction --成绩
FROM USER A
JOIN Grade_Table B ON A.FID = B.MAINID
GO
–代码说明:SELECT子句指示将要显示的信息
–from子句要进行连接的一个子表
–(inner)join子句进行两个表之间的连接只有满足条件的记录才会被保留
–注:1、使用JOIN子句进行数据表的连接时,一次只能连接两张表
– 2、INNER JOIN子句:内连接,只有满足条件的记录才会被保留
– LEFT JOIN子句:左连接,保留左表中的全部数据记录
– RIGHT JOIN子句:右连接,保留右表中的全部数据记录
– FULL JOIN子句:全连接 会从左表 和右表那里返回所有的行

联合查询方式

SELECT [LOGIN], [NAME]
FROM USER
UNION ALL
SELECT [LOGIN], [NAME]
FROM USER2
ORDER BY [LOGIN]
GO
–代码说明:select子句查询表的数据信息
– union子句进行结果的联合,(ALL显示全部的信息,默认是去除重复记录)

–注:连接两个结果集的条件
–1.两个集合必须具有相同的列数
–2.列具有相同的数据类型(至少能隐式转换的)
–3.最终输出的集合的列名由第一个集合的列名来确定
–4.使用的默认的排序规则对得到的结果进行排序(若要手动进行排序则将order by子句写入第二个select子句中)

表新增数据

INSERT INTO A_DETAIL_copy1 (NEWID,OID) VALUES (111111,11112)
GO
–代码说明:根据列和值往表里插入数据

表记录更新

UPDATE USER SET AGE= ‘25’ WHERE NAME= ‘李四’
GO
–代码说明:更新表USER ,将NAME为李四的字段AGE设置为张三

删除数据:

DELETE FROM USER WHERE NAME= ‘张三’
GO
–代码说明:根据WHERE条件,将表对应的记录删除掉
DROP TABLE USER
GO
–代码说明:直接将整个表删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值