SELECT-WHERE子句示例
学生表中性别为女,体重大于60
select *from stu where sex=‘女’ and weight>60;
学生表中1班或者2班,身高超过190
select *from stu where (cno=1 or cno=2) and height>190;
等效写法
select *from stu where cno in(1,2) and height>190;
学生表中3班学生考分在400和505.5之间的女生
select *from stu where cno=3 and sex=‘女’ and (score》=400 and score 《=505.5)
学生表中没有分配班级而且是女生
select *from stu where sex=‘女’ and cno is null;
学生表中体重低于40公斤身高低于1.65米的学生 列出其身高,姓名 体重 总分,以及总分占750分满分的百分比;
select height,sname,weight,score ,(score/750)*100 from stu where weight<40 and (height/100)<1.65;
学生表中查找学生姓名,第二个字是‘候’,或者第一个字是‘张’,且名字只有两个字的学生
select from stu where sname like ‘%候%’ or ‘张_’;
char_length(str)
计算参数str中有多少个字符,
查看字符串‘中国人’有几个字
select char_length(‘中国人’);
学生表中姓名为三个字的学生有哪些?
select sname,char_length(sname)from stu where char_length(sname)=3;
常用字符串函数
substring(str,pos,len)
把参数str字符串从第pos位起,截取len位
例如把‘我是中国人’字符串从第三位起截取3位字符
select substring(‘我是中国人’,3,3);
二班同学都有什么姓氏
select sname,substring(sname,1,1) from stu where cno=2;
常用数值函数
round(num,n)对数字num进行四舍五入运算,从第n位小数算起
例如15.5469,保留2位小数,从第二位小数进行四舍五入
select round(15.5469,2);
计算肥胖学生许褚的bmi值,四舍五入保留2位小数,体重/身高^2
select round(weight/height/100height/100,2) from stu where sname=‘许褚’;
常用日期函数
year(data):获取data的年份
month(data):获取data的月份
例:学生表中那些同学是1990年出生的?
select sname,birth,year(birth) from stu where year(birth)=1990;
例:学生表中那些同学是8月出生的?
select sname,birth,year(birth),month(birth) from where month(birth)=8;
curdate()-获取当前日期;
curtime()-获取当前时间;
now()-获取当前日期和时间;
datediff(date1,date2)-返回date1和date2两个日期间隔的天数
例:计算2018-6-1和2018年情人节之间间隔的天数
select datediff(‘2018-6-1’,‘2018-2-14’);
例:计算学生中学生的年龄,显示姓名,生日,年龄(保留两位小数),只显示小于290岁的同学
select sname,birth,round(datediff(curdate(),birth)/365,2) 年龄 from stu where round(datediff(curdate(),birth)/365,2)<20;
常用条件判断函数
if(expr,v1,v2)-如果表达式成立,返回v1,否则返回v2;
如果学生高考分大于等于520,其为统招生,否则为委培生,从学生表中查找,显示姓名,考分,类型(统招或委培)
select sname,score,if(score>=520,‘统招’,‘委培’) 类型 from stu;
case运算符:
case when expr1 then v1 [when expr2 then v2]……else end
例子:如果考分700以上,优秀,600以上,良好,520以上,中等 否则 较差
按照这个原则列出学生表中的学生,显示姓名,考分,评判等级:
select sname,score,(case when score>700 then ‘优秀’ when score>600 then ‘良好’ when score>520 then ‘中等’ else ‘较差’ end) from stu;
常用空值处理函数
空值问题-使用in时,值列表中有null值,不会返回null相关结果
select from stu where cno in(2,null);
使用not in列表中有空值时,无查询结果返回
select from stu where cno not in(2,null);
常用空值处理函数
ifnull(v1,v2)–如果为空返回v2,否则返回v1;
isnull(expr)–如果表达式为null空值,返回1,表达式非空时返回0;
常用聚合函数
max(列名)统计最大值
min(列名)统计最小值
sum(列名)统计所有行中数值的总和
avg(列名)统计所有行中数值的平均值
count(列名)统计出列中所有航的数量
ll列1:找出学生中最高的身高,最轻的体重,平均高考分数,学生的总数
select max(height),min(weight),sum(score)/count(),avg(score),count(),count(sno),count(cno) from stu;
s例2:用一个查询语句找出学生中最低的身高,在显示所有人的姓名:
select min(height) concat(sname) from stu;应该是错的
distinct关键字
distinct关键字查询出制定的1个或多个字段的不重复记录
例1:查询学生表中都有哪些班级号,要求去除重复的班号
select distinct cno from stu;
列出学生表中不重复的班号和性别
select distinct cno,sex from stu;
列的别名
列别名:给列起个额外的名称用来替代列原来的名称
select sname [as] 姓名 from stu; 'as’可写可不写
列1:列出2班的学生姓名,性别,生日。表头用对应的中文显示
select sname as 学生姓名,sex as 性别,birth as 生日 from stu where sno=2;
表的别名
给表起个额外的名称代替原来的名称
select s.sname,s.sex from stu as s; 'as’可写可不写
l列1:列出2班的学生姓名,姓名,生日。表头用对应的中文显示
select s.sname 姓名,s.sex 年龄,s.birth 生日 from stu as s where s.cno=2;
oder by子句
selcet *from stu order by weight;
例2:展示已分班学生信息,先按照班号增序,再按照考分降序排列;
select *from stu where cno is not null order by cno,score desc;
例3:按照平音降序排列所有的学生:
select *from stu order convert(sname using gbk) desc;
a显示学生性别,姓名,生日3列信息,先按第1列,再按第三列降序排序
select sex,sname,birth from stu order by 1,3 desc;
limit子句
select语句中的limit子句最后执行
作用-仅显示查询结果集中的部分内容
显示stu表中考分最高的3名学生;
select from stu order by score desc limit 3;
,或
select from stu order by score desc limit 0,3;0代表位置
group by子句
1:按照班号分组,列出学生表中的班号
select cno from stu group by cno;
2:按照班号分组,列出学生表中的班号,统计每个班的平均身高,平均体重,人数,最高分,不包括未分班的那些同学;
select cno 班级号,avg(height) 平均身高,avg(weight) 平均体重,count() 人数,max(score) from stu where cno is not null group by cno;
3:按照学生出生年份分组,统计出所有学生每个年份的人数,最高分,最低分,按照年份排序
select year(birth) 出生年份,count(cno)人数,max(score) 最高分,min(最低分) from stu group by year(birth) order by 1;
3:按照学生出生年份分组,统计出所有学生每个年份的人数,最高分,最低分,按照年份排序,并从结果中找出人数超过两个最高分超过600的年份
select year(birth) 出生年份,count(cno) 人数,max(score) 最高分,min(score)最低分 from stu group by year(birth) having count()>2 and max(score)>600 order by 1;
SQL语言基础
最新推荐文章于 2023-04-22 09:35:48 发布