select语句
比如我们先创建表插入数据再做查询:
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);
INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);
全列查询
-- 通常情况下不建议使用 * 进行全列查询 -- 1. 查询的列越多,意味着需要传输的数据量越大; -- 2. 可能会影响到索引的使用
select * from exam_result; '*'加了这个就是查询表全列的数据
指定列查询
比如这张表你只想看id和姓名的话: select id,name from exam_result;
查询为表达式
就是你可以查询的数据可以加减乘除,比如: select id,name,english+10 from exam_result; 它不会改变你原表中的数据只是在你写了当前语句后向你展示,比如查询结果为:
你再查询原表时还是原来数据,因为你只是表达式而不是等式
为查询的结果起别名
select id [as] '别名名称' from exam_result
为查询的结果去重
select distinct math from exam_result; 如果有相同的数学成绩它只会保留一个
where条件语句
它的作用跟编程语言的if的效果差不多,在查询数据加where之后就会是以后面的条件筛选数据展示出来
常用的运算符:
举个样例:select * from exam_result where math>80; 这样就会显示数学成绩大于80的数据,后面的运算符用法差不多,自己可以试试
结果排序:
用法为: order by '列名' (降序(desc),升序(asc));,结果会按照你指定的列名的大小来排序,如果会升序,就是从小到大排,降序就是从大到小,默认为升序,所以如果须要升序排序的话可以省略asc
比如查询数学成绩并按数学成绩排降序: select math from exam_result order by math desc
用法说明:就是你可以更新某一列值,比如把孙悟空的数学成绩改为80,update exam_result set math = 80 where name='孙悟空'
delete
删除表: delete from '表名' 删除孙悟空的考试成绩: delete from exam__result where name='孙悟空'
聚合函数
就是在做查询时我们可以使用这些函数方便我们查询时方便统计,比如查询数学成绩的总分 select math, sum(math) from exam_result ;
group by的使用
在select中使用group by 子句可以对指定列进行分组查询
案例:准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)
EMP员工表
DEPT部门表
SALGRADE工资等级表
先展示最重要的员工表emp
group by的用法就是你要以哪个列名进行对这个表进行分组,相当于把一个表分为多个表,比如我执行: select deptno from group by deptno ,它就能把deptno中的数据相同的分为一组,也可以说是以deptno为准分为了多个子表,并且这些子表也能再分子表的子表
也可以搭配聚合函数一起使用,相当于先分组在进行聚合统计, 比如: 查询每个部门的平均工资: select deptno,avg(sal)from group by deptno
having和where的使用区别
having跟where应用是条件语句,可以当作筛选条件,但是它们的执行顺序不同
这里先我们可以先总结表不是存在磁盘上的表才是表,我们做的所有SQL语句得到的查询结果均是表
一般having会与group by 一起使用,比如查询平均工资低于2000的部门和它的平均工资: select deptno avg(sal) as myavg from emp group by deptno having ,myavg<2000; 这个having的执行顺序是等表做完一系列SQl语句时才执行它,也就是说等把每个部门的平均工资作为表之后再以having的条件筛选出最后的结果表, 而where是在表生成之前就要执行的条件筛选