mysql 常量查询_MySQL查询

DQL 操作

DQL 数据查询语言(重要)

数据库执行DQL语句不会对数据做出任何改变,而是让数据库发送结果集给客户端。

查询返回的结果是一张虚拟表。

查询关键字:SELECT      -- 查询:基于表中已经存在的数据,得到我们想要的数据

1基础查询:

SELECT  列名/字段名,...,  FROM  表名      -- 查询指定列

SELECT*FROM  表名         -- *表示表中所有字段

2条件查询:

条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

♦   =、!=、<>、、>=;

♦   BETWEEN...AND;

♦  IN(set);        -- 查询一定范围内的记录  如:SELECT*FROM stu WHERE id IN('1001','1002','1003');

♦  IS NULL / IS NOT NULL;

--查询年龄为NULL(空)的记录,NULL不是一个值,不能用=符号;  正确示例如:

SELECT*FROM stuWHERE age IS NULL;

♦   AND;

♦   OR;

♦   NOT;-- 查询排除一定范围内的其他记录  如: SELECT*FROM stu WHERE id NOT IN('1001','1002','1003');

查询性别为女,并且年龄25岁以下的记录:

SELECT*FROM stu

WHERE gender = 'fenmale' AND age<=25;

3模糊查询:

当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。

通配符:

_  任意一个字母    '张_'  -- 姓张,名字为两个字的所有人

% 任意0~n个字母      '张%'  -- 姓张的所有人

SELECT*FROM stu

WHERE NAME LIKE '____i';          -- 名字由5个字母构成,并且第五个字母必须为i的人

4字段控制查询:

4.1去除重复记录

去除重复记录(两行或两行以上的记录中的数据都相同),例如,在员工表emp中,sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,想去除重复记录,需要使用DISTINCT。

SELECT DISTINCT sal FROM emp;

SELECT DISTINCT 字段1,字段2  FROM emp;-- 滤除所指定的两个字段都重复的多余字段

4.2查看雇员的月薪与奖金之和

因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型的,那么会出错。任何类型的数据和NULL相加都是NULL。

SELECT  sal+comm FROM emp;

-- 如果comm为NULL,利用IFNULL()函数将comm赋0后再相加

SELECT  sal+IFNULL(comm,0) FROM emp;

-- 将求和后显示出的字段重命名为“总工资”,并与对应的姓名一起显示。AS可以省略。

SELECT  name,sal+IFNULL(comm,0) AS 总工资 FROM emp;

-- 同时给name一栏也个起别名

SELECT  name AS 姓名,sal+IFNULL(comm,0) AS 总工资  FROM  emp;

4.3查询时添加常量列

在查询stu表时添加一个班级列,内容为“java班”。

SELECT  id,NAME,age,gender,'java班' AS '班级'  FROM emp; -- 此处AS不可省略

5排序查询:

默认情况下按插入的先后顺序排序

5.1 查询所有学生记录,按年龄升序排列

SELECT*

FROM stu

ORDER BY age ASC;

或者

SELECT*

FROM stu

ORDER BY age;     -- 默认升序排序

5.2 查询所有学生记录,按年龄降序排列

SELECT*

FROM stu

ORDER BY age DESC , id ASC;      -- 主要条件和次要条件

6聚合查询(使用聚合函数的查询)

常用的聚合函数:sum()、avg()、max()、min()、count()

-- 需求:查询学生的servlet的总成绩

SELECT SUM(servlet) AS 'servlet的总成绩' FROM student;

-- 需求: 查询学生的servlet的平均分

SELECT AVG(servlet) AS 'servlet的平均分' FROM student;

-- 需求: 查询当前servlet最高分

SELECT MAX(servlet) AS '最高分' FROM student;

-- 需求: 查询最低分

SELECT MIN(servlet) AS '最低分' FROM student;

-- 需求: 统计当前有多少学生(count(字段))

SELECT COUNT(*) FROM student;             -- 统计每个字段的有效数目(不含NULL),取最大值。

SELECT COUNT(id) FROM student;

-- 注意:count()函数统计的数量不包含null的数据

-- 使用count统计表的记录数,要使用不包含null值的字段

7分页查询(limit 起始行,查询几行)

起始行从0开始

分页:当前是第几页  每页显示多少条

分页查询当前页的数据的sql: SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条;

-- 查询第1,2条记录(第1页的数据)

SELECT * FROM student LIMIT 0,2;

-- 查询第3,4条记录(第2页的数据)

SELECT * FROM student LIMIT 2,2;

-- 查询第5,6条记录(第3页的数据)

SELECT * FROM student LIMIT 4,2;

-- 查询第7,8条记录 (没有记录不显示)

SELECT * FROM student LIMIT 6,2;

8分组查询(group by)

-- 需求: 查询男女的人数

-- 1) 把学生按照性别分组(GROUP BY gender)

-- 2) 统计每组的人数(COUNT(*))

SELECT gender,COUNT(*) FROM student GROUP BY gender;

9分组查询后筛选

-- 需求: 查询总人数大于2的性别

-- 1) 查询男女的人数

-- 2)筛选出人数大于2的记录(having)

--- 注意: 分组之前条件使用where关键字,分组之后条件使用having关键字

数据表:

3f635cc3a80f8b240998120e023ce6bf.png

命令:SELECT gender,COUNT(*) FROM student GROUP BY gender;

结果:

4a8f0fabe679772f9a8adb5ff05161be.png

命令:

-- 在math大于70分的人中按性别分组查询

SELECT gender,COUNT(*) FROM student WHERE math>70 GROUP BY gender;

结果:

63a91795f0325722d807bf57108859b5.png

命令:

-- 查询出该组中所有人math分数大于70,且人数大于2人的gender组

SELECT gender,COUNT(*) FROM student WHERE math>70 GROUP BY gender HAVING COUNT(*)>2;

结果:

023040c2e420fd5fa99df0683c2fa497.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值