mysql中重要的语句_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,'李四');

eea0ddc910f135f6e1377679480b07a9.png

-- 课程表:

insert into course values(1,'测试'),(2,'java'),(3,'sql');

aeafe65ca2b01e02fe431dad70620975.png

-- 成绩表:

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);

45f0495baac2cbbcbc092adeb4aa0994.png

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

select distinct(stuname) from stu;

5932e7b07a7096713a0a52d0c74c2bb8.png

9416c79ca99aac2e7d97b054e151c4a8.png

-- 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;

8ab505f0d99a61ca7d73d61b30855373.png

--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; #按课程名称的降序排序

858295daf1de877e345905f67d2eb28e.png

-- 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;

68f724bad5a33d9a9f6bd2ca7369ecb7.png

-- 10.查询每门课的成绩都大于80分的学生的姓名

select stuname

from stu a,score b

where a.stuid=b.stuid and grade >80

group by stuname

58ab76e19c85f3133893f94b34133d50.png

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

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

3077c14821de16f970403f03f9f90789.png

a611f8cf9c278dc192fc67a14ccb5ff3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值