Linux-MySQL数据库之高级SQL 语句一


实验环境准备

create table stu (id int,name varchar(10)primary key not null,score decimal(5,2),address varchar(20),hobbid int(5));

在这里插入图片描述

 insert into stu values(1,'zhao',100,'riben',2);
 insert into stu values(2,'qian',59.99,'taiguo',2);
 insert into stu values(3,'sun',75,'mianduan',3);
 insert into stu values(4,'li',99,'ouzhou',4);
 insert into stu values(5,'zhou',10,'huisuo',5);
 insert into stu values(6,'wu',11,'nanjin',3);
 insert into stu values(7,'zheng',80,'cv',3);
 insert into stu values(8,'wang',88,'cv',7);

在这里插入图片描述

在这里插入图片描述

一、order by语句

(增、删、改、查)
对MysQL数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。例如只取10条数据、对查询结果进行排序或分组等等。

按关键字排序
PS:类比于windows任务管理器,使用SELECT语句可以将需要的数据从MySQL数据库中查询出来,如果对查询的结果进行排序,可以使用ORDER BY语句来对语句实现排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以针对多个字段

语法

SELECT column1,column2,... FROM table_name ORDER BY column1,column2,...
---- ORDER BY ----按关键字排序
语法:SELECT "栏位" FROM "表名" [WHERE "条件"] ORDER BY "栏位" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。

1、单个字段排序

order by还可以结合where进行条件过滤,筛选地址是cv的学生按分数降序排列

在这里插入图片描述

2、多个字段排序

语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,ORDER BY
后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定但order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义。

查询学生信息先按兴趣id降序排列,相同分数的,id也按降序排列

在这里插入图片描述
查询学生信息先按兴趣id降序排列,相同分数的, id按升序排列

在这里插入图片描述

二、升序与降序(ASC和DESC)

ASC:
是按照升序进行排序的,是默认的排序方式,即ASC可以省略。SELECT语句中如果没有指定具体的排序方式,则默认按ASC方式进行排序。
在这里插入图片描述

DESC:
是按降序方式进行排列。当然 ORDER BY前面也可以使用WHERE子句对查询结果进一步过滤。
在这里插入图片描述

三、select查询

---- SELECT ----显示表格中一个或数个栏位的所有资料
语法:SELECT "栏位" FROM "表名";

1、查看所有

在这里插入图片描述

2、查看部分字段

在这里插入图片描述

四、and/or-且/或

---- AND OR ----且 或
语法:SELECT "栏位" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;

1、and

在这里插入图片描述

2、or

在这里插入图片描述

3、嵌套/多条件

在这里插入图片描述

五、distinct(查询不重复记录)

---- DISTINCT ----不显示重复的资料
语法:SELECT DISTINCT "栏位" FROM "表名";
SELECT DISTINCT Store_Name FROM Store_Info;

在这里插入图片描述

六、where

--- WHERE ----有条件查询
语法:SELECT "栏位" FROM "表名" WHERE "条件";

在这里插入图片描述

七、group by(对结果进行分组)

通过SQL查询出来的结果,还可以对共进行分组,使用GROUP BY 语句来实现,GROUP BY通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数( COUNT) 、求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY分组的时候可以按一个或多个字段对结果进行分组处理。
语法

SELECT column_name,aggregate_function (column_name)FROM table_name WHERE column_nameoperator valueGROUP BY column name;
---- GROUP BY ----对GROUP BY后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用的
GROUP BY 有一个原则,就是 SELECT 后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面。

语法:SELECT "栏位1", SUM("栏位2") FROM "表名" GROUP BY "栏位1";

1、按hobbid相同的分组,计算相同分数的学生个数(基于name个数进行计数)
在这里插入图片描述
2、结合where语句,筛选分数大于等于80的分组,计算学生个数

在这里插入图片描述

3、结合order by把计算出的学生个数按升序排列

全班同学成绩表count (name) :
计数score分数:
score>=80 :优秀
score >=60 and score <80 :优-

select count(name),score,hobbid from stu where score >=80 group by  hobbid ;

select count(name),score,hobbid from stu where score  >= 80 group by hobbid order by count(name) asc;

在这里插入图片描述
在这里插入图片描述

select count(name),score from stu where score > 80 group by score;

在这里插入图片描述

八、limit

限制结果条目( limit )
limit限制输出的结果记录
在使用MySQL SELECT语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅需要返回第一行或者前几行,这时候就需要用到LIMIT子句。

语法

SELECT column1,column2,... FROM table_name LIMIT [offset, ] number

LIMIT的第一个参数是位置偏移量(可选参数),是设置 MysQL从哪一行开始显示。如果不设定第一个参数,将会从表中的第一条记录开始显示。需要注意的是,第一条记录的位置偏移量是0,第二条是1,以此类推。第二:个参数是设置返回记录行的最大数目。

查询所有信息显示前4行记录

在这里插入图片描述
结合order by语句,按id的大小升序排列显示前三行

在这里插入图片描述

基础select 小的升阶怎么输出最后三行

在这里插入图片描述

九、alias(设置别名)

设置别名( alias ——》as )
在MysQL查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者
多次使用相同的表,"可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性
语法

对于列的别名:SELECT column_name AS alias_name FROM table_name;
对于表的别名:SELECT column_name (s)FROM table_name As alias_name;

在使用AS 后,可以用alias_name代替table_name,其中 AS语句是可选的。AS之后的别名,主要是为表内的列或者表提供临时的名称,在查而过程中使用,库内实际的表名或宁段名是不会被改变的

列别名设置示例:
select name as 姓名,score as 成绩from stu;
如果表的长度比较长,可以使用as 给表设置别名,在查询的过程中直接使用别名临时设置stu的别名为i
select i.name as 姓名,i.score as 成绩from stu as i;

查询stu表的记录数量,以number显示
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
使用场景:
对复杂的表进行查询的时候,别名可以缩短查询语句的长度2、多表相连查询的时候(通俗易懂、i减短sql语句)
此外,as还可以作为连接语句的操作符。
创建t1表,将stu表的查询记录全部插入t1表

create table t1 as select * from stu;
select * from t1

在这里插入图片描述

#此处As起到的作用:
创建了一个新表t1并定义表结构,插入表数据(与info表相同)2、但是"约束"没有被完全"复制“过来
#但是如果原表设置了主键,那么附表的: default字段会默认设置一个0相似:
克隆、复制表结构
create table t1 (select * from info);
#也可以加入where语句判断
create table test1 as select * from info where score >=60;
在为表设置别名时,要保证别名不能与数据库中的其他表的名称冲突。
列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值