首页 > 技术文章 > 10)-MySQL数据库基础练习(答案版)

shsm 2018-12-14 10:54 原文

数据库操作
 
1:// 查看mysql是否启动
 
service mysql status
 
2:// 启动mysql服务
 
service mysql start
 
3:// 重启mysql服务
 
service mysql restart
 
4:// 停止mysql服务
 
service mysql stop
 
5:// 连接Mysql
 
mysql -u root -p
 
6:// 创建数据库book
 
create database book
 
7:// 查看所有数据库
 
show databases
 
8:// 删除数据库book
 
drop database book
 
9:// 选择数据库book
 
use book
 
表操作
 
10:// 创建一个数据库表city,创建表字段city_id为自增主键,其余city_name、city_body、city_email为varchar类型、其中,city_name不能为空,其余信息补充完整    #创建表
 
create table city (
city_id int not null auto_increment,
city_name varchar(100) not null,
city_body varchar(100),
city_email varchar(100),
primary key (city_id)
)engine=innodb default charset=utf8;
 
11://在city表中添加一个city_date字段,要求字段类型date,并且不能为空   #添加字段
 
alter table city
add city_date date not null;
 
12:// 删除city表中的city_date字段    #删除字段
 
alter table city
drop column city_date;
 
13://修改city表名称为new_city   #修改表名
 
alter table city
rename new_city;
 
14://修改字段名
 
alter table student
change 旧字段名 新字段名 类型;
 
数据查询
 
15:// 查询book表中book_id,book_name列    #查询多个列
 
select book_id,book_name from book;
 
16://查询book表中所有列    #查询所有列
 
select * from book;
 
17://查询book表的前15行数据     #查询行数
 
select * from book limit 15;
 
18://查询book表的第15行数据   #查询指定行数
 
select * from book limit 14,14;
 
19://查询book表中book_name字段内容,并去重查询    #去重查询
 
 
select distinct book_name from book;
 
20://按book表中book_name进行正序排序    #按字段排序(正序)
 
select * from book order by book_name;
 
21://在book表中,先按book_id倒叙排序,再按book_name正序排序;  #倒叙,多个字段排序
 
select * from book
order by book_id DESC,book_name;
 
22://在book表中,查询book_id等于3的学生,并仅返回学生姓名book_name字段  #条件查询
 
select book_id,book_name from book
where book_id=3;
 
23://在book表中,查询所有book_email是空的列表数据   #筛选为null的数据
 
select * from book
where book_email is null;
 
24://在book表中,查询book_id大于10并且book_name为‘test’的数据;   #组合条件查询
 
select * from book
where book_id > 10 and book_name='test';
 
25://在book表中,查询book_id不等于3或者不等于5的数据   #组合条件查询
 
select * from book
where book_id != 3 or book_id != 5; 
 
26://查询book表中,book_id_不等于3和等于4的所有数据,使用in   #in操作符使用
 
select * from book
where book_id not in (3,4);
 
27://查询book表中,book_name字段中,所有以'小'字开头的书;    #通配符使用
 
select * from book
where book_name like '小%';
 
28://计算某列的平均值   #聚合函数:计算平均值
 
select avg(number) from score
where student_id=1
 
 只用于单个列 AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。
28补充://去重后,进行某列平均值计算   #去重计算平均值
 
select avg(distinct sname) from student;
 
29://返回某列的行数  #聚合函数:返回某列行数
 
select count(sname) from student;
 
30://返回列表中所有的行数 #聚合函数:返回所有行数
 
select count(*) from student;
 
31://返回某列的最大值  #聚合函数:返回列中最大值
 
select max(sname) from student;
 
32://返回某列的最小值    #聚合函数:返回列中最小值
 
select min(sname) from student;
 
33://返回某列值得和  #聚合函数:返回列值的和
 
select sum(sname) from student;
 
34://组合使用聚合函数     #聚合函数组合使用
 
select count(*) as count_number,
avg(number) as avg_number,
max(number) as max_number,
min(number) as min_number,
sum(number) as sum_number
from score;
 
35://分组查询
 
select vend_id, count(*) as num_prods
from products
group by vend_id;
 
36://分组查询,增加查询条件
 
select cust_id, count(*) as orders
from orders
group by cust_id
having count(*) >= 2;
 
目前为止所学过的所有类型的where子句都可以用having来替代。唯一的差别是where过滤行,而having过滤分组。
 
这里有另一种理解方法,where在数据分组前进行过滤,having在数据分组后进行过滤。这是一个重要的区别,where排除的行不包括在分组中。
 
37://分组排序
 
select order_num, sum(quantity*item_price) as ordertotal
from orderitems
group by order_num
having sum(quantity*item_price) >= 50
order by ordertotal;
 
38://子查询
 
select cust_name, cust_contact
from customers
where cust_id in (select cust_id
                  from orders
                  where order_num in (select order_num
                                      from orderitems
                                      where prod_id = 'tnt2'));
 
可以把一条select语句返回的结果用于另一条select语句的where子句。
 
39://多表联合查询及创建联结
 
select vend_name, prod_name, prod_price
from vendors, products
where vendors.vend_id = products.vend_id
order by vend_name, prod_name;
 
SELECT语句与前面所有语句一样指定要检索的列。这里,最大的差别是所指定的两个列(prod_name和prod_price)在一个表中,而另一个列(vend_name)在另一个表中。
现在来看FROM子句。与以前的SELECT语句不一样,这条语句的FROM子句列出了两个表,分别是vendors和products。它们就是这条SELECT语句联结的两个表的名字。这两个表用WHERE子句正确联结,WHERE子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id。
可以看到要匹配的两个列以vendors.vend_id和products.vend_id指定。这里需要这种完全限定列名,因为如果只给出vend_id,则MySQL不知道指的是哪一个(它们有两个,每个表中一个)。
 
40://联合多个表查询
 
select prod_name, vend_name, prod_price, quantity
from orderitems, products, vendors
where products.vend_id = vendors.vend_id
  and orderitems.prod_id = products.prod_id
  and order_num = 20005;
 
 
 
 

推荐阅读