Mysql 单表查询

简单查询

SELECT *FROM 表名 表的别名 ; (表的别名可加可不加)

演示:

#查询所有学生#

SELECT *FROM student;

或 SELECT *FROM student;

查询指定数据

多个数据之间以逗号分隔

SELECT 字段名1,字段名2..FROM 表名;

演示:

#查询学生的姓名和年龄#

SELECT name,age FORM student;

指定列的别名进行查询

使用别名的好处,显示的时候使用新的名字,并不修改表的结构。

SELECT  字段名 1 AS  别名,  字段名 2 AS  别名... FROM  表名;

as可以省略

对表和列同时指定别名

SELECT 字段名1 AS 别名 ,字段名2 AS别名..FROM 表名 AS 别名

# 使用别名

select name as 名字 , age as 年龄 from student;

# 表使用别名

select s.name as 名字 , s.age as 年龄 from student as s;

 清除重复值:

查询指定列且结果不出现重复数据:

SELECT DISTINCT  字段名 FROM   表名;

演示:

# 查询stu表中的性别

select sex from stu;

# 去掉重复的记录

select distinct sex from stu;

 查询结果参与运算

SELECT 列名1+数值 FROM 表名;

SELECT  列名1+列名2  FROM 表名;

列名的数据类型必须是数值类型,若参与运算的不是数值,则新增列名以相加以后的字符串命名

//准备数据:添加数学,中文成绩列,给每条记录添加对应的数学和中文成绩,查询的时候将数学和中文的成绩相加
# 查询所有人的数学成绩,以及数学+5分的结果
select math , math+5 from stu;
# 查询数学和中文的和
select * , math+chinese as 总成绩 from stu;
# as 可以省略
select * , math+chinese  总成绩 from stu;

判断

IFNULL( 列名,默认值) 如果列名不为null,返回这列的值。如果为 NULL,则返回默认值

条件查询

SELECT 字段名 FROM 表名  WHERE 条件语句;

可以用比较运算符:> 、< 、<= 、>= 、= 、<> ,  !=

  • 还有BETWEEN...AND,表示查询的值在某个范围,例如:

#从emp表中查询deptno为10-30的员工的姓名#

SELECT ename from emp WHERE deptno BETWEEN 10 AND 30;

 注意:这样查询只显示ename这一列 

 

这样查询的是表中所有符合deptno在10-30之间的数据

SELECT * from emp WHERE deptno BETWEEN 10 AND 30;

  • 若想查询deptno既等于30又等于10的数据

SELECT * from emp WHERE deptno in(10,30); 

  • 查询不等于10和30在in 前面加not即可。 

 

 

  •  查询comm为null的数据不能用comm=null,否则就是

null有两种含义

  1. null代表什么都没存,内存中没有这个东西。
  2. null代表一个值,这个值为空值,但在内存中可以找到。

comm=null就代表这个值是个空值,他代表的是一个值。

  • 用comm is null 来查询comm为null的情况

SELECT*  from emp WHERE comm is NULL

 

  •  模糊查询

SELECT *FROM 表名 where 字段名 like ..

LIKE 通配符:

“%”:匹配任意多个字符串

“—”:匹配一个字符

演示:#查询mgr中最后一位是6的数据#

SELECT*  from emp WHERE mgr LIKE "%6";

%代表6前面的多个字符 

 

 #查询mgr中第三位是6的数据#

SELECT*  from emp WHERE mgr LIKE "__6%";

SELECT*  from emp WHERE mgr LIKE "__6_";

 排序

SELECT *FROM 表名 ORDER BY 字段名 (ASC||DESC)

默认asc(升序),可以不加 

  • 若条件查询和排序同时运用,先进行条件查询后进行排序。

聚合函数

SQL中的聚合函数

作用

max( 列名)  

求这一列的最大值

min( 列名)  

求这一列的最小值

avg( 列名)  

求这一列的平均值

count( 列名)  

统计这一列有多少条记录

sum( 列名)  

对这一列求总和

演示:

SELECT MAX(sal)  from emp 

 

若想知道sal为最大值时的ename,不能直接写成SELECT MAX(sal),ename  from emp 

这样只会查询的是第一个ename

要写成SELECT ename from emp WHERE sal=(SELECT MAX(sal) FROM emp)

 后面的条件语句不能直接写聚合函数,但是可以“套娃”

分组 

分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组

SELECT  字段 1, 字段 2... FROM  表名 GROUP BY  分组字段 [HAVING 条件];

GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。

分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

having 与where的区别:

子名

作用

where  子句

1) 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤再分组。

2) where 后面不可以使用聚合函数

having  子句  

1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。

2) having 后面可以使用聚合函数

分页limit语句

LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数。

SELECT *| 字段列表 [as  别名] FROM  表名 [WHERE  子句] [GROUP BY  子句][HAVING  子句][ORDER BY  子句][LIMIT子句];

LIMIT offset,length;

offset :起始行数,从 0  开始计数,如果省略,默认就是 0

length : 返回的行数(记录数

-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。

select * from student3 limit 2,6;

 

-- 如果第一个参数是 0 可以省略写:

select * from student3 limit 5;

-- 最后如果不够 5 条,有多少显示多少

select * from student3 limit 10,5;

 起始行数=(当前页-1)*记录数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值