mysql经典语句

1 数据库基础:

增删改查:insert  into  delete  update  select 

聚合函数:sum count max min avg

排序:order by asc desc

子查询:select *from stuinfo where id =(where max(id) from stuinfo)

表连接查询:内连接 inner join  左连接: left join  右连接:right join

多表查询 select *from stuinfo cinfo where ........

表操作:create alert drop 

2.内连接和外连接的关键字是什么?有什么区别?

内连接 inner join 外连接 left join right join

内连接是把两张表相同的地方匹配出来,外连接是以左边或右边的表作为主表,把主表内容都显示,从表没有内容置为空处理。

3.如何查询的时候只显示前5行数据?

oracle:使用top select top 5*from 表名

mysql 数据库 使用limit.  select *from 表名 limit 10

训练题:

实现下列数据库要求,除第5题以外,其他均用单条sql语句。
1.创建学生表(学生id 整型 主键,姓名 可变长字符型40)
2.创建课程表(课程id 整型 主键,课程名称 可变长字符型40)
3.创建成绩表(
学生id 整型 非空,
课程id 整型 非空,
成绩 数值型共4位其中小数1位,
对学生表建立外键 )
4.从成绩表对课程表建立外键,外键名自拟
5.向学生表、课程表和成绩表各写入若干条数据,要求学生中有学号不同姓名相同的数据。
6.取出唯一的姓名
7.查询成绩<60的学生姓名、课程名称、成绩
8.按课程名称统计各门课程的信息:课程名称、最高分、最低分、平均分并按课程名称的降序排序。
9.统计至少有2门成绩>=90的学生信息:学生姓名,课程数量
10.查询每门课的成绩都大于80分的学生的姓名
11.给所有小于60分的成绩加5分。

-- 1.创建学生表(学生id 整型 主键,姓名 可变长字符型40)

create table stu(stuid int primary key ,stuname varchar(40));

-- 2.创建课程表(课程id 整型 主键,课程名称 可变长字符型40)
create table course(cid int primary key ,cname varchar(40));

-- 3.创建成绩表(
-- 学生id 整型 非空,
-- 课程id 整型 非空,
-- 成绩 数值型共4位其中小数1位,
-- 对学生表建立外键
-- )
create table score(stuid INT NOT NULL, #学生id 整型 非空,
cid INT NOT NULL,#课程id 整型 非空,
grade decimal(4,1),#成绩 数值型共4位其中小数1位,
constraint fc_s_c foreign key(stuid) references stu(stuid)#成绩表对学生表建立外键
);

-- 4.从成绩表对课程表建立外键,外键名自拟
alter table score add constraint fk_c_s foreign key(cid) references course(cid);

-- 5.向学生表、课程表和成绩表各写入若干条数据,要求学生中有学号不同姓名相同的数据。
-- 学生表:
insert into stu values(1,'王二'),(2,'王二'),(3,'张三'),(4,'张三'),(5,'李四');

-- 课程表:
insert into course values(1,'测试'),(2,'java'),(3,'sql');

-- 成绩表:
insert into score values(1,1,60),(1,2,45),(1,3,34),
(2,1,87),(2,2,88),(2,3,89),
(3,1,91),(3,9,92),(3,3,91),
(4,1,92),(4,2,95),(4,3,55),(5,1,34),(5,2,56),(5,3,46);

-- 6.取出唯一的姓名(分析:学生表中,distinct 过滤学生表中重复的姓名)

select distinct(stuname) from stu;

-- 7.查询成绩<60的学生姓名、课程名称、成绩
select stuname,cname,grade
from stu a,course b,score c
where a.stuid =c.stuid AND b.cid =c.cid AND grade<60;

--8.按课程名称统计各门课程的信息:课程名称、最高分、最低分、平均分并按课程名称的降序排序。
select cname,max(grade),min(grade),avg(grade) #课程名称、最高分、最低分、平均分
from course b,score c #来自的表格课程表,成绩表
where b.cid=c.cid #课程名称建立连接
group by b.cid #分组
order by b.cname desc; #按课程名称的降序排序

-- 9.统计至少有2门成绩>=90的学生信息:学生姓名,课程数量
select distinct a.stuname 姓名,x 课程数量
from stu a,(select a.stuid,count(cid) x from stu a,score b
where a.stuid=b.stuid and b.grade>=90
group by a.stuid
having count(cid)>=2)b
where a.stuid=b.stuid;

-- 10.查询每门课的成绩都大于80分的学生的姓名
select stuname
from stu a,score b
where a.stuid=b.stuid and grade >80
group by stuname

-- 11.给所有小于60分的成绩加5分。

 update score set grade=grade+5 where grade<60;

回忆滋润坚持
原文地址:https://www.cnblogs.com/james5d/p/14094509.html