where的作用是检索数据中心符合条件的值。
运算符 | 语法 | 描述 |
---|---|---|
and && | a and b a&&b | 逻辑与 |
or || | a or b a||b | 逻辑或 |
not ! | not a !a | 逻辑非 |
运算符 | 语法 | 描述 |
---|---|---|
is null | a is null | 如果操作符为null,返回ture。 |
is not null | a is not null | 如果操作符为not null,返回ture。 |
between | a between b and c | 如果a在b与c之间,返回ture。 |
like | a like b | SQL匹配,如果a匹配b,返回ture。 |
in | a in(a1,a2,a3,a4...) | a如果在in参数的某一个值中,返回ture。 |
运算符 | 语法 | 描述 |
---|---|---|
% | a% | 表示任意个字符。 |
_ | a_ | 表示单个字符。 |
比如我们需要查询学生每一科的成绩,但是数据分属于两张表的情况。
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult` FROM `student` AS s INNER JOIN `result` AS r WHERE s.`studentno` = r.`studentno`;
得到上表后我们觉得没有学科名看起来还是很麻烦,于是我们使用subjectno再关联subject表。
select s.`studentno`,`studentname`,`subjectname`,`studentresult` from `student` as s inner join `result` as r inner join `subject` as su where s.`studentno` = r.`studentno` and r.`subjectno` = su.`subjectno`;
自链接即自己和自己联接的表,其核心是该表可以拆为两张一样的表。
创建新表:
CREATE TABLE `category`( `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id', `pid` INT(10) NOT NULL COMMENT '父id', `categoryname` VARCHAR(50) NOT NULL COMMENT '主题名字', PRIMARY KEY (`categoryid`) ) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; INSERT INTO `category` (`categoryid`, `pid`, `categoryname`) VALUES ('2','1','信息技术'), ('3','1','软件开发'), ('5','1','美术设计'), ('4','3','数据库'), ('8','2','办公信息'), ('6','3','web开发'), ('7','5','ps技术');
查询:
SELECT a.`categoryname` AS '顶级科目',b.`categoryname` AS '子科目' FROM `category` a,`category` b WHERE a.`categoryid` = b.`pid`;
用得较少,一般使用前端去排序。
ORDER BY `字段名` DESC; #降序
ORDER BY `字段名` DESC; #升序
修改之前的jion代码,使用学生分数来降序排列:
select s.`studentno`,`studentname`,`subjectname`,`studentresult` from `student` as s inner join `result` as r inner join `subject` as su where s.`studentno` = r.`studentno` and r.`subjectno` = su.`subjectno` order by `studentresult` desc;
用得较多,使用分页是为了缓解数据库的压力。
现在一些网站对于大数据会使用瀑布流来代替分页。
LIMIT 起始值,显示数量
LIMIT (n-1)*pageSize,pageSize
pageSize:页面大小
n:当前页
总页数:数据总数/页面大小,向上取整。
SELECT ABS(-6); #绝对值 SELECT CEILING(9.4); #向上取整 SELECT FLOOR(9.4); #向下取整 SELECT RAND(); #随机数
select char_length('破碎的人没有心'); #字符串长度 select concat('我','永远','喜欢','桃子'); #拼接字符串 select insert('我爱编程',1,2,'超级热爱'); #指定位置插入字符串,类似windows的insert键 select upper('abc'); #转换大写 select lower('ABC'); #转换小写 select substring('破碎的人没有心',4,2) #截取字符串
select current_date(); #获取当前日期 select curdate(); #获取当前时间 select now(); #获取当前的时间 select localtime(); #获取本地时间
名称 | 作用 |
---|---|
COUNT() | 计数 |
SUM() | 求和 |
AVG() | 平均数 |
MIN() | 最小值 |
MAX() | 最大值 |
select count(`studentno`) from `student`; #忽略null行 select count(*) from `student`; #不忽略null行 #查询行数 SELECT COUNT(1) FROM `student`; #不忽略null行 #所有数据用1填充,查询行数
SELECT AVG(`studentresult`) AS '平均分' FROM `result`; SELECT SUM(`studentresult`) AS '总分' FROM `result`; SELECT MAX(`studentresult`) AS '最高分' FROM `result`; SELECT MIN(`studentresult`) AS '最低分' FROM `result`;