搜 索

数据查询select语句的使用

  • 310阅读
  • 2022年01月24日
  • 0评论
首页 / 技术教程 / 正文

单表查询

语法结构:select 字段名称 from 表名称
如果要查询表的所有字段,直接使用
select from 表名
即可
例:查询用户表user的所有信息
Select * from user

带有条件筛选的单表查询

在select查询语句的最后加上一条where语句进行数据的进一步过滤
语法结构:where 字段1 表达式符号 相应条件值
例:查询姓名为1的用户信息
Select * from user where trueName='1'
“1”为一个字符串,因此要加上单引号,在数据库查询语句中,如果字段类型为字符串类型(例如char、varchar、nchar、nvarchar、text等)就要在查询和录入的时候加上相应的单引号‘ ’

多表查询

我们很多时候往往要多个表的数据举行查询,因为根据关系型数据库设计的特点,我们需要的各个字段的数据往往分布于各个不同的数据表内。虽然在数据库中我们也可以采用where语句进行关键表的字段,但是这样做有很多弊端:一是条件语句不清晰,二是查询效率降低。因此,我们引出了join这个关键词
Join有三种类型:
left join 左连接 (默认的join就是left join)
right join 右连接
inner join 内连接
语法结构:
Select * from 表1 left/right/inner join 表2 on 表1.字段=表2.字段
例:关联用户表和新闻表,关联字段为userid
Select * from user left join news on user.userid= news. userid
当然,我们也可以采用给表取别名的方式关联
Select * from user a left join news b on a.userid= b. userid
在使用join关键词进行关联的时候,一定要注意的是主表是哪个,这个跟现实结果记录数有关系以下简单说明一下:
A left join B 就是A为主表
A right join B 就是B为主表
A inner join B 就是取两张表的公共部分
副表在这里只是根据关键词对主表进行匹配,可能会被多次匹配,这要看数据表设计时的表关系

过滤相同列数据

如果我们得到的查询结果中有相同的数据行,我们可以通过distinct关键词进行过滤
语法结构:select distinct 字段 from 表
只需要在查询select关键词后加上distinct关键词即可
例:查询用户表一共有哪些用户昵称
Select distinct nickname from user

数据排序

我们很多时候都是要将查询后的数据进行排序的,按照我们查询的指定字段为主关键词和次要关键词进行排序,这个时候,我们需要使用order by这个重要关键词。这个关键词往往用在查询语句的最后
Order by 往往结合asc和desc这两个关键词,其中asc表示升序,desc表示降序
语法结构:
Select 字段 from 表 『where语句』 order by 字段1 asc/desc, 字段2 asc/desc...
例:查询用户表所有信息,并按照用户编号进行升序排序
Select * from user order by userid asc
我们也可以省略asc关键词,因为order by 默认是以升序作为排序规则的。所以这个语句我们也可以写成:
Select * from user order by userid

数据记录显示

我们使用数据库的人中,大部分都是做软件开发的,因此limit这个关键词就非常实用了,因为我们可以结合这个关键词,为我们的软件查询出来的数据记录结果做一个分页功能。limit这个关键词往往用在查询语句的最后
语法结构:
Select 字段 from 表 [where语句] [order by语句] [limit语句]
例:获取用户表的前十条记录
Select * from user limit 10
获取用户表的第11~20条记录
Select * from user limit 10,20

聚合函数

sum函数用来求和,count函数用来统计数据记录数。但要注意,聚合函数会自动忽略类型值为null的记录
求和函数sum用于统计数值类字段。使用时配合select语句。函数参数传入字段名,格式sum(字段名称)
例:统计某学生各科总成绩
select stuname,sum(score) from student_score
这里的stuname是学生姓名,score是指各科目对应的成绩字段,student_score是学生各科成绩表

数据分组

group by的意思就是根据哪些字段进行分组,这里注意,后面接的第一个字段是主要关键词,其它的依次都是次要关键词
分组的数据一般都是where语句筛选后的最终数据,再进行依次筛选,这样的好处是可以减少分组的数据,以进一步提高数据库性能
语法结构:group by 字段1,字段2,字段3
语句所在sql中的位置:
select 字段 from 表 [where语句] [group by语句]
一般来说,group by后面接几个字段,在select中就会列出几个字段。分组最终的目的是为了统计数据,比如对每一个学生的各科成绩求和
例:统计每个城市有多少人,我们可以从人口信息表中查询出要统计的数据结果
select city,count(*) from persons group by city
这里的persons是人口信息表,city是城市名称,count(*)表示统计记录数

分组后筛选数据

我们有时候常常还会将分组后的数据进行进一步过滤,那么,此时就要使用到having了
语句所在sql中的位置:
select 字段 from 表 [where语句] group by语句
having之后的字段表达式的用法类似于where语句​,唯一不同的就是having之后的筛选条件的字段是group by之后的​字段
​例:筛选出总成绩大于300分的学生(先用group by分组求出每个学生的总成绩,然后将分组后的​总成绩中筛选出成绩大于300的结果记录)
select stuname,sum(score) from student_score group by stuname having sum(score)>300
这里筛选的是总成绩这个字段,而这个字段的名称就是sum(score),因此在having中使用sum(score)作为字段名称

  • 4

    标签总数

  • 13

    文章总数

  • 14,314

    访客总数

  • 126

    评论总数

  • 0

    稳定运行

欢迎访问轮回博客,喜欢本站的记得收藏一下哦~

By:轮回


评论区
暂无评论
avatar