mysql教材第四章课后题答案_Mysql第四章:mysql语法练习⽬录java
1:mysql经常使⽤语法练习
⾸先默认表数据以下:
2:查询语句(select)
select * from user //查询全部数据
select name,age from user //查询指定字段
select distinct address from user// 因为地址信息有深圳,河南相同。查询结果为去重复
select * from user LIMIT 3,2 //从第3⾏开始查询2条数据。 查询结果是id是4,5的数据
3:排序语句(order by)
select * from user ORDER BY age //默认asc是a-z 数字1-9 升序,此处显⽰结果是1991-2020
select * from user ORDER BY age desc//desc是z-a,9-1 降序 此处显⽰结果是2020-1991
select * from user ORDER BY age desc,name //⾸先age降序2020-1991,⽽后name升序a-z
4:单⼀过滤语句(where)
//单⼀条件过滤语句
select * from user where name='bb' //等于
select * from user where age='2013-03-02'//等于
select * from user where name <> 'bb' // 不等于 查询名字不等于bb的数据
select * from user where name != 'bb' // 不等于 查询名字不等于bb的数据
select * from user where age >'2013-03-02' //⼤于 适⽤于⽇期和数值类型
select * from user where age >='2013-03-02' //⼤于等于 适⽤于⽇期和数值类型
select * from user where age
select * from user where age <='2013-03-02' //⼩于等于 适⽤于⽇期和数值类型
select * from user where age BETWEEN '2013-03-02' AND '2020-03-02'//介于⼆者之间
select * from user where age is null //空值判断
5:组合条件过滤语句(where + 操做符)
//组合条件过滤
select * from user where name='bb' and address='河南' //and 两个条件都需套知⾜
select * from user where name='bb' OR address='深圳' //or 条件只需知⾜⼀个便可
select * from user where (address='河南' or address='深圳') and name='bb'//and运算优先级⾼和or混⽤的时候要加括号
select * from user where name in ('bb','cc','李四')//in操做符,与or操做符⼀致
select * from user where name not in ('bb','cc','李四') //not in操做符,与in相反
6:通配符过滤语句(like)
//通配符过滤(通配符效率⽐较低 尽可能不⽤在开始的位置)
select * from user where address LIKE '%南%' //包含有南的地址信息
select * from user where address like '河%1' //以河开始 1结束的地址信息
7:字段拼接求和
//拼接字段
select *,CONCAT(name,'(',address,')','0000') as name_address from user //CONCAT函数⽤来拼接字段name(address)0000,⽽且将字段别名为name_address
//查询全部的字段和sid*score ⽽且命名为求和
select *,sid*score as 求和 from score
8:数据处理函数
//数据处理函数
select *,UPPER(name) as ⼤写 from user where address ='河南' //字段转⼤写
select *,LOWER(name) as ⼩写 from user where address ='河南' //字段转⼩写
select *,LEFT(name,3) from user //字段截取3位
//⽇期处理函数
select * from user where age='1991-03-02'
select * from user where DATE(age)='1991-03-02'//匹配年⽉⽇
select * from user where YEAR(age) BETWEEN '1991' and '2010' //匹配年
select * from user where DAY(age)='02' //匹配⽇
9:汇总函数(avg max min count)
select * from score
select AVG(score) from score where student_id=1 //学号1的学⽣的平均分
select MAX(score) from score where student_id=1 //学好1的学⽣的最⾼分
select MIN(score) from score where student_id=1 //学好1的学⽣的最低分
select COUNT(*) from score //查询⾏数,全部⾏ 跟count(1)差很少
select COUNT(1) from score //查询⾏数,全部⾏ 使⽤到主键索引 ⽐较快
select COUNT(score) from score //查询⾏数 忽略字段为null的⾏ 该列没有索引会⽐较慢
10:数据分组(group by  having)
//group by数据分组 having过滤分组
select student_id,AVG(score),MAX(score),MIN(score) from score GROUP BY student_id HAVING AVG(score)>60 11:⼦查询
//⼦查询,查询结果是其余查询的条件,查询学⽣表的学⽣id,根据学⽣id查询分数
select * from score where student_id in (select sid from students)
12:链接查询
select * from a JOIN b on a.id=b.a_id //内连接(JOIN) 交集
select * from a INNER JOIN b on a.id=b.a_id //内连接(inner join) 交集
select * from a LEFT JOIN b on a.id=b.a_id //左连接 左边查询所有数据,关联右边
select * from a RIGHT JOIN b on a.id=b.a_id//右链接 右边查询所有数据,关联左边
select id from a
UNION
select address from b
//UNION求并集 除⾍重复
select id from a
UNION all
select address from b
//UNION all求并集 不去重复
13:视图 (视图不包含数据,修改表数据,视图也会改变)
13.1:为何使⽤视图
1:重⽤复杂的sql,便于运维
2:使⽤表的部分组成字段⽽不是所有的sql,使⽤表的⼀部分
mysql重启后无法启动3:保护数据,经过视图访问部分数据,⽽不是直接查询全部的表。
写了⼀个很复杂的sql查询出来告终果,这些结果是不少各表
13.2:建⽴视图
//建⽴视图,将表b中的address和a_id抽取出来构成视图。
select * from b
CREATE VIEW view1 as
select address,a_id from b
select * from view1//查询视图
UPDATE view1 SET address='update' where address='view'//修改视图
14:存储过程
14.1:什么是存储过程
存储过程是sql的封装,将复杂的sql封装成⼀个⽅法,能够有输⼊和输出参数,给外部调⽤。实现较为复杂的逻辑。
14.2:存储过程的优缺点mysql语句多表查询
优势:
1:性能⾼:将不⼀样的sql封装,⽐单条sql执⾏效率⾼,链接屡次数据库。只需链接数据库⼀次,存储过程在建⽴的时候直接编译,⽽sql语句每次使⽤都要编译,提升执⾏效率
2:简单:复杂的sql封装,只管调⽤。外部简单,相似于java的⽅法封装同样
缺点:
1:对于专业技能姚要求⾼,简单的sql没必要要封装成为存储过程,复杂的才须要,因此对于技术要求⾼
2:移植能⼒较差,维护⿇烦
14.3:案例⽰范
--1:建⽴存储过程PROCEDURE1
CREATE PROCEDURE PROCEDURE1()
BEGINsqlunique是什么意思啊
select * FROM students;python爬虫教程+我要自学网+百度云
END;
--2:建⽴存储过程PROCEDURE2
--这⾥先解释⼀下delimiter //是什么意思
--mysql客户端中分隔符默认是分号(;),因此若是不指定⼀个特殊的分隔符,可能会编译失败--上⾯语句将分隔符改成//,直到遇到下⼀个//才表⽰语句结束,这样能够保证建⽴语句完整。delimiter //
CREATE PROCEDURE PROCEDURE2()
BEGIN
select * FROM students;
END//
delimiter ;
--3:调⽤存储过程procedure1
CALL procedure1
--4:调⽤存储过程procedure2
CALL procedure2
--5:建⽴含有参数和返回值的存储过程
web应用防火墙
CREATE PROCEDURE PROCEDURE2(
OUT a DECIMAL(8,2), #输出参数 (out 参数名字 参数类型)
OUT b DECIMAL(8,2), #输出参数 (out 参数名字 参数类型)
OUT c DECIMAL(8,2), #输出参数 (out 参数名字 参数类型)
in d INT #输⼊参数 (in 参数名字 参数类型)
)
BEGIN
select avg(score) INTO a #into 绑定输出参数
from score where student_id=d #直接饮⽤输⼊参数d
GROUP BY student_id;
select max(score) INTO b #into 绑定输出参数
from score where student_id=d #直接饮⽤输⼊参数d
GROUP BY student_id;linux默认shell
select min(score) INTO c #into 绑定输出参数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。