标签:
资料是从教材弄下来的,主要内容是练习实例,在写博文中学习命令行,当然也希望这篇博文能帮助其他人学习mysq数据库命令
SELECT 语句可以从一个或多个表中选取特定的行和列
SELECT 指定要查询的列名称,列与列之间用逗号隔开。
[ALL|DISTINCT] ALL(默认)显示所有行,包括重复行 | DISTINCT 消除重复行
[FROM表名[,表名]……] 指定要查询的表,可以指定两个以上的表,表与表之间用逗号隔开。
[WHERE子句] 指定要查询的条件。where子句必须紧跟FROM子句之后。
列出了过滤条件类型和用于过滤数据的条件。
[GROUP BY子句] 子句用于对查询结构进行分组。
[HAVING子句] 指定分组的条件,通常在GROUP BY子句之后。
[ORDER BY子句] 用于对查询结果进行排序。【asc(升序) | desc(降序)】
[LIMIT子句] 限制查询的输出结果行。
下面是实例
1.在学生表(students)查询学生的学号(s_no),姓名(s_name),联系电话(phone)
select s_no,s_name,phone from students;
运行结果:
2.查询(students)表中学生所在系部(d_no),去掉重复值。SQL语句 如下
select d_no distinct from students;
这是加了distinct(去掉重复行)语句的图
这是没有加distinct语句的(形成了鲜明的对比)
3.从students表统计男生(sex)的学生人数,SQL语句如下。
select count(*) as 男生人数 from students where sex="男";
运行结果:
count()为计算数量的函数,*号是通配符 , as ** 是注释
4.查询学生的姓名(students表,s_name)、系部名称(department表,d_name)和联系地址(students表,address),SQL语句如下
select S_NAME as ‘姓名’,D_NAME as ‘系部’,address as‘地址’ from students,departments where students.d_no = departments.d_no;
多表查询,FROM后面的各个表用逗号隔开 WHERE后面指明表与表之间的全连接,因为这是2张表,而他们有相同的列名,必须进行表与表的链接。不然会得到错误数据
5.在成绩表(score)中查询选修了A001课程(c_no)且成绩(report)在80分以上的学生,SQL语句如下。
select * from score where c_no="A001" and report > 80;
有2个或以上的条件时,条件与条件直接用 and链接
6.在students表中查询出生日期(birthday)在1992年5月出生的学生。
select * from students where birthday between "1992-5-1" and ‘1992-5-31‘;
between是区间,范围的意思
运行效果如图
7.在students表中查询院系编号(d_no)为D001或D002的学生。
select * from students where d_no in(‘d001‘,‘d002‘);
用in去查找 d_no 表中的数据,有几个再加逗号就行了
8.在students表中查询电话(phone)不为空的学生信息。
select * from students where phone is not null;
查询结果
真正的空值是会显示NULL的,有一个空格都不算null
9.在students表中查询姓(s_name)李的学生信息。
select * from students where s_name like‘李%‘;
其中like里面的符号的可能值(有点像正则表达式0.0)
10.在students表中查询住址(address)在北京路的学生信息。
select * from students where address like‘%北京%‘;
11.在students表中查询姓名(s_name)是两位字符的学生信息
select * from students where s_name like ‘__‘;
一个‘_‘代表一个字符、
运行结果
这样就能查找到名字是2位的数据了
GROUP BY子句主要根据字段对行分组。例如,根据学生所学的专业对STUDENTS表中的所有行分组,结果是每个专业的学生成为一组。
下面的例子难度稍稍加大了。
12.在students表中按系(d_no)统计各系的学生人数,SQL语句如下
select d_no as ‘系别‘ count(*) as ‘各系人数‘ from students group by d_no;
13.在students表中统计各系(d_no)男女生(sex)人数。SQL语句如下。
select d_no as ‘系别‘, sex as ‘性别‘ ,count(*) as ‘人数‘ from students group by d_no,sex;
可以指定多列分组。若指定多列分组,则先按指定的第一列分组再对指定的第二列分组,以此类推。
14.在score表中求选修的各门课程(c_no)的平均成绩(report)和选修该课程的人数
select c_no, count(c_no) as ‘选修人数‘, avg(report) as ‘各系平均成绩‘ from score group by c_no;
运行结果
因为求的是各部门(c_no)的平均成绩,所以以c_no为分组依据group by c_no
15.在teachers表中统计各系(d_no)教师人数,包括汇总行。SQL语句如下。
select d_no as ‘系别‘, count(*) as ‘人数‘ from teachers group by d_no with rollup;
null 20为人数汇总 教师人数20个
使用带ROLLUP操作符的GROUP BY子句: 在结果集内不仅包含由GROUP BY提供的正常行,还包含汇总行。
16.在score表中按成绩(report)降序排序列出选修AOO1课程(c_no)的学生学号(s_no)和成绩,SQL语句如下。
select s_no as ‘学号‘, c_no as ‘课程‘ ,report as‘成绩‘ from score where c_no=‘A001‘ order by report desc;
运行结果
默认是升序,当需求是升序时 可以不写order by 列名 asc ,当需求是降序时。加上 order by 列名 desc
标签:
原文地址:http://www.cnblogs.com/lijinwen/p/5444956.html