题目1:MySQL基本练习【单、多表】
一、 选择题(每题3分,满分30分)
列出客户订单总金额大于3000的数据,正确的是( )
A. select C_ID,sum(orderAmount) from t_orders group by C_ID having sum(orderAmount)>3000;
B. select C_ID,sum(orderAmount) from t_orders where sum(orderAmount)>3000 group by C_ID;
C. select C_ID,sum(orderAmount) from t_orders where sum(orderAmount)>3000;
D. select C_ID,sum(orderAmount) from t_orders group by C_ID where sum(orderAmount)>3000;
解析:A
where只能把当前表中存在的列作为查询条件
having 二次过滤 将一次查询产生的结果表中存在的列作为条件
模糊查询( ),可以检索出以“M”开头,且第二个字符不是“c”的所有字符串
A. like ‘Mc_’B. like ‘Mc%’C. like ‘M[^c]_’D. like ‘M[^c]%’
解析:D
模糊查询-----搜索框
语法:like 支持正则
demo:‘花里胡哨的猛男’
%匹配任意长度的任意字符 :like demo ‘花%’ like demo ‘%花’ like demo ‘%花%猛%’
_匹配一个任意字符:like demo ‘花-’ like demo ‘-花’ like demo ‘-花-猛-’ 【限制字符串长度】
[ ]匹配[ ]中的任一字符:like name ‘[大小黑灰]白’ :大白、小白、黑白、灰白
[^ ]匹配除[ ]中的任一字符:
like name ‘[^大小黑灰]白’ 除【大白、小白、黑白、灰白】之外的任一情况
在SQL查询时,使用( )子句可以指定分组
A. where
B. having
C. when
D. group
解析:D
replace函数的作用是( )
A. 字符串替换
B. 取最大值
C. 取最小值
D. 获取当前时间
解析:A
描述年龄20到25之间正确的表达式是( )
A. between 20 to 25
B. between 20 and 25
C. no between 20 to 25
D. no between 20 and 25
解析:B
查询t_student表中所有非空email信息,以下语句正确的是( )
A. select email from t_student where email != null;
B. select email from t_student where email not is null;
C. select email from t_student where email <> null;
D. select email from t_student where email is not null;
解析:D
在mysql中 = != 判空无效,判空用 is null is not null
<> :不等于 select * from t_account where balance<>name;
<=> 【左右两边的字段的值相等或者都是Null 返回true】:
select * from t_student where id <=> age; 返回满足条件的数据记录,如果没有满足条件的数据,则返回空表
定义金额,适宜使用的类型为( )
A. int
B. real
C. varchar(30)
D. double
解析:D
tinyint小整型 -128-127
int/Integer大整型 :age int(2) 【实体类 封装 private Integer Double】
float单精度
double双精度
decimal精确度:字段 money decimal(5,2) 5是数字总长度 2 是小数部分长度 999.99
定义列中可以接受的数据值或格式,称为( )
A. 唯一性约束
B. 检查约束
C. 主键约束
D. 默认约束
解析:B
数据库:-----数据库软件
关系型:行表:oracle sql server mysql DB2 sybase
非关系型:key-value : redis mongoDB memcache
数据库服务:mysql mysql 57
库:一对多
表:一对多 行和列
sql—高级语言 — 大部分数据库软件使用语法基本相同 部分语法不同、支持不同
sql六大约束:
not null 非空
unique 唯一
primary key 主键
foreign key 外键
check 检查 mysql不提供支持、使用无效 sex varchar(3) check in(‘男’,‘女’) 男女左右AB
default 默认
非标准约束:unsigned 无符号 ,只限制整型,不能修饰主键
从产品表t_products中查询单价unitprice在6-10的产品名称和单价信息,正确的SQL是( )
A. select name,unitprice from t_products where unitprice between 6 and 11;
B. select name,unitprice from t_products where unitprice between 10 and 6;
C. select name,unitprice from t_products where unitprice in(6,10);
D. select name,unitprice from t_products where unitprice >= 6 and unitprice <= 10;
解析:D
删除一张表的语法是( )
A. delete from…
B. drop table…
C. create table…
D. remove…
解析:B
CRUD: create read update delete 表: drop table 表名;# 删表 # 修改表(添加列、添加约束) alter table 表名 add id int ; alter table 表名 add constraint
二、 代码题(满分70分)
- 根据下面表结构,完成建库建表数据填充操作(15分)
男生信息表t_boy
字段说明 | 字段名称 | 字段类型 | 数据长度 | 主键 | 允空 | 备注 |
---|---|---|---|---|---|---|
男生编号 | boyId | int | 4 | √ | 自增 | |
性别 | gender | varchar | 3 | 默认值:男 | ||
姓名 | name | varchar | 20 | |||
年龄 | age | int | 2 | |||
心动女生编号 | girlId | int | √ | 外键列 |
女生信息表t_girl
字段说明 | 字段名称 | 字段类型 | 数据长度 | 主键 | 允空 | 备注 |
---|---|---|---|---|---|---|
女生编号 | girlId | int | 4 | √ | 自增 | |
性别 | gender | varchar | 3 | 默认值:女 | ||
姓名 | name | varchar | 20 | |||
年龄 | age | int | 2 | |||
心动男生编号 | boyId | int | √ | 外键列 |
create table if not EXISTS t_boy(
boyId int(4) primary key auto_increment comment '男生编号',
gender varchar(3) default '男' comment'性别',
name varchar(20) comment'姓名',
age int(2) comment'年龄',
girlId int(4) comment'外键列' #
)engine=InnoDB default charset=utf8;# mysql 4大引擎,只有InnoDB支持外键和事务
# 外键:表中的某一字段的值,引用另一张表中的某个字段的值。
# A表中的cloumn B表中的Cloumn
# 引用列 参照列(被引用列)
# 1.数据类型、约束一致 2. 被引用的数据,B表中必须存在# 子表 父表
# 建表:先建父表,再建子表
# 删表:先删子表,再删父表create table if not EXISTS t_girl(
girlId int(4) primary key auto_increment comment '女生编号',
gender varchar(3) default '女' comment'性别',
name varchar(20) comment'姓名',
age int(2) comment'年龄',
boyId int(4) comment'外键列' #
)engine=InnoDB default charset=utf8;drop table t_boy;
drop table t_girl;# 先建表,其次填数据,再添加外键
insert into t_boy values(null,default(gender),'小明',23,2),
(null,default(gender),'小洋',21,3),
(null,default(gender),'小波',23,4),
(null,default(gender),'小满',25,5),
(null,default(gender),'小帆',20,5),
(null,default(gender),'小轩',19,6),
(null,default(gender),'小彬',24,7),
(null,default(gender),'小杰',20,7),
(null,default(gender),'小飞',22,1),
(null,default(gender),'大熊',17,7),
(null,default(gender),'大白',15,3),
(null,default(gender),'大白',15,null);insert into t_girl values(null,default(gender),'小芳',22,1);
insert into t_girl values(null,default(gender),'小红',20,2);
insert into t_girl values(null,default(gender),'小花',22,4);
insert into t_girl values(null,default(gender),'小青',22,5);
insert into t_girl values(null,default(gender),'小紫',21,6);
insert into t_girl values(null,default(gender),'小兰',20,6);
insert into t_girl values(null,default(gender),'小月',21,10);
insert into t_girl values(null,default(gender),'婉秋',17,9);
insert into t_girl values(null,default(gender),'婉秋',17,null);select * from t_girl# 添加外键
alter table t_boy add CONSTRAINT boy_girl_id foreign key (girlId) references t_girl(girlId);alter table t_girl add CONSTRAINT girl_boy_id foreign key (boyId) references t_boy(boyId);# 删表【先删外键,再删表】
drop table t_boy,t_girl;alter table t_boy drop foreign key boy_girl_id ;alter table t_girl drop foreign key girl_boy_id;
- 写出查询语句,查看年龄最大的男生信息,结果如下:(5分)
-- 2.查看年龄最大的男生信息
# select * from t_boy t where not exists (select age from t_boy where age > t.age)select * from t_boy where age = (select max(age) from t_boy) # 语义清晰select * from t_boy order by age desc limit 0,1
- 写出查询语句,查询出已成年(大于18岁)的男生信息(3分)
-- 3.查询出已成年(大于18岁)的男生信息select * from t_boy where age > 18;
- 写出查询语句,查看男生的平均年龄、最大年龄、最小年龄,结果如下(7分)
-- 4.查看男生的平均年龄、最大年龄、最小年龄select avg(age),max(age),min(age) from t_boy
-- 数学函数 round()四舍五入 floor()向下取整 ceiling()向上取整
select floor(avg(age)) as '平均年龄',max(age)as '最大年龄',min(age)as'最小年龄' from t_boyselect round(-12.6)select round(1264.56,-5) # 00000select floor(-12.6)select ceiling(-12.6)select mod(5,2)
写出修改语句、将小轩的年龄增加4岁(3分)
-- 5.将小轩的年龄增加4岁 # update t_boy set age+=4 where name = "小轩"select * from t_boyselect age*2 from t_boy where name = "小明"
写出删除语句,删除男生表中年龄不满16岁的人员信息(2分)
delete from t_boy where age < 16
写出查询语句,用左连接查看男生选择的心动女生都是谁,结果如下:(5分)
-- 7.用左连接查看男生选择的心动女生都是谁
select * from t_boy b left join t_girl g on b.girlId = g.girlId
-- 连接查询:外连接(左右) 内连接(inner join) 自连接
-- 左 :left join 左边主表,右边从表 会显示左表全部数据,没有匹配的数据,从表显示为空
-- 右:right join 右边主表,左边从表 会显示右表全部数据,没有匹配的数据,从表显示为空
select * from t_boy b right join t_girl g on b.girlId = g.girlId-- 内连接:join 等值匹配 没有匹配的数据,不显示
select * from t_boy b join t_girl g on (b.girlId = g.girlId) select * from t_boy b,t_girl g where b.girlId = g.girlId-- where 缺点:多条件,语句较复杂,容易出错-- where on using
-- where :条件查询,常用做子查询
-- on :把关联表和过滤关系 分开,语义清晰,关联字段可放在括号内,查询结果中,关联字段显示两次
-- using: 必须对关联字段加括号,结果中,关联字段只显示1次。
select * from t_boy join t_girl using(girlId)-- 自连接:自己连接自己, 物理表,逻辑表
-- 分类表 105 四件套 208 208 家纺 301 301 居家 null
-- 外键列:p_id 参照 id
create table t_cate(
id int(5) primary key,
name varchar(20) not null,
p_id int(5)
)engine = innoDB default charset=utf8;alter table t_cate add constraint pid_id_id foreign key(p_id) references t_cate(id)insert into t_cate values(1,'家用电器',null);
insert into t_cate values(2,'电脑',null);insert into t_cate values(3,'电视',1);
insert into t_cate values(4,'洗衣机',1);insert into t_cate values(5,'整机',2);
insert into t_cate values(6,'配件',2);insert into t_cate values(7,'全面屏',3);
insert into t_cate values(8,'LED',3);select * from t_cate-- 查所有分类的父级分类
select * from t_cate a left join t_cate b on a.p_id = b.id-- 查询电脑分类下的二级分类
select * from t_cate where p_id = (select id from t_cate where name="电脑")-- 查询所有级别的分类 1 2 3
select * from t_cate a left join t_cate b on a.id = b.p_id left join t_cate c on b.id = c.p_id
- 写出查询语句,查看被选为心动女生的ID及对应的次数,并按次数降序排列,结果如下:(10分)
-- 8.被选为心动女生的ID及对应的次数select girlId '女生ID', count(girlId) '被选次数' from t_boy where girlId is not null group by girlId
- 写出查询语句,只查看男生、女生相互选择为心动的信息,且男女生都必须年满18岁,结果如下:(15分)
-- 9.查看男生、女生相互选择为心动的信息,且男女生都必须年满18岁select * from t_boy b join t_girl g using(girlId) where b.boyId = g.boyId having b.age>18 and g.age>18select * from
(select * from t_boy where age>18)b
left join (select * from t_girl where age>18)g
on b.girlId = g.girlId
where b.boyId = g.boyId;
删除表t_boy和t_girl,跑路(5分)
-- 10.删外键、删表、删库alter table t_boy drop foreign key boy_girl_id; alter table t_girl drop foreign key girl_boy_id;drop table t_boy,t_girl;-- mysql 序列:一组整数 123456789,默认是从1开始,自定义设置开始序列 create table t_t(id int(4) auto_increment primary key )engine=innodb auto_increment = 100 charset=utf8;insert into t_t values(null),(null),(null),(null),(null),(null),(null);select * from t_t;-- alter 语句:加列、删列、约束# 语法: alter table 表名 add 列名 数据类型 约束; # 语法:alter table 表名 drop column 列名;alter table t_t add name varchar(20) not null;alter table t_t drop column name;# 添加外键:alter table 表名 add constraint 外键名 foreign key (外键字段) referrnces 表名(被引用字段) # 删除外键:alter table 表名 drop foreign key 外键名
题目1:MySQL基本练习【单、多表】相关推荐
- mysql五-1:单表查询
一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...
- mysql如何恢复单表_MySQL如何恢复单库或单表,以及可能遇到的坑
前言: MySQL 逻辑备份工具最常用的就是 mysqldump 了,一般我们都是备份整个实例或部分业务库.不清楚你有没有做过恢复,恢复场景可能就比较多了,比如我想恢复某个库或某个表等.那么如何从全备 ...
- mysql 存储过程月单拆天单_为部门整理的mysql_db使用军规
mysql_db使用军规: 1.禁止开发测试人员在IDC环境手工删除和修改数据 2.所有需求通过DB工具系统提交 3.禁止在IDC环境DB进行测试 4.IDC环境提交的sql语句一定要经过非正式环境验 ...
- mysql中一个表怎么查询多以上的信息,MySQL怎么样实现多个表的或查询?
我想要像上图那样在两个表里面查询username,只有其中一个表有这个数据就返回true,但是MySQL判断必须两个表都有才返回true. 请问有什么办法可以实现这样的查询呢?(两个表中任何一个表有数 ...
- mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表
摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...
- mysql 分区表_MySQL 分区分表应用场景分析和分区中可能遇到的坑点
MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...
- shell判端mysql数据库是否存在_Shell脚本检测和检查mysql数据库是否存在坏表
shell脚本检测和检查mysql数据库是否存在坏表 此脚本的主要用途是检测mysql服务器上所有的数据库或者单独数据库中的坏表,适用于RHEL/Centos系列 #!/bin/bash #此脚本的主 ...
- Java定时任务中间表,mysql 通过定时任务更新中间表
mysql 通过定时任务更新中间表 以前有一个任务需求,统计前十个物品的数量和名字.当时该表的数据量一共有四百二十多万的数据.执行一个sql语句花了我25秒,sql语句如下: select DISTI ...
- mysql索引和redis比较_聊聊Mysql索引和redis跳表
摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...
- 在mysql中更新数据sql语句怎么写_在MySQL中,更新数据库表记录的SQL语句,包括______语句...
在MySQL中,更新数据库表记录的SQL语句,包括______语句 答:insert replace update delete 在域F中,设其特征为2,对于任意a,b∈F,则(a+b)2 等于多少 ...
最新文章
- java lambda 变量_为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?...
- 天线巴伦制作和原理_一种基于LTCC技术的新型Marchand巴伦滤波器
- PaddlePaddle, TensorFlow, MXNet, Caffe2 , PyTorch五大深度学习框架2017-10最新评测
- Linux把应用放在桌面上
- vue 数组数据改变 视图不更新解决方案
- [vue] 如何引入scss?引入后如何使用?
- algol语言_ALGOL的完整形式是什么?
- java jtable 按钮_java web 怎么在jtable中添加按钮?
- linux中对文件的权限设置以及作用
- SqlTransaction事务和Response.Redirect
- Spring 菜鸟教程 异常 集锦
- 大华(华瑞)MVP网络通讯教程实例
- 简谈变电站综合自动化系统在变电站的应用分析
- 想自学编程?这么多编程自学网站,总有一个适合你吧!
- 怎么使用播放麦克风输入的音频呢
- 开单大师目录结构学习
- 连接无线路由器显示windows找不到证书来登录无线网络
- Windows Support Tools
- 云栖科技评论第70期:数字时代需要双螺旋
- 计算机故障有哪些判断方法有哪些,电脑故障详解之——“点不亮”的故障判断方法...
热门文章
- mysql 导出指定分隔符_mysql 导出行数据到txt文件,指定字符分割
- 数据的逻辑结构(线性结构、非线性结构;集合结构、树状结构、网状结构),数据的存储结构(顺序结构、链式结构、索引结构、散列结构)
- Suse linux 关闭防火墙命令,suse防火墙关闭
- 免费CMS插件文章采集伪原创发布插件
- 【JZOJ 5776】【NOIP2008模拟】小x游世界树 (树)
- Java桌面应用程序设计新贵:SWT简介
- 应用实践 | Apache Doris 在网易互娱的应用实践
- VGG16系列IV: 参数计算
- 手机QQ山寨微信 3万网友愤愤不平
- nginx+docker+gunicorn+flask部署到云服务器