数据查询语句-单表无条件查询:
格式:
select [distinct] <选项> [as <显示列名>] [,<选项> [as <显示列名>] [,……] from <表名\视图名> [limit [M,]N]
前期准备:
1、使用select语句
(1)查询所有的数据列
用*表示所有的列:
select * from 表名;
(2)查询部分行和列
需要查询那些字段,把字段写出来
select sno from 表名;
(3)在查询中使用列(字段)的别名
As可改变结果集中列的名称(注:as可以省略)
select sname as 名字 from 表名;
(4)查询空值
在MySQL中,空值(Null)与空字符(’’)相同吗?答案是否定的。
举例说明:插入空字符串” ”;然后进行查询;
在SQL语句中采用”is null”或者”is not null”来判断列值是否为空值,查询为null值的用法;
Update 表名 set ssex="男" where ssex is null;
例1:查询student表里sbirthday为空值的记录;
例2:查询sc表里成绩为null的记录;
2、常用函数
例1:查询sc表所有学生的总成绩;
select sum(degree) from sc;
例2:查询sc表所有学生的平均成绩;
select avg(degree) from sc;
例3:查询student表总共有多少行记录;
select count(*) from student;
注:count(sno)代表sno这个字段总共出现多少行记录;
count(*)代表所有字段总共出现多少行记录
注:字段值为null值,这时候不计数;
例4:查询student表里名字没有重复的总共有多少行记录;
select count(distinct sname) from student;
例5:查询student表里每个人的出生年份,出生月日;
DATE_FORMAT(date,"%m%d");
select sname,DATE_FORMAT(sbirthday,"%m-%d") from student;
3、limit 的用法
limit m:表示显示前m行记录;
limit m,n:表示从m+1条记录开始显示,总共显示n条记录;
例1:显示student表里的第2行到第6行记录;
select * from student limit 1,5;
4、distinct的用法
Distinct用于去重
例1:显示student表里去重后的系别;
例2:显示student表里去重后的名字;
例3:求student表去重后的名字一共有多少个;
select distinct 系别 from student;
select distinct 名字 from student;
select count(distinct sname) from student;
题型总结
(1)在gradem库里查询teacher表里tno,tname字段,列名显示用中文;显示形式如下:(as 给字段重命名)
教师编号 | 教师姓名 |
101 | 李新 |
102 | 小小 |
103 | 小明 |
104 | 小米 |
select tno as 教师编号,tname as 教师名字 from teacher;
(2)请在gradem库的sc表查询已经选修了课程的学生的学号,要求学号不重复显示;(及显示选修课程的学生去重后的学号)函数:distinct(用于字段去重)
select distinct sno from sc where cno is not null and cno !="";
(3)查询gradem库里sc表里成绩为空字符或者null的记录;
select * from sc where degree is null or degree="";
(4)在gradem库的sc表里,查询课程co2的平均成绩;
avg:实现求字段的平均值;
select avg(degree) from sc where cno="c02";
(4)在gradem库的sc表里,查询课程co2的总成绩;
sum:实现求字段的和;
select sum(degree) from sc where cno="c02";
(5)查询student表里每个学生的年龄(可能涉及到year函数以及DATE_FORMAT函数)
select year(now())-year(sbirthday) #错误思想
逻辑判断:生日月日>当前时间月日:年的差值-1
生日月日<=当前时间月日:年的差值-0
例:2000年11月11日,2019-2000-1
select year(now())-year(sbirthday)-(DATE_FORMAT(sbirthday,"%m%d")>DATE_FORMAT(now(),"%m%d") from student;
学生:2000年11月11日生日:2019-2000=19还是18;
(6)显示sc表去重后的课程数有多少;(count 计数)
select count(distinct cno) from sc;
(7)显示teacher表里的第3行到第8行记录;(8-3+1)
limit m,n:从m+1行开始显示,总共显示n条记录;
limit 2,6;
select * from teacher limit 2,6;
(8)显示teacher表里的前9行记录;
select * from teacher limit 9;
单表无条件查询:
as 给字段起别名(as省略)
sum(字段的和) avg(字段的平均值) count(计数) year(date)返回日期的年份
DATE_FORMAT(date,format)(转化日期的格式)
limit : limit m;查看前m行
limit m,n:从m+1行开始显示,总共显示n条记录;
distinct:字段去重