如何⽤⼀条sql查询出今天的数据条数和昨天数据条数_SQL学
习笔记(⼆)——SQL语法...
1. 基本查询
⼀、简单查询1. 基本查询
⼀、简单查询
1、基本查询语句
SELECT <;列名1>,<;列名2>,... FROM 表名;
⽰例:
SELECT 姓名,性别 FROM student;
2、为列设定别名
SELECT 姓名 as name,性别 as '⼈物性别' FROM student;
3、删除重复数据
1)DISTINCT 只⽤于⼀列前⾯
SELECT DISTINCT 姓名 AS '⼈物姓名' FROM student;
2)DISTINCT⽤于多列前⾯
此时,后⾯的学号和姓名会进⾏组合
SELECT DISTINCT 学号,姓名 FROM student;
tips:DISTINCT只能紧着在SELECT之后
4、SELECT语句书写规则
SQL语句不区分关键词的⼤⼩写
列名不能加单引号
列名命名时不能有空格
符号只能使⽤英⽂符号
2. 指定查询
1、WHERE语句指定条件
SELECT 学号 FROM student WHERE 姓名='猴⼦'
2、SQL语句运⾏顺序
运⾏FROM⼦句,表⽰从哪张表中查询
WHERE⼦句:选择⾏
SELECT⼦句:选择列
3. 注释和SQL语句注意事项
单⾏注释:
-- 查询出全部列
多⾏注释:
4. 运算符
/*注释符号*/4. 运算符
分为算数运算符、⽐较运算符和逻辑运算符。
1、算数运算符
+、-、* 、 /
SELECT 学号,课程号,成绩,成绩/100 as '百分⽐成绩' from score
2、⽐较运算符
1)运算符号
< 相等 <> 不等于 > ⼤于 <⼩于 >= ⼤于等于 ><=⼩于等于
2)⽰例
/
*⽐较数字*/
SELECT 学号,课程号,成绩 FROM score Where 成绩<80
/*⽐较⽇期*/
SELECT 学号,姓名,出⽣⽇期 FROM student WHERE 出⽣⽇期 <'1990-01-01'
/*查询null、查询⾮null*/
SELECT 教师号,教师姓名 FROM teacher WHERE 教师姓名 IS (not) NULL;
3、逻辑运算符
1)逻辑运算符号
NOT 否定某⼀条件 AND 并且 BETWEEN 范围查询 OR 或者 IN OR的简单写法2)⽰例
/*根据成绩筛选*/
SELECT 学号,成绩 FROM score WHERE 成绩>=60 and 成绩<90
/
*根据姓名和性别查询*/
SELECT * FROM student WHERE (性别 ='男') AND (姓名 IN('猴⼦','马云'))
/*between and [60,90]*/
SELECT * FROM score WHERE 成绩 BETWEEN 60 AND 90
/*or*/ SELECT * FROM student WHERE 姓名='猴⼦' or 姓名='马云'
SELECT * FROM score WHERE 成绩<60 or 成绩>90
/*in*/ SELECT * FROM student WHERE 姓名 in ('马云' ,'猴⼦')
5. 谓词
1)语法
like:字符串模糊查询
%:任意字符串
_ :⼀个任意字符
2)⽰例
SELECT * FROM student WHERE 姓名 LIKE '马%'
6. 练习⽹站
SQL Tutorial/zh - SQLZOO s qlzoo
⼆、汇总分析
SELECT 查询结果 FROM 从哪张表查询数据 GROUP BY 分组 having 对分组结果指定条件
1. 汇总分析
1)汇总函数
count 求某列的⾏
sum 对某列求和
avg 对某列求均值
max 求某列数据的最⼤值
min 求某列数据的最⼩值
2)⽰例
/*计算数量*/
SELECT count(教师姓名)
FROM teacher
WHERE 教师姓名 IS NULL;
SELECT count(DISTINCT(姓名)) FROM student;
/*计算求和*/
SELECT SUM(成绩) FROM score;
2. 分组
1)语法
GROUP BY
2)⽰例
/*根据性别进⾏分组*/
SELECT 性别,count(*)
FROM student GROUP BY 性别;
SELECT 性别,count(*)
FROM student
WHERE 出⽣⽇期 > '1990-01-01'
GROUP BY 性别;
3. 对分组结果指定条件
1)语法
having
2)⽰例
/*只取出男⽣组*/
SELECT 性别,count(*)
FROM student
GROUP BY 性别
having count(*)>1;
4. 对SQL结果排序
1)语法
ORDER BY 查询结果 desc; ORDER BY 查询结果 asc;
对课程按照平均成绩进⾏排序
SELECT 课程号,AVG(成绩) as '平均成绩' FROM score GROUP BY 课程号 ORDER BY 平均成绩;
对空值(null)的排序
SELECT * FROM teacher ORDER BY 教师姓名
5. 从查询结果取出指定⾏:limit
取成绩前三的课程分数
SELECT 成绩 FROM score ORDER BY 成绩 DESC LIMIT 3;
分页
SELECT 成绩 FROM score ORDER BY 成绩 DESC LIMIT ((第?页-1)*每页条数),每页条数;
6. 注意的问题
1、SQL运⾏是有运⾏顺序的
1)sql运⾏顺序:
先运⾏蓝框⾥的⼦句
select⼦句
sql中union多表合并最后运⾏红框⾥的⼦句
查询过程
2)不注意运⾏顺序出现问题的点
在having⼦句等使⽤了select⼦句中设置的别名,会出现问题。
原因:having ⼦句运⾏先于select⼦句
在where语句中使⽤了聚合函数
原因:where⼦句中不能使⽤聚合函数,聚合函数只能在having语句中使⽤
1. 视图1-1. 是什么
1-1. 是什么
三、复杂查询1. 视图
三、复杂查询
数据库表中存放的师实际的数据。
1-2. 如何⽤视图中存放的师sql查询语句。当使⽤视图时,会运⾏视图创建的sql查询语句创建出⼀张临时表1-2. 如何⽤1、⽤法
1)创建
CREATE VIEW 视图名(<;视图性别列1>,<;视图性别列2>) AS <select查询语句>
CREATE VIEW 按性别汇总(性别,⼈数) AS SELECT 性别,count(*) FROM student GROUP BY 性别;
2)使⽤
在from⼦句中使⽤视图名称代替表名
SELECT 性别,⼈数 FROM 按性别汇总
3)删除视图
在Navicat客户端中直接删除即可1-3. 有什么⽤
1-3. 有什么⽤
频繁使⽤的情况下,提⾼效率
视图会随着表数据⾃动更新
1-4. 注意事项
不保存数据,节省存储数据的设备空间1-4. 注意事项
避免在视图的基础上再创建视图
多重视图会降低视图的性能和效率
不能在视图中插⼊数据
视图⼀般⽤于select⼦句,⽤于插⼊语句会报错
2-1-1. 是什么
2-1. ⼀般⼦查询2-1-1. 是什么
2. ⼦查询
2. ⼦查询2-1. ⼀般⼦查询
⼦查询:嵌套的select语句
SELECT 性别,⼈数 FROM (
SELECT 性别,count(*) as ⼈数
FROM student
GROUP BY 性别 )
as 按性别分组
2-1-2. 如何⽤
1)⽤法
两种⽤法
from ⼦句直接使⽤
where⼦句⾥与运算符in、any、all、some配合使⽤
2)
⽰例1:出每门课程⾥,成绩最低的学号
第⼀步:计算每门课的最低值
SELECT 课程号,MIN(成绩) as 最低成绩 FROM score GROUP BY 课程号
第⼆步:
⽰例2:那些学⽣的成绩⽐课程0002全部成绩的任意⼀个⾼呢?
SELECT DISTINCT(学号)
FROM score
WHERE 成绩 > ANY(
SELECT 成绩
FROM score
WHERE 课程号='0002'
)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论