MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)
知识点六:查询数据的操作DQL(SELECT基本形式)(26-35)
CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8;
USE cms;
-- 管理员表cms_admin
CREATE TABLE cms_admin(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT 'admin@qq.com',
role ENUM('普通管理员','超级管理员') DEFAULT '普通管理员'
);
INSERT cms_admin(username,password,email,role) VALUES('admin','admin','admin@qq.com',2); INSERT cms_admin(username,password) VALUES('king','king'), ('麦子','maizi'), ('queen','queen'), ('test','test'); -- 创建分类表cms_cate
CREATE TABLE cms_cate(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
cateName VARCHAR(50) NOT NULL UNIQUE,
cateDesc VARCHAR(200) NOT NULL DEFAULT ''
); INSERT cms_cate(cateName,cateDesc) VALUES('国内新闻','聚焦当今最热的国内新闻'),
('国际新闻','聚焦当今最热的国际新闻'),
('体育新闻','聚焦当今最热的体育新闻'),
('军事新闻','聚焦当今最热的军事新闻'),
('教育新闻','聚焦当今最热的教育新闻'); -- 创建新闻表cms_news
CREATE TABLE cms_news(
id INT UNSIGNED AUTO_INCREMENT KEY,
title VARCHAR(50) NOT NULL UNIQUE,
content TEXT,
clickNum INT UNSIGNED DEFAULT 0,
pubTime INT UNSIGNED,
cId TINYINT UNSIGNED NOT NULL COMMENT '新闻所属分类,对应分类表中的id',
aId TINYINT UNSIGNED NOT NULL COMMENT '哪个管理员发布的,对应管理员表中的id'
);
INSERT cms_news(title,content,pubTime,cId,aId) VALUES('亚航客机失联搜救尚无线索 未发求救信号','马来西亚亚洲航空公司一架搭载155名乘客的客机28日早晨从印度尼西亚飞往新加坡途中与空中交通控制塔台失去联系,下落不明。',1419818808,1,2),
('北京新开通四条地铁线路 迎接首位客人','12月28日凌晨,随着北京地铁6号线二期、7号线、15号线西段、14号线东段的开通试运营,北京的轨道交通运营里程将再添62公里,共计达到527公里。当日凌晨5时许,北京地铁7号线瓷器口换乘站迎来新线开通的第一位乘客。',1419818108,2,1),
('考研政治题多次出现习大大讲话内容','新京报讯 (记者许路阳 (微博))APEC反腐宣言、国家公祭日、依法治国……昨日,全国硕士研究生招生考试进行首日初试,其中,思想政治理论考题多次提及时事热点,并且多次出现习大大在不同场合的讲话内容。',1419818208,3,2),
('深度-曾雪麟:佩兰别重蹈卡马乔覆辙','12月25日是前国足主帅曾雪麟的85岁大寿,恰逢圣诞节,患有尿毒症老爷子带着圣诞帽度过了自己的生日。此前,腾讯记者曾专访曾雪麟,尽管已经退休多年,但老爷子仍旧关心着中国足球,为国足揪心,对于国足近几位的教练,他只欣赏高洪波。对即将征战亚洲杯的国足,老爷子希望佩兰不要重蹈卡马乔的覆辙',1419818308,2,4),
('国产JAD-1手枪枪架投入使用 手枪可变"冲锋枪"','日前,JAD-1型多功能手枪枪架通过公安部特种警用装备质量监督检验中心检验,正式投入生产使用。此款多功能枪架由京安盾(北京)警用装备有限公司开发研制,期间经广东省江门市公安特警支队试用,获得好评。',1419818408,4,4),
('麦子学院荣获新浪教育大奖','麦子学院最大的职业IT教育平台,获奖了',1419818508,1,5),
('麦子学院荣获腾讯教育大奖','麦子学院最大的职业IT教育平台,获奖了',1419818608,1,5),
('麦子学院新课上线','麦子学院PHP课程马上上线了,小伙伴快来报名学习哈',1419818708,1,5); -- 创建省份表 provinces
CREATE TABLE provinces(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
proName VARCHAR(10) NOT NULL UNIQUE
);
INSERT provinces(proName) VALUES('北京'),
('上海'),
('深圳'),
('广州'),
('重庆'); -- 创建用户表cms_user
CREATE TABLE cms_user(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT 'user@qq.com',
regTime INT UNSIGNED NOT NULL,
face VARCHAR(100) NOT NULL DEFAULT 'user.jpg',
proId TINYINT UNSIGNED NOT NULL COMMENT '用户所属省份'
); INSERT cms_user(username,password,regTime,proId) VALUES('张三','zhangsan',1419811708,1),
('张三丰','zhangsanfeng',1419812708,2),
('章子怡','zhangsan',1419813708,3),
('long','long',1419814708,4),
('ring','ring',1419815708,2),
('queen','queen',1419861708,3),
('king','king',1419817708,5),
('blek','blek',1419818708,1),
('rose','rose',1419821708,2),
('lily','lily',1419831708,2),
('john','john',1419841708,2);
默认数据
查询记录:
SELECT select_expr[*,select_expr… ,关键字]
[
FROM table_references(数据表)
[WHERE 条件]
GROP BY {col_name|position} [ASC|DESC],…分组]
[HIVING 条件 对分组进行二次筛选]
[ORDER BY {col_name | position} [ASC | DESC],…排序]
[LIMIT 限制显示条数]
]
-- 查询
SELECT * FROM cms_admin;
SELECT cms_admin.* FROM cms_admin; -- 查询管理员编号和名称
SELECT id,username FROM cms_admin;
SELECT username,id,role FROM cms_admin; -- 表来自于哪个数据库下db_name.tbl_name
SELECT id,username,role FROM cms.cms_admin; -- 字段来自于哪张表
SELECT cms_admin.id,cms_admin.username FROM cms.cms_admin;
查询测试
查询表达式:
每一个表达式表示想要的一列,必须至少有一列,多个列之间以逗号隔开
*表示所有列,tbl_name.*可以表示命名表的所有列
查询查询表达式可以使用[AS]alias_name为其赋予别名
-- 给表名起别名
SELECT id,username FROM cms_admin AS a;
SELECT id,username FROM cms_admin a;
SELECT a.id,a.username,a.email,a.role FROM cms_admin AS a; -- 给字段起别名
SELECT id AS '编号',username AS '用户名',email AS '邮箱',role '角色' FROM cms_admin;
SELECT a.id AS i,a.username AS u,a.email as e,a.role AS r FROM cms_admin AS a;
SELECT id AS proId,proId AS id,username FROM cms_user;
SELECT 1,2,3,4,5,id,username FROM cms_user;
查询表达式测试
WHERE条件:
查询条件 |
符号 |
比较 |
=,<,<=,>,>=,!=,<>,!>,!<,<=> |
指定范围 |
BETWEEN AND,NOT BETWEEN AND |
指定集合 |
IN,NOT IN |
匹配字符 |
LIKE,NOT LIKE |
是否为控制 |
IS NULL,IS NOT NULL |
多个查询条件 |
AND,OR |
-- WHERE条件
-- 查询编号为1的用户
SELECT id,username,email FROM cms_user WHERE id=1; SELECT id,username,email FROM cms_user WHERE username='king'; -- 查询编号不为1的用户
SELECT * FROM cms_user WHERE id!=1; SELECT * FROM cms_user WHERE id<>1; -- 添加age字段
ALTER TABLE cms_user ADD age TINYINT UNSIGNED DEFAULT 18; INSERT cms_user(username,password,regTime,proId,age)
VALUES('test1','test1',1419811708,1,NULL); -- 查询表中记录age值为NULL
SELECT * FROM cms_user WHERE age=NULL; --查不出来("="查不出值为NULL的列 SELECT * FROM cms_user WHERE age<=>NULL;--可以查出 --查询age不等于18的用户
SELECT * FROM cms_user WHERE age<=>18; -- IS NULL 或者IS NOT NULL
SELECT * FROM cms_user WHERE age IS NULL; --指定范围查询
-- 查询编号在3~10之间的用户
SELECT * FROM cms_user WHERE id BETWEEN 3 AND 10; --指定集合查询
-- 查询编号为1,3,5,7,9,11,13,100
SELECT * FROM cms_user WHERE id IN(1,3,5,7,9,11,13,100,1000); -- 查询proId为1 和3的用户
SELECT * FROM cms_user WHERE proId IN(1,3); -- 查询用户名为king,queen,张三,章子怡的记录
SELECT * FROM cms_user WHERE username IN('king','queen','张三','章子怡'); SELECT * FROM cms_user WHERE username IN('KinG','QUEEN','张三','章子怡'); --匹配字符查询
-- 模糊查询
-- %:代表0个一个或者多个任意字符
-- _:代表1个任意字符 -- 查询姓张的用户
SELECT * FROM cms_user WHERE username LIKE '张%'; -- 查询用户名中包含in的用户
SELECT * FROM cms_user WHERE username LIKE '%in%'; --查询所有用户
SELECT * FROM cms_user WHERE username LIKE '%'; -- 查询用户名为3位的用户
SELECT * FROM cms_user WHERE username LIKE '___'; --用户名_i%
SELECT * FROM cms_user WHERE username LIKE '_I%'; SELECT * FROM cms_user WHERE username LIKE 'king'; SELECT * FROM cms_user WHERE username NOT LIKE '_I%'; --逻辑查询
-- 查询用户名为king并且密码为king的用户
SELECT * FROM cms_user WHERE username='king' AND password='king'; -- 查询编号大于等于3的变量年龄不为NULL的用户
SELECT * FROM cms_user WHERE id>=3 AND age IS NOT NULL; -- 查询编号大于等于3的变量年龄不为NULL的用户 并且proId为的3
SELECT * FROM cms_user WHERE id>=3 AND age IS NOT NULL AND proId=3; -- 查询编号在5~10的用户并且用户名为4位的用户
SELECT * FROM cms_user WHERE id BETWEEN 5 AND 10 AND username LIKE '____'; -- 查询用户名以张开始或者用户所在身份为2,4的记录
SELECT * FROM cms_user WHERE username LIKE '张%' OR proId IN(2,4);
WHERE条件查询测试
GROUP BY查询结果分组:
-- 按照用户所属身份分组proId
SELECT * FROM cms_user GROUP BY proId; -- 向用户表中添加性别字段
ALTER TABLE cms_user ADD sex ENUM('男','女','保密'); --更新数据
UPDATE cms_user SET sex='男' WHERE id IN(1,3,5,7,9);
UPDATE cms_user SET sex='女' WHERE id IN(2,4,6,8,10);
UPDATE cms_user SET sex='保密' WHERE id IN(12,11); --按照用户性别分组
SELECT * FROM cms_user GROUP BY sex; --按照字段位置分组(从1开始)
SELECT * FROM cms_user GROUP BY 7; --按照多个字段分组
SELECT * FROM cms_user GROUP BY sex,proId; -- 查询编号大于等于5的用户按照sex分组
SELECT * FROM cms_user WHERE id>=5 GROUP BY sex;
分组查询测试
配合GROUP_CONCAT()得到分组详细信息
配合聚合函数:
COUNT():统计记录的总数
MAX():统计某个字段的最大值
MIN():统计某个字段的最小值
AVG():统计某个字段的平均值
SUM():统计某个字段的和
-- 查询id,sex,用户名详情按照性别分组
SELECT id,sex,GROUP_CONCAT(username) FROM cms_user GROUP BY sex; --查询proId,性别详情,注册时间详情,用户名详情 安装proId
SELECT proId,GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime)
FROM cms_user GROUP BY proId; --立起来显示
SELECT proId,GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime)
FROM cms_user GROUP BY proId\G; UPDATE cms_user SET age=11 WHERE id=1;
UPDATE cms_user SET age=21 WHERE id=2;
UPDATE cms_user SET age=33 WHERE id=3;
UPDATE cms_user SET age=44 WHERE id=4;
UPDATE cms_user SET age=25 WHERE id=5;
UPDATE cms_user SET age=77 WHERE id=6;
UPDATE cms_user SET age=56 WHERE id=7;
UPDATE cms_user SET age=88 WHERE id=8;
UPDATE cms_user SET age=12 WHERE id=9;
UPDATE cms_user SET age=32 WHERE id=10;
UPDATE cms_user SET age=65 WHERE id=11; --查询编号,sex,用户名详情以及组中总人数按照sex分组
SELECT id,sex,GROUP_CONCAT(username)AS users,COUNT(*) AS totalUsers FROM cms_user GROUP BY sex; -- 统计表中所有记录
SELECT COUNT(*) AS totalUsers FROM cms_user;
--SELECT COUNT(*) AS totalUsers FROM cms_user GROUP BY sex; SELECT COUNT(id) AS totalUsers FROM cms_user; --COUNT(字段)不统计NULL值
SELECT COUNT(age) AS totalUsers FROM cms_user; --总结
--查询编号,性别,用户名详情,组中总人数,组中最大年龄,最小年龄,
-- 平均年龄,以及年龄总和按照性别分组
SELECT id,sex,GROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex;
分组查询配合聚合函数测试
配合WITH ROLLUP记录上面所有记录的总和
-- WITH ROLLUP
SELECT id,sex,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age
FROM cms_user
GROUP BY sex WITH ROLLUP; SELECT id,sex,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex WITH ROLLUP;
WITH ROLLUP测试
HAVING子句:
通过HAVING子句对分组结果进行二次筛选
(必须与ORDER BY结合使用,否则不起作用)
--查询性别sex,用户名详情,组中总人数,最大年龄,年龄总和,根据性别分组
SELECT sex,GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex; -- 查询组中人数大于2的
SELECT sex,GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex
HAVING COUNT(*)>2; -- 查询组中人数大于2并且最大年龄大于60的
SELECT sex,GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex
HAVING COUNT(*)>2 AND MAX(age)>60; -- 查询编号大于等于2的用户
SELECT sex,GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
WHERE id>=2
GROUP BY sex
HAVING COUNT(*)>2 AND MAX(age)>60; --having必须与GROUP BY结合使用,要不然不会起作用
SELECT id,sex,GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
WHERE id>=2
HAVING COUNT(*)>2 AND MAX(age)>60;
having语句对分组结果进行二次筛选测试
ORDER BY排序:
通过ORDER BY对查询结果排序
(按照id降序排列DESC 默认的是ASC)
-- 按照id降序排列DESC 默认的是ASC
SELECT * FROM cms_user ORDER BY id ; SELECT * FROM cms_user ORDER BY id ASC; SELECT * FROM cms_user ORDER BY id DESC; -- 按照年龄升序排列
SELECT * FROM cms_user ORDER BY age ASC; SELECT * FROM cms_user ORDER BY 1 DESC; -- 按照年龄升序,id降序排列 UPDATE cms_user SET age=12 WHERE id=5; SELECT * FROM cms_user ORDER BY age ASC,id DESC; SELECT id,age,sex,GROUP_CONCAT(username),COUNT(*) AS totalUsers,SUM(age) AS sum_age
FROM cms_user
WHERE id>=2
GROUP BY sex
HAVING COUNT(*)>=2
ORDER BY age DESC,id ASC; -- 实现记录随机
SELECT * FROM cms_user ORDER BY RAND();
ORDER BY对查询结果进行排序测试
LIMIT限制查询结果显示条数:
LIMIT显示条数
LIMIT 偏移量,显示条数
-- 查询表中前3条记录
SELECT * FROM cms_user LIMIT 3; SELECT * FROM cms_user ORDER BY id DESC LIMIT 5; -- 查询表中前一条记录
SELECT * FROM cms_user LIMIT 1; SELECT * FROM cms_user LIMIT 0,1; SELECT * FROM cms_user LIMIT 1,1; SELECT * FROM cms_user LIMIT 0,5;
SELECT * FROM cms_user LIMIT 5,5;
SELECT * FROM cms_user LIMIT 10,5;
通过LIMIT限制显示条数测试
总结:
--总结
--查询cms_user表中id大于1的id,sex,age,用户详情,组中总人数,最大年龄,最小年龄,平均年龄,
--各组年龄总和,根据性别分组
--并且查询组中总人数大于2的组,按降序排列,没页显示2条
SELECT id,sex,age,GROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age,
SUM(age) AS sum_age
FROM cms_user
WHERE id>=1
GROUP BY sex
HAVING COUNT(*)>=2
ORDER BY age DESC
LIMIT 0,2;
MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)的更多相关文章
- MYSQL初级学习笔记三:数据的操作DML!(视频序号:初级_24,25,36)
知识点五:数据的操作DML(24,25,36) 插入数据: --测试插入记录INSERT CREATE TABLE IF NOT EXISTS user13( id TINYINT UNSIGNED ...
- MYSQL初级学习笔记二:数据表相关操作及MySQL存储引擎!(视频序号:初级_5,7-22|6)
知识点三:数据表相关操作(5,7-22) --------------------------------整型--------------------------------- --测试整型 CREA ...
- MYSQL初级学习笔记五:连接查询!(视频序号:初级_37-41)
知识点七:连接查询(37-41) 什么是连接查询: 连接查询是将两个或两个以上的表按某个条件连接起来,从中选取需要的数据.连接查询是同时查询两个或两个以上的表时使用的.当不同的表中存在相同意义的字段时 ...
- MYSQL初级学习笔记九:MySQL索引的使用!(视频序号:初级_51)
知识点十一:索引的使用(51) 什么是索引: 索引的定义: 在关系型数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行的更快.索引的作用相当于图书的目录,可以 根据目录中的页码 ...
- mysql的学习笔记(四)
---恢复内容开始--- 1.插入操作 INSERT (1)INSERT table_name(col_name,...) VALUES(...),(....) CREATE TABLE user( ...
- MySQL 5.6学习笔记(查询数据、插入、更新、删除数据)
1. 查询语法 SELECT {*|<字段列表>} [FROM table_references [WHERE where_condition] [GROUP BY {col_name | ...
- MYSQL初级学习笔记六:子查询!(视频序号:初级_42 | 43)
知识点八:子查询(42) 什么是子查询: 子查询是将一个查询语句嵌套在另一个查询语句中.内层查询语句的查询结果,可以作为外层查询语句提供条件. 引发子查询的情况: 使用[NOT] IN 的子查询 -- ...
- Hibernate学习笔记四 查询
HQL语法 1.基本语法 String hql = " from com.yyb.domain.Customer ";//完整写法 String hql2 = " fro ...
- Mysql 数据库学习笔记01查询
1.数据查询基本操作 * 正则表达式查询: 字段名 regexp '匹配方式', select * from user where username regexp '^名' -- 查询 姓名 名 ...
随机推荐
- 「CodePlus 2018 3 月赛」白金元首与莫斯科
$n \leq 17,m \leq 17$,$n*m$的01矩形,对每一个0问:当他单独变成1之后,在其他0处放多米诺牌(不一定放满,可以不放)的方案数.膜$1e9+7$. 直接$dp$是$n^42^ ...
- BZOJ1902: Zju2116 Christopher
$n \leq 10^{100}$,问$C_n^m,0<=m<=n$有多少是质数$p \leq 1e7$的倍数. 一样,套高精度的题,只有战胜他才能鄙视他. 但是我TM被他鄙视了一上午!! ...
- 标准C程序设计七---25
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- WEB学习-HTML的骨架
HTML的标准骨架 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- eclispe集成web插件
最近公司需要使用开源框架开发,所有下载了最新版本的eclispe工具,但是在官网下载的eclispe是不包含web插件的,无法创建web项目,需要自行集成web插件 eclipse官网下载地址:htt ...
- Spring的IoC容器概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/ioc-containers.html: IoC容器 Spring容器是Spring框架的核心.容器 ...
- 如何更改ORACLE 用户的 expired状态
ORACLE(113) 版权声明:本文为博主原创文章,未经博主允许不得转载. oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢? 首先, 如果是l ...
- MySQL---笔记之视图的使用详解
什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据. ...
- 改动C:\WINDOWS\system32\drivers\etc\hosts 文件有什么作用
host是一个没有扩展名的系统文件,能够用记事本等工具打开,其作用就是将一些常常使用的网址域名与其相应的IP地址建立一个关联"数据库".当用户在浏览器中输入一个须要登录的网址时,系 ...
- [转]Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案
原文地址:http://www.cnblogs.com/gb2013/archive/2013/03/05/SecurityEnhancementsInTheCRT.html 在VS 2012 中编译 ...