MySQL连表查询练习题(二)

MySQL连表查询练习题(二)

1.创建oldboy库,并将其字符集定义为utf8。

mysql> create database oldboy charset utf8 collate utf8_general_ci;

2.已知现在在oldboy库中,请创建total表,要求创建name,course,score,sid列,都是非空,其中sid列是唯一且非空和自增长的。注释依次为姓名,学科,成绩,学号。字符集为utf8,引擎为innodb。

mysql> use oldboy
mysql> create table total (
    -> sid int not null primary key auto_increment comment '学号',
    -> name varchar(20) not null comment '姓名',
    -> course varchar(20) not null comment '学科',
    -> score tinyint unsigned not null comment '成绩');
    
mysql> show create table total;
| total | CREATE TABLE `total` (
  `sid` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `course` varchar(20) NOT NULL COMMENT '学科',
  `score` tinyint(3) unsigned NOT NULL COMMENT '成绩',
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8         |

3.插入数据到total表中。

![img](file:///C:/Users/hp/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)

mysql> insert into total(name,course,score) values
    -> ('张小飞','语文',60),('王铁柱','语文',70),('李红','语文',80),('吕凤','语文',90),
    -> ('张小飞','数学',80),('王铁柱','数学',90),('李红','数学',60),('吕凤','数学',70),
    -> ('张小飞','英语',50),('王铁柱','英语',55),('李红','英语',50),('吕凤','英语',60);

mysql> select * from total;
+-----+-----------+--------+-------+
| sid | name      | course | score |
+-----+-----------+--------+-------+
|   1 | 张小飞     | 语文   |    60 |
|   2 | 王铁柱     | 语文   |    70 |
|   3 | 李红       | 语文   |    80 |
|   4 | 吕凤       | 语文   |    90 |
|   5 | 张小飞     | 数学   |    80 |
|   6 | 王铁柱     | 数学   |    90 |
|   7 | 李红       | 数学   |    60 |
|   8 | 吕凤       | 数学   |    70 |
|   9 | 张小飞     | 英语   |    50 |
|  10 | 王铁柱     | 英语   |    55 |
|  11 | 李红       | 英语   |    50 |
|  12 | 吕凤       | 英语   |    60 |
+-----+-----------+--------+-------+

4.分别查询每位同学的最低分和最高分。

mysql> select name,max(score),min(score) from total group by name;
+-----------+------------+------------+
| name      | max(score) | min(score) |
+-----------+------------+------------+
| 吕凤      |         90 |         60 |
| 张小飞    |         80 |         50 |
| 李红      |         80 |         50 |
| 王铁柱    |         90 |         55 |
+-----------+------------+------------+

5.查询张小飞同学的语文成绩。

mysql> select * from total where name='张小飞' and course='语文';
+-----+-----------+--------+-------+
| sid | name      | course | score |
+-----+-----------+--------+-------+
|   1 | 张小飞     | 语文    |    60 |
+-----+-----------+--------+-------+

6.查询每位同学的总分。

mysql> select name,sum(score) from total group by name;
+-----------+------------+
| name      | sum(score) |
+-----------+------------+
| 吕凤      |        220 |
| 张小飞    |        190 |
| 李红      |        190 |
| 王铁柱    |        215 |
+-----------+------------+

7.查询每位同学的平均分且平均分大于70的。

mysql> select name,avg(score),avg(score)>70 from total group by name;
+-----------+------------+---------------+
| name      | avg(score) | avg(score)>70 |
+-----------+------------+---------------+
| 吕凤      |    73.3333 |             1 |
| 张小飞    |    63.3333 |             0 |
| 李红      |    63.3333 |             0 |
| 王铁柱    |    71.6667 |             1 |
+-----------+------------+---------------+

mysql> select name,avg(score) from total group by name having avg(score)>70;
+-----------+------------+
| name      | avg(score) |
+-----------+------------+
| 吕凤      |    73.3333 |
| 王铁柱    |    71.6667 |
+-----------+------------+

8.统计总共有几名学生。

mysql> select count(distinct(name)) from total;
+-----------------------+
| count(distinct(name)) |
+-----------------------+
|                     4 |
+-----------------------+

9.把王铁柱同学的英语分数修改为80分。

mysql> update total set score='80' where name='王铁柱'and course='英语';

mysql> select * from total;
+-----+-----------+--------+-------+
| sid | name      | course | score |
+-----+-----------+--------+-------+
|   1 | 张小飞    | 语文   |    60 |
|   2 | 王铁柱    | 语文   |    70 |
|   3 | 李红      | 语文   |    80 |
|   4 | 吕凤      | 语文   |    90 |
|   5 | 张小飞    | 数学   |    80 |
|   6 | 王铁柱    | 数学   |    90 |
|   7 | 李红      | 数学   |    60 |
|   8 | 吕凤      | 数学   |    70 |
|   9 | 张小飞    | 英语   |    50 |
|  10 | 王铁柱    | 英语   |    80 |
|  11 | 李红      | 英语   |    50 |
|  12 | 吕凤      | 英语   |    60 |
+-----+-----------+--------+-------+

10.查询总分最高的同学。

mysql> select name,sum(score) from total group by name desc limit 1;
+-----------+------------+
| name      | sum(score) |
+-----------+------------+
| 王铁柱    |        240 |
+-----------+------------+

11.查看total表的创表语句。

mysql> show create table total;
| total | CREATE TABLE `total` (
  `sid` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `course` varchar(20) NOT NULL COMMENT '学科',
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8    

12.把total表的表名修改为oldboy。

mysql> alter table total rename oldboy;

mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| oldboy           |
+------------------+

13.给oldboy表的name列创建一个索引。

mysql> alter table oldboy add index idx_name(name);

mysql> desc oldboy;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| sid    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | NO   | MUL | NULL    |                |
| course | varchar(20) | NO   |     | NULL    |                |
| score  | int(11)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

14.查看oldboy表的所有索引。

mysql> mysql> show index from oldboy;
+--------+------------+----------+--------------+-------------+
| Table  | Non_unique | Key_name | Seq_in_index | Column_name |
+--------+------------+----------+--------------+-------------+
| oldboy |          0 | PRIMARY  |            1 | sid         |
| oldboy |          1 | idx_name |            1 | name        |
+--------+------------+----------+--------------+-------------+

15.删除oldboy表name列的索引。

mysql> alter table oldboy drop index idx_name;

16.查看数据库的默认的引擎类别。

mysql> show variables like '%storage_engine%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| default_storage_engine     | InnoDB |
| default_tmp_storage_engine | InnoDB |
| storage_engine             | InnoDB |
+----------------------------+--------+

17.查看共享表空间的参数

mysql> show variables like '%per_table%'; 
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+

18.创建用户dev给予此用户所有库下的所有表select update insert delete权限,host为'10.0.0.%' 并设置密码为123456。

mysql> grant select,update,insert,delete on *.* to dev@'10.0.0.%' identified by '123456';

  1. 查看dev用户的权限。
mysql> show grants for dev@'10.0.0.%'\G;
*************************** 1. row ***************************
Grants for dev@10.0.0.%: GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'dev'@'10.0.0.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'

  1. 查看数据库中所有的用户的名称,密码,主机。
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost |                                           |
| root | db01      |                                           |
| root | 127.0.0.1 |                                           |
| root | ::1       |                                           |
|      | localhost |                                           |
|      | db01      |                                           |
| root | %         | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| msy  | %         | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| dev  | 10.0.0.%  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+

  1. 显示你当前所在的库
mysql> select database();

posted @ 2019-12-03 20:45  干瘪的柠檬  阅读(212)  评论(0)    收藏  举报