您的位置:首页 > 博客中心 > 数据库 >

SQL总结(一)基本查询

时间:2022-03-15 10:33

SQL总结(一)基本查询

 SQL查询的事情很简单,但是常常因为很简单的事情而出错。遇到一些比较复杂的查询我们更是忘记了SQL查询的基本语法。

本文希望通过简单的总结,把常用的查询方法予以总结,希望能够明确在心。

场景:学生信息系统,包括学生信息、教师信息、专业信息和选课信息。

gxlsystem.com,布布扣

 

1、基本查询

从表中查询某些列的值,这是最基本的查询语句。

SELECT 列名1,列名2 FROM 表名

 

2、Where(条件)

作用:按照一定的条件查询数据

语法:

SELECT 列名1,列名2 FROM 表名 WHERE 列名1 运算符  值

运算符:

运算符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

比较操作符都比较简单,不再赘述。关于BETWEEN和LIKE,专门拿出来重点说下

3、BETWEEN

在两个值之间,比如我从学生中查询年龄在18-20之间的学生信息

SELECT ID,Name,Age FROM Students WHERE Age BETWEEN 18 AND 20

 

4、LIKE

作用:模糊查询。LIKE关键字与通配符一起使用

主要的通配符:

通配符

描述

%

替代一个或多个字符

_

仅替代一个字符

[charlist]

字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

实例:

1)查询姓氏为张的学生信息

SELECT ID,Name FROM Students WHERE Name LIKE ‘张%‘

 2)查询名字最后一个为“生”的同学

SELECT ID,Name FROM Students WHERE Name LIKE ‘%生‘

3)查询名字中含有“生”的学生信息

SELECT ID,Name FROM Students WHERE Name LIKE ‘%生%‘

4)查询姓名为两个字,且姓张学生信息

SELECT ID,Name FROM Students WHERE Name LIKE ‘张_‘

5)查询姓氏为张、李的学生信息

这个可以使用or关键字,但是使用通配符更简单高效

SELECT ID,Name FROM Students WHERE Name LIKE ‘[张李]%‘

6)查询姓氏非张、李的学生信息

这个也可以使用NOT LIKE 来实现,用下面方法更好。

SELECT ID,Name FROM Students WHERE Name LIKE ‘[^张李]%‘

或者:

SELECT ID,Name FROM Students WHERE Name LIKE ‘[!张李]%‘

 

 

5、AND

AND 在 WHERE 子语句中把两个或多个条件结合起来。表示和的意思,多个条件都成立。

1)查询年龄大于18且姓张的学生信息

SELECT ID,Name FROM Students WHERE Age>18 AND Name LIKE ‘张%‘

 

6、OR 

 OR可在 WHERE 子语句中把两个或多个条件结合起来。或关系,表示多个条件,只有一个符合即可。

1)查询姓氏为张、李的学生信息

SELECT ID,Name FROM Students WHERE Name LIKE ‘张%‘ OR Name LIKE ‘李%‘

 

 7、IN

IN 操作符允许我们在 WHERE 子句中规定多个值。表示:在哪些值当中。

1)查询年龄是18、19、20的学生信息

SELECT ID,Name FROM Students WHERE Age IN (18,19,20)

 

8、NOT 否定

NOT对于条件的否定,取非。

1)查询非张姓氏的学习信息

SELECT ID,Name FROM Students WHERE Name NOT LIKE ‘张%‘

 

9、ORDER BY(排序)

功能:对需要查询后的结果集进行排序

标识 含义 说明
ASC 升序 默认
DESC 倒序  

 

实例:

1)查询学生信息表的学号、姓名、年龄,并按Age升序排列

SELECT ID,Name,Age FROM Students ORDER BY Age

或指明ASC

SELECT ID,Name,Age FROM Students ORDER BY Age ASC

2)查询学生信息,并按Age倒序排列

SELECT ID,Name,Age FROM Students ORDER BY Age DESC

 

除了制定某个列排序外,还能指定多列排序,每个排序字段可以制定排序规则

说明:优先第一列排序,如果第一列相同,则按照第二列排序规则执行,以此类推。

3)查询学生的信息,按照总成绩倒序、学号升序排列

SELECT ID,Name,Score FROM Students ORDER BY Score DESC,ID ASC

这个查询含义:首先按Score倒序排列,如果有多条记录Score相同,再按ID升序排列。

查询结果,例子:

ID

Name

Score

2

广坤

98

3

老七

98

1

赵四

79

 10、AS(Alias)

可以为列名称和表名称指定别名(Alias)

作用:我们可以将查询的列,或者表指定需要的名字,如表名太长,用其简称,在连表查询中经常用到。

1) 将结果列改为需要的名称

SELECT ID AS StudentID,Name AS StudentName FROM Students

2)用表名的别名,标识列的来源

SELECT S.ID,S.Name,M.Name AS MajorName 
FROM Students AS S 
LEFT JOIN Majors AS M
ON S.MajorID = M.ID

3)在合计函数中,给合计结果命名

SELECT COUNT(ID) AS StudentCount FROM Students

 

 

11、Distinct

含义:不同的

作用:查询时忽略重复值。

语法:

SELECT DISTINCT 列名称 FROM 表名称

实例:

1)查询学生所在城市名,排除重复

SELECT DISTINCT City FROM Student

2)查询成绩分布分布情况

SELECT DISTINCT(Score),Count(ID) FROM Student GROUP BY Score

学生成绩可能重复,以此得到分数、得到这一成绩的学生数。后续会详细介绍GROUP BY 用法。  

 

成年 未成年 23 6

 

 

 

SQL语句

SELECT SUM(CASE WHEN Age>=18 THEN  1 ELSE 0 END) AS ‘成年‘,SUM(CASE WHEN Age<18 THEN  1 ELSE 0 END) AS ‘未成年‘
FROM Students

 4)行列转换。统计男女生中未成年、成年的人数

结果如下:

性别 未成年 成年
3 13
2 18

 

 

 

SQL语句:

SELECT CASE WHEN Sex=0 THEN ‘男‘ ELSE ‘女‘ END AS ‘性别‘,
SUM(CASE WHEN Age<18 THEN 1 ELSE 0 END) AS ‘未成年‘, 
SUM(CASE WHEN Age>=18 THEN 1 ELSE 0 END) AS ‘成年‘
FROM Students
GROUP BY Sex

 

SQL总结(一)基本查询,布布扣,bubuko.com

热门排行

今日推荐

热门手游