1、创建表
create table 表名(id int(4), name char(10) );
insert into 表名(id,name) values(值1,值2...),(),();
查询:
select * from 表名 where语句;
student;
+-----+--------+-----+-----------+------------+--------------+
| Id | Name | Sex | BirthYEAR | Department | Address |
+-----+--------+-----+-----------+------------+--------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
+-----+--------+-----+-----------+------------+--------------+
score;
+----+--------+--------+-------+
| Id | Stu_id | C_name | Grade |
+----+--------+--------+-------+
| 1 | 901 | 计算机 | 98 |
| 2 | 901 | 英语 | 80 |
| 3 | 902 | 计算机 | 65 |
| 4 | 902 | 中文 | 88 |
| 5 | 903 | 中文 | 95 |
| 6 | 904 | 计算机 | 70 |
| 7 | 904 | 英语 | 92 |
| 8 | 905 | 英语 | 94 |
| 9 | 906 | 计算机 | 90 |
| 10 | 906 | 英语 | 85 |
+----+--------+--------+-------+
1、查询student表的所有记录
select * from student;
2、查询student表的第2条到4条记录
limit a,b a当前行 b 显示的行数 从当前行下一行开始显示
limit 1,3
select * from student limit 1,3;
练习:查询成绩表前三行数据
select * from score limit 0,3;
3、从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
select id,name,department from student;
4、从student表中查询计算机系和英语系的学生的信息
select * from student where department='计算机系' or department='英语系';
5、从student表中查询年龄18~22岁的学生信息
select * from student where 2017-BirthYEAR between 18 and 22;
select * from student where 2017-BirthYEAR>=18 and 2017-BirthYEAR<=22;
count() sum() max() min avg distinct()
mod 求余
select grade,(grade mod 3) from score;
select grade,(grade mod 3) from score where (grade mod 3) =0;
select..from ..(where)..group by ..having ..order by ..limit;
group by 分组 having 分组后进行的条件选择
order by ..asc
order by 列名 desc
对成绩表中各科成绩从高到低排序,如果成绩相同,则按照学号由小到大排序
select stu_id,grade,c_name from score order by c_name desc,grade desc,stu_id asc;
+--------+-------+--------+
| stu_id | grade | c_name |
+--------+-------+--------+
| 901 | 98 | 计算机 |
| 906 | 90 | 计算机 |
| 904 | 70 | 计算机 |
| 902 | 65 | 计算机 |
| 905 | 94 | 英语 |
| 904 | 92 | 英语 |
| 906 | 85 | 英语 |
| 901 | 80 | 英语 |
| 903 | 95 | 中文 |
| 901 | 88 | 中文 |
| 902 | 88 | 中文 |
+--------+-------+--------+
between and
limit
6、从student表中查询每个院系有多少人
select count(*),Department from student group by Department;
7、从score表中查询每个科目的最高分
max(grade)
select max(grade),c_name from score group by c_name;
8、计算每个学生的总成绩
select sum(grade),stu_id from score group by stu_id;
总成绩大于150分的学生
select sum(grade),stu_id from score group by stu_id having sum(grade)>150;
哪一性别的学生人数是大于2人的?
select sex,count(*) from student group by sex having count(*)>2;
9、计算每个考试科目的平均成绩
select avg(grade),c_name from score group by c_name;
10、将计算机考试成绩按从高到低进行排序
select grade,c_name from score where c_name="计算机" order by grade desc;
11、查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
like
%全匹配
_ 单个字符匹配
name like “%18K%”
select goods_name from ecs_goods where goods_name like '____18K_____';
1、多表连接一般步骤
① 找涉及了哪些表
② 找表与表的对应关系
③ 建立连接关系
④ 写完整的SQL
注意点:
1、别名用法
2、一旦用了别名,select where 都要用别名了
3、如果查询的内容在多个表中都有相同的字段,那么必须指明是来自哪个表
多表查询:
1、男同学的考试科目
select c_name,sex from score,student where student.id=score.stu_id and sex="男";
select distinct c_name from score where stu_id in (select id from student where sex='男');
2、姓张同学的考试科目
select c_name from score,student where student.id=score.stu_id and name like "%张%";
3、同时学习英语和计算机的学生信息
select s1.* from student s1,score s2,score s3 where s1.id=s2.stu_id and s1.id=s3.stu_id and s2.c_name='计算机' and s3.c_name='英语';
练习:
1、女同学的考试科目
select distinct c_name from score,student where student.id=score.stu_id and sex='女';
2、同时学习中文和计算机的学生信息;
select s1.* from student s1,score s2,score s3 where s1.id=s2.stu_id and s1.id=s3.stu_id and s2.c_name='计算机' and s3.c_name='中文’;
3、姓王的同学并且有一科以上成绩大于80分的学生信息;
select distinct student.id,name,sex,birthyear,department,address from student,score where student.id=score.stu_id and name like '%王%' and grade>80;
1、查询李四的考试科目(c_name)和考试成绩(grade)
2、查询计算机成绩低于95的学生信息
3、查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
网友评论