distinct:作用范围是后面所有字段的组合(可以有多个字段) WHERE 子句中可以使用等号 = 来设定获取数据的条件, country=中国’ 在查询时可以只检索前几条或者中间某几行数据(数据量很大时) limit 后面的第一个数字设置从哪里开始检索(从0开始) –统计总数 为了快速得到统计数据(多条数据的统计结果),提供了5个聚合函数 count(): 查询表中某项数据一共包含多少条(统计总数) 推荐使用第二种写法,可以提高效率 统计一般计算的值 将表中数据分成若干小组,例如分为男人和女人,不同国籍等等 SELECT 列名 FROM 表名 WHERE 过滤条件 使用where,可以用来过滤单行,如果想要过滤分组之后的数据,要加having 显示每个国家的平均年龄,但是仅显示那些总年龄超过100的国家 having在聚合后对组记录进行筛选 HAVING 在分组和聚合之后选取分组的行,而且HAVING 子句总是包含聚集函数 综上所述: 其中 <,>,=,!=,>=,<=属于比较运算符 and,not,or属于逻辑运算符 空值检测: 最后再说一个平时用的比较多的查询语句,大家可以当作练习 先查询名字是xiaoming这个人的成绩,然后在根据stu表的其他人的分数去做对比
数据库和表的查询
--显示所有数据库: • SHOW DATABASES;
--显示所有的表: – SHOW TABLES;
--查看表结构 – DESC 表名;
-- 查看表的创建语句 – SHOW CREATE TABLE 表名;
--查询表中的姓名和年龄 SELECT 姓名,年龄 FROM 表名 ;
--查询表中id乘50和姓名的结果 SELECT id*50,姓名 FROM 表名;
--给乘50的列名加个注释:as "字符串",可以把as去掉也能显示注释名 SELECT id*50 as "乘50",姓名 FROM 表名;
查询去重
DISTINCT
-- 查询时去除重复项(表名表中列名,内容去重) SELECT DISTINCT 列名 FROM 表名;
SELECT DISTINCT 列名,列名 FROM 表名; -- 查询每个列名中都有?,注意:distinct后面的字段用逗号分隔,逗号两边不能有空格
查询排序
ORDER BY
SELECT DISTINCT 年龄,姓名 FROM 表名 ORDER BY 年龄; --按年龄排序,展示年龄姓名两列数据
SELECT DISTINCT 年龄,姓名 FROM 表名 ORDER BY 年龄,姓名; --展示年龄和姓名的前提下,按年龄理相同,姓名不同的排序(默认从低到高)
SELECT DISTINCT 年龄,姓名 FROM 表名 ORDER BY 年龄,姓名 DESC; --展示年龄和姓名的前提下,按年龄理相同,姓名不同的排序(DESC是倒叙)
SELECT DISTINCT 年龄,姓名 FROM 表名 ORDER BY 年龄,姓名 ASC; --排列顺序从低到高(默认)`(ASC是正序,默认就是正序,一般不用)`
查询限定
WHERE(<= , >=) / LIKE
--SELECT 年龄,姓名 FROM 表名 WHERE 年龄>20; 查出所有年龄超过20岁的人
SELECT 年龄,姓名 FROM 表名 WHERE 年龄>20 AND 姓名="张三"; --查出某个国家所有年龄超过20且叫张三的人(注意:后边是汉字的要加双引号)
SELECT 年龄,姓名 FROM 表名 WHERE 年龄=21 OR 年龄=67; --查出年龄为21或者67的人
模糊查询
like:
--查询表中叫王某的人有谁 SELECT 姓名 FROM 表名 WHERE 姓名 LIKE "王%";
但是有时候我们需要获取含有某个字符的所有记录,这时我们就需要在 WHERE 子句中使用 LIKE 子句SELECT 年龄,姓名 FROM 表名 WHERE age>20 AND 姓名 LIKE ‘王%'; SELECT 年龄,姓名 FROM 表名 WHERE age>20 AND 姓名 LIKE ‘%四'; SQL LIKE 子句中使用百分号 %字符来表示任意字符,如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的
分页查询
SELECT * FROM t_user LIMIT 0,3; --(从第一行开始,查询3条数据)
limit 后面的第二个数字是设置每页显示多少条(3,4代表从第四行查询三条数据)聚合函数
count()
--查询表中共包含多少条数据(会检索所有列) SELECT COUNT(*) FROM 表名;
--查询表中一共有多少个人且年龄大于20的(只会检索一列) SELECT COUNT(年龄) FROM renshi WHERE 年龄>20;
--`max(列)`:求此列的最大值 SELECT MAX(age) FROM 表名 ;
--`min(列)`:求此列的最小值 SELECT MIN(age) FROM 表名 ;
--`sum(列)`:求此列的和 SELECT SUM(age) FROM 表名 ;
--`avg(列)`:求此列的平均值 SELECT AVG(age) FROM 表名 ;
--查出总人数、最大年龄、最小年龄、年龄的总和、平均年龄 SELECT COUNT(姓名),MAX(年龄),MIN(年龄),SUM(年龄),AVG(年龄) FROM 表名 ;
分组:
group by
查看每个国家有多少人 SELECT COUNT(*) FROM 表名 GROUP BY 国家; --(先根据group by查询国家,再查询有多少人)
--查看每个国家的平均年龄 SELECT AVG(年龄) FROM 表名 GROUP BY 国家;
--查看每个国家的总人数,年龄总和,平均年龄,最高年龄,最低年龄 SELECT country,COUNT(uname),SUM(age),AVG(age),MAX(age),MIN(age) FROM t_user GROUP BY country;
--查看每个国家的总人数,年龄总和,平均年龄,最高年龄,最低年龄,但是排除某个国家 SELECT 国家,COUNT(姓名),SUM(age),AVG(age),MAX(age),MIN(age) FROM表名 WHERE country!='吴国' GROUP BY country;
--列出每个国家小于20岁的人 SELECT 国家,名字 FROM 表名 WHERE age<20 GROUP BY 国家;
过滤:
having
SELECT country,AVG(age) FROM 表名 GROUP BY country HAVING SUM(age)>100; --注意顺序:having放在分组之后,因为作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组
分组查询和过滤:
having
和 where
:
WHERE 在分组和聚合计算之前进行选取(它控制哪些行进入聚合计算),
因此,WHERE 子句不能包含聚合函数
(严格来讲,你可以写不使用聚集的 HAVING 子句, 但同样的条件用WHERE更有效)
having要跟在group by(分组)之后,对分组查询的结果进行过滤(过滤分组)
where要出现在group by(分组)之前,执行表中所有数据来进行过滤(过滤行)
另外,having可以用聚合函数,并支持所有where子句操作符where子句操作符:
<,>,=,!=,>=,<=,and,not,or,like
--查询年龄大于十岁小于三十的人名 SELECT 姓名 FROM 表名 WHERE 年龄>10 AND 年龄<30;
IS NULL
--返回id不为空的行, `IS NULL` 为空值判断 SELECT * FROM 表名 WHERE id IS NOT NULL
子查询
CREATE TABLE stu( --先建立一个stu的表 stuID INT, --添加id为int类型 sname VARCHAR(32), --名字是varchar类型 score INT, --分数是int类型 PRIMARY KEY(stuID) --把id设置为主键 ); INSERT INTO stu VALUES (1,‘xiaoming’,60), (2,‘xiaoli’,70)...; --添加几条数据
--如何查询所有比小明成绩高的学生名字 SELECT sname FROM stu WHERE score > (SELECT score FROM stu WHERE sname = 'xiaoming');
--查询成绩高于平均成绩的学生姓名和成绩 SELECT sname,score FROM stu WHERE score > (SELECT AVG(score) FROM stu);
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算