drop table bb;
查询数据
create table t_student(
`id` int ,
`stuName` varchar(60),
`age` int ,
`sex` varchar(30),
`gradeName` varchar(60)
)
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三1',231,'男','一年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三2',232,'男','十一年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三3',233,'男','十年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三4',234,'男','九年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三5',235,'男','八年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三6',236,'男','七年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三7',237,'男','六年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三8',238,'男','五年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三9',239,'男','四年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三10',2310,'男','三年级');
insert into `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
values('1','张三11',2311,'男','二年级');
查询所有字段
select 字段1,字段2,字段3....from 表名;
select * FROM 表名;
查询制定字段
select 字段1,字段2 。。 from 表名;
where 条件查询
select 字段... from 表名 where 条件表达式。
带IN关键字查询
select 字段1,字段2,字段3... from 表名 where 字段[NOT] IN (元素1,元素2,元素3);
select * from t_student where age in (231,232);
查询年龄为231,232 的数据。其他不会别查出。
not in 不在 231 232 的
带 between and
的范围
select 字段1,字段2,字段3... from 表名 where [not] between 取值1 and
取值2;
select * from t_student where age (not相反) between 231 and 239
;查询范围
带LIKE 的模糊查询
select * from 表名 wherr 字段 like '字符创';
空值查询
select * from 表名 where 字段 is[NOT] null;
带AND的多条件查询
select * from 表名 字段 where 条件表达式 and 。。。
带OR查询的
带 DISTINCT
去重复查询
select distinct 字段名 from 表名;
排序
order by 属性名 [DESC|asc]
Group by分组查询
GROUP BY 属性名 [having
条件表达式][WITH ROLLUP]
1.单独使用(毫无意义)
2.与GROUP_CONCAT()函数一起使用:
SELECT
gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY
gradeName;
3.与聚合函数一起使用。
SELECT
gradeName,COUNT(stuName) FROM t_student GROUP BY
gradeName;
4.与HAVING一起使用(限制输出的结果)
SELECT
gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName HAVING
COUNT(stuName)>1;
5.与WHTH ROLLUP
一起使用(最后加入一个总和行);
LIMIT 分页查询
select * from 表名 limit 初始页,记录数;
使用聚合函数查询
COUNT()函数
1.count()函数用来统计记录的条数;
2.与goupe by 关键字一起使用;
sum()函数
1.SUM()函数是求和函数;
2.与GOUPE BY 关键字一起使用;
AVG()函数
1.AVG()函数是求平均数函数;
与GOUPE BY 关键字一起使用;
MAX()函数
1.MAX()函数是求最大值的函数;
2.与GOUPE BY 关键字一起使用;
MIN()函数
1.MIN()函数是求最小值的函数; 2.与GOUPE BY 关键字一起使用;
链接查询
链接查询是将连个或者两个以上的表按照某个条件连接起来,从中选取需要的数据。
SELECT
tb.id,tb.bookName,tb.price,tb.author,tb.bookTypeId,tby.bookTypeName
FROM t_book tb,t_bookType tby WHERE tb.bookTypeId = tby.id;
自链接
select e.ename,p.ename
from emp e,emp p
where e.empno = p.mgr
核心:通过别名,将同一张表视为多张表
自连接存在的问题
不适合操作大表
层次查询就是一张表
内链接查询
内链接查询是一种常用的链接。内链接查询可以查询两个或者两个以上的表;
外链接查询
外链接查询可以查出某一张表的所有信息;
select 属性名列表 from 表名1 left|right join 表名 on 表名1.属性 = 表名2.属性
左链接查询
left join
SELECT tb.id,tb.bookName,tb.price,tb.author,tt.bookTypeName FROM
t_book tb LEFT JOIN t_bookType tt ON tb.bookTypeId = tt.id
可以查询出'表名1' 的所有的记录,而'表名2' 中 ,只能查询出匹配的记录;
右链接查询
SELECT tt.id,tt.bookTypeName,tb.id,tb.bookName,tb.price,tb.author
FROM t_bookType tt RIGHT JOIN t_book tb ON tt.id =
tb.bookTypeId
可以查询'表名2' 的所有记录,而'表名1'中 只能查询出匹配的记录;
多条件链接查询
子查询
带IN关键字的子查询
一个查询语句的条件可能落在另一个select 语句的查询结果中。
SELECT * FROM t_book WHERE id IN (SELECT id FROM t_bookType);
带比较运算符的子查询
子查询可以使用比较运算符。
SELECT * FROM t_book WHERE price>=(SELECT price FROM
t_pricelevel WHERE priveLevel=1);
带Exists关键字的子查询
假如子查询查询到的记录,则进行外层查询,否则,不执行外层查询。
SELECT * FROM t_book WHERE EXISTS (SELECT * FROM t_booktype)
SELECT * FROM t_book WHERE NOT EXISTS (SELECT * FROM
t_booktype)