1、select * from 表名;查询出来所有的信息(不推荐使用)
2、select 列名 、列名、列名,列名 from 表名; 查询表中列的信息(推荐)
3、select distinct english from exam;过滤表中重复数据。过滤掉重复的英语成绩
查询出语文、数学成绩,并过滤掉语文和数学分数一样的数据:
select exam.name,exam.chinese,exam.math from exam;
4、别名:(as可以省略)
4.1、select e.`name`,e.chinese,e.math from exam;(表的别名引用)
4.2、select exam.`name`,exam.chinese,exam.math from exam;(表名当别名引用)
4.3、SELECT e.`name` as '姓名',e.chinese as '语文' from exam as e;(给字段起别名)
4.4、少数民族的关羽语文加10分,只在查询的时候加10分,不修改数据
SELECT e.name,e.chinese+10 '语文' FROM exam e WHERE e.name='关羽';
5、条件查询:
select * from 表名 where 条件
查询顺序 ,先执行where 在查询出来结果集
SELECT * FROM exam e WHERE e.name='关羽';
不能将别名作为条件查询,因为会先执行where。再执行查询输出。
SELECT e.name '姓名',e.chinese+e.english+e.math 总成绩 FROM exam e WHERE
e.chinese+e.english+e.math>200;
6、.sql结尾的文件,叫sql脚本
sql脚本导入:选择数据库 -->运行sql文件 -->选择需要导入的.sql脚本
7、where 字句查询
7.1、比较运算符
>:大于 =:等于 <:小于 >=:大于等于 <=:小于等于 '<>' :不等于
语文成绩不小于90分,有哪些
SELECT e.name '姓名',e.chinese '语文' FROM exam e WHERE e.chinese>=90;
7.2、BETWEEN 数值 AND 数值 区间的值 注意:前边的数值一定要比后边的数值小
between 数值1 and 数值2 ; 查出来的数值是大于等于数值1并且小于等于数值2的
查询语文成绩大于等于70小于等于90的学生:
SELECT e.name,e.chinese from exam e WHERE e.chinese BETWEEN 70 AND 90;
<> 和!=是一样的,推荐使用<>
7.3、in(值1,值2,值3,...)列的值等于这个括号中的任意一个就可以 类似or
找出语文成绩是(70,80,90)这些人有谁
SELECT e.name,e.chinese FROM exam e WHERE e.chinese in(70,80,90);
7.4、OR 逻辑或 多个条件只要一个成立就行
SELECT e.name,e.chinese FROM exam e WHERE e.chinese=70 or e.chinese=80 or e.chinese=90;
7.5、模糊查询 like( %表示是任意字符 _表示占位符)(一个下划线一个字符)
如果要匹配'_'和'%'的话用\来匹配
以张开头的学生:
SELECT e.name FROM exam e WHERE e.name LIKE '张%';
SELECT e.name FROM exam e WHERE e.name LIKE '\_';
null 比较特殊,不参与运算,与任何数据运算的结果都是null
7.6、判断某个值是否为null不能使用=,只能使用is null,不是null用is not null
使用=null不会报错,但是没有意义;
查找语文成绩是null的:
SELECT *FROM exam e WHERE e.chinese is NULL;
查找数学成绩不是null:
SELECT *FROM exam e WHERE e.math is NOT NULL;
7.7、逻辑运算符
1)、条件1 and 条件2 与逻辑运算一样,必须条件1和条件2同时成立才算符合条件
语文成绩和数学都>80分的学生信息
SELECT e.name,e.chinese,e.math FROM exam e WHERE e.chinese>80 AND e.math>80;
2)、条件1 or 条件2与逻辑或一样,满足条件1或者条件2都行
3)、in 可以转为or ,但是or不一定可以转换为in
语文和数学或英语任意一门大于90分的学生信息:
SELECT * FROM exam e WHERE e.chinese>90 OR e.english>90 or e.math>90;
4)、not 不单独使用,一般是配合in 和is使用 is not null或 not in
查找语文成绩不是70,80,90的人·有哪些
SELECT * FROM exam e WHERE e.chinese NOT in (70,80,90);
不能这样写,这样只是把null值筛选出来。
SELECT * FROM exam e WHERE e.chinese !=70 OR e.chinese!=80 OR e.chinese!=90;
7.8、排序 order by asc :升序 desc:降序
1)、第一列数据相同时,才会按照第二个列排序。
2)、排序的列名越靠前,越能起主导作用,后边的列可能一次也用不上
3)、from表 再where条件 然后再查字段之类的,第四布才是排序
按照数学的最高分到最低分进行排序显示,如果数学分数相同的话按照语文降序排序,语文相同,按照英语降序排序:
SELECT *FROM exam e ORDER BY e.math DESC,e.chinese DESC,e.english DESC;
按照总分数来进行排序,倒序输出:
SELECT *, e.chinese+e.english+e.math '总成绩' FROM exam e ORDER BY e.chinese+e.english+e.math DESC;
查找总成绩不为null的人再按照成绩进行降序输出
SELECT*,e.chinese+e.english+e.math 'totle' FROM exam e
WHERE e.chinese+e.english+e.math is not NULL
ORDER BY totle DESC;
7.9、null值,
1)、null值,只要参与运算,结果都是null
2)、函数 ifnull (可能为null的数据,如果左侧的数据是null的话显示这个数据)
3)、ifnull(列名,默认值);如果这个值是null,就以默认值使用
按照总分数来进行排序,倒序输出:
SELECT e.name,IFNULL(e.chinese,0) '语文',IFNULL(e.english,0) '英语',IFNULL(e.math,0) '数学',
IFNULL(e.chinese,0)+IFNULL(e.english,0)+IFNULL(e.math,0) 'total'
FROM exam e ORDER BY total desc;
7.10、聚集函数:分组函数 不能在where字句中使用,因为where在分组函数之前执行
1)、求和: 是sum();
2)、求平均值:avg();
3)、最大值:max();
4)、最小值: min();
5)、求数量 count();
6)、 count (1/0/*);查看表中有多少数据0或1或*结果都是一样的都是查询有多少条数据
查询这个列中不包含null的数据条数:
SELECT COUNT(chinese)FROM exam;
查询英语成绩大于80分的人的数量:
SELECT COUNT(*) FROM exam e WHERE e.english>80;
7)、sum(列名) ------统计该列的所有的值的和。sum 也可排除null
select sum(列名) from 表名 where 条件
表中所有人员的总成绩
SELECT SUM(e.chinese)+SUM(e.english)+SUM(e.math) '总成绩'FROM exam e;
求数学平均分 ,总人数
SELECT SUM(e.math)/COUNT(*) '数学平均分'FROM exam e;
有成绩的平均分
SELECT SUM(e.math)/COUNT(e.math) '数学平均分'FROM exam e;
8、注意:
8.1、起别名的时候 as 可以省略。